/* * Stellarium Pulsars Plug-in GUI * * Copyright (C) 2012 Alexander Wolf * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA. */ #include "config.h" #include #include #include #include #include #include "StelApp.hpp" #include "ui_pulsarsDialog.h" #include "PulsarsDialog.hpp" #include "Pulsars.hpp" #include "StelModuleMgr.hpp" #include "StelObjectMgr.hpp" #include "StelMovementMgr.hpp" #include "StelStyle.hpp" #include "StelGui.hpp" #include "StelMainView.hpp" #include "StelFileMgr.hpp" #include "StelTranslator.hpp" PulsarsDialog::PulsarsDialog() : psr(NULL) , updateTimer(NULL) { ui = new Ui_pulsarsDialog; } PulsarsDialog::~PulsarsDialog() { if (updateTimer) { updateTimer->stop(); delete updateTimer; updateTimer = NULL; } delete ui; } void PulsarsDialog::retranslate() { if (dialog) { ui->retranslateUi(dialog); refreshUpdateValues(); setAboutHtml(); } } // Initialize the dialog widgets and connect the signals/slots void PulsarsDialog::createDialogContent() { psr = GETSTELMODULE(Pulsars); ui->setupUi(dialog); ui->tabs->setCurrentIndex(0); connect(&StelApp::getInstance(), SIGNAL(languageChanged()), this, SLOT(retranslate())); // Settings tab / updates group ui->displayModeCheckBox->setChecked(psr->getDisplayMode()); connect(ui->displayModeCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setDistributionEnabled(int))); ui->displayAtStartupCheckBox->setChecked(psr->getEnableAtStartup()); connect(ui->displayAtStartupCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setDisplayAtStartupEnabled(int))); ui->displayShowPulsarsButton->setChecked(psr->getFlagShowPulsarsButton()); ui->displaySeparateColorsCheckBox->setChecked(psr->getGlitchFlag()); connect(ui->displaySeparateColorsCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setSeparateColorsFlag(int))); connect(ui->displayShowPulsarsButton, SIGNAL(stateChanged(int)), this, SLOT(setDisplayShowPulsarsButton(int))); connect(ui->internetUpdatesCheckbox, SIGNAL(stateChanged(int)), this, SLOT(setUpdatesEnabled(int))); connect(ui->updateButton, SIGNAL(clicked()), this, SLOT(updateJSON())); connect(psr, SIGNAL(updateStateChanged(Pulsars::UpdateState)), this, SLOT(updateStateReceiver(Pulsars::UpdateState))); connect(psr, SIGNAL(jsonUpdateComplete(void)), this, SLOT(updateCompleteReceiver(void))); connect(ui->updateFrequencySpinBox, SIGNAL(valueChanged(int)), this, SLOT(setUpdateValues(int))); refreshUpdateValues(); // fetch values for last updated and so on // if the state didn't change, setUpdatesEnabled will not be called, so we force it setUpdatesEnabled(ui->internetUpdatesCheckbox->checkState()); updateTimer = new QTimer(this); connect(updateTimer, SIGNAL(timeout()), this, SLOT(refreshUpdateValues())); updateTimer->start(7000); connect(ui->closeStelWindow, SIGNAL(clicked()), this, SLOT(close())); connect(ui->restoreDefaultsButton, SIGNAL(clicked()), this, SLOT(restoreDefaults())); connect(ui->saveSettingsButton, SIGNAL(clicked()), this, SLOT(saveSettings())); // About tab setAboutHtml(); StelGui* gui = dynamic_cast(StelApp::getInstance().getGui()); if(gui!=NULL) ui->aboutTextBrowser->document()->setDefaultStyleSheet(QString(gui->getStelStyle().htmlStyleSheet)); updateGuiFromSettings(); } void PulsarsDialog::setAboutHtml(void) { QString html = ""; html += "

" + q_("Pulsars Plug-in") + "

"; html += ""; html += ""; html += "
" + q_("Version") + ":" + PULSARS_PLUGIN_VERSION + "
" + q_("Author") + ":Alexander Wolf <alex.v.wolf@gmail.com>
"; html += "

" + q_("This plugin plots the position of various pulsars, with object information about each one.") + "

"; html += "

" + QString(q_("Pulsar data is derived from 'The ATNF Pulsar Catalogue' (Manchester, R. N., Hobbs, G. B., Teoh, A. & Hobbs, M., Astron. J., 129, 1993-2006 (2005) (%1astro-ph/0412641%2)).")) .arg("") .arg("") + "

"; html += "

" + q_("Current catalog contains info about %1 pulsars.").arg(psr->getCountPulsars()) + "

"; html += "

" + QString("%1: %2") .arg(q_("Note")) .arg(q_("pulsar identifiers have the prefix 'PSR'")) + "

"; html += "

" + q_("Acknowledgment") + "

"; html += "

" + q_("We thank the following people for their contribution and valuable comments:") + "

    "; html += "
  • " + QString("%1 (%3 %4)") .arg(q_("Vladimir Samodourov")) .arg("http://www.prao.ru/") .arg(q_("Pushchino Radio Astronomy Observatory")) .arg(q_("in Russia")) + "
  • "; html += "
  • " + QString("%1 (%3 %4)") .arg(q_("Maciej Serylak")) .arg("http://www.obs-nancay.fr/") .arg(q_("Nancay Radioastronomical Observatory")) .arg(q_("in France")) + "
  • "; html += "

" + q_("Links") + "

"; html += "

" + QString(q_("Support is provided via the Launchpad website. Be sure to put \"%1\" in the subject when posting.")).arg("Pulsars plugin") + "

"; html += "

    "; // TRANSLATORS: The numbers contain the opening and closing tag of an HTML link html += "
  • " + QString(q_("If you have a question, you can %1get an answer here%2").arg("")).arg("") + "
  • "; // TRANSLATORS: The numbers contain the opening and closing tag of an HTML link html += "
  • " + QString(q_("Bug reports can be made %1here%2.")).arg("").arg("") + "
  • "; // TRANSLATORS: The numbers contain the opening and closing tag of an HTML link html += "
  • " + q_("If you would like to make a feature request, you can create a bug report, and set the severity to \"wishlist\".") + "
  • "; // TRANSLATORS: The numbers contain the opening and closing tag of an HTML link html += "
  • " + q_("If you want to read full information about this plugin, its history and format of catalog, you can %1get info here%2.").arg("").arg("") + "
  • "; html += "

"; StelGui* gui = dynamic_cast(StelApp::getInstance().getGui()); if(gui!=NULL) { QString htmlStyleSheet(gui->getStelStyle().htmlStyleSheet); ui->aboutTextBrowser->document()->setDefaultStyleSheet(htmlStyleSheet); } ui->aboutTextBrowser->setHtml(html); } void PulsarsDialog::refreshUpdateValues(void) { ui->lastUpdateDateTimeEdit->setDateTime(psr->getLastUpdate()); ui->updateFrequencySpinBox->setValue(psr->getUpdateFrequencyDays()); int secondsToUpdate = psr->getSecondsToUpdate(); ui->internetUpdatesCheckbox->setChecked(psr->getUpdatesEnabled()); if (!psr->getUpdatesEnabled()) ui->nextUpdateLabel->setText(q_("Internet updates disabled")); else if (psr->getUpdateState() == Pulsars::Updating) ui->nextUpdateLabel->setText(q_("Updating now...")); else if (secondsToUpdate <= 60) ui->nextUpdateLabel->setText(q_("Next update: < 1 minute")); else if (secondsToUpdate < 3600) ui->nextUpdateLabel->setText(QString(q_("Next update: %1 minutes")).arg((secondsToUpdate/60)+1)); else if (secondsToUpdate < 86400) ui->nextUpdateLabel->setText(QString(q_("Next update: %1 hours")).arg((secondsToUpdate/3600)+1)); else ui->nextUpdateLabel->setText(QString(q_("Next update: %1 days")).arg((secondsToUpdate/86400)+1)); } void PulsarsDialog::setUpdateValues(int days) { psr->setUpdateFrequencyDays(days); refreshUpdateValues(); } void PulsarsDialog::setUpdatesEnabled(int checkState) { bool b = checkState != Qt::Unchecked; psr->setUpdatesEnabled(b); ui->updateFrequencySpinBox->setEnabled(b); if(b) ui->updateButton->setText(q_("Update now")); else ui->updateButton->setText(q_("Update from files")); refreshUpdateValues(); } void PulsarsDialog::setDistributionEnabled(int checkState) { bool b = checkState != Qt::Unchecked; psr->setDisplayMode(b); } void PulsarsDialog::setDisplayAtStartupEnabled(int checkState) { bool b = checkState != Qt::Unchecked; psr->setEnableAtStartup(b); } void PulsarsDialog::setDisplayShowPulsarsButton(int checkState) { bool b = checkState != Qt::Unchecked; psr->setFlagShowPulsarsButton(b); } void PulsarsDialog::setSeparateColorsFlag(int checkState) { bool b = checkState != Qt::Unchecked; psr->setGlitchFlag(b); } void PulsarsDialog::updateStateReceiver(Pulsars::UpdateState state) { //qDebug() << "PulsarsDialog::updateStateReceiver got a signal"; if (state==Pulsars::Updating) ui->nextUpdateLabel->setText(q_("Updating now...")); else if (state==Pulsars::DownloadError || state==Pulsars::OtherError) { ui->nextUpdateLabel->setText(q_("Update error")); updateTimer->start(); // make sure message is displayed for a while... } } void PulsarsDialog::updateCompleteReceiver(void) { ui->nextUpdateLabel->setText(QString(q_("Pulsars is updated"))); // display the status for another full interval before refreshing status updateTimer->start(); ui->lastUpdateDateTimeEdit->setDateTime(psr->getLastUpdate()); QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(refreshUpdateValues())); } void PulsarsDialog::restoreDefaults(void) { qDebug() << "Pulsars::restoreDefaults"; psr->restoreDefaults(); psr->readSettingsFromConfig(); updateGuiFromSettings(); } void PulsarsDialog::updateGuiFromSettings(void) { ui->internetUpdatesCheckbox->setChecked(psr->getUpdatesEnabled()); refreshUpdateValues(); } void PulsarsDialog::saveSettings(void) { psr->saveSettingsToConfig(); } void PulsarsDialog::updateJSON(void) { if(psr->getUpdatesEnabled()) { psr->updateJSON(); } }