kaddressbook Library API Documentation

kabconfigwidget.cpp

00001 /* 00002 This file is part of KAddressBook. 00003 Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> 00004 00005 This program is free software; you can redistribute it and/or modify 00006 it under the terms of the GNU General Public License as published by 00007 the Free Software Foundation; either version 2 of the License, or 00008 (at your option) any later version. 00009 00010 This program is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 GNU General Public License for more details. 00014 00015 You should have received a copy of the GNU General Public License 00016 along with this program; if not, write to the Free Software 00017 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00018 00019 As a special exception, permission is given to link this program 00020 with any edition of Qt, and distribute the resulting executable, 00021 without including the source code for Qt in the source distribution. 00022 */ 00023 00024 #include <qcheckbox.h> 00025 #include <qframe.h> 00026 #include <qgroupbox.h> 00027 #include <qlabel.h> 00028 #include <qlayout.h> 00029 #include <qlineedit.h> 00030 #include <qpushbutton.h> 00031 #include <qtabwidget.h> 00032 #include <qtooltip.h> 00033 00034 #include <kconfig.h> 00035 #include <kdebug.h> 00036 #include <kdialog.h> 00037 #include <klistview.h> 00038 #include <klocale.h> 00039 #include <kmessagebox.h> 00040 #include <ktrader.h> 00041 00042 #include "addresseewidget.h" 00043 #include "extensionconfigdialog.h" 00044 #include "extensionwidget.h" 00045 #include "kabprefs.h" 00046 00047 #include "kabconfigwidget.h" 00048 00049 class ExtensionItem : public QCheckListItem 00050 { 00051 public: 00052 ExtensionItem( QListView *parent, const QString &text ); 00053 00054 void setService( const KService::Ptr &ptr ); 00055 bool configWidgetAvailable() const; 00056 KAB::ExtensionFactory *factory() const; 00057 00058 virtual QString text( int column ) const; 00059 00060 private: 00061 KService::Ptr mPtr; 00062 }; 00063 00064 KABConfigWidget::KABConfigWidget( QWidget *parent, const char *name ) 00065 : QWidget( parent, name ) 00066 { 00067 QVBoxLayout *topLayout = new QVBoxLayout( this, 0, 00068 KDialog::spacingHint() ); 00069 00070 QTabWidget *tabWidget = new QTabWidget( this ); 00071 topLayout->addWidget( tabWidget ); 00072 00073 // General page 00074 QWidget *generalPage = new QWidget( this ); 00075 QVBoxLayout *layout = new QVBoxLayout( generalPage, KDialog::marginHint(), 00076 KDialog::spacingHint() ); 00077 00078 QGroupBox *groupBox = new QGroupBox( 0, Qt::Vertical, i18n( "General" ), generalPage ); 00079 QBoxLayout *boxLayout = new QVBoxLayout( groupBox->layout() ); 00080 boxLayout->setAlignment( Qt::AlignTop ); 00081 00082 mViewsSingleClickBox = new QCheckBox( i18n( "Honor KDE single click" ), groupBox, "msingle" ); 00083 boxLayout->addWidget( mViewsSingleClickBox ); 00084 00085 mNameParsing = new QCheckBox( i18n( "Automatic name parsing for new addressees" ), groupBox, "mparse" ); 00086 boxLayout->addWidget( mNameParsing ); 00087 00088 layout->addWidget( groupBox ); 00089 00090 groupBox = new QGroupBox( 0, Qt::Vertical, i18n( "Script-Hooks" ), generalPage ); 00091 QGridLayout *grid = new QGridLayout( groupBox->layout(), 2, 2, 00092 KDialog::spacingHint() ); 00093 QLabel *label = new QLabel( i18n( "Phone:" ), groupBox ); 00094 grid->addWidget( label, 0, 0 ); 00095 00096 mPhoneHook = new QLineEdit( groupBox ); 00097 QToolTip::add( mPhoneHook, i18n( "<ul><li>%N: Phone Number</li></ul>" ) ); 00098 grid->addWidget( mPhoneHook, 0, 1 ); 00099 00100 label = new QLabel( i18n( "Fax:" ), groupBox ); 00101 grid->addWidget( label, 1, 0 ); 00102 00103 mFaxHook = new QLineEdit( groupBox ); 00104 QToolTip::add( mFaxHook, i18n( "<ul><li>%N: Fax Number</li></ul>" ) ); 00105 grid->addWidget( mFaxHook, 1, 1 ); 00106 grid->setColStretch( 1, 1 ); 00107 00108 layout->addWidget( groupBox ); 00109 00110 groupBox = new QGroupBox( 0, Qt::Vertical, i18n( "Extensions" ), generalPage ); 00111 boxLayout = new QVBoxLayout( groupBox->layout() ); 00112 boxLayout->setAlignment( Qt::AlignTop ); 00113 00114 mExtensionView = new KListView( groupBox ); 00115 mExtensionView->setAllColumnsShowFocus( true ); 00116 mExtensionView->addColumn( i18n( "Name" ) ); 00117 mExtensionView->addColumn( i18n( "Description" ) ); 00118 boxLayout->addWidget( mExtensionView ); 00119 connect( mExtensionView, SIGNAL(doubleClicked ( QListViewItem *)), this, SLOT(configureExtension(QListViewItem *))); 00120 mConfigureButton = new QPushButton( i18n( "Configure..." ), groupBox ); 00121 mConfigureButton->setEnabled( false ); 00122 boxLayout->addWidget( mConfigureButton ); 00123 00124 layout->addWidget( groupBox ); 00125 00126 connect( mNameParsing, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) ); 00127 connect( mViewsSingleClickBox, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) ); 00128 connect( mPhoneHook, SIGNAL( textChanged( const QString& ) ), this, SLOT( modified() ) ); 00129 connect( mFaxHook, SIGNAL( textChanged( const QString& ) ), this, SLOT( modified() ) ); 00130 connect( mExtensionView, SIGNAL( selectionChanged( QListViewItem* ) ), 00131 SLOT( selectionChanged( QListViewItem* ) ) ); 00132 connect( mExtensionView, SIGNAL( clicked( QListViewItem* ) ), 00133 SLOT( itemClicked( QListViewItem* ) ) ); 00134 connect( mConfigureButton, SIGNAL( clicked() ), 00135 SLOT( configureExtension() ) ); 00136 00137 tabWidget->addTab( generalPage, i18n( "General" ) ); 00138 00139 // Addressee page 00140 mAddresseeWidget = new AddresseeWidget( this ); 00141 tabWidget->addTab( mAddresseeWidget, i18n( "Contact" ) ); 00142 connect( mAddresseeWidget, SIGNAL( modified() ), SLOT( modified() ) ); 00143 } 00144 00145 void KABConfigWidget::configureExtension(QListViewItem *i) 00146 { 00147 ExtensionItem *item = static_cast<ExtensionItem*>( i ); 00148 if ( !item ) 00149 return; 00150 if ( item->configWidgetAvailable() ) 00151 configureExtension(); 00152 } 00153 00154 void KABConfigWidget::restoreSettings() 00155 { 00156 bool blocked = signalsBlocked(); 00157 blockSignals( true ); 00158 00159 mNameParsing->setChecked( KABPrefs::instance()->mAutomaticNameParsing ); 00160 mViewsSingleClickBox->setChecked( KABPrefs::instance()->mHonorSingleClick ); 00161 mPhoneHook->setText( KABPrefs::instance()->mPhoneHookApplication ); 00162 mFaxHook->setText( KABPrefs::instance()->mFaxHookApplication ); 00163 mAddresseeWidget->restoreSettings(); 00164 00165 restoreExtensionSettings(); 00166 00167 blockSignals( blocked ); 00168 00169 emit changed( false ); 00170 } 00171 00172 void KABConfigWidget::saveSettings() 00173 { 00174 KABPrefs::instance()->mAutomaticNameParsing = mNameParsing->isChecked(); 00175 KABPrefs::instance()->mHonorSingleClick = mViewsSingleClickBox->isChecked(); 00176 KABPrefs::instance()->mPhoneHookApplication = mPhoneHook->text(); 00177 KABPrefs::instance()->mFaxHookApplication = mFaxHook->text(); 00178 mAddresseeWidget->saveSettings(); 00179 00180 saveExtensionSettings(); 00181 KABPrefs::instance()->writeConfig(); 00182 00183 emit changed( false ); 00184 } 00185 00186 void KABConfigWidget::defaults() 00187 { 00188 mNameParsing->setChecked( true ); 00189 mViewsSingleClickBox->setChecked( false ); 00190 00191 emit changed( true ); 00192 } 00193 00194 void KABConfigWidget::modified() 00195 { 00196 emit changed( true ); 00197 } 00198 00199 void KABConfigWidget::restoreExtensionSettings() 00200 { 00201 QStringList activeExtensions = KABPrefs::instance()->mActiveExtensions; 00202 00203 mExtensionView->clear(); 00204 00205 KTrader::OfferList plugins = KTrader::self()->query( "KAddressBook/Extension" ); 00206 KTrader::OfferList::ConstIterator it; 00207 for ( it = plugins.begin(); it != plugins.end(); ++it ) { 00208 if ( !(*it)->hasServiceType( "KAddressBook/Extension" ) ) 00209 continue; 00210 00211 ExtensionItem *item = new ExtensionItem( mExtensionView, (*it)->name() ); 00212 item->setService( *it ); 00213 if ( activeExtensions.contains( item->factory()->identifier() ) ) 00214 item->setOn( true ); 00215 } 00216 } 00217 00218 void KABConfigWidget::saveExtensionSettings() 00219 { 00220 QStringList activeExtensions; 00221 00222 QPtrList<QListViewItem> list; 00223 QListViewItemIterator it( mExtensionView ); 00224 while ( it.current() ) { 00225 ExtensionItem *item = static_cast<ExtensionItem*>( it.current() ); 00226 if ( item ) { 00227 if ( item->isOn() ) 00228 activeExtensions.append( item->factory()->identifier() ); 00229 } 00230 ++it; 00231 } 00232 00233 KABPrefs::instance()->mActiveExtensions = activeExtensions; 00234 } 00235 00236 void KABConfigWidget::configureExtension() 00237 { 00238 ExtensionItem *item = static_cast<ExtensionItem*>( mExtensionView->currentItem() ); 00239 if ( !item ) 00240 return; 00241 00242 KConfig config( "kaddressbookrc" ); 00243 config.setGroup( QString( "Extensions_%1" ).arg( item->factory()->identifier() ) ); 00244 00245 ExtensionConfigDialog dlg( item->factory(), &config, this ); 00246 dlg.exec(); 00247 00248 config.sync(); 00249 } 00250 00251 void KABConfigWidget::selectionChanged( QListViewItem *i ) 00252 { 00253 ExtensionItem *item = static_cast<ExtensionItem*>( i ); 00254 if ( !item ) 00255 return; 00256 00257 mConfigureButton->setEnabled( item->configWidgetAvailable() ); 00258 } 00259 00260 void KABConfigWidget::itemClicked( QListViewItem *item ) 00261 { 00262 if ( item != 0 ) 00263 modified(); 00264 } 00265 00266 00267 00268 ExtensionItem::ExtensionItem( QListView *parent, const QString &text ) 00269 : QCheckListItem( parent, text, CheckBox ) 00270 { 00271 } 00272 00273 void ExtensionItem::setService( const KService::Ptr &ptr ) 00274 { 00275 mPtr = ptr; 00276 } 00277 00278 bool ExtensionItem::configWidgetAvailable() const 00279 { 00280 KLibFactory *factory = KLibLoader::self()->factory( mPtr->library().latin1() ); 00281 if ( !factory ) 00282 return false; 00283 00284 KAB::ExtensionFactory *extensionFactory = static_cast<KAB::ExtensionFactory*>( factory ); 00285 if ( !extensionFactory ) 00286 return false; 00287 00288 return extensionFactory->configureWidgetAvailable(); 00289 } 00290 00291 KAB::ExtensionFactory *ExtensionItem::factory() const 00292 { 00293 KLibFactory *factory = KLibLoader::self()->factory( mPtr->library().latin1() ); 00294 if ( !factory ) 00295 return 0; 00296 00297 return static_cast<KAB::ExtensionFactory*>( factory ); 00298 } 00299 00300 QString ExtensionItem::text( int column ) const 00301 { 00302 if ( column == 0 ) 00303 return mPtr->name(); 00304 else if ( column == 1 ) 00305 return mPtr->comment(); 00306 else 00307 return QString::null; 00308 } 00309 00310 #include "kabconfigwidget.moc"
KDE Logo
This file is part of the documentation for kaddressbook Library Version 3.2.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Jul 28 23:58:08 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003