File indexing completed on 2024-04-28 03:50:20
0001 // SPDX-License-Identifier: LGPL-2.1-or-later 0002 // 0003 // SPDX-FileCopyrightText: 2011 Daniel Marth <danielmarth@gmx.at> 0004 // 0005 0006 #include "OpenCachingPlugin.h" 0007 #include "OpenCachingModel.h" 0008 #include "ui_OpenCachingConfigWidget.h" 0009 0010 #include <QPushButton> 0011 0012 namespace Marble { 0013 0014 OpenCachingPlugin::OpenCachingPlugin() 0015 : m_isInitialized( false ), 0016 m_configDialog( 0 ) 0017 { 0018 setNameId( "opencaching" ); 0019 setVersion( "1.0" ); 0020 setCopyrightYear( 2011 ); 0021 addAuthor( "Daniel Marth", "danielmarth@gmx.at" ); 0022 setDataText( tr( "Cache positions by opencaching.de." ) ); 0023 0024 setEnabled( true ); // Plugin is enabled by default 0025 setVisible( false ); // Plugin is invisible by default 0026 connect( this, SIGNAL(settingsChanged(QString)), 0027 this, SLOT(updateSettings()) ); 0028 } 0029 0030 void OpenCachingPlugin::initialize() 0031 { 0032 OpenCachingModel *model = new OpenCachingModel( pluginManager(), this ); 0033 setModel( model ); 0034 setNumberOfItems( numberOfItemsOnScreen ); 0035 readSettings(); 0036 m_isInitialized = true; 0037 } 0038 0039 bool OpenCachingPlugin::isInitialized() const 0040 { 0041 return m_isInitialized; 0042 } 0043 0044 QString OpenCachingPlugin::name() const 0045 { 0046 return tr( "OpenCaching" ); 0047 } 0048 0049 QString OpenCachingPlugin::guiString() const 0050 { 0051 return tr( "&OpenCaching" ); 0052 } 0053 0054 QString OpenCachingPlugin::description() const 0055 { 0056 return tr( "Shows caches from OpenCaching.de on the screen." ); 0057 } 0058 0059 QIcon OpenCachingPlugin::icon() const 0060 { 0061 return QIcon(); 0062 } 0063 0064 QDialog *OpenCachingPlugin::configDialog() 0065 { 0066 if ( !m_configDialog ) { 0067 // Initializing configuration dialog 0068 m_configDialog = new QDialog(); 0069 m_ui = new Ui::OpenCachingConfigWidget; 0070 m_ui->setupUi( m_configDialog ); 0071 readSettings(); 0072 connect( m_ui->m_buttonBox, SIGNAL(accepted()), 0073 SLOT(writeSettings()) ); 0074 connect( m_ui->m_buttonBox, SIGNAL(rejected()), 0075 SLOT(readSettings()) ); 0076 connect( m_ui->m_buttonBox->button( QDialogButtonBox::Reset ), SIGNAL(clicked()), 0077 SLOT(restoreDefaultSettings()) ); 0078 QPushButton *applyButton = m_ui->m_buttonBox->button( QDialogButtonBox::Apply ); 0079 connect( applyButton, SIGNAL(clicked()), 0080 SLOT(writeSettings()) ); 0081 connect( m_ui->m_endDate, SIGNAL(dateTimeChanged(QDateTime)), 0082 SLOT(validateDateRange()) ); 0083 connect( m_ui->m_maxDifficulty, SIGNAL(valueChanged(double)), 0084 SLOT(validateDifficultyRange()) ); 0085 } 0086 return m_configDialog; 0087 } 0088 0089 QHash<QString,QVariant> OpenCachingPlugin::settings() const 0090 { 0091 return m_settings; 0092 } 0093 0094 void OpenCachingPlugin::setSettings(const QHash<QString, QVariant> &settings) 0095 { 0096 if ( !settings.contains( "numResults" ) ) { 0097 settings.insert( "numResults", numberOfItemsOnScreen ); 0098 } 0099 if ( !settings.contains( "maxDistance" ) ) { 0100 settings.insert( "maxDistance", 20 ); 0101 } 0102 if ( !settings.contains( "minDfficulty" ) ) { 0103 settings.insert( "minDfficulty", 0.0 ); 0104 } 0105 if ( !settings.contains( "maxDifficulty" ) ) { 0106 settings.insert( "maxDifficulty", 5.0 ); 0107 } 0108 if ( !settings.contains( "startDate" ) ) { 0109 settings.insert( "startDate", QDateTime::fromString( "2006-01-01", "yyyy-MM-dd" ) ); 0110 } 0111 if ( !settings.contains( "endDate" ) ) { 0112 settings.insert( "endDate", QDateTime::currentDateTime() ); 0113 } 0114 0115 m_settings = settings; 0116 readSettings(); 0117 emit settingsChanged( nameId() ); 0118 } 0119 0120 void OpenCachingPlugin::readSettings() 0121 { 0122 if ( !m_configDialog ) { 0123 return; 0124 } 0125 0126 m_ui->m_numResults->setValue( m_settings.value( "numResults" ).toInt() ); 0127 m_ui->m_minDifficulty->setValue( m_settings.value( "maxDistance" ).toInt() ); 0128 m_ui->m_minDifficulty->setValue( m_settings.value( "minDifficulty" ).toDouble() ); 0129 m_ui->m_maxDifficulty->setValue( m_settings.value( "maxDifficulty" ).toDouble() ); 0130 m_ui->m_startDate->setDateTime( m_settings.value( "startDate" ).toDateTime() ); 0131 m_ui->m_endDate->setDateTime( m_settings.value( "endDate" ).toDateTime() ); 0132 m_ui->m_startDate->setMaximumDateTime( m_ui->m_endDate->dateTime() ); 0133 } 0134 0135 void OpenCachingPlugin::writeSettings() 0136 { 0137 Q_ASSERT( m_configDialog ); 0138 m_settings.insert( "numResults", m_ui->m_numResults->value() ); 0139 m_settings.insert( "maxDistance", m_ui->m_maxDistance->value() ); 0140 m_settings.insert( "minDifficulty", m_ui->m_minDifficulty->value() ); 0141 m_settings.insert( "maxDifficulty", m_ui->m_maxDifficulty->value() ); 0142 m_settings.insert( "startDate", m_ui->m_startDate->dateTime() ); 0143 m_settings.insert( "endDate", m_ui->m_endDate->dateTime() ); 0144 0145 emit settingsChanged( nameId() ); 0146 } 0147 0148 void OpenCachingPlugin::updateSettings() 0149 { 0150 OpenCachingModel *model = dynamic_cast<OpenCachingModel *>( this->model() ); 0151 if( model ) { 0152 model = new OpenCachingModel( pluginManager(), this ); 0153 Q_ASSERT( m_configDialog ); 0154 model->setNumResults( m_ui->m_numResults->value() ); 0155 model->setMaxDistance( m_ui->m_maxDistance->value () ); 0156 model->setMinDifficulty( m_ui->m_minDifficulty->value() ); 0157 model->setMaxDifficulty( m_ui->m_maxDifficulty->value() ); 0158 model->setEndDate( m_ui->m_endDate->dateTime() ); 0159 model->setStartDate( m_ui->m_startDate->dateTime() ); 0160 setModel( model ); 0161 } 0162 } 0163 0164 void OpenCachingPlugin::validateDateRange() 0165 { 0166 Q_ASSERT( m_configDialog ); 0167 if( m_ui->m_startDate->dateTime() > m_ui->m_endDate->dateTime() ) { 0168 m_ui->m_startDate->setDateTime( m_ui->m_endDate->dateTime() ); 0169 } 0170 m_ui->m_startDate->setMaximumDateTime( m_ui->m_endDate->dateTime() ); 0171 } 0172 0173 void OpenCachingPlugin::validateDifficultyRange() 0174 { 0175 Q_ASSERT( m_configDialog ); 0176 if( m_ui->m_minDifficulty->value() > m_ui->m_maxDifficulty->value() ) { 0177 m_ui->m_minDifficulty->setValue( m_ui->m_maxDifficulty->value() ); 0178 } 0179 m_ui->m_minDifficulty->setMaximum( m_ui->m_maxDifficulty->value() ); 0180 } 0181 0182 } 0183 0184 #include "moc_OpenCachingPlugin.cpp"