File indexing completed on 2024-04-14 03:47:54

0001 // SPDX-License-Identifier: LGPL-2.1-or-later
0002 //
0003 // SPDX-FileCopyrightText: 2007 Torsten Rahn <rahn@kde.org>
0004 // SPDX-FileCopyrightText: 2008 Jens-Michael Hoffmann <jensmh@gmx.de>
0005 //
0006 
0007 #include "MarblePluginSettingsWidget.h"
0008 #include "ui_MarblePluginSettingsWidget.h"
0009 
0010 // Qt
0011 #include <QPointer>
0012 #include <QDialog>
0013 
0014 // Marble
0015 #include "DialogConfigurationInterface.h"
0016 #include "PluginAboutDialog.h"
0017 #include "PluginItemDelegate.h"
0018 #include "RenderPluginModel.h"
0019 
0020 namespace Marble
0021 {
0022 
0023 class MarblePluginSettingsWidgetPrivate : public Ui::MarblePluginSettingsWidget
0024 {
0025  public:
0026     explicit MarblePluginSettingsWidgetPrivate( Marble::MarblePluginSettingsWidget *parent ) :
0027         q( parent ),
0028         m_itemDelegate( nullptr )
0029     {}
0030 
0031     /**
0032      * Shows the about dialog for the plugin with the corresponding @p nameId.
0033      */
0034     void showPluginAboutDialog( const QModelIndex &index );
0035 
0036     /**
0037      * Shows the configuration dialog for the plugin with the corresponding @p nameId.
0038      */
0039     void showPluginConfigDialog( const QModelIndex &index );
0040 
0041     Marble::MarblePluginSettingsWidget *const q;
0042     PluginItemDelegate *m_itemDelegate;
0043     QPointer<RenderPluginModel> m_pluginModel;
0044 };
0045 
0046 void MarblePluginSettingsWidgetPrivate::showPluginAboutDialog( const QModelIndex &index )
0047 {
0048     if ( m_pluginModel.isNull() )
0049         return;
0050 
0051     QPointer<PluginAboutDialog> aboutDialog = new PluginAboutDialog( q );
0052 
0053     aboutDialog->setName( m_pluginModel->data( index, RenderPluginModel::Name ).toString() );
0054     aboutDialog->setIcon( qvariant_cast<QIcon>( m_pluginModel->data( index, RenderPluginModel::Icon ) ) );
0055     aboutDialog->setVersion( m_pluginModel->data( index, RenderPluginModel::Version ).toString() );
0056     aboutDialog->setDataText( m_pluginModel->data( index, RenderPluginModel::AboutDataText ).toString() );
0057     const QString copyrightText = QObject::tr( "<br/>(c) %1 The Marble Project<br /><br/><a href=\"https://edu.kde.org/marble\">https://edu.kde.org/marble</a>" );
0058     aboutDialog->setAboutText( copyrightText.arg( m_pluginModel->data( index, RenderPluginModel::CopyrightYears ).toString() ) );
0059     aboutDialog->setAuthors( m_pluginModel->pluginAuthors( index ) );
0060 
0061     aboutDialog->exec();
0062     delete aboutDialog;
0063 }
0064 
0065 void MarblePluginSettingsWidgetPrivate::showPluginConfigDialog( const QModelIndex &index )
0066 {
0067     if ( m_pluginModel.isNull() )
0068         return;
0069 
0070     DialogConfigurationInterface *configInterface = m_pluginModel->pluginDialogConfigurationInterface( index );
0071     QDialog *configDialog = configInterface ? configInterface->configDialog() : nullptr;
0072     if ( configDialog ) {
0073         configDialog->show();
0074     }
0075 }
0076 
0077 MarblePluginSettingsWidget::MarblePluginSettingsWidget( QWidget *parent )
0078     : QWidget( parent ),
0079       d( new MarblePluginSettingsWidgetPrivate( this ) )
0080 {
0081     d->setupUi( this );
0082 
0083     d->m_itemDelegate = new PluginItemDelegate( d->m_pluginListView, this );
0084     d->m_pluginListView->setItemDelegate( d->m_itemDelegate );
0085     connect( d->m_itemDelegate, SIGNAL(aboutPluginClicked(QModelIndex)),
0086              this,              SLOT(showPluginAboutDialog(QModelIndex)) );
0087     connect( d->m_itemDelegate, SIGNAL(configPluginClicked(QModelIndex)),
0088              this,              SLOT(showPluginConfigDialog(QModelIndex)) );
0089 }
0090 
0091 void MarblePluginSettingsWidget::setAboutIcon( const QIcon& icon )
0092 {
0093     d->m_itemDelegate->setAboutIcon( icon );
0094 }
0095 
0096 MarblePluginSettingsWidget::~MarblePluginSettingsWidget()
0097 {
0098     delete d;
0099 }
0100 
0101 void MarblePluginSettingsWidget::setConfigIcon( const QIcon& icon )
0102 {
0103     d->m_itemDelegate->setConfigIcon( icon );
0104 }
0105 
0106 void MarblePluginSettingsWidget::setModel( RenderPluginModel* pluginModel )
0107 {
0108     if ( !d->m_pluginModel.isNull() ) {
0109         disconnect( d->m_pluginModel.data(), nullptr, this, nullptr );
0110     }
0111 
0112     d->m_pluginModel = pluginModel;
0113     d->m_pluginListView->setModel( pluginModel );
0114 
0115     if ( !d->m_pluginModel.isNull() ) {
0116         connect( d->m_pluginModel.data(), SIGNAL(itemChanged(QStandardItem*)),
0117                  this,                    SIGNAL(pluginListViewClicked()) );
0118     }
0119 }
0120 
0121 } // namespace Marble
0122 
0123 #include "moc_MarblePluginSettingsWidget.cpp"