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"