[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