summaryrefslogtreecommitdiffabout
path: root/kaddressbook/kcmconfigs
authorzautrix <zautrix>2004-06-26 19:01:18 (UTC)
committer zautrix <zautrix>2004-06-26 19:01:18 (UTC)
commitb9aad1f15dc600e4dbe4c62d3fcced6363188ba3 (patch) (side-by-side diff)
tree2c3d4004fb21c72cba65793859f9bcd8ffd3a49c /kaddressbook/kcmconfigs
downloadkdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.zip
kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.tar.gz
kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.tar.bz2
Initial revision
Diffstat (limited to 'kaddressbook/kcmconfigs') (more/less context) (show whitespace changes)
-rw-r--r--kaddressbook/kcmconfigs/addresseewidget.cpp236
-rw-r--r--kaddressbook/kcmconfigs/addresseewidget.h87
-rw-r--r--kaddressbook/kcmconfigs/extensionconfigdialog.cpp59
-rw-r--r--kaddressbook/kcmconfigs/extensionconfigdialog.h48
-rw-r--r--kaddressbook/kcmconfigs/kabconfigwidget.cpp357
-rw-r--r--kaddressbook/kcmconfigs/kabconfigwidget.h72
-rw-r--r--kaddressbook/kcmconfigs/kcmkabconfig.cpp86
-rw-r--r--kaddressbook/kcmconfigs/kcmkabconfig.h53
8 files changed, 998 insertions, 0 deletions
diff --git a/kaddressbook/kcmconfigs/addresseewidget.cpp b/kaddressbook/kcmconfigs/addresseewidget.cpp
new file mode 100644
index 0000000..0f3c353
--- a/dev/null
+++ b/kaddressbook/kcmconfigs/addresseewidget.cpp
@@ -0,0 +1,236 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#include <qgroupbox.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qlistbox.h>
+#include <qpushbutton.h>
+
+#include <kbuttonbox.h>
+#include <kcombobox.h>
+#include <kconfig.h>
+#include <kdialog.h>
+#include <klocale.h>
+#include <kglobal.h>
+#include <klineedit.h>
+#include <kstandarddirs.h>
+
+#include "addresseewidget.h"
+
+NamePartWidget::NamePartWidget( const QString &title, QWidget *parent,
+ const char *name )
+ : QWidget( parent, name )
+{
+ if (KGlobal::getOrientation() == KGlobal::Portrait)
+ {
+ QGridLayout* layout = new QGridLayout( this, 1, 1, KDialog::marginHintSmall(),
+ KDialog::spacingHintSmall() );
+
+ QLabel *label = new QLabel( i18n( title ), this );
+ layout->addWidget( label, 0, 1 );
+
+ mBox = new QListBox( this );
+ mBox->setMaximumSize(70, 70);
+ layout->addMultiCellWidget( mBox, 0, 1, 0, 0 );
+
+ KButtonBox *bbox = new KButtonBox( this, Qt::Vertical );
+ mAddButton = bbox->addButton( i18n( "Add" ), this, SLOT( add() ) );
+ mRemoveButton = bbox->addButton( i18n( "Rem" ), this, SLOT( remove() ) );
+ bbox->layout();
+ layout->addMultiCellWidget( bbox, 0, 2, 2,2);
+
+ mEdit = new KLineEdit( this );
+ layout->addWidget( mEdit, 1, 1 );
+ //mEdit->setMinimumWidth(50);
+
+// layout->addWidget( group );
+
+ }
+ else
+ {
+ QHBoxLayout *layout = new QHBoxLayout( this );
+
+ QGroupBox *group = new QGroupBox( 0, Qt::Vertical, title, this );
+ QGridLayout *groupLayout = new QGridLayout( group->layout(), 2, 2,
+ KDialog::spacingHint() );
+
+ mBox = new QListBox( group );
+
+ groupLayout->addWidget( mBox, 0, 0 );
+
+ KButtonBox *bbox = new KButtonBox( group, Qt::Vertical );
+ mAddButton = bbox->addButton( i18n( "Add" ), this, SLOT( add() ) );
+ mRemoveButton = bbox->addButton( i18n( "Remove" ), this, SLOT( remove() ) );
+ bbox->layout();
+ groupLayout->addWidget( bbox, 0, 1 );
+
+ mEdit = new KLineEdit( group );
+ groupLayout->addMultiCellWidget( mEdit, 1, 1, 0, 1 );
+
+ layout->addWidget( group );
+
+ }
+
+ mAddButton->setEnabled( false );
+ mRemoveButton->setEnabled( false );
+
+
+ connect( mBox, SIGNAL( selectionChanged( QListBoxItem* ) ),
+ SLOT( selectionChanged( QListBoxItem* ) ) );
+ connect( mEdit, SIGNAL( textChanged( const QString& ) ),
+ SLOT( textChanged( const QString& ) ) );
+ connect( mEdit, SIGNAL( returnPressed() ), SLOT( add() ) );
+
+}
+
+NamePartWidget::~NamePartWidget()
+{
+}
+
+void NamePartWidget::setNameParts( const QStringList &list )
+{
+ mBox->clear();
+ mBox->insertStringList( list );
+}
+
+QStringList NamePartWidget::nameParts() const
+{
+ QStringList parts;
+ for ( uint i = 0; i < mBox->count(); ++i )
+ parts.append( mBox->text( i ) );
+
+ return parts;
+}
+
+void NamePartWidget::add()
+{
+ if ( !mEdit->text().isEmpty() ) {
+ mBox->insertItem( mEdit->text() );
+ emit modified();
+ }
+
+ mEdit->setText( "" );
+}
+
+void NamePartWidget::remove()
+{
+ mBox->removeItem( mBox->currentItem() );
+ if ( mBox->count() == 0 )
+ selectionChanged( 0 );
+
+ emit modified();
+}
+
+void NamePartWidget::selectionChanged( QListBoxItem *item )
+{
+ mRemoveButton->setEnabled( item != 0 );
+}
+
+void NamePartWidget::textChanged( const QString& text )
+{
+ mAddButton->setEnabled( !text.isEmpty() );
+}
+
+
+AddresseeWidget::AddresseeWidget( QWidget *parent, const char *name )
+ : QWidget( parent, name )
+{
+ QGridLayout *layout;
+
+ mPrefix = new NamePartWidget( i18n( "Prefixes" ), this );
+ mInclusion = new NamePartWidget( i18n( "Inclusions" ), this );
+ mSuffix = new NamePartWidget( i18n( "Suffixes" ), this );
+ QLabel *label = new QLabel( i18n( "Default formatted name:" ), this );
+
+ mFormattedNameCombo = new KComboBox( this );
+ mFormattedNameCombo->insertItem( i18n( "Empty" ) );
+ mFormattedNameCombo->insertItem( i18n( "Simple Name" ) );
+ mFormattedNameCombo->insertItem( i18n( "Full Name" ) );
+ mFormattedNameCombo->insertItem( i18n( "Reverse Name" ) );
+
+ if (KGlobal::getOrientation() == KGlobal::Portrait)
+ {
+ layout = new QGridLayout( this, 4, 2, KDialog::marginHint(),
+ KDialog::spacingHint() );
+
+ layout->addMultiCellWidget( mPrefix, 0, 0, 0, 1 );
+ layout->addMultiCellWidget( mInclusion, 1, 1, 0, 1 );
+ layout->addMultiCellWidget( mSuffix, 2, 2, 0, 1 );
+ layout->addWidget( label, 3, 0 );
+ layout->addWidget( mFormattedNameCombo, 3, 1 );
+
+ }
+ else
+ {
+ layout = new QGridLayout( this, 2, 3, KDialog::marginHint(),
+ KDialog::spacingHint() );
+
+ layout->addWidget( mPrefix, 0, 0 );
+ layout->addWidget( mInclusion, 0, 1 );
+ layout->addWidget( mSuffix, 0, 2 );
+ layout->addWidget( label, 1, 0 );
+ layout->addMultiCellWidget( mFormattedNameCombo, 1, 1, 1, 2 );
+ }
+
+ connect( mPrefix, SIGNAL( modified() ), SIGNAL( modified() ) );
+ connect( mInclusion, SIGNAL( modified() ), SIGNAL( modified() ) );
+ connect( mSuffix, SIGNAL( modified() ), SIGNAL( modified() ) );
+ connect( mFormattedNameCombo, SIGNAL( activated( int ) ), SIGNAL( modified() ) );
+}
+
+AddresseeWidget::~AddresseeWidget()
+{
+}
+
+void AddresseeWidget::restoreSettings()
+{
+ KConfig config( locateLocal("config", "kabcrc") );
+ config.setGroup( "General" );
+
+ mPrefix->setNameParts( config.readListEntry( "Prefixes" ) );
+ mInclusion->setNameParts( config.readListEntry( "Inclusions" ) );
+ mSuffix->setNameParts( config.readListEntry( "Suffixes" ) );
+
+ KConfig cfg( locateLocal("config","kaddressbookrc") );
+ cfg.setGroup( "General" );
+ mFormattedNameCombo->setCurrentItem( cfg.readNumEntry( "FormattedNameType", 1 ) );
+}
+
+void AddresseeWidget::saveSettings()
+{
+ KConfig config( locateLocal("config","kabcrc") );
+ config.setGroup( "General" );
+
+ config.writeEntry( "Prefixes", mPrefix->nameParts() );
+ config.writeEntry( "Inclusions", mInclusion->nameParts() );
+ config.writeEntry( "Suffixes", mSuffix->nameParts() );
+
+ KConfig cfg( locateLocal("config","kaddressbookrc") );
+ cfg.setGroup( "General" );
+ cfg.writeEntry( "FormattedNameType", mFormattedNameCombo->currentItem() );
+}
+
+#ifndef KAB_EMBEDDED
+#include "addresseewidget.moc"
+#endif //KAB_EMBEDDED
diff --git a/kaddressbook/kcmconfigs/addresseewidget.h b/kaddressbook/kcmconfigs/addresseewidget.h
new file mode 100644
index 0000000..09330c8
--- a/dev/null
+++ b/kaddressbook/kcmconfigs/addresseewidget.h
@@ -0,0 +1,87 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#ifndef ADDRESSEEWIDGET_H
+#define ADDRESSEEWIDGET_H
+
+#include <qwidget.h>
+
+class KComboBox;
+class KLineEdit;
+
+class QListBox;
+class QListBoxItem;
+class QPushButton;
+
+class NamePartWidget : public QWidget
+{
+ Q_OBJECT
+
+ public:
+ NamePartWidget( const QString &title, QWidget *parent,
+ const char *name = 0 );
+ ~NamePartWidget();
+
+ void setNameParts( const QStringList &list );
+ QStringList nameParts() const;
+
+ signals:
+ void modified();
+
+ private slots:
+ void add();
+ void remove();
+
+ void selectionChanged( QListBoxItem* );
+ void textChanged( const QString& );
+
+ private:
+ KLineEdit *mEdit;
+
+ QListBox *mBox;
+ QPushButton *mAddButton;
+ QPushButton *mRemoveButton;
+};
+
+class AddresseeWidget : public QWidget
+{
+ Q_OBJECT
+
+ public:
+ AddresseeWidget( QWidget *parent, const char *name = 0 );
+ ~AddresseeWidget();
+
+ void restoreSettings();
+ void saveSettings();
+
+ signals:
+ void modified();
+
+ private:
+ KComboBox *mFormattedNameCombo;
+ NamePartWidget *mPrefix;
+ NamePartWidget *mInclusion;
+ NamePartWidget *mSuffix;
+};
+
+#endif
diff --git a/kaddressbook/kcmconfigs/extensionconfigdialog.cpp b/kaddressbook/kcmconfigs/extensionconfigdialog.cpp
new file mode 100644
index 0000000..e87b000
--- a/dev/null
+++ b/kaddressbook/kcmconfigs/extensionconfigdialog.cpp
@@ -0,0 +1,59 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#include <qlayout.h>
+
+#include <klocale.h>
+
+#include "configurewidget.h"
+
+#include "extensionconfigdialog.h"
+
+ExtensionConfigDialog::ExtensionConfigDialog( ExtensionFactory *factory, KConfig *config,
+ QWidget *parent, const char *name )
+ : KDialogBase( Plain, i18n( "Extension Settings" ), Ok | Cancel, Ok, parent,
+ name, true, true ), mWidget( 0 ), mConfig( config )
+{
+ QFrame *page = plainPage();
+ QGridLayout *layout = new QGridLayout( page, 1, 1, marginHint(), spacingHint() );
+
+ mWidget = factory->configureWidget( page, "ExtensionConfigWidget" );
+ layout->addWidget( mWidget, 0, 0 );
+
+ mWidget->restoreSettings( mConfig );
+}
+
+ExtensionConfigDialog::~ExtensionConfigDialog()
+{
+}
+
+void ExtensionConfigDialog::slotOk()
+{
+ mWidget->saveSettings( mConfig );
+
+ KDialogBase::slotOk();
+}
+
+#ifndef KAB_EMBEDDED
+#include "extensionconfigdialog.moc"
+#endif //KAB_EMBEDDED
diff --git a/kaddressbook/kcmconfigs/extensionconfigdialog.h b/kaddressbook/kcmconfigs/extensionconfigdialog.h
new file mode 100644
index 0000000..5a92034
--- a/dev/null
+++ b/kaddressbook/kcmconfigs/extensionconfigdialog.h
@@ -0,0 +1,48 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#ifndef EXTENSIONCONFIGDIALOG_H
+#define EXTENSIONCONFIGDIALOG_H
+
+#include <kdialogbase.h>
+
+#include "extensionwidget.h"
+
+class ExtensionConfigDialog : public KDialogBase
+{
+ Q_OBJECT
+
+ public:
+ ExtensionConfigDialog( ExtensionFactory *factory, KConfig *config,
+ QWidget *parent, const char *name = 0 );
+ ~ExtensionConfigDialog();
+
+ protected slots:
+ void slotOk();
+
+ private:
+ ConfigureWidget *mWidget;
+ KConfig *mConfig;
+};
+
+#endif
diff --git a/kaddressbook/kcmconfigs/kabconfigwidget.cpp b/kaddressbook/kcmconfigs/kabconfigwidget.cpp
new file mode 100644
index 0000000..7b3e5c6
--- a/dev/null
+++ b/kaddressbook/kcmconfigs/kabconfigwidget.cpp
@@ -0,0 +1,357 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#include <qcheckbox.h>
+#include <qframe.h>
+#include <qgroupbox.h>
+#include <qlayout.h>
+#include <qpushbutton.h>
+#include <qtabwidget.h>
+
+#include <kconfig.h>
+#include <kdebug.h>
+#include <kdialog.h>
+#include <klistview.h>
+#include <klocale.h>
+#include <kglobal.h>
+#include <kmessagebox.h>
+#include <kstandarddirs.h>
+
+#ifndef KAB_EMBEDDED
+#include <ktrader.h>
+#else // KAB_EMBEDDED
+#include <mergewidget.h>
+#include <distributionlistwidget.h>
+#endif // KAB_EMBEDDED
+
+#include "addresseewidget.h"
+#include "extensionconfigdialog.h"
+#include "extensionwidget.h"
+#include "kabprefs.h"
+
+#include "kabconfigwidget.h"
+
+class ExtensionItem : public QCheckListItem
+{
+ public:
+
+#ifndef KAB_EMBEDDED
+ ExtensionItem( QListView *parent, const QString &text );
+ void setService( const KService::Ptr &ptr );
+#else //KAB_EMBEDDED
+ ExtensionItem( QListView *parent, const QString &text, const QString &name, const QString &comment );
+ void setFactory( ExtensionFactory* fac );
+#endif //KAB_EMBEDDED
+
+ bool configWidgetAvailable() const;
+ ExtensionFactory *factory() const;
+
+ virtual QString text( int column ) const;
+
+ private:
+#ifndef KAB_EMBEDDED
+ KService::Ptr mPtr;
+#else //KAB_EMBEDDED
+ ExtensionFactory* mFactory;
+ QString mName;
+ QString mComment;
+
+#endif //KAB_EMBEDDED
+
+};
+
+KABConfigWidget::KABConfigWidget( QWidget *parent, const char *name )
+ : QWidget( parent, name )
+{
+ QVBoxLayout *topLayout = new QVBoxLayout( this, 0,
+ KDialog::spacingHint() );
+
+ QTabWidget *tabWidget = new QTabWidget( this );
+ topLayout->addWidget( tabWidget );
+
+ // General page
+ QWidget *generalPage = new QWidget( this );
+ QVBoxLayout *layout = new QVBoxLayout( generalPage, KDialog::marginHint(),
+ KDialog::spacingHint() );
+
+ QGroupBox *groupBox = new QGroupBox( 0, Qt::Vertical, i18n( "General" ), generalPage );
+ QVBoxLayout *boxLayout = new QVBoxLayout( groupBox->layout() );
+ boxLayout->setAlignment( Qt::AlignTop );
+
+ mViewsSingleClickBox = new QCheckBox( i18n( "Honor KDE single click" ), groupBox, "msingle" );
+ boxLayout->addWidget( mViewsSingleClickBox );
+
+ mNameParsing = new QCheckBox( i18n( "Automatic name parsing for new addressees" ), groupBox, "mparse" );
+ boxLayout->addWidget( mNameParsing );
+
+ layout->addWidget( groupBox );
+
+ groupBox = new QGroupBox( 0, Qt::Vertical, i18n( "Extensions" ), generalPage );
+ boxLayout = new QVBoxLayout( groupBox->layout() );
+ boxLayout->setAlignment( Qt::AlignTop );
+
+ mExtensionView = new KListView( groupBox );
+ mExtensionView->setAllColumnsShowFocus( true );
+ mExtensionView->addColumn( i18n( "Name" ) );
+ mExtensionView->addColumn( i18n( "Description" ) );
+ mExtensionView->setMaximumHeight(80);
+
+ boxLayout->addWidget( mExtensionView );
+
+ mConfigureButton = new QPushButton( i18n( "Configure..." ), groupBox );
+ mConfigureButton->setEnabled( false );
+ boxLayout->addWidget( mConfigureButton );
+
+ layout->addWidget( groupBox );
+
+ connect( mNameParsing, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) );
+ connect( mViewsSingleClickBox, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) );
+ connect( mExtensionView, SIGNAL( selectionChanged( QListViewItem* ) ),
+ SLOT( selectionChanged( QListViewItem* ) ) );
+ connect( mExtensionView, SIGNAL( clicked( QListViewItem* ) ),
+ SLOT( itemClicked( QListViewItem* ) ) );
+ connect( mConfigureButton, SIGNAL( clicked() ),
+ SLOT( configureExtension() ) );
+
+ tabWidget->addTab( generalPage, i18n( "General" ) );
+
+ // Addressee page
+ mAddresseeWidget = new AddresseeWidget( this );
+ tabWidget->addTab( mAddresseeWidget, i18n( "Contact" ) );
+ connect( mAddresseeWidget, SIGNAL( modified() ), SLOT( modified() ) );
+}
+
+void KABConfigWidget::restoreSettings()
+{
+ bool blocked = signalsBlocked();
+ blockSignals( true );
+
+ mNameParsing->setChecked( KABPrefs::instance()->mAutomaticNameParsing );
+ mViewsSingleClickBox->setChecked( KABPrefs::instance()->mHonorSingleClick );
+ mAddresseeWidget->restoreSettings();
+
+ restoreExtensionSettings();
+
+ blockSignals( blocked );
+
+ emit changed( false );
+}
+
+void KABConfigWidget::saveSettings()
+{
+ KABPrefs::instance()->mAutomaticNameParsing = mNameParsing->isChecked();
+ KABPrefs::instance()->mHonorSingleClick = mViewsSingleClickBox->isChecked();
+ mAddresseeWidget->saveSettings();
+
+ saveExtensionSettings();
+ KABPrefs::instance()->writeConfig();
+
+ emit changed( false );
+}
+
+void KABConfigWidget::defaults()
+{
+ mNameParsing->setChecked( true );
+ mViewsSingleClickBox->setChecked( false );
+
+ emit changed( true );
+}
+
+void KABConfigWidget::modified()
+{
+ emit changed( true );
+}
+
+void KABConfigWidget::restoreExtensionSettings()
+{
+ QStringList activeExtensions = KABPrefs::instance()->mActiveExtensions;
+
+ mExtensionView->clear();
+
+#ifndef KAB_EMBEDDED
+ KTrader::OfferList plugins = KTrader::self()->query( "KAddressBook/Extension" );
+ KTrader::OfferList::ConstIterator it;
+ for ( it = plugins.begin(); it != plugins.end(); ++it ) {
+ if ( !(*it)->hasServiceType( "KAddressBook/Extension" ) )
+ continue;
+
+ ExtensionItem *item = new ExtensionItem( mExtensionView, (*it)->name() );
+ item->setService( *it );
+ if ( activeExtensions.contains( item->factory()->identifier() ) )
+ item->setOn( true );
+ }
+#else //KAB_EMBEDDED
+ ExtensionFactory *extensionFactory = new MergeFactory();
+
+ ExtensionItem *item = new ExtensionItem( mExtensionView, "Merge", "Merge", "Merge contacts");
+
+ item->setFactory( extensionFactory );
+ if ( activeExtensions.contains( extensionFactory->identifier() ) )
+ item->setOn( true );
+
+
+
+ extensionFactory = new DistributionListFactory();
+
+ item = new ExtensionItem( mExtensionView, "Distribution List", "Distribution List", "Manage Distribution Lists");
+
+ item->setFactory( extensionFactory );
+ if ( activeExtensions.contains( extensionFactory->identifier() ) )
+ item->setOn( true );
+
+
+#endif //KAB_EMBEDDED
+
+}
+
+void KABConfigWidget::saveExtensionSettings()
+{
+ QStringList activeExtensions;
+
+ QPtrList<QListViewItem> list;
+ QListViewItemIterator it( mExtensionView );
+ while ( it.current() ) {
+ ExtensionItem *item = static_cast<ExtensionItem*>( it.current() );
+ if ( item ) {
+ if ( item->isOn() )
+ activeExtensions.append( item->factory()->identifier() );
+ }
+ ++it;
+ }
+
+ KABPrefs::instance()->mActiveExtensions = activeExtensions;
+}
+
+void KABConfigWidget::configureExtension()
+{
+ ExtensionItem *item = static_cast<ExtensionItem*>( mExtensionView->currentItem() );
+ if ( !item )
+ return;
+
+#ifndef KAB_EMBEDDED
+ KConfig config( "kaddressbookrc" );
+#else //KAB_EMBEDDED
+ KConfig config( locateLocal("config", "kaddressbookrc") );
+#endif //KAB_EMBEDDED
+ config.setGroup( QString( "Extensions_%1" ).arg( item->factory()->identifier() ) );
+
+ ExtensionConfigDialog dlg( item->factory(), &config, this );
+ dlg.exec();
+
+ config.sync();
+}
+
+void KABConfigWidget::selectionChanged( QListViewItem *i )
+{
+ ExtensionItem *item = static_cast<ExtensionItem*>( i );
+ if ( !item )
+ return;
+
+ mConfigureButton->setEnabled( item->configWidgetAvailable() );
+}
+
+void KABConfigWidget::itemClicked( QListViewItem *item )
+{
+ if ( item != 0 )
+ modified();
+}
+
+#ifndef KAB_EMBEDDED
+ExtensionItem::ExtensionItem( QListView *parent, const QString &text )
+ : QCheckListItem( parent, text, CheckBox )
+{
+}
+
+void ExtensionItem::setService( const KService::Ptr &ptr )
+{
+ mPtr = ptr;
+}
+#else //KAB_EMBEDDED
+ExtensionItem::ExtensionItem( QListView *parent, const QString &text, const QString &name, const QString &comment )
+ : QCheckListItem( parent, text, CheckBox )
+{
+ mName = name;
+ mComment = comment;
+}
+
+
+void ExtensionItem::setFactory( ExtensionFactory* fac )
+{
+ mFactory = fac;
+}
+#endif //KAB_EMBEDDED
+
+bool ExtensionItem::configWidgetAvailable() const
+{
+#ifndef KAB_EMBEDDED
+ KLibFactory *factory = KLibLoader::self()->factory( mPtr->library().latin1() );
+ if ( !factory )
+ return false;
+
+ ExtensionFactory *extensionFactory = static_cast<ExtensionFactory*>( factory );
+ if ( !extensionFactory )
+ return false;
+
+ return extensionFactory->configureWidgetAvailable();
+#else //KAB_EMBEDDED
+ return mFactory->configureWidgetAvailable();
+#endif //KAB_EMBEDDED
+
+}
+
+ExtensionFactory *ExtensionItem::factory() const
+{
+#ifndef KAB_EMBEDDED
+ KLibFactory *factory = KLibLoader::self()->factory( mPtr->library().latin1() );
+ if ( !factory )
+ return 0;
+
+ return static_cast<ExtensionFactory*>( factory );
+#else //KAB_EMBEDDED
+ return mFactory;
+#endif //KAB_EMBEDDED
+}
+
+QString ExtensionItem::text( int column ) const
+{
+#ifndef KAB_EMBEDDED
+ if ( column == 0 )
+ return mPtr->name();
+ else if ( column == 1 )
+ return mPtr->comment();
+ else
+ return QString::null;
+#else //KAB_EMBEDDED
+ if ( column == 0 )
+ return mName;
+ else if ( column == 1 )
+ return mComment;
+ else
+ return QString::null;
+#endif //KAB_EMBEDDED
+}
+
+#ifndef KAB_EMBEDDED
+#include "kabconfigwidget.moc"
+#endif //KAB_EMBEDDED
+
diff --git a/kaddressbook/kcmconfigs/kabconfigwidget.h b/kaddressbook/kcmconfigs/kabconfigwidget.h
new file mode 100644
index 0000000..0f36d9e
--- a/dev/null
+++ b/kaddressbook/kcmconfigs/kabconfigwidget.h
@@ -0,0 +1,72 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#ifndef KABCONFIGWIDGET_H
+#define KABCONFIGWIDGET_H
+
+#include <qwidget.h>
+
+class QCheckBox;
+class QListViewItem;
+class QPushButton;
+
+class KListView;
+
+class AddresseeWidget;
+
+class KABConfigWidget : public QWidget
+{
+ Q_OBJECT
+
+ public:
+ KABConfigWidget( QWidget *parent, const char *name = 0 );
+
+ void restoreSettings();
+ void saveSettings();
+ void defaults();
+
+ signals:
+ void changed( bool );
+
+ public slots:
+ void modified();
+
+ private slots:
+ void configureExtension();
+ void selectionChanged( QListViewItem* );
+ void itemClicked( QListViewItem* );
+
+ private:
+ void restoreExtensionSettings();
+ void saveExtensionSettings();
+
+ KListView *mExtensionView;
+
+ QCheckBox *mNameParsing;
+ QCheckBox *mViewsSingleClickBox;
+ QPushButton *mConfigureButton;
+
+ AddresseeWidget *mAddresseeWidget;
+};
+
+#endif
diff --git a/kaddressbook/kcmconfigs/kcmkabconfig.cpp b/kaddressbook/kcmconfigs/kcmkabconfig.cpp
new file mode 100644
index 0000000..791a940
--- a/dev/null
+++ b/kaddressbook/kcmconfigs/kcmkabconfig.cpp
@@ -0,0 +1,86 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#include <qlayout.h>
+
+#ifndef KAB_EMBEDDED
+#include <kaboutdata.h>
+#endif //KAB_EMBEDDED
+#include <kdebug.h>
+#include <klocale.h>
+
+#include "kabconfigwidget.h"
+
+#include "kcmkabconfig.h"
+
+extern "C"
+{
+ KCModule *create_kabconfig( QWidget *parent, const char * ) {
+ return new KCMKabConfig( parent, "kcmkabconfig" );
+ }
+}
+
+KCMKabConfig::KCMKabConfig( QWidget *parent, const char *name )
+ : KCModule( parent, name )
+{
+ QVBoxLayout *layout = new QVBoxLayout( this );
+ mConfigWidget = new KABConfigWidget( this, "mConfigWidget" );
+ layout->addWidget( mConfigWidget );
+
+ connect( mConfigWidget, SIGNAL( changed( bool ) ), SIGNAL( changed( bool ) ) );
+ load();
+}
+
+void KCMKabConfig::load()
+{
+ mConfigWidget->restoreSettings();
+}
+
+void KCMKabConfig::save()
+{
+ mConfigWidget->saveSettings();
+}
+
+void KCMKabConfig::defaults()
+{
+ mConfigWidget->defaults();
+}
+
+#ifndef KAB_EMBEDDED
+const KAboutData* KCMKabConfig::aboutData() const
+{
+ KAboutData *about = new KAboutData( I18N_NOOP( "kcmkabconfig" ),
+ I18N_NOOP( "KAddressBook Configure Dialog" ),
+ 0, 0, KAboutData::License_GPL,
+ I18N_NOOP( "(c), 2003 Tobias Koenig" ) );
+
+ about->addAuthor( "Tobias Koenig", 0, "tokoe@kde.org" );
+
+ return about;
+
+}
+#endif //KAB_EMBEDDED
+
+#ifndef KAB_EMBEDDED
+#include "kcmkabconfig.moc"
+#endif //KAB_EMBEDDED
diff --git a/kaddressbook/kcmconfigs/kcmkabconfig.h b/kaddressbook/kcmconfigs/kcmkabconfig.h
new file mode 100644
index 0000000..be345b8
--- a/dev/null
+++ b/kaddressbook/kcmconfigs/kcmkabconfig.h
@@ -0,0 +1,53 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#ifndef KCMKABCONFIG_H
+#define KCMKABCONFIG_H
+
+#include <kcmodule.h>
+
+class KABConfigWidget;
+
+#ifndef KAB_EMBEDDED
+class KAboutData;
+#endif //KAB_EMBEDDED
+
+class KCMKabConfig : public KCModule
+{
+ Q_OBJECT
+
+ public:
+ KCMKabConfig( QWidget *parent = 0, const char *name = 0 );
+
+ virtual void load();
+ virtual void save();
+ virtual void defaults();
+#ifndef KAB_EMBEDDED
+ virtual const KAboutData* aboutData() const;
+#endif //KAB_EMBEDDED
+
+ private:
+ KABConfigWidget *mConfigWidget;
+};
+
+#endif