diff options
Diffstat (limited to 'kutils/ksettings/componentsdialog.cpp')
-rw-r--r-- | kutils/ksettings/componentsdialog.cpp | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/kutils/ksettings/componentsdialog.cpp b/kutils/ksettings/componentsdialog.cpp new file mode 100644 index 000000000..5093af985 --- /dev/null +++ b/kutils/ksettings/componentsdialog.cpp @@ -0,0 +1,180 @@ +/* This file is part of the KDE project + Copyright (C) 2003 Matthias Kretz <kretz@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + +*/ + +#include "ksettings/componentsdialog.h" +#include <klocale.h> +#include <qlayout.h> +#include <klistview.h> +#include <qlabel.h> +#include <qheader.h> +#include <kplugininfo.h> +#include <kiconloader.h> +#include <kdebug.h> +#include <kconfig.h> +#include <kseparator.h> + +namespace KSettings +{ + +class ComponentsDialog::ComponentsDialogPrivate +{ + public: + KListView * listview; + QFrame * infowidget; + QLabel * iconwidget; + QLabel * commentwidget; + QLabel * descriptionwidget; + QMap<QCheckListItem*, KPluginInfo*> plugininfomap; + QValueList<KPluginInfo*> plugininfolist; +}; + +ComponentsDialog::ComponentsDialog( QWidget * parent, const char * name ) + : KDialogBase( parent, name, false, i18n( "Select Components" ) ) +, d( new ComponentsDialogPrivate ) +{ + QWidget * page = new QWidget( this ); + setMainWidget( page ); + ( new QHBoxLayout( page, 0, KDialog::spacingHint() ) )->setAutoAdd( true ); + d->listview = new KListView( page ); + d->listview->setMinimumSize( 200, 200 ); + d->infowidget = new QFrame( page ); + d->infowidget->setMinimumSize( 200, 200 ); + ( new QVBoxLayout( d->infowidget, 0, KDialog::spacingHint() ) )->setAutoAdd( true ); + d->iconwidget = new QLabel( d->infowidget ); + ( void )new KSeparator( d->infowidget ); + d->commentwidget = new QLabel( d->infowidget ); + d->commentwidget->setAlignment( Qt::WordBreak ); + d->descriptionwidget = new QLabel( d->infowidget ); + d->descriptionwidget->setAlignment( Qt::WordBreak ); + + d->listview->addColumn( QString::null ); + d->listview->header()->hide(); + d->listview->setRootIsDecorated( true ); + d->listview->setSorting( -1 ); + d->listview->setAcceptDrops( false ); + d->listview->setSelectionModeExt( KListView::Single ); + d->listview->setAllColumnsShowFocus( true ); + + connect( d->listview, SIGNAL( pressed( QListViewItem * ) ), this, + SLOT( executed( QListViewItem * ) ) ); + connect( d->listview, SIGNAL( spacePressed( QListViewItem * ) ), this, + SLOT( executed( QListViewItem * ) ) ); + connect( d->listview, SIGNAL( returnPressed( QListViewItem * ) ), this, + SLOT( executed( QListViewItem * ) ) ); + connect( d->listview, SIGNAL( selectionChanged( QListViewItem * ) ), this, + SLOT( executed( QListViewItem * ) ) ); +} + +ComponentsDialog::~ComponentsDialog() +{ +} + +void ComponentsDialog::addPluginInfo( KPluginInfo * info ) +{ + d->plugininfolist.append( info ); +} + +void ComponentsDialog::setPluginInfos( const QMap<QString, KPluginInfo*> & + plugininfos ) +{ + for( QMap<QString, KPluginInfo*>::ConstIterator it = plugininfos.begin(); + it != plugininfos.end(); ++it ) + { + d->plugininfolist.append( it.data() ); + } +} + +void ComponentsDialog::setPluginInfos( const QValueList<KPluginInfo *> &plugins ) +{ + d->plugininfolist = plugins; +} + +void ComponentsDialog::show() +{ + // clear the treelist + d->listview->clear(); + d->plugininfomap.clear(); + + // construct the treelist + for( QValueList<KPluginInfo*>::ConstIterator it = d->plugininfolist.begin(); + it != d->plugininfolist.end(); ++it ) + { + ( *it )->load(); + QCheckListItem * item = new QCheckListItem( d->listview, ( *it )->name(), + QCheckListItem::CheckBox ); + if( ! ( *it )->icon().isEmpty() ) + item->setPixmap( 0, SmallIcon( ( *it )->icon(), IconSize( KIcon::Small ) ) ); + item->setOn( ( *it )->isPluginEnabled() ); + d->plugininfomap[ item ] = ( *it ); + } + KDialogBase::show(); +} + +void ComponentsDialog::executed( QListViewItem * item ) +{ + kdDebug( 704 ) << k_funcinfo << endl; + if( item == 0 ) + return; + if( item->rtti() != 1 ) // check for QCheckListItem + return; + + QCheckListItem * citem = static_cast<QCheckListItem *>( item ); + bool checked = citem->isOn(); + + kdDebug( 704 ) << "it's a " << ( checked ? "checked" : "unchecked" ) + << " QCheckListItem" << endl; + + KPluginInfo * info = d->plugininfomap[ citem ]; + info->setPluginEnabled( checked ); + //checkDependencies( info ); + // show info about the component on the right + d->iconwidget->setPixmap( SmallIcon( info->icon(), KIcon::SizeLarge ) ); + d->commentwidget->setText( info->comment() ); + //d->descriptionwidget->setText( info->description() ); +} + +void ComponentsDialog::savePluginInfos() +{ + for( QValueList<KPluginInfo*>::ConstIterator it = d->plugininfolist.begin(); + it != d->plugininfolist.end(); ++it ) + { + if( ( *it )->config() ) + { + ( *it )->save(); + ( *it )->config()->sync(); + } + } +} + +void ComponentsDialog::slotOk() +{ + savePluginInfos(); + KDialogBase::slotOk(); +} + +void ComponentsDialog::slotApply() +{ + savePluginInfos(); + KDialogBase::slotApply(); +} + +} //namespace + +#include "componentsdialog.moc" +// vim: sw=4 sts=4 et |