File indexing completed on 2024-05-05 03:50:48
0001 // SPDX-License-Identifier: LGPL-2.1-or-later 0002 // 0003 // SPDX-FileCopyrightText: 2009 Bastian Holst <bastianholst@gmx.de> 0004 // SPDX-FileCopyrightText: 2012 Mohammed Nafees <nafees.technocool@gmail.com> 0005 // 0006 0007 // Self 0008 #include "PhotoPlugin.h" 0009 0010 #include "PhotoPluginModel.h" 0011 0012 // Marble 0013 #include "ui_PhotoConfigWidget.h" 0014 #include "MarbleDebug.h" 0015 #include "MarbleModel.h" 0016 #include "MarbleWidget.h" 0017 0018 // Qt 0019 #include <QPushButton> 0020 #include <QStringList> 0021 0022 using namespace Marble; 0023 /* TRANSLATOR Marble::PhotoPlugin */ 0024 0025 const quint32 maximumNumberOfItems = 99; 0026 0027 PhotoPlugin::PhotoPlugin() 0028 : AbstractDataPlugin( nullptr ), 0029 ui_configWidget( nullptr ), 0030 m_configDialog( nullptr ) 0031 { 0032 } 0033 0034 PhotoPlugin::PhotoPlugin( const MarbleModel *marbleModel ) 0035 : AbstractDataPlugin( marbleModel ), 0036 ui_configWidget( nullptr ), 0037 m_configDialog( nullptr ) 0038 { 0039 // Plugin is enabled by default 0040 setEnabled( true ); 0041 // Plugin is not visible by default 0042 setVisible( false ); 0043 0044 connect( this, SIGNAL(settingsChanged(QString)), 0045 this, SLOT(updateSettings()) ); 0046 connect( this, SIGNAL(changedNumberOfItems(quint32)), 0047 this, SLOT(checkNumberOfItems(quint32)) ); 0048 0049 setSettings( QHash<QString,QVariant>() ); 0050 } 0051 0052 PhotoPlugin::~PhotoPlugin() 0053 { 0054 delete ui_configWidget; 0055 delete m_configDialog; 0056 } 0057 0058 void PhotoPlugin::initialize() 0059 { 0060 mDebug() << "PhotoPlugin: Initialize"; 0061 PhotoPluginModel *model = new PhotoPluginModel( marbleModel(), this ); 0062 setModel( model ); 0063 updateSettings(); 0064 } 0065 0066 QString PhotoPlugin::name() const 0067 { 0068 return tr( "Photos" ); 0069 } 0070 0071 QString PhotoPlugin::guiString() const 0072 { 0073 return tr( "&Photos" ); 0074 } 0075 0076 QString PhotoPlugin::nameId() const 0077 { 0078 return QStringLiteral("photo"); 0079 } 0080 0081 QString PhotoPlugin::version() const 0082 { 0083 return QStringLiteral("1.0"); 0084 } 0085 0086 QString PhotoPlugin::description() const 0087 { 0088 return tr( "Automatically downloads images from around the world in preference to their popularity" ); 0089 } 0090 0091 QString PhotoPlugin::copyrightYears() const 0092 { 0093 return QStringLiteral("2009, 2012"); 0094 } 0095 0096 QVector<PluginAuthor> PhotoPlugin::pluginAuthors() const 0097 { 0098 return QVector<PluginAuthor>() 0099 << PluginAuthor(QStringLiteral("Bastian Holst"), QStringLiteral("bastianholst@gmx.de")) 0100 << PluginAuthor(QStringLiteral("Mohammed Nafees"), QStringLiteral("nafees.technocool@gmail.com")); 0101 } 0102 0103 QIcon PhotoPlugin::icon() const 0104 { 0105 return QIcon(QStringLiteral(":/icons/photo.png")); 0106 } 0107 0108 QDialog *PhotoPlugin::configDialog() 0109 { 0110 if ( !m_configDialog ) { 0111 // Initializing configuration dialog 0112 m_configDialog = new QDialog(); 0113 ui_configWidget = new Ui::PhotoConfigWidget; 0114 ui_configWidget->setupUi( m_configDialog ); 0115 0116 // add licenses to the list widget 0117 QListWidgetItem *ccByNcSa2 = new QListWidgetItem( ui_configWidget->m_licenseListWidget ); 0118 ccByNcSa2->setText( tr("Attribution-NonCommercial-ShareAlike License") ); 0119 ccByNcSa2->setIcon( QIcon() ); 0120 ccByNcSa2->setCheckState( Qt::Checked ); 0121 ccByNcSa2->setData( Qt::UserRole+1, 1 ); 0122 ccByNcSa2->setData( Qt::UserRole+2, "http://creativecommons.org/licenses/by-nc-sa/2.0/" ); 0123 ui_configWidget->m_licenseListWidget->addItem( ccByNcSa2 ); 0124 QListWidgetItem *ccByNc2 = new QListWidgetItem( ui_configWidget->m_licenseListWidget ); 0125 ccByNc2->setText( tr("Attribution-NonCommercial License") ); 0126 ccByNc2->setIcon( QIcon() ); 0127 ccByNc2->setCheckState( Qt::Checked ); 0128 ccByNc2->setData( Qt::UserRole+1, 2 ); 0129 ccByNc2->setData( Qt::UserRole+2, "http://creativecommons.org/licenses/by-nc/2.0/" ); 0130 ui_configWidget->m_licenseListWidget->addItem( ccByNc2 ); 0131 QListWidgetItem *ccByNcNd2 = new QListWidgetItem( ui_configWidget->m_licenseListWidget ); 0132 ccByNcNd2->setText( tr("Attribution-NonCommercial-NoDerivs License") ); 0133 ccByNcNd2->setIcon( QIcon() ); 0134 ccByNcNd2->setCheckState( Qt::Checked ); 0135 ccByNcNd2->setData( Qt::UserRole+1, 3 ); 0136 ccByNcNd2->setData( Qt::UserRole+2, "http://creativecommons.org/licenses/by-nc-nd/2.0/" ); 0137 ui_configWidget->m_licenseListWidget->addItem( ccByNcNd2 ); 0138 QListWidgetItem *ccBy2 = new QListWidgetItem( ui_configWidget->m_licenseListWidget ); 0139 ccBy2->setText( tr("Attribution License") ); 0140 ccBy2->setIcon( QIcon() ); 0141 ccBy2->setCheckState( Qt::Checked ); 0142 ccBy2->setData( Qt::UserRole+1, 4 ); 0143 ccBy2->setData( Qt::UserRole+2, "http://creativecommons.org/licenses/by/2.0/" ); 0144 ui_configWidget->m_licenseListWidget->addItem( ccBy2 ); 0145 QListWidgetItem *ccBySa2 = new QListWidgetItem( ui_configWidget->m_licenseListWidget ); 0146 ccBySa2->setText( tr("Attribution-ShareAlike License") ); 0147 ccBySa2->setIcon( QIcon() ); 0148 ccBySa2->setCheckState( Qt::Checked ); 0149 ccBySa2->setData( Qt::UserRole+1, 5 ); 0150 ccBySa2->setData( Qt::UserRole+2, "http://creativecommons.org/licenses/by-sa/2.0/" ); 0151 ui_configWidget->m_licenseListWidget->addItem( ccBySa2 ); 0152 QListWidgetItem *ccByNd2 = new QListWidgetItem( ui_configWidget->m_licenseListWidget ); 0153 ccByNd2->setText( tr("Attribution-NoDerivs License") ); 0154 ccByNd2->setIcon( QIcon() ); 0155 ccByNd2->setCheckState( Qt::Checked ); 0156 ccByNd2->setData( Qt::UserRole+1, 6 ); 0157 ccByNd2->setData( Qt::UserRole+2, "http://creativecommons.org/licenses/by-nd/2.0/" ); 0158 ui_configWidget->m_licenseListWidget->addItem( ccByNd2 ); 0159 QListWidgetItem *noLicense = new QListWidgetItem( ui_configWidget->m_licenseListWidget ); 0160 noLicense->setText( tr("No known copyright restrictions") ); 0161 noLicense->setIcon( QIcon() ); 0162 noLicense->setCheckState( Qt::Checked ); 0163 noLicense->setData( Qt::UserRole+1, 7 ); 0164 noLicense->setData( Qt::UserRole+2, "http://flickr.com/commons/usage/" ); 0165 ui_configWidget->m_licenseListWidget->addItem( noLicense ); 0166 0167 readSettings(); 0168 ui_configWidget->m_itemNumberSpinBox->setRange( 0, maximumNumberOfItems ); 0169 connect( ui_configWidget->m_buttonBox, SIGNAL(accepted()), 0170 SLOT(writeSettings()) ); 0171 connect( ui_configWidget->m_buttonBox, SIGNAL(rejected()), 0172 SLOT(readSettings()) ); 0173 QPushButton *applyButton = ui_configWidget->m_buttonBox->button( QDialogButtonBox::Apply ); 0174 connect( applyButton, SIGNAL(clicked()), 0175 this, SLOT(writeSettings()) ); 0176 } 0177 return m_configDialog; 0178 } 0179 0180 QHash<QString,QVariant> PhotoPlugin::settings() const 0181 { 0182 QHash<QString, QVariant> settings = AbstractDataPlugin::settings(); 0183 0184 settings.insert(QStringLiteral("numberOfItems"), numberOfItems()); 0185 settings.insert(QStringLiteral("checkState"), m_checkStateList.join(QLatin1Char(','))); 0186 0187 return settings; 0188 } 0189 0190 void PhotoPlugin::setSettings( const QHash<QString,QVariant> &settings ) 0191 { 0192 AbstractDataPlugin::setSettings( settings ); 0193 0194 setNumberOfItems(qMin<int>(maximumNumberOfItems, settings.value(QStringLiteral("numberOfItems"), 15).toInt())); 0195 m_checkStateList = settings.value(QStringLiteral("checkState"), QStringLiteral("1,2,3,4,5,6,7")).toString().split(QLatin1Char(','), QString::SkipEmptyParts); 0196 0197 updateSettings(); 0198 readSettings(); 0199 } 0200 0201 bool PhotoPlugin::eventFilter(QObject *object, QEvent *event) 0202 { 0203 if ( isInitialized() ) { 0204 PhotoPluginModel *photoPluginModel = dynamic_cast<PhotoPluginModel*>( model() ); 0205 Q_ASSERT( photoPluginModel ); 0206 MarbleWidget* widget = dynamic_cast<MarbleWidget*>( object ); 0207 if ( widget ) { 0208 photoPluginModel->setMarbleWidget( widget ); 0209 } 0210 } 0211 0212 return AbstractDataPlugin::eventFilter( object, event ); 0213 } 0214 0215 void PhotoPlugin::readSettings() 0216 { 0217 if ( !m_configDialog ) 0218 return; 0219 0220 ui_configWidget->m_itemNumberSpinBox->setValue( numberOfItems() ); 0221 for ( int i = 0; i < ui_configWidget->m_licenseListWidget->count(); ++i ) { 0222 const QString licenseId = QString::number( ui_configWidget->m_licenseListWidget->item(i)->data( Qt::UserRole+1 ).toInt() ); 0223 ui_configWidget->m_licenseListWidget->item(i)->setCheckState( m_checkStateList.contains( licenseId ) ? Qt::Checked : Qt::Unchecked ); 0224 } 0225 } 0226 0227 void PhotoPlugin::writeSettings() 0228 { 0229 setNumberOfItems( ui_configWidget->m_itemNumberSpinBox->value() ); 0230 0231 QStringList licenseCheckStateList; 0232 for ( int i = 0; i < ui_configWidget->m_licenseListWidget->count(); ++i ) { 0233 if ( ui_configWidget->m_licenseListWidget->item(i)->checkState() == Qt::Checked ) 0234 { 0235 licenseCheckStateList << ui_configWidget->m_licenseListWidget->item(i)->data( Qt::UserRole+1 ).toString(); 0236 } 0237 } 0238 m_checkStateList = licenseCheckStateList; 0239 0240 emit settingsChanged( nameId() ); 0241 } 0242 0243 void PhotoPlugin::updateSettings() 0244 { 0245 AbstractDataPluginModel *abstractModel = model(); 0246 if ( abstractModel != nullptr ) { 0247 abstractModel->setItemSettings( settings() ); 0248 } 0249 0250 if ( model() ) { 0251 qobject_cast<PhotoPluginModel*>(model())->setLicenseValues(m_checkStateList.join(QLatin1Char(','))); 0252 } 0253 } 0254 0255 void PhotoPlugin::checkNumberOfItems( quint32 number ) { 0256 if ( number > maximumNumberOfItems ) { 0257 setNumberOfItems( maximumNumberOfItems ); 0258 } 0259 0260 readSettings(); 0261 } 0262 0263 #include "moc_PhotoPlugin.cpp"