File indexing completed on 2024-04-28 03:50:14

0001 // SPDX-License-Identifier: LGPL-2.1-or-later
0002 //
0003 // SPDX-FileCopyrightText: 2011 Utku Aydın <utkuaydin34@gmail.com>
0004 //
0005 
0006 #include "EarthquakePlugin.h"
0007 #include "EarthquakeModel.h"
0008 #include "ui_EarthquakeConfigWidget.h"
0009 
0010 #include <QPushButton>
0011 #include <QSlider>
0012 
0013 #include "MarbleModel.h"
0014 
0015 namespace Marble {
0016 
0017 EarthquakePlugin::EarthquakePlugin()
0018     : AbstractDataPlugin( nullptr ),
0019       m_ui( nullptr ),
0020       m_configDialog( nullptr ),
0021       m_maximumNumberOfItems( 100 )
0022 {
0023 }
0024 
0025 EarthquakePlugin::EarthquakePlugin( const MarbleModel *marbleModel )
0026     : AbstractDataPlugin( marbleModel ),
0027       m_ui( nullptr ),
0028       m_configDialog( nullptr ),
0029       m_minMagnitude( 0.0 ),
0030       m_startDate( QDateTime::fromString( "2006-02-04", "yyyy-MM-dd" ) ),
0031       m_endDate( marbleModel->clockDateTime() ),
0032       m_pastDays( 30 ),
0033       m_timeRangeNPastDays( true ),
0034       m_numResults( 20 ),
0035       m_maximumNumberOfItems( 100 )
0036 {
0037     setEnabled( true ); // Plugin is enabled by default
0038     setVisible( false ); // Plugin is invisible by default
0039     connect( this, SIGNAL(settingsChanged(QString)),
0040              this, SLOT(updateModel()) );
0041 }
0042 
0043 void EarthquakePlugin::initialize()
0044 {
0045     EarthquakeModel *model = new EarthquakeModel( marbleModel(), this );
0046     setModel( model );
0047     setNumberOfItems( m_numResults );
0048     
0049     updateModel();
0050 }
0051 
0052 QString EarthquakePlugin::name() const
0053 {
0054     return tr( "Earthquakes" );
0055 }
0056 
0057 QString EarthquakePlugin::guiString() const
0058 {
0059     return tr( "&Earthquakes" );
0060 }
0061 
0062 QString EarthquakePlugin::nameId() const
0063 {
0064     return QStringLiteral("earthquake");
0065 }
0066 
0067 QString EarthquakePlugin::version() const
0068 {
0069     return QStringLiteral("1.0");
0070 }
0071 
0072 QString EarthquakePlugin::description() const
0073 {
0074     return tr( "Shows earthquakes on the map." );
0075 }
0076 
0077 QString EarthquakePlugin::copyrightYears() const
0078 {
0079     return QStringLiteral("2010, 2011");
0080 }
0081 
0082 QVector<PluginAuthor> EarthquakePlugin::pluginAuthors() const
0083 {
0084     return QVector<PluginAuthor>()
0085             << PluginAuthor(QStringLiteral("Utku Aydın"), QStringLiteral("utkuaydin34@gmail.com"))
0086             << PluginAuthor(QStringLiteral("Daniel Marth"), QStringLiteral("danielmarth@gmx.at"));
0087 }
0088 
0089 QIcon EarthquakePlugin::icon() const
0090 {
0091     return QIcon(QStringLiteral(":/icons/earthquake.png"));
0092 }
0093 
0094 QDialog *EarthquakePlugin::configDialog()
0095 {
0096     if ( !m_configDialog ) {
0097         // Initializing configuration dialog
0098         m_configDialog = new QDialog();
0099         m_ui = new Ui::EarthquakeConfigWidget;
0100         m_ui->setupUi( m_configDialog );
0101         m_ui->m_numResults->setRange( 1, m_maximumNumberOfItems );
0102         readSettings();
0103         connect( m_ui->m_buttonBox, SIGNAL(accepted()),
0104                  SLOT(writeSettings()) );
0105         connect( m_ui->m_buttonBox, SIGNAL(rejected()),
0106                  SLOT(readSettings()) );
0107         connect( m_ui->m_buttonBox->button( QDialogButtonBox::Reset ), SIGNAL(clicked()),
0108                  SLOT(restoreDefaultSettings()) );
0109         QPushButton *applyButton = m_ui->m_buttonBox->button( QDialogButtonBox::Apply );
0110         connect( applyButton, SIGNAL(clicked()),
0111                  SLOT(writeSettings()) );
0112         connect( m_ui->m_startDate, SIGNAL(dateTimeChanged(QDateTime)),
0113                  SLOT(validateDateRange()) );
0114         connect( m_ui->m_endDate, SIGNAL(dateTimeChanged(QDateTime)),
0115                  SLOT(validateDateRange()) );
0116         connect( this, SIGNAL(settingsChanged(QString)),
0117                  this, SLOT(readSettings()) );
0118     }
0119     return m_configDialog;
0120 }
0121 
0122 QHash<QString,QVariant> EarthquakePlugin::settings() const
0123 {
0124     QHash<QString, QVariant> settings = AbstractDataPlugin::settings();
0125 
0126     settings.insert(QStringLiteral("numResults"), m_numResults);
0127     settings.insert(QStringLiteral("minMagnitude"), m_minMagnitude);
0128     settings.insert(QStringLiteral("startDate"), m_startDate);
0129     settings.insert(QStringLiteral("endDate"), m_endDate);
0130     settings.insert(QStringLiteral("pastDays"), m_pastDays);
0131     settings.insert(QStringLiteral("timeRangeNPastDays"), m_timeRangeNPastDays);
0132     settings.insert(QStringLiteral("maximumNumberOfItems"), m_maximumNumberOfItems);
0133 
0134     return settings;
0135 }
0136 
0137 void EarthquakePlugin::setSettings( const QHash<QString,QVariant> &settings )
0138 {
0139     AbstractDataPlugin::setSettings( settings );
0140 
0141     m_numResults = settings.value(QStringLiteral("numResults"), 20).toInt();
0142     m_minMagnitude = settings.value(QStringLiteral("minMagnitude"), 0.0).toReal();
0143     m_startDate = settings.value(QStringLiteral("startDate"), QDateTime::fromString(QStringLiteral("2006-02-04"), QStringLiteral("yyyy-MM-dd"))).toDateTime();
0144     m_endDate = settings.value(QStringLiteral("endDate"), marbleModel()->clockDateTime()).toDateTime();
0145     m_pastDays = settings.value(QStringLiteral("pastDays"), 30).toInt();
0146     m_timeRangeNPastDays = settings.value(QStringLiteral("timeRangeNPastDays"), true).toBool();
0147     m_maximumNumberOfItems = settings.value(QStringLiteral("maximumNumberOfItems"), m_maximumNumberOfItems).toInt();
0148     
0149     emit settingsChanged( nameId() );
0150 }
0151 
0152 void EarthquakePlugin::readSettings()
0153 {
0154     Q_ASSERT( m_configDialog );
0155 
0156     m_ui->m_numResults->setValue( m_numResults );
0157     m_ui->m_minMagnitude->setValue( m_minMagnitude );
0158     m_ui->m_startDate->setDateTime( m_startDate );
0159     m_ui->m_endDate->setDateTime( m_endDate );
0160     m_ui->m_startDate->setMaximumDateTime( m_ui->m_endDate->dateTime() );
0161     m_ui->m_pastDays->setValue(m_pastDays);
0162     if ( m_timeRangeNPastDays ) {
0163         m_ui->m_timeRangeNPastDaysRadioButton->setChecked(true);
0164     } else {
0165         m_ui->m_timeRangeFromToRadioButton->setChecked(true);
0166     }
0167 }
0168 
0169 void EarthquakePlugin::writeSettings()
0170 {
0171     Q_ASSERT( m_configDialog );
0172 
0173     m_numResults = m_ui->m_numResults->value();
0174     setNumberOfItems( m_numResults );
0175     m_minMagnitude = m_ui->m_minMagnitude->value();
0176     m_startDate = m_ui->m_startDate->dateTime();
0177     m_endDate = m_ui->m_endDate->dateTime();
0178     m_pastDays = m_ui->m_pastDays->value();
0179     m_timeRangeNPastDays = m_ui->m_timeRangeNPastDaysRadioButton->isChecked();
0180         
0181     emit settingsChanged( nameId() );
0182 }
0183 
0184 void EarthquakePlugin::updateModel()
0185 {
0186     if( model() ) {
0187         EarthquakeModel *const earthquakeModel = static_cast<EarthquakeModel *>( model() );
0188         earthquakeModel->setMinMagnitude( m_minMagnitude );
0189         if ( m_timeRangeNPastDays ) {
0190             QDateTime startdate, enddate;
0191             
0192             enddate = marbleModel()->clockDateTime();
0193             startdate = enddate.addDays(-m_pastDays + 1);
0194             earthquakeModel->setStartDate( startdate );
0195             earthquakeModel->setEndDate( enddate );
0196         } else {
0197             earthquakeModel->setStartDate( m_startDate );
0198             earthquakeModel->setEndDate( m_endDate );
0199         }
0200         earthquakeModel->clear();
0201     }
0202 }
0203 
0204 void EarthquakePlugin::validateDateRange()
0205 {
0206     Q_ASSERT( m_configDialog );
0207     if( m_ui->m_startDate->dateTime() >= m_ui->m_endDate->dateTime() ) {
0208         
0209         m_ui->m_startDate->setDateTime( m_ui->m_endDate->dateTime().addDays(-1) );
0210     }
0211     m_ui->m_startDate->setMaximumDateTime( m_ui->m_endDate->dateTime().addDays(-1) );
0212 }
0213 
0214 }
0215 
0216 #include "moc_EarthquakePlugin.cpp"