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"