00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#include "kpluginselector.h"
00021
#include "kpluginselector_p.h"
00022
00023
#include <qtooltip.h>
00024
#include <qvbox.h>
00025
#include <qlabel.h>
00026
#include <qstrlist.h>
00027
#include <qfile.h>
00028
#include <qstring.h>
00029
#include <qlayout.h>
00030
#include <qptrlist.h>
00031
#include <qwidgetstack.h>
00032
#include <qcursor.h>
00033
#include <qapplication.h>
00034
#include <qobjectlist.h>
00035
#include <qcstring.h>
00036
00037
#include <kdebug.h>
00038
#include <klocale.h>
00039
#include <klistview.h>
00040
#include <ksimpleconfig.h>
00041
#include <kdialog.h>
00042
#include <kglobal.h>
00043
#include <kglobalsettings.h>
00044
#include <kstandarddirs.h>
00045
#include <ktabctl.h>
00046
#include <kcmoduleinfo.h>
00047
#include <qvaluelist.h>
00048
#include <kservice.h>
00049
#include <ktrader.h>
00050
#include <ktabwidget.h>
00051
#include <kiconloader.h>
00052
#include <kcmodule.h>
00053
#include "kcmoduleinfo.h"
00054
#include "kcmoduleloader.h"
00055
#include <qsplitter.h>
00056
#include <qframe.h>
00057
#include "kplugininfo.h"
00058
#include <kinstance.h>
00059
#include <qptrdict.h>
00060
#include <qstringlist.h>
00061
#include "kcmoduleproxy.h"
00062
00063
00064
00065
00066
00067
class KPluginInfoLVI :
public QCheckListItem
00068 {
00069
public:
00070 KPluginInfoLVI(
KPluginInfo *pluginInfo,
KListView *parent )
00071 :
QCheckListItem( parent, pluginInfo->
name(),
QCheckListItem::CheckBox ), m_pluginInfo( pluginInfo )
00072 {
00073 }
00074
00075
KPluginInfo * pluginInfo() {
return m_pluginInfo; }
00076
00077
private:
00078
KPluginInfo *m_pluginInfo;
00079 };
00080
00081
00082
00083
00084
00085
00086
class KPluginListViewToolTip :
public QToolTip
00087 {
00088
public:
00089 KPluginListViewToolTip(
QWidget *parent,
KListView *lv );
00090
00091
void maybeTip(
const QPoint &pos );
00092
00093
private:
00094
KListView *m_listView;
00095 };
00096
00097 KPluginListViewToolTip::KPluginListViewToolTip(
QWidget *parent,
KListView *lv )
00098 :
QToolTip( parent ), m_listView( lv )
00099 {
00100 }
00101
00102
void KPluginListViewToolTip::maybeTip(
const QPoint &pos )
00103 {
00104
if ( !parentWidget() || !m_listView )
00105
return;
00106
00107 KPluginInfoLVI *item = dynamic_cast<KPluginInfoLVI *>( m_listView->itemAt( pos ) );
00108
if ( !item )
00109
return;
00110
00111
QString toolTip = i18n(
"<qt><table>"
00112
"<tr><td><b>Description:</b></td><td>%1</td></tr>"
00113
"<tr><td><b>Author:</b></td><td>%2</td></tr>"
00114
"<tr><td><b>Version:</b></td><td>%3</td></tr>"
00115
"<tr><td><b>License:</b></td><td>%4</td></tr></table></qt>" ).arg( item->pluginInfo()->comment(),
00116 item->pluginInfo()->author(), item->pluginInfo()->version(), item->pluginInfo()->license() );
00117
00118
00119 tip( m_listView->itemRect( item ), toolTip );
00120 }
00121
00122
struct KPluginSelectionWidget::KPluginSelectionWidgetPrivate
00123 {
00124 KPluginSelectionWidgetPrivate(
const QString & _instanceName,
00125
KPluginSelector * _kps,
const QString & _cat,
00126
KConfigGroup * _config )
00127 : instanceName( _instanceName )
00128 , widgetstack( 0 )
00129 , kps( _kps )
00130 , config( _config )
00131 , tooltip( 0 )
00132 , catname( _cat )
00133 , currentplugininfo( 0 )
00134 , visible( true )
00135 , currentchecked( false )
00136 , changed( 0 )
00137 {
00138 moduleParentComponents.setAutoDelete(
true );
00139 }
00140
00141 ~KPluginSelectionWidgetPrivate()
00142 {
00143
delete config;
00144 }
00145
00146
QMap<QCheckListItem*, KPluginInfo*> pluginInfoMap;
00147
00148
QString instanceName;
00149
QWidgetStack * widgetstack;
00150
KPluginSelector * kps;
00151
KConfigGroup * config;
00152 KPluginListViewToolTip *tooltip;
00153
00154
QDict<KCModuleInfo> pluginconfigmodules;
00155
QMap<QString, int> widgetIDs;
00156
QMap<KPluginInfo*, bool> plugincheckedchanged;
00157
QString catname;
00158
QValueList<KCModuleProxy*> modulelist;
00159
QPtrDict<QStringList> moduleParentComponents;
00160
00161
KPluginInfo * currentplugininfo;
00162
bool visible;
00163
bool currentchecked;
00164
int changed;
00165 };
00166
00167 KPluginSelectionWidget::KPluginSelectionWidget(
const QString & instanceName,
00168
KPluginSelector * kps,
QWidget * parent,
const QString & catname,
00169
const QString & category,
KConfigGroup * config,
const char * name )
00170 :
QWidget( parent, name )
00171 , d( new KPluginSelectionWidgetPrivate( instanceName, kps, catname, config ) )
00172 {
00173 init( kpartsPluginInfos(), category );
00174 }
00175
00176 KPluginSelectionWidget::KPluginSelectionWidget(
00177
const QValueList<KPluginInfo*> & plugininfos,
KPluginSelector * kps,
00178
QWidget * parent,
const QString & catname,
const QString & category,
00179
KConfigGroup * config,
const char * name )
00180 :
QWidget( parent, name )
00181 , d( new KPluginSelectionWidgetPrivate( 0, kps, catname, config ) )
00182 {
00183 init( plugininfos, category );
00184 }
00185
00186 inline QString KPluginSelectionWidget::catName()
const
00187
{
00188
return d->catname;
00189 }
00190
00191
QValueList<KPluginInfo*> KPluginSelectionWidget::kpartsPluginInfos()
const
00192
{
00193
if( d->instanceName.isNull() )
00194 {
00195
QValueList<KPluginInfo*> list;
00196
return list;
00197 }
00198
00199
QStringList desktopfilenames =
KGlobal::dirs()->
findAllResources(
"data",
00200 d->instanceName +
"/kpartplugins/*.desktop",
true,
false );
00201
return KPluginInfo::fromFiles( desktopfilenames );
00202 }
00203
00204
void KPluginSelectionWidget::init(
const QValueList<KPluginInfo*> & plugininfos,
00205
const QString & category )
00206 {
00207
00208 (
new QVBoxLayout(
this, 0, KDialog::spacingHint() ) )->setAutoAdd(
true );
00209
KListView * listview =
new KListView(
this );
00210 d->tooltip =
new KPluginListViewToolTip( listview->viewport(), listview );
00211 connect( listview, SIGNAL( pressed(
QListViewItem * ) ),
this,
00212 SLOT( executed(
QListViewItem * ) ) );
00213 connect( listview, SIGNAL( spacePressed(
QListViewItem * ) ),
this,
00214 SLOT( executed(
QListViewItem * ) ) );
00215 connect( listview, SIGNAL( returnPressed(
QListViewItem * ) ),
this,
00216 SLOT( executed(
QListViewItem * ) ) );
00217 connect( listview, SIGNAL( selectionChanged(
QListViewItem * ) ),
this,
00218 SLOT( executed(
QListViewItem * ) ) );
00219 listview->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Preferred );
00220 listview->
setAcceptDrops(
false );
00221 listview->
setFullWidth(
true );
00222 listview->
setSelectionModeExt( KListView::Single );
00223 listview->setAllColumnsShowFocus(
true );
00224 listview->
addColumn( i18n(
"Name" ) );
00225
for(
QValueList<KPluginInfo*>::ConstIterator it = plugininfos.begin();
00226 it != plugininfos.end(); ++it )
00227 {
00228 d->plugincheckedchanged[ *it ] =
false;
00229
if( !( *it )->isHidden() &&
00230 ( category.isNull() || ( *it )->category() == category ) )
00231 {
00232
QCheckListItem * item =
new KPluginInfoLVI( *it, listview );
00233
if( ! ( *it )->icon().isEmpty() )
00234 item->setPixmap( 0, SmallIcon( ( *it )->icon(), IconSize( KIcon::Small ) ) );
00235 item->setOn( ( *it )->isPluginEnabled() );
00236 d->pluginInfoMap.insert( item, *it );
00237 }
00238 }
00239
00240
00241 d->widgetstack = d->kps->widgetStack();
00242
load();
00243
00244
if( listview->firstChild() )
00245 listview->setSelected( listview->firstChild(),
true );
00246 }
00247
00248 KPluginSelectionWidget::~KPluginSelectionWidget()
00249 {
00250
delete d->tooltip;
00251
delete d;
00252 }
00253
00254 bool KPluginSelectionWidget::pluginIsLoaded(
const QString & pluginName )
const
00255
{
00256
for(
QMap<QCheckListItem*, KPluginInfo*>::ConstIterator it =
00257 d->pluginInfoMap.begin(); it != d->pluginInfoMap.end(); ++it )
00258
if( it.data()->pluginName() == pluginName )
00259
return it.data()->isPluginEnabled();
00260
return false;
00261 }
00262
00263
00264
QWidget * KPluginSelectionWidget::insertKCM(
QWidget * parent,
00265
const KCModuleInfo & moduleinfo )
00266 {
00267 KCModuleProxy * module =
new KCModuleProxy( moduleinfo,
false,
00268 parent );
00269
if( !module->realModule() )
00270 {
00271
00272
QLabel * label =
new QLabel( i18n(
"Error" ), parent );
00273 label->setAlignment( Qt::AlignCenter );
00274
00275
return label;
00276 }
00277
00278 d->modulelist.append( module );
00279
QStringList * parentComponents =
new QStringList(
00280 moduleinfo.
service()->property(
00281
"X-KDE-ParentComponents" ).toStringList() );
00282 d->moduleParentComponents.insert( module, parentComponents );
00283 connect( module, SIGNAL(
changed(
bool ) ), SLOT( clientChanged(
bool ) ) );
00284
return module;
00285 }
00286
00287
void KPluginSelectionWidget::embeddPluginKCMs(
KPluginInfo * plugininfo,
bool checked )
00288 {
00289
00290
00291 QApplication::setOverrideCursor( Qt::WaitCursor );
00292
if( plugininfo->
kcmServices().size() > 1 )
00293 {
00294
00295
KTabWidget * tabwidget =
new KTabWidget( d->widgetstack );
00296 tabwidget->setEnabled( checked );
00297
00298
int id = d->widgetstack->addWidget( tabwidget );
00299 d->kps->configPage(
id );
00300 d->widgetIDs[ plugininfo->
pluginName() ] =
id;
00301
00302
for(
QValueList<KService::Ptr>::ConstIterator it =
00303 plugininfo->
kcmServices().begin();
00304 it != plugininfo->
kcmServices().end(); ++it )
00305 {
00306
if( !( *it )->noDisplay() )
00307 {
00308
KCModuleInfo moduleinfo( *it );
00309
QWidget * module = insertKCM( tabwidget, moduleinfo );
00310 tabwidget->addTab( module, moduleinfo.
moduleName() );
00311 }
00312 }
00313 }
00314
else
00315 {
00316
if( !plugininfo->
kcmServices().front()->noDisplay() )
00317 {
00318
KCModuleInfo moduleinfo(
00319 plugininfo->
kcmServices().front() );
00320
QWidget * module = insertKCM( d->widgetstack, moduleinfo );
00321 module->setEnabled( checked );
00322
00323
int id = d->widgetstack->addWidget( module );
00324 d->kps->configPage(
id );
00325 d->widgetIDs[ plugininfo->
pluginName() ] =
id;
00326 }
00327 }
00328 QApplication::restoreOverrideCursor();
00329 }
00330
00331
inline void KPluginSelectionWidget::updateConfigPage()
00332 {
00333 updateConfigPage( d->currentplugininfo, d->currentchecked );
00334 }
00335
00336
void KPluginSelectionWidget::updateConfigPage(
KPluginInfo * plugininfo,
00337
bool checked )
00338 {
00339
kdDebug( 702 ) <<
k_funcinfo <<
endl;
00340 d->currentplugininfo = plugininfo;
00341 d->currentchecked = checked;
00342
00343
00344
00345
00346
if( ! d->visible )
00347
return;
00348
00349
if( 0 == plugininfo )
00350 {
00351 d->kps->configPage( 1 );
00352
return;
00353 }
00354
00355
if( plugininfo->
kcmServices().empty() )
00356 d->kps->configPage( 1 );
00357
else
00358 {
00359
if( !d->widgetIDs.contains( plugininfo->
pluginName() ) )
00360
00361 embeddPluginKCMs( plugininfo, checked );
00362
else
00363 {
00364
00365
int id = d->widgetIDs[ plugininfo->
pluginName() ];
00366 d->kps->configPage(
id );
00367 d->widgetstack->widget(
id )->setEnabled( checked );
00368 }
00369 }
00370 }
00371
00372
void KPluginSelectionWidget::clientChanged(
bool didchange )
00373 {
00374
kdDebug( 702 ) <<
k_funcinfo <<
endl;
00375 d->changed += didchange ? 1 : -1;
00376
if( d->changed == 1 )
00377 emit
changed(
true );
00378
else if( d->changed == 0 )
00379 emit
changed(
false );
00380
else if( d->changed < 0 )
00381
kdError( 702 ) <<
"negative changed value: " << d->changed <<
endl;
00382 }
00383
00384
void KPluginSelectionWidget::tabWidgetChanged(
QWidget * widget )
00385 {
00386
if( widget ==
this )
00387 {
00388 d->visible =
true;
00389 updateConfigPage();
00390 }
00391
else
00392 d->visible =
false;
00393 }
00394
00395
void KPluginSelectionWidget::executed(
QListViewItem * item )
00396 {
00397
kdDebug( 702 ) <<
k_funcinfo <<
endl;
00398
if( item == 0 )
00399
return;
00400
00401
00402
00403
00404
if( item->rtti() != 1 )
00405
return;
00406
00407
QCheckListItem * citem = static_cast<QCheckListItem *>( item );
00408
bool checked = citem->isOn();
00409
kdDebug( 702 ) <<
"it's a " << ( checked ?
"checked" :
"unchecked" )
00410 <<
" QCheckListItem" <<
endl;
00411
00412
KPluginInfo * info = d->pluginInfoMap[ citem ];
00413
if( info->
isHidden() )
00414
kdFatal( 702 ) <<
"bummer" <<
endl;
00415
00416
if ( info->
isPluginEnabled() != checked )
00417 {
00418
kdDebug( 702 ) <<
"Item changed state, emitting changed()" <<
endl;
00419
00420
if( ! d->plugincheckedchanged[ info ] )
00421 {
00422 ++d->changed;
00423
if ( d->changed == 1 )
00424 emit
changed(
true );
00425 }
00426 d->plugincheckedchanged[ info ] =
true;
00427
00428 checkDependencies( info );
00429 }
00430
else
00431 {
00432
if( d->plugincheckedchanged[ info ] )
00433 {
00434 --d->changed;
00435
if ( d->changed == 0 )
00436 emit
changed(
false );
00437 }
00438 d->plugincheckedchanged[ info ] =
false;
00439
00440 }
00441
00442 updateConfigPage( info, checked );
00443 }
00444
00445 void KPluginSelectionWidget::load()
00446 {
00447
kdDebug( 702 ) <<
k_funcinfo <<
endl;
00448
00449
for(
QMap<QCheckListItem*, KPluginInfo*>::Iterator it =
00450 d->pluginInfoMap.begin(); it != d->pluginInfoMap.end(); ++it )
00451 {
00452
KPluginInfo * info = it.data();
00453 info->
load( d->config );
00454 it.key()->setOn( info->
isPluginEnabled() );
00455
if( d->visible && info == d->currentplugininfo )
00456 d->currentchecked = info->
isPluginEnabled();
00457 }
00458
00459
for(
QValueList<KCModuleProxy*>::Iterator it = d->modulelist.begin();
00460 it != d->modulelist.end(); ++it )
00461
if( ( *it )->changed() )
00462 ( *it )->load();
00463
00464 updateConfigPage();
00465
00466 }
00467
00468 void KPluginSelectionWidget::save()
00469 {
00470
kdDebug( 702 ) <<
k_funcinfo <<
endl;
00471
00472
for(
QMap<QCheckListItem*, KPluginInfo*>::Iterator it =
00473 d->pluginInfoMap.begin(); it != d->pluginInfoMap.end(); ++it )
00474 {
00475
KPluginInfo * info = it.data();
00476
bool checked = it.key()->isOn();
00477 info->
setPluginEnabled( checked );
00478 info->
save( d->config );
00479 d->plugincheckedchanged[ info ] =
false;
00480 }
00481
QStringList updatedModules;
00482
for(
QValueList<KCModuleProxy*>::Iterator it = d->modulelist.begin();
00483 it != d->modulelist.end(); ++it )
00484
if( ( *it )->changed() )
00485 {
00486 ( *it )->save();
00487
QStringList * names = d->moduleParentComponents[ *it ];
00488
if( names->size() == 0 )
00489 names->append( QString::null );
00490
for( QStringList::ConstIterator nameit = names->begin();
00491 nameit != names->end(); ++nameit )
00492
if( updatedModules.find( *nameit ) == updatedModules.end() )
00493 updatedModules.append( *nameit );
00494 }
00495
for( QStringList::ConstIterator it = updatedModules.begin(); it != updatedModules.end(); ++it )
00496 emit
configCommitted( ( *it ).latin1() );
00497
00498 updateConfigPage();
00499
kdDebug( 702 ) <<
"syncing config file" <<
endl;
00500 d->config->sync();
00501 d->changed = 0;
00502 emit
changed(
false );
00503 }
00504
00505
void KPluginSelectionWidget::checkDependencies(
const KPluginInfo * info )
00506 {
00507
if( info->
dependencies().isEmpty() )
00508
return;
00509
00510
for( QStringList::ConstIterator it = info->
dependencies().begin();
00511 it != info->
dependencies().end(); ++it )
00512
for(
QMap<
QCheckListItem*,
00513
KPluginInfo*>::Iterator infoIt = d->pluginInfoMap.begin();
00514 infoIt != d->pluginInfoMap.end(); ++infoIt )
00515
if( infoIt.data()->pluginName() == *it )
00516 {
00517
if( !infoIt.key()->isOn() )
00518 {
00519 infoIt.key()->setOn(
true );
00520 checkDependencies( infoIt.data() );
00521 }
00522
continue;
00523 }
00524 }
00525
00526
class KPluginSelector::KPluginSelectorPrivate
00527 {
00528
public:
00529 KPluginSelectorPrivate()
00530 : frame( 0 )
00531 , tabwidget( 0 )
00532 , widgetstack( 0 )
00533 , hideconfigpage( false )
00534 {
00535 }
00536
00537
QFrame * frame;
00538
KTabWidget * tabwidget;
00539
QWidgetStack * widgetstack;
00540
QValueList<KPluginSelectionWidget *> pswidgets;
00541
bool hideconfigpage;
00542 };
00543
00544 KPluginSelector::KPluginSelector(
QWidget * parent,
const char * name )
00545 :
QWidget( parent, name )
00546 , d( new KPluginSelectorPrivate )
00547 {
00548
QBoxLayout * hbox =
new QHBoxLayout(
this, 0, KDialog::spacingHint() );
00549 hbox->setAutoAdd(
true );
00550 d->frame =
new QFrame(
this,
"KPluginSelector left frame" );
00551 d->frame->setFrameStyle( QFrame::NoFrame );
00552 (
new QVBoxLayout( d->frame, 0, KDialog::spacingHint() ) )->setAutoAdd(
true );
00553
00554
00555 d->widgetstack =
new QWidgetStack(
this,
"KPluginSelector Config Pages" );
00556 d->widgetstack->setFrameStyle( QFrame::Panel | QFrame::Sunken );
00557 d->widgetstack->setMinimumSize( 200, 200 );
00558
00559
QLabel * label =
new QLabel( i18n(
"(This plugin is not configurable)" ),
00560 d->widgetstack );
00561 (
new QVBoxLayout( label, 0, KDialog::spacingHint() ) )->setAutoAdd(
true );
00562 label->setAlignment( Qt::AlignCenter );
00563 label->setMinimumSize( 200, 200 );
00564
00565 d->widgetstack->addWidget( label, 1 );
00566
00567 configPage( 1 );
00568 }
00569
00570 KPluginSelector::~KPluginSelector()
00571 {
00572
delete d;
00573 }
00574
00575
void KPluginSelector::checkNeedForTabWidget()
00576 {
00577
kdDebug( 702 ) <<
k_funcinfo <<
endl;
00578
if( ! d->tabwidget && d->pswidgets.size() == 1 )
00579 {
00580
kdDebug( 702 ) <<
"no TabWidget and one KPluginSelectionWidget" <<
endl;
00581
00582
KPluginSelectionWidget * w = d->pswidgets.first();
00583
if( w )
00584 {
00585
kdDebug( 702 ) <<
"create TabWidget" <<
endl;
00586 d->tabwidget =
new KTabWidget( d->frame,
00587
"KPluginSelector TabWidget" );
00588 w->reparent( d->tabwidget,
QPoint( 0, 0 ) );
00589 d->tabwidget->addTab( w, w->
catName() );
00590 connect( d->tabwidget, SIGNAL( currentChanged(
QWidget * ) ), w,
00591 SLOT( tabWidgetChanged(
QWidget * ) ) );
00592 }
00593 }
00594 }
00595
00596 void KPluginSelector::addPlugins(
const QString & instanceName,
00597
const QString & catname,
const QString & category,
KConfig * config )
00598 {
00599 checkNeedForTabWidget();
00600
00601
KConfigGroup * cfgGroup =
new KConfigGroup( config ? config :
00602
new KSimpleConfig( instanceName ),
"KParts Plugins" );
00603
kdDebug( 702 ) <<
k_funcinfo <<
"cfgGroup = " << cfgGroup <<
endl;
00604
KPluginSelectionWidget * w;
00605
if( d->tabwidget )
00606 {
00607 w =
new KPluginSelectionWidget( instanceName,
this,
00608 d->tabwidget, catname, category, cfgGroup );
00609 d->tabwidget->addTab( w, catname );
00610 connect( d->tabwidget, SIGNAL( currentChanged(
QWidget * ) ), w,
00611 SLOT( tabWidgetChanged(
QWidget * ) ) );
00612 }
00613
else
00614 w =
new KPluginSelectionWidget( instanceName,
this, d->frame,
00615 catname, category, cfgGroup );
00616 w->setMinimumSize( 200, 200 );
00617 connect( w, SIGNAL(
changed(
bool ) ),
this, SIGNAL(
changed(
bool ) ) );
00618 connect( w, SIGNAL(
configCommitted(
const QCString & ) ),
this,
00619 SIGNAL(
configCommitted(
const QCString & ) ) );
00620 d->pswidgets += w;
00621 }
00622
00623 void KPluginSelector::addPlugins(
const KInstance * instance,
const QString &
00624 catname,
const QString & category,
KConfig * config )
00625 {
00626
addPlugins( instance->
instanceName(), catname, category, config );
00627 }
00628
00629 void KPluginSelector::addPlugins(
const QValueList<KPluginInfo*> & plugininfos,
00630
const QString & catname,
const QString & category,
KConfig * config )
00631 {
00632 checkNeedForTabWidget();
00633
KConfigGroup * cfgGroup =
new KConfigGroup( config ? config : KGlobal::config(),
"Plugins" );
00634
kdDebug( 702 ) <<
k_funcinfo <<
"cfgGroup = " << cfgGroup <<
endl;
00635
KPluginSelectionWidget * w;
00636
if( d->tabwidget )
00637 {
00638 w =
new KPluginSelectionWidget( plugininfos,
this,
00639 d->tabwidget, catname, category, cfgGroup );
00640 d->tabwidget->addTab( w, catname );
00641 connect( d->tabwidget, SIGNAL( currentChanged(
QWidget * ) ), w,
00642 SLOT( tabWidgetChanged(
QWidget * ) ) );
00643 }
00644
else
00645 w =
new KPluginSelectionWidget( plugininfos,
this, d->frame,
00646 catname, category, cfgGroup );
00647 w->setMinimumSize( 200, 200 );
00648 connect( w, SIGNAL(
changed(
bool ) ),
this, SIGNAL(
changed(
bool ) ) );
00649 connect( w, SIGNAL(
configCommitted(
const QCString & ) ),
this,
00650 SIGNAL(
configCommitted(
const QCString & ) ) );
00651 d->pswidgets += w;
00652 }
00653
00654
QWidgetStack * KPluginSelector::widgetStack()
00655 {
00656
return d->widgetstack;
00657 }
00658
00659
inline void KPluginSelector::configPage(
int id )
00660 {
00661
if(
id == 1 )
00662 {
00663
00664
if( d->hideconfigpage )
00665 {
00666 d->widgetstack->hide();
00667
return;
00668 }
00669 }
00670
else
00671 d->widgetstack->show();
00672
00673 d->widgetstack->raiseWidget(
id );
00674 }
00675
00676 void KPluginSelector::setShowEmptyConfigPage(
bool show )
00677 {
00678 d->hideconfigpage = !show;
00679
if( d->hideconfigpage )
00680
if( d->widgetstack->id( d->widgetstack->visibleWidget() ) == 1 )
00681 d->widgetstack->hide();
00682 }
00683
00684 void KPluginSelector::load()
00685 {
00686
for(
QValueList<KPluginSelectionWidget *>::Iterator it =
00687 d->pswidgets.begin(); it != d->pswidgets.end(); ++it )
00688 {
00689 ( *it )->load();
00690 }
00691 }
00692
00693 void KPluginSelector::save()
00694 {
00695
for(
QValueList<KPluginSelectionWidget *>::Iterator it =
00696 d->pswidgets.begin(); it != d->pswidgets.end(); ++it )
00697 {
00698 ( *it )->save();
00699 }
00700 }
00701
00702 void KPluginSelector::defaults()
00703 {
00704
kdDebug( 702 ) <<
k_funcinfo <<
endl;
00705
00706
00707
00708
00709
00710
00711
00712
00713
QWidget * pluginconfig = d->widgetstack->visibleWidget();
00714 KCModuleProxy * kcm = ( KCModuleProxy* )pluginconfig->qt_cast(
00715
"KCModuleProxy" );
00716
if( kcm )
00717 {
00718
kdDebug( 702 ) <<
"call KCModule::defaults() for the plugins KCM"
00719 <<
endl;
00720 kcm->defaults();
00721
return;
00722 }
00723
00724
00725
00726
QObjectList * kcms = pluginconfig->queryList(
"KCModuleProxy",
00727 0,
false,
false );
00728 QObjectListIt it( *kcms );
00729
QObject * obj;
00730
while( ( obj = it.current() ) != 0 )
00731 {
00732 ++it;
00733 ( (
KCModule* )obj )->defaults();
00734 }
00735
delete kcms;
00736
00737 }
00738
00739
00740
00741
#include "kpluginselector.moc"
00742
#include "kpluginselector_p.moc"