File indexing completed on 2024-04-28 15:15:55
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"