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"