/*
* 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 += "" + q_("Version") + ": | " + PULSARS_PLUGIN_VERSION + " |
";
html += "" + q_("Author") + ": | Alexander Wolf <alex.v.wolf@gmail.com> |
";
html += "
";
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();
}
}