From kde-commits Sat Feb 28 22:52:51 2009 From: Ben Cooksley Date: Sat, 28 Feb 2009 22:52:51 +0000 To: kde-commits Subject: playground/base/kcontrol4/src Message-Id: <1235861571.474919.32670.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=123586158202061 SVN commit 933445 by bcooksley: Change the application to not destroy the plugins main widget upon changing plugin. Move connect call into Plugin loading area to avoid multiple connects in changed environment M +7 -5 app/SettingsBase.cpp M +2 -0 app/SettingsBase.h M +17 -15 classic/ClassicMode.cpp M +18 -17 icons/IconMode.cpp --- trunk/playground/base/kcontrol4/src/app/SettingsBase.cpp #933444:933445 @@ -48,6 +48,9 @@ initMenuList(rootModule); initAbout(); initSearch(); + // Prepare the view area + stackedWidget = new QStackedWidget( this ); + setCentralWidget(stackedWidget); // Load all possible views pluginObjects = KServiceTypeTrader::self()->query( "BaseMode" ); for( int pluginsDone = 0; pluginsDone < pluginObjects.count(); pluginsDone = pluginsDone + 1 ) { @@ -57,8 +60,10 @@ if( error.isEmpty() ) { possibleViews.insert( activeService->library(), controller ); controller->init( rootModule, activeService, KGlobal::config()->group( activeService->name() ) ); + stackedWidget->addWidget(controller->mainWidget()); connect(controller, SIGNAL(dirtyStateChanged(bool)), this, SLOT(toggleDirtyState(bool))); connect(controller, SIGNAL(actionsChanged()), this, SLOT(updateViewActions())); + connect(controller->moduleView(), SIGNAL(moduleChanged()), this, SLOT(moduleChanged())); connect(searchText, SIGNAL(textChanged(const QString&)), controller, SLOT(searchChanged(const QString&))); } else { kWarning() << "View load error: " + error; @@ -195,6 +200,7 @@ if( activeView ) { activeView->saveState(); } + QString viewToUse = mainConfigGroup.readEntry( "ActiveView", "icon_mode" ); if( possibleViews.keys().contains(viewToUse) ) { // First the configuration entry activeView = possibleViews.value(viewToUse); @@ -203,11 +209,7 @@ activeView = possibleViews.values().first(); } - setCentralWidget(activeView->mainWidget()); // Now we set it as the main widget - - if ( activeView->moduleView() ) { - connect(activeView->moduleView(), SIGNAL(moduleChanged()), this, SLOT(moduleChanged())); - } + stackedWidget->setCurrentWidget(activeView->mainWidget()); } void SettingsBase::toggleDirtyState(bool state) --- trunk/playground/base/kcontrol4/src/app/SettingsBase.h #933444:933445 @@ -24,6 +24,7 @@ #include "ui_configDialog.h" #include +#include #include #include @@ -82,6 +83,7 @@ KConfigGroup mainConfigGroup; // The control module KToolBar * viewToolbar; + QStackedWidget * stackedWidget; // The module list MenuItem * rootModule; KService::List categories; --- trunk/playground/base/kcontrol4/src/classic/ClassicMode.cpp #933444:933445 @@ -60,27 +60,14 @@ createMenu( child, treeItem ); } - // Create the widget + // Create the model proxyModel = new MenuProxyModel( this ); proxyModel->setSourceModel( new MenuModel( treeItem, this ) ); proxyModel->setFilterRole( MenuModel::UserFilterRole ); proxyModel->setFilterCaseSensitivity( Qt::CaseInsensitive ); proxyModel->sort( 0 ); -} -void ClassicMode::createMenu( MenuItem * copyFrom, MenuItem * copyTo ) -{ - copyTo->name = copyFrom->name; - copyTo->service = copyFrom->service; - copyTo->item = copyFrom->item; - foreach( MenuItem * copyChild, copyFrom->children ) { - MenuItem * newChild = new MenuItem( copyChild->menu, copyTo ); - createMenu( copyChild, newChild ); - } -} - -QWidget * ClassicMode::mainWidget() -{ + // Create the widget classicWidget = new QSplitter( Qt::Horizontal, 0 ); classicTree = new QTreeView( classicWidget ); classicCategory = new CategoryList( classicWidget, proxyModel ); @@ -113,6 +100,21 @@ QList defaultSizes; defaultSizes << 250 << 500; classicWidget->setSizes( config.readEntry( "viewLayout", defaultSizes ) ); +} + +void ClassicMode::createMenu( MenuItem * copyFrom, MenuItem * copyTo ) +{ + copyTo->name = copyFrom->name; + copyTo->service = copyFrom->service; + copyTo->item = copyFrom->item; + foreach( MenuItem * copyChild, copyFrom->children ) { + MenuItem * newChild = new MenuItem( copyChild->menu, copyTo ); + createMenu( copyChild, newChild ); + } +} + +QWidget * ClassicMode::mainWidget() +{ return classicWidget; } --- trunk/playground/base/kcontrol4/src/icons/IconMode.cpp #933444:933445 @@ -49,6 +49,24 @@ QWidget * IconMode::mainWidget() { + return iconWidget; +} + +void IconMode::initEvent() +{ + foreach( MenuItem * childItem, rootItem->children ) { + IconModel * model = new IconModel( childItem, this ); + MenuProxyModel * proxyModel = new MenuProxyModel( this ); + proxyModel->setCategorizedModel( true ); + proxyModel->setSourceModel( model ); + proxyModel->setFilterRole( MenuModel::UserFilterRole ); + proxyModel->setFilterCaseSensitivity( Qt::CaseInsensitive ); + proxyModel->sort( 0 ); + proxyList.append(proxyModel); + proxyMap.insert(proxyModel, childItem->service->name()); + } + + // Create the widget iconWidget = new KTabWidget(); #if QT_VERSION >= 0x040500 iconWidget->setDocumentMode(true); @@ -67,25 +85,8 @@ tv->setModel( proxyModel ); iconWidget->addTab(tv, proxyMap.value(proxyModel) ); } - - return iconWidget; } -void IconMode::initEvent() -{ - foreach( MenuItem * childItem, rootItem->children ) { - IconModel * model = new IconModel( childItem, this ); - MenuProxyModel * proxyModel = new MenuProxyModel( this ); - proxyModel->setCategorizedModel( true ); - proxyModel->setSourceModel( model ); - proxyModel->setFilterRole( MenuModel::UserFilterRole ); - proxyModel->setFilterCaseSensitivity( Qt::CaseInsensitive ); - proxyModel->sort( 0 ); - proxyList.append(proxyModel); - proxyMap.insert(proxyModel, childItem->service->name()); - } -} - void IconMode::searchChanged(const QString text) { foreach( MenuProxyModel * proxyModel, proxyList ) {