File indexing completed on 2024-05-05 03:50:56

0001 // SPDX-License-Identifier: LGPL-2.1-or-later
0002 //
0003 // SPDX-FileCopyrightText: 2009 Bastian Holst <bastianholst@gmx.de>
0004 //
0005 
0006 // Self
0007 #include "WikipediaPlugin.h"
0008 
0009 // Marble
0010 #include "ui_WikipediaConfigWidget.h"
0011 #include "WikipediaModel.h"
0012 #include "MarbleDirs.h"
0013 #include "MarbleDebug.h"
0014 #include "MarbleWidget.h"
0015 
0016 // Qt
0017 #include <QPushButton>
0018 
0019 using namespace Marble;
0020 /* TRANSLATOR Marble::WikipediaPlugin */
0021 
0022 const quint32 maximumNumberOfItems = 99;
0023 
0024 WikipediaPlugin::WikipediaPlugin()
0025     : AbstractDataPlugin( nullptr ),
0026       ui_configWidget( nullptr ),
0027       m_configDialog( nullptr )
0028 {
0029 }
0030 
0031 WikipediaPlugin::WikipediaPlugin( const MarbleModel *marbleModel )
0032     : AbstractDataPlugin( marbleModel ),
0033       m_icon(MarbleDirs::path(QStringLiteral("svg/wikipedia_shadow.svg"))),
0034       ui_configWidget( nullptr ),
0035       m_configDialog( nullptr ),
0036       m_showThumbnails( true )
0037 {
0038     // Plugin is enabled by default
0039     setEnabled( true );
0040     // Plugin is not visible by default
0041     setVisible( false );
0042     
0043     connect( this, SIGNAL(settingsChanged(QString)),
0044              this, SLOT(updateSettings()) );
0045     connect( this, SIGNAL(changedNumberOfItems(quint32)),
0046              this, SLOT(checkNumberOfItems(quint32)) );
0047      
0048     setSettings( QHash<QString,QVariant>() );
0049 }
0050 
0051 WikipediaPlugin::~WikipediaPlugin()
0052 {
0053     delete ui_configWidget;
0054     delete m_configDialog;
0055 }
0056      
0057 void WikipediaPlugin::initialize()
0058 {
0059     WikipediaModel *model = new WikipediaModel( marbleModel(), this );
0060     // Ensure that all settings get forwarded to the model.
0061     setModel( model );
0062     updateSettings();
0063 }
0064 
0065 QString WikipediaPlugin::name() const
0066 {
0067     return tr( "Wikipedia Articles" );
0068 }
0069 
0070 QString WikipediaPlugin::guiString() const
0071 {
0072     return tr( "&Wikipedia" );
0073 }
0074 
0075 QString WikipediaPlugin::nameId() const
0076 {
0077     return QStringLiteral("wikipedia");
0078 }
0079 
0080 QString WikipediaPlugin::version() const
0081 {
0082     return QStringLiteral("1.0");
0083 }
0084 
0085 QString WikipediaPlugin::description() const
0086 {
0087     return tr( "Automatically downloads Wikipedia articles and shows them on the right position on the map" );
0088 }
0089 
0090 QString WikipediaPlugin::copyrightYears() const
0091 {
0092     return QStringLiteral("2009");
0093 }
0094 
0095 QVector<PluginAuthor> WikipediaPlugin::pluginAuthors() const
0096 {
0097     return QVector<PluginAuthor>()
0098             << PluginAuthor(QStringLiteral("Bastian Holst"), QStringLiteral("bastianholst@gmx.de"));
0099 }
0100 
0101 QString WikipediaPlugin::aboutDataText() const
0102 {
0103     return tr( "Geo positions by geonames.org\nTexts by wikipedia.org" );
0104 }
0105 
0106 QIcon WikipediaPlugin::icon() const
0107 {
0108     return m_icon;
0109 }
0110 
0111 QDialog *WikipediaPlugin::configDialog()
0112 {
0113     if ( !m_configDialog ) {
0114         // Initializing configuration dialog
0115         m_configDialog = new QDialog();
0116         ui_configWidget = new Ui::WikipediaConfigWidget;
0117         ui_configWidget->setupUi( m_configDialog );
0118         readSettings();
0119         ui_configWidget->m_itemNumberSpinBox->setRange( 0, maximumNumberOfItems );
0120         connect( ui_configWidget->m_buttonBox, SIGNAL(accepted()),
0121                                             SLOT(writeSettings()) );
0122         connect( ui_configWidget->m_buttonBox, SIGNAL(rejected()),
0123                                             SLOT(readSettings()) );
0124         QPushButton *applyButton = ui_configWidget->m_buttonBox->button( QDialogButtonBox::Apply );
0125         connect( applyButton, SIGNAL(clicked()),
0126                 this,        SLOT(writeSettings()) );
0127     }
0128     return m_configDialog;
0129 }
0130 
0131 QHash<QString,QVariant> WikipediaPlugin::settings() const
0132 {
0133     QHash<QString, QVariant> settings = AbstractDataPlugin::settings();
0134 
0135     settings.insert(QStringLiteral("numberOfItems"), numberOfItems());
0136     settings.insert(QStringLiteral("showThumbnails"), m_showThumbnails);
0137 
0138     return settings;
0139 }
0140 
0141 void WikipediaPlugin::setSettings( const QHash<QString,QVariant> &settings )
0142 {
0143     AbstractDataPlugin::setSettings( settings );
0144 
0145     setNumberOfItems(qMin<int>(maximumNumberOfItems, settings.value(QStringLiteral("numberOfItems"), 15).toInt()));
0146     m_showThumbnails = settings.value(QStringLiteral("showThumbnails"), true).toBool();
0147 
0148     readSettings();
0149     emit settingsChanged( nameId() );
0150 }
0151 
0152 bool WikipediaPlugin::eventFilter(QObject *object, QEvent *event)
0153 {
0154     if ( isInitialized() ) {
0155         WikipediaModel *wikipediaModel = dynamic_cast<WikipediaModel*>( model() );
0156         Q_ASSERT( wikipediaModel );
0157         MarbleWidget* widget = dynamic_cast<MarbleWidget*>( object );
0158         if ( widget ) {
0159             wikipediaModel->setMarbleWidget( widget );
0160         }
0161     }
0162 
0163     return AbstractDataPlugin::eventFilter( object, event );
0164 }
0165 
0166 void WikipediaPlugin::readSettings()
0167 {    
0168     if ( !m_configDialog )
0169         return;
0170 
0171     ui_configWidget->m_itemNumberSpinBox->setValue( numberOfItems() );
0172     ui_configWidget->m_showThumbnailCheckBox->setChecked( m_showThumbnails );
0173 }
0174 
0175 void WikipediaPlugin::writeSettings()
0176 {
0177     setNumberOfItems( ui_configWidget->m_itemNumberSpinBox->value() );
0178     m_showThumbnails = ui_configWidget->m_showThumbnailCheckBox->isChecked();
0179 
0180     emit settingsChanged( nameId() );
0181 }
0182 
0183 void WikipediaPlugin::updateSettings()
0184 {
0185     AbstractDataPluginModel *abstractModel = model();
0186     if ( abstractModel != nullptr ) {
0187         abstractModel->setItemSettings( settings() );
0188     }
0189     
0190     WikipediaModel *wikipediaModel = qobject_cast<WikipediaModel*>( model() );
0191     if ( wikipediaModel ) {
0192         wikipediaModel->setShowThumbnail( m_showThumbnails );
0193     }
0194 }
0195 
0196 void WikipediaPlugin::checkNumberOfItems( quint32 number ) {
0197     if ( number > maximumNumberOfItems ) {
0198         setNumberOfItems( maximumNumberOfItems );
0199     }
0200 
0201     readSettings();
0202 }
0203 
0204 #include "moc_WikipediaPlugin.cpp"