/* * Stellarium Historical Supernovae 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_supernovaeDialog.h" #include "SupernovaeDialog.hpp" #include "Supernovae.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" SupernovaeDialog::SupernovaeDialog() : sn(NULL) , updateTimer(NULL) { ui = new Ui_supernovaeDialog; } SupernovaeDialog::~SupernovaeDialog() { if (updateTimer) { updateTimer->stop(); delete updateTimer; updateTimer = NULL; } delete ui; } void SupernovaeDialog::retranslate() { if (dialog) { ui->retranslateUi(dialog); refreshUpdateValues(); setAboutHtml(); } } // Initialize the dialog widgets and connect the signals/slots void SupernovaeDialog::createDialogContent() { sn = GETSTELMODULE(Supernovae); ui->setupUi(dialog); ui->tabs->setCurrentIndex(0); connect(&StelApp::getInstance(), SIGNAL(languageChanged()), this, SLOT(retranslate())); // Settings tab / updates group connect(ui->internetUpdatesCheckbox, SIGNAL(stateChanged(int)), this, SLOT(setUpdatesEnabled(int))); connect(ui->updateButton, SIGNAL(clicked()), this, SLOT(updateJSON())); connect(sn, SIGNAL(updateStateChanged(Supernovae::UpdateState)), this, SLOT(updateStateReceiver(Supernovae::UpdateState))); connect(sn, 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 SupernovaeDialog::setAboutHtml(void) { QString html = ""; html += "

" + q_("Historical Supernovae Plug-in") + "

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

" + q_("This plugin allows you to see some bright historical supernovae: "); html += sn->getSupernovaeList(); html += ". " + q_("This list altogether contains %1 stars.").arg(sn->getCountSupernovae()); html += " " + q_("All those supernovae are brighter %1 at peak of brightness.").arg(QString::number(sn->getLowerLimitBrightness(), 'f', 2) + "m") + "

"; html += "

" + q_("Light curves") + "

"; html += "

" + QString(q_("This plugin implements a simple model of light curves for different supernovae. Typical views of light curves for type I and type II supernova can be seen %1here%2 (right scale in days), and this model is used for this plugin.")).arg("").arg("") + "

"; html += "

" + q_("Acknowledgments") + "

"; html += "

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

    "; html += "
  • " + QString("%1 (%3 %4)") .arg(q_("Sergei Blinnikov")) .arg("http://www.itep.ru/") .arg(q_("Institute for Theoretical and Experimental Physics")) .arg(q_("in Russia")) + "
  • "; html += "

" + q_("Links") + "

"; html += "

" + QString(q_("Support is provided via the Launchpad website. Be sure to put \"%1\" in the subject when posting.")).arg("Historical Supernovae 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 SupernovaeDialog::refreshUpdateValues(void) { ui->lastUpdateDateTimeEdit->setDateTime(sn->getLastUpdate()); ui->updateFrequencySpinBox->setValue(sn->getUpdateFrequencyDays()); int secondsToUpdate = sn->getSecondsToUpdate(); ui->internetUpdatesCheckbox->setChecked(sn->getUpdatesEnabled()); if (!sn->getUpdatesEnabled()) ui->nextUpdateLabel->setText(q_("Internet updates disabled")); else if (sn->getUpdateState() == Supernovae::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 SupernovaeDialog::setUpdateValues(int days) { sn->setUpdateFrequencyDays(days); refreshUpdateValues(); } void SupernovaeDialog::setUpdatesEnabled(int checkState) { bool b = checkState != Qt::Unchecked; sn->setUpdatesEnabled(b); ui->updateFrequencySpinBox->setEnabled(b); if(b) ui->updateButton->setText(q_("Update now")); else ui->updateButton->setText(q_("Update from files")); refreshUpdateValues(); } void SupernovaeDialog::updateStateReceiver(Supernovae::UpdateState state) { //qDebug() << "SupernovaeDialog::updateStateReceiver got a signal"; if (state==Supernovae::Updating) ui->nextUpdateLabel->setText(q_("Updating now...")); else if (state==Supernovae::DownloadError || state==Supernovae::OtherError) { ui->nextUpdateLabel->setText(q_("Update error")); updateTimer->start(); // make sure message is displayed for a while... } } void SupernovaeDialog::updateCompleteReceiver(void) { ui->nextUpdateLabel->setText(QString(q_("Historical supernovae is updated"))); // display the status for another full interval before refreshing status updateTimer->start(); ui->lastUpdateDateTimeEdit->setDateTime(sn->getLastUpdate()); QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(refreshUpdateValues())); } void SupernovaeDialog::restoreDefaults(void) { qDebug() << "Supernovae::restoreDefaults"; sn->restoreDefaults(); sn->readSettingsFromConfig(); updateGuiFromSettings(); } void SupernovaeDialog::updateGuiFromSettings(void) { ui->internetUpdatesCheckbox->setChecked(sn->getUpdatesEnabled()); refreshUpdateValues(); } void SupernovaeDialog::saveSettings(void) { sn->saveSettingsToConfig(); } void SupernovaeDialog::updateJSON(void) { if(sn->getUpdatesEnabled()) { sn->updateJSON(); } }