[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/workspace/systemsettings
From:       Ben Cooksley <sourtooth () gmail ! com>
Date:       2009-07-19 10:34:02
Message-ID: 1247999642.280095.32450.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 999143 by bcooksley:

Add initial support for integrating external applications in system \
settings

 M  +4 -3      app/SettingsBase.cpp  
 M  +0 -3      app/SettingsBase.h  
 M  +3 -1      core/CMakeLists.txt  
 M  +41 -26    core/ModuleView.cpp  
 M  +1 -0      core/ModuleView.h  
 A             core/externalModule.ui  
 A             core/systemsettingsexternalapp.desktop  


--- trunk/KDE/kdebase/workspace/systemsettings/app/SettingsBase.cpp \
#999142:999143 @@ -39,9 +39,7 @@
 #include "ModuleView.h"
 
 SettingsBase::SettingsBase( QWidget * parent ) :
-    KXmlGuiWindow(parent),
-    categories( KServiceTypeTrader::self()->query("SystemSettingsCategory") \
                ),
-    modules( KServiceTypeTrader::self()->query("KCModule") )
+    KXmlGuiWindow(parent)
 {
     // Ensure delayed loading doesn't cause a crash
     activeView = 0;
@@ -79,6 +77,9 @@
 void SettingsBase::initApplication()
 {
     // Prepare the menu of all modules
+    categories = KServiceTypeTrader::self()->query("SystemSettingsCategory");
 +    modules = KServiceTypeTrader::self()->query("KCModule");
+    modules += KServiceTypeTrader::self()->query("SystemSettingsExternalApp");
  rootModule = new MenuItem( true, 0 );
     initMenuList(rootModule);
     // Prepare the Base Data
--- trunk/KDE/kdebase/workspace/systemsettings/app/SettingsBase.h \
#999142:999143 @@ -47,9 +47,6 @@
 protected:
     virtual QSize sizeHint() const;
 
-private:
-    MenuItem * initModuleLists(MenuItem * parent);
-
 private slots:
     void initApplication();
     void initToolBar();
--- trunk/KDE/kdebase/workspace/systemsettings/core/CMakeLists.txt \
#999142:999143 @@ -19,6 +19,8 @@
     ToolTipManager.cpp
 )
 
+KDE4_ADD_UI_FILES( systemsettingsview_LIB_SRCS externalModule.ui )
+
 set(systemsettingsview_LIB_HDRS
     systemsettingsview_export.h
     MenuItem.h
@@ -36,4 +38,4 @@
 
 install( TARGETS systemsettingsview  ${INSTALL_TARGETS_DEFAULT_ARGS} )
 install( FILES ${systemsettingsview_LIB_HDRS} DESTINATION \
                ${INCLUDE_INSTALL_DIR}/systemsettingsview COMPONENT Devel )
-INSTALL( FILES systemsettingsview.desktop DESTINATION \
${SERVICETYPES_INSTALL_DIR} ) +INSTALL( FILES systemsettingsview.desktop \
                systemsettingsexternalapp.desktop DESTINATION \
                ${SERVICETYPES_INSTALL_DIR} )
--- trunk/KDE/kdebase/workspace/systemsettings/core/ModuleView.cpp \
#999142:999143 @@ -19,6 +19,7 @@
  *****************************************************************************/
  
 #include "ModuleView.h"
+#include "ui_externalModule.h"
 
 #include <QMap>
 #include <QList>
@@ -46,7 +47,8 @@
 public:
     Private() { }
     QMap<KPageWidgetItem*, KCModuleProxy*> mPages;
-    QMap<KCModuleProxy*, KCModuleInfo*> mModules;
+    QMap<KPageWidgetItem*, KCModuleInfo*> mModules;
+    Ui::ExternalModule externalModule;
     KPageWidget* mPageWidget;
     QVBoxLayout* mLayout;
     KDialogButtonBox* mButtons;
@@ -96,12 +98,7 @@
 
 KCModuleInfo * ModuleView::activeModule() const
 {
-    KCModuleProxy * activeModule = d->mPages.value( \
                d->mPageWidget->currentPage() );
-    if( activeModule ) {
-        return d->mModules.value(activeModule);
-    } else {
-        return 0;
-    }
+    return d->mModules.value( d->mPageWidget->currentPage() );
 }
 
 const KAboutData * ModuleView::aboutData() const
@@ -156,27 +153,37 @@
         return;
     }
 
-    // Create the items
+    // Create the scroller
     QScrollArea * moduleScroll = new QScrollArea( this );
-    KCModuleProxy * moduleProxy = new KCModuleProxy( *module, moduleScroll \
                );
-    // Prepare the module
-    moduleProxy->setAutoFillBackground( false );
     // Prepare the scroll area
     moduleScroll->setWidgetResizable( true );
     moduleScroll->setFrameStyle( QFrame::NoFrame );
     moduleScroll->viewport()->setAutoFillBackground( false );
-    moduleScroll->setWidget( moduleProxy );
     // Create the page
     KPageWidgetItem *page = new KPageWidgetItem( moduleScroll, \
module->moduleName() ); +
+    if( module->service()->hasServiceType("SystemSettingsExternalApp") ) { \
// Is it an external app? +        QProcess::startDetached( \
module->service()->exec() ); // Launch it! +        QWidget * \
externalWidget = new QWidget( this ); +        d->externalModule.setupUi( \
externalWidget ); +        d->externalModule.LblText->setText( i18n("%1 is \
an external application and has been automatically launched", \
module->moduleName() ) ); +        d->externalModule.PbRelaunch->setText( \
i18n("Relaunch %1", module->moduleName()) ); +        connect( \
d->externalModule.PbRelaunch, SIGNAL(clicked()), this, SLOT(runExternal()) \
); +        moduleScroll->setWidget( externalWidget );
+    } else { // It must be a normal module then
+        KCModuleProxy * moduleProxy = new KCModuleProxy( *module, \
moduleScroll ); +        moduleScroll->setWidget( moduleProxy );
+        moduleProxy->setAutoFillBackground( false );
+        connect( moduleProxy, SIGNAL(changed(bool)), this, \
SLOT(stateChanged())); +        d->mPages.insert( page, moduleProxy );
+    }
+
     // Provide information to the users
     page->setIcon( KIcon( module->service()->icon() ) );
     page->setHeader( module->service()->comment() );
-    // Allow it to signal properly
-    connect( moduleProxy, SIGNAL(changed(bool)), this, \
                SLOT(stateChanged()));
-    // Set it to be shown and signal that
+    d->mModules.insert( page, module );
+    // Add the new page
     d->mPageWidget->addPage( page );
-    d->mPages.insert( page, moduleProxy );
-    d->mModules.insert( moduleProxy, module );
 }
 
 bool ModuleView::resolveChanges()
@@ -222,16 +229,19 @@
 void ModuleView::closeModules()
 {
     blockSignals(true);
-    QMap<KPageWidgetItem*, KCModuleProxy*>::iterator pageIterator;
-    QMap<KPageWidgetItem*, KCModuleProxy*>::iterator endIterator = \
d->mPages.end(); +    QMap<KPageWidgetItem*, KCModuleProxy*>::iterator \
module; +    QMap<KPageWidgetItem*, KCModuleProxy*>::iterator moduleEnd = \
                d->mPages.end();
     // These two MUST be kept separate in order to ensure modules aren't \
                loaded during the closing procedure
-    for ( pageIterator = d->mPages.begin(); pageIterator != endIterator; \
                ++pageIterator ) {
-        delete pageIterator.value();
-        pageIterator.value() = 0;
+    for ( module = d->mPages.begin(); module != moduleEnd; ++module ) {
+        delete module.value();
+        module.value() = 0;
     }
-    for ( pageIterator = d->mPages.begin(); pageIterator != endIterator; \
                ++pageIterator ) {
-        d->mPageWidget->removePage( pageIterator.key() );
+    QMap<KPageWidgetItem*, KCModuleInfo*>::iterator page = \
d->mModules.begin(); +    QMap<KPageWidgetItem*, KCModuleInfo*>::iterator \
pageEnd = d->mModules.end(); +    for ( page = d->mModules.begin(); page != \
pageEnd; ++page ) { +        d->mPageWidget->removePage( page.key() );
     }
+
     d->mPages.clear();
     d->mModules.clear();
     blockSignals(false);
@@ -263,12 +273,12 @@
 
 void ModuleView::moduleHelp()
 {
-    KCModuleProxy * activeModule = d->mPages.value( \
d->mPageWidget->currentPage() ); +    KCModuleInfo * activeModule = \
d->mModules.value( d->mPageWidget->currentPage() );  if( !activeModule ) {
         return;
     }
 
-    QString docPath = activeModule->moduleInfo().docPath();
+    QString docPath = activeModule->docPath();
     if( docPath.isEmpty() ) {
         return;
     }
@@ -336,4 +346,9 @@
     d->mDefault->setEnabled(buttons & KCModule::Default );
 }
 
+void ModuleView::runExternal()
+{
+    QProcess::startDetached( activeModule()->service()->exec() ); // \
Launch it! +}
+
 #include "ModuleView.moc"
--- trunk/KDE/kdebase/workspace/systemsettings/core/ModuleView.h \
#999142:999143 @@ -132,6 +132,7 @@
     void activeModuleChanged( KPageWidgetItem* current, KPageWidgetItem* \
previous);  void updateButtons();
     void stateChanged();
+    void runExternal();
 
 Q_SIGNALS:
     /**


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic