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"