Git commit 55da894fc726f903d84f54ccf70ed909a62fffdf by Thomas Friedrichsmei= er. Committed on 31/12/2014 at 20:56. Pushed by tfry into branch 'development/plugin_management_to_loadlibs'. Move pluginmap management to the load libs dialog for good. M +41 -16 rkward/dialogs/rkloadlibsdialog.cpp M +5 -0 rkward/dialogs/rkloadlibsdialog.h M +17 -15 rkward/settings/rksettingsmoduleplugins.cpp M +4 -2 rkward/settings/rksettingsmoduleplugins.h http://commits.kde.org/rkward/55da894fc726f903d84f54ccf70ed909a62fffdf diff --git a/rkward/dialogs/rkloadlibsdialog.cpp b/rkward/dialogs/rkloadlib= sdialog.cpp index 63c6078..fd6df3d 100644 --- a/rkward/dialogs/rkloadlibsdialog.cpp +++ b/rkward/dialogs/rkloadlibsdialog.cpp @@ -64,13 +64,13 @@ RKLoadLibsDialog::RKLoadLibsDialog (QWidget *parent, RC= ommandChain *chain, bool setButtons (KDialog::Ok | KDialog::Apply | KDialog::Cancel); = LoadUnloadWidget *luwidget =3D new LoadUnloadWidget (this); - addPage (luwidget, i18n ("Local packages")); + addChild (luwidget, i18n ("Local packages")); connect (this, SIGNAL (installedPackagesChanged()), luwidget, SLOT (updat= eInstalledPackages())); = install_packages_widget =3D new InstallPackagesWidget (this); - install_packages_pageitem =3D addPage (install_packages_widget, i18n ("In= stall / Update / Remove")); + install_packages_pageitem =3D addChild (install_packages_widget, i18n ("I= nstall / Update / Remove")); = - addPage (new RKPluginMapSelectionWidget (this), i18n ("Manage Plugins")); + configure_pluginmaps_pageitem =3D addChild (new RKPluginMapSelectionWidge= t (this), i18n ("Manage Plugins")); = connect (this, SIGNAL (currentPageChanged(KPageWidgetItem*,KPageWidgetIte= m*)), this, SLOT (slotPageChanged())); QTimer::singleShot (0, this, SLOT (slotPageChanged())); @@ -87,6 +87,16 @@ RKLoadLibsDialog::~RKLoadLibsDialog () { else KPageDialog::reject (); } = +KPageWidgetItem* RKLoadLibsDialog::addChild (QWidget *child_page, const QS= tring &caption) { + RK_TRACE (DIALOGS); + + connect (this, SIGNAL (okClicked()), child_page, SLOT (ok())); + connect (this, SIGNAL (applyClicked()), child_page, SLOT (apply())); + connect (this, SIGNAL (cancelClicked()), child_page, SLOT (cancel())); + connect (child_page, SIGNAL (destroyed()), this, SLOT (childDeleted())); + return addPage (child_page, caption); +} + void RKLoadLibsDialog::slotPageChanged () { RK_TRACE (DIALOGS); = @@ -106,6 +116,15 @@ void RKLoadLibsDialog::showInstallPackagesModal (QWidg= et *parent, RCommandChain RK_TRACE (DIALOGS); } = +// static +void RKLoadLibsDialog::showPluginmapConfig (QWidget* parent, RCommandChain= * chain) { + RK_TRACE (DIALOGS); + + RKLoadLibsDialog *dialog =3D new RKLoadLibsDialog (parent, chain, false); + dialog->setCurrentPage (dialog->configure_pluginmaps_pageitem); + dialog->show (); +} + void RKLoadLibsDialog::automatedInstall () { RK_TRACE (DIALOGS); = @@ -429,11 +448,6 @@ LoadUnloadWidget::LoadUnloadWidget (RKLoadLibsDialog *= dialog) : QWidget (0) { connect (loaded_view, SIGNAL (itemSelectionChanged()), this, SLOT (update= Buttons())); connect (installed_view, SIGNAL (itemSelectionChanged()), this, SLOT (upd= ateButtons())); = - connect (dialog, SIGNAL (okClicked()), this, SLOT (ok())); - connect (dialog, SIGNAL (applyClicked()), this, SLOT (apply())); - connect (dialog, SIGNAL (cancelClicked()), this, SLOT (cancel())); - connect (this, SIGNAL (destroyed()), dialog, SLOT (childDeleted())); - updateInstalledPackages (); updateButtons (); } @@ -674,11 +688,6 @@ InstallPackagesWidget::InstallPackagesWidget (RKLoadLi= bsDialog *dialog) : QWidge buttonvbox->addStretch (1); buttonvbox->addWidget (install_params); buttonvbox->addStretch (1); - - connect (dialog, SIGNAL (okClicked()), this, SLOT (ok())); - connect (dialog, SIGNAL (applyClicked()), this, SLOT (apply())); - connect (dialog, SIGNAL (cancelClicked()), this, SLOT (cancel())); - connect (this, SIGNAL (destroyed()), dialog, SLOT (childDeleted())); } = InstallPackagesWidget::~InstallPackagesWidget () { @@ -1207,6 +1216,7 @@ void RKRPackageInstallationStatusSortFilterModel::set= RKWardOnly (bool only) { RKPluginMapSelectionWidget::RKPluginMapSelectionWidget (RKLoadLibsDialog* = dialog) : QWidget (dialog) { RK_TRACE (DIALOGS); model =3D 0; + changes_pending =3D false; = QVBoxLayout *vbox =3D new QVBoxLayout (this); vbox->setContentsMargins (0, 0, 0, 0); @@ -1226,21 +1236,36 @@ void RKPluginMapSelectionWidget::activated () { model =3D new RKSettingsModulePluginsModel (this); model->init (RKSettingsModulePlugins::knownPluginmaps ()); selector->setModel (model, 1); + connect (selector, SIGNAL (insertNewStrings(int)), model, SLOT (insertNe= wStrings(int))); + connect (selector, SIGNAL (swapRows(int,int)), model, SLOT (swapRows(int= ,int))); + connect (selector, SIGNAL (listChanged()), this, SLOT (changed())); } } = void RKPluginMapSelectionWidget::apply () { + RK_TRACE (DIALOGS); = + if (!changes_pending) return; + RK_ASSERT (model); + RKSettingsModulePlugins::PluginMapList new_list =3D RKSettingsModulePlugi= ns::setPluginMaps (model->pluginMaps ()); + selector->setModel (0); // we don't want any extra change notification fo= r this + model->init (new_list); + selector->setModel (model, 1); + changes_pending =3D false; } = void RKPluginMapSelectionWidget::cancel () { - + RK_TRACE (DIALOGS); + deleteLater (); } = void RKPluginMapSelectionWidget::ok () { + RK_TRACE (DIALOGS); = + if (!changes_pending) return; + RK_ASSERT (model); + RKSettingsModulePlugins::setPluginMaps (model->pluginMaps ()); + deleteLater (); } = - #include "rkloadlibsdialog.moc" - diff --git a/rkward/dialogs/rkloadlibsdialog.h b/rkward/dialogs/rkloadlibsd= ialog.h index d8cbc25..3809363 100644 --- a/rkward/dialogs/rkloadlibsdialog.h +++ b/rkward/dialogs/rkloadlibsdialog.h @@ -63,6 +63,7 @@ public: @param chain RCommandChain to run the necessary commands in @param package_name name of the required package */ static void showInstallPackagesModal (QWidget *parent, RCommandChain *cha= in, const QString &package_name); + static void showPluginmapConfig (QWidget *parent=3D0, RCommandChain *chai= n=3D0); QStringList currentLibraryLocations () const { return library_locations;= }; signals: void downloadComplete (); @@ -87,12 +88,14 @@ private: void addLibraryLocation (const QString &new_loc); void tryDestruct (); void runInstallationCommand (const QString& command, bool as_root, const = QString& message, const QString& title); + KPageWidgetItem* addChild (QWidget *child_page, const QString &caption); friend class LoadUnloadWidget; friend class InstallPackagesWidget; RCommandChain *chain; = InstallPackagesWidget *install_packages_widget; // needed for automated i= nstallation KPageWidgetItem *install_packages_pageitem; + KPageWidgetItem *configure_pluginmaps_pageitem; = QStringList library_locations; = @@ -297,9 +300,11 @@ public slots: void apply (); void cancel (); void activated (); + void changed () { changes_pending =3D true; }; private: RKMultiStringSelectorV2* selector; RKSettingsModulePluginsModel* model; + bool changes_pending; }; = #endif diff --git a/rkward/settings/rksettingsmoduleplugins.cpp b/rkward/settings/= rksettingsmoduleplugins.cpp index 0d6ca52..9f9ea79 100644 --- a/rkward/settings/rksettingsmoduleplugins.cpp +++ b/rkward/settings/rksettingsmoduleplugins.cpp @@ -22,9 +22,6 @@ #include #include #include -#include -#include -#include = #include #include @@ -42,6 +39,7 @@ #include "../misc/rkspinbox.h" #include "../misc/xmlhelper.h" #include "../plugin/rkcomponentmap.h" +#include "../dialogs/rkloadlibsdialog.h" #include "rksettingsmodulegeneral.h" = #include "../debug.h" @@ -107,15 +105,11 @@ RKSettingsModulePlugins::RKSettingsModulePlugins (RKS= ettings *gui, QWidget *pare = main_vbox->addSpacing (2*RKGlobals::spacingHint ()); = + QPushButton *pluginmap_config_button =3D new QPushButton (i18n ("Configur= e Active Plugins"), this); + connect (pluginmap_config_button, SIGNAL (clicked()), this, SLOT (configu= rePluginmaps())); + main_vbox->addWidget (pluginmap_config_button); = - map_choser =3D new RKMultiStringSelectorV2 (i18n ("Select .pluginmap file= (s)"), this); - map_model =3D new RKSettingsModulePluginsModel (this); - map_model->init (known_plugin_maps); - map_choser->setModel (map_model, 1); - connect (map_choser, SIGNAL (insertNewStrings(int)), map_model, SLOT (ins= ertNewStrings(int))); - connect (map_choser, SIGNAL (swapRows(int,int)), map_model, SLOT (swapRow= s(int,int))); - connect (map_choser, SIGNAL (listChanged()), this, SLOT (settingChanged()= )); - main_vbox->addWidget (map_choser); + main_vbox->addStretch (); } = RKSettingsModulePlugins::~RKSettingsModulePlugins() { @@ -135,16 +129,24 @@ QString RKSettingsModulePlugins::caption () { void RKSettingsModulePlugins::applyChanges () { RK_TRACE (SETTINGS); = - known_plugin_maps =3D map_model->pluginMaps (); interface_pref =3D static_cast (button_group->checkedId ()); show_code =3D show_code_box->isChecked (); code_size =3D code_size_box->intValue (); +} + +RKSettingsModulePlugins::PluginMapList RKSettingsModulePlugins::setPluginM= aps (const RKSettingsModulePlugins::PluginMapList new_list) { + RK_TRACE (SETTINGS); = + known_plugin_maps =3D new_list; fixPluginMapLists (); RKWardMainWindow::getMain ()->initPlugins(); - map_choser->setModel (0); // we don't want any extra change notification = for this - map_model->init (known_plugin_maps); - map_choser->setModel (map_model, 1); + return known_plugin_maps; +} + +void RKSettingsModulePlugins::configurePluginmaps () { + RK_TRACE (SETTINGS); + + RKLoadLibsDialog::showPluginmapConfig (this, commandChain ()); } = void RKSettingsModulePlugins::save (KConfig *config) { diff --git a/rkward/settings/rksettingsmoduleplugins.h b/rkward/settings/rk= settingsmoduleplugins.h index 91998ce..7f690ea 100644 --- a/rkward/settings/rksettingsmoduleplugins.h +++ b/rkward/settings/rksettingsmoduleplugins.h @@ -87,9 +87,8 @@ public: static void parsePluginMapBasics (const QString &filename, QString *id, i= nt *priority); public slots: void settingChanged (); + void configurePluginmaps (); private: - RKMultiStringSelectorV2 *map_choser; - RKSettingsModulePluginsModel *map_model; QButtonGroup *button_group; QCheckBox *show_code_box; RKSpinBox *code_size_box; @@ -104,6 +103,9 @@ private: /* TODO: This one is currently unused (leftover of GHNS-based plugin insta= llation), but might still be of interest */ static QStringList findPluginMapsRecursive (const QString &basedir); static void fixPluginMapLists (); +friend class RKPluginMapSelectionWidget; +/** Sets the new list of plugins. Potentially removes unreadable ones, and= returns the effective list. */ + static PluginMapList setPluginMaps (const PluginMapList new_list); }; = class RKSettingsModulePluginsModel : public QAbstractTableModel {