/* This file is part of KAddressbook. Copyright (c) 2003 Tobias Koenig 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 #include //Added by qt3to4: #include #include #include #include #include #ifndef KAB_EMBEDDED #include #else //KAB_EMBEDDED #include #include #endif //KAB_EMBEDDED #include "addresseeeditorwidget.h" #include "kabcore.h" #include "kabprefs.h" #include "extensionmanager.h" ExtensionManager::ExtensionManager( KABCore *core, QWidget *parent, const char *name ) : Q3ScrollView( parent, name ), mCore( core ), mCurrentExtensionWidget( 0 ) { #ifdef KAB_EMBEDDED //US QPopupMenu *settingsmenu = (QPopupMenu*)mCore->getSettingsMenu(); QWidget *settingsmenu = (QWidget*)mCore->getViewMenu(); #endif //KAB_EMBEDDED mActionExtensions = new KSelectAction( i18n( "Show Extension Bar" ), 0, mCore->actionCollection(), "options_show_extensions" ); mActionExtensions->plug( settingsmenu ,0); connect( mActionExtensions, SIGNAL( activated( int ) ), SLOT( setActiveExtension( int ) ) ); mWidgetBox = new QWidget( viewport() ); new Q3HBoxLayout (mWidgetBox ); addChild( mWidgetBox ); setResizePolicy(AutoOneFit); createExtensionWidgets(); hide(); } ExtensionManager::~ExtensionManager() { } void ExtensionManager::restoreSettings() { mActionExtensions->setCurrentItem( KABPrefs::instance()->mCurrentExtension ); int i = 1; mCurrentExtensionWidget = mExtensionWidgetList.at( i-1 ); while ( mCurrentExtensionWidget ) { if( i != KABPrefs::instance()->mCurrentExtension ) mCurrentExtensionWidget->hide(); mCurrentExtensionWidget = mExtensionWidgetList.at( ++i-1 ); } setActiveExtension( mActionExtensions->currentItem() ); } void ExtensionManager::saveSettings() { KABPrefs::instance()->mCurrentExtension = mActionExtensions->currentItem(); } void ExtensionManager::reconfigure() { saveSettings(); createExtensionWidgets(); restoreSettings(); } bool ExtensionManager::isQuickEditVisible() const { return ( mCurrentExtensionWidget && mCurrentExtensionWidget->identifier() == "contact_editor" ); } void ExtensionManager::setSelectionChanged() { if ( mCurrentExtensionWidget ) mCurrentExtensionWidget->contactsSelectionChanged(); } void ExtensionManager::setActiveExtension( int id ) { //qDebug("+++++++++++++++++++ExtensionManager::setActiveExtension %d ", id); if ( id == 0 ) { hide(); mCurrentExtensionWidget = 0; #ifndef DESKTOP_VERSION //US our screen is so small, that we better hide the detailscreen, just in case. //US mCore->setDetailsToState( ); #endif //KAB_EMBEDDED } else if ( id > 0 ) { if ( mCurrentExtensionWidget ) mCurrentExtensionWidget->hide(); mCurrentExtensionWidget = mExtensionWidgetList.at( id - 1 ); if ( mCurrentExtensionWidget ) { #ifndef DESKTOP_VERSION //US our screen is so small, that we better hide the detailscreen, just in case. //US mCore->setDetailsVisible( false ); #endif //KAB_EMBEDDED show(); mWidgetBox->show(); mCurrentExtensionWidget->show(); } else { hide(); mCurrentExtensionWidget = 0; #ifndef DESKTOP_VERSION //US our screen is so small, that we better hide the detailscreen, just in case. //US mCore->setDetailsToState( ); #endif //KAB_EMBEDDED } } emit changedActiveExtension( id ); } void ExtensionManager::createExtensionWidgets() { // clear extension widget list mExtensionWidgetList.setAutoDelete( true ); Q3PtrListIterator wdgIt( mExtensionWidgetList ); ExtensionWidget *wdg = 0; while ( ( wdg = wdgIt.current() ) != 0 ) mExtensionWidgetList.remove( wdg ); mExtensionWidgetList.setAutoDelete( false ); QStringList extensionNames( i18n( "None" ) ); // add addressee editor as default Q3HBoxLayout *hbl = (Q3HBoxLayout *) mWidgetBox->layout();; wdg = new AddresseeEditorWidget( mCore, true, mWidgetBox ); hbl->addWidget( wdg ); //wdg->hide(); connect( wdg, SIGNAL( modified( const KABC::Addressee::List& ) ), SIGNAL( modified( const KABC::Addressee::List& ) ) ); mExtensionWidgetList.append( wdg ); extensionNames.append( wdg->title() ); // load the other extensions QStringList activeExtensions = KABPrefs::instance()->mActiveExtensions; #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; KLibFactory *factory = KLibLoader::self()->factory( (*it)->library().latin1() ); if ( !factory ) { //kdDebug(5720) << "ExtensionManager::loadExtensions(): Factory creation failed" << endl; continue; } ExtensionFactory *extensionFactory = static_cast( factory ); if ( !extensionFactory ) { //kdDebug(5720) << "ExtensionManager::loadExtensions(): Cast failed" << endl; continue; } if ( !activeExtensions.contains( extensionFactory->identifier() ) ) continue; wdg = extensionFactory->extension( mCore, this ); if ( wdg ) { //wdg->hide(); connect( wdg, SIGNAL( modified( const KABC::Addressee::List& ) ), SIGNAL( modified( const KABC::Addressee::List& ) ) ); mExtensionWidgetList.append( wdg ); extensionNames.append( wdg->title() ); } } #else //KAB_EMBEDDED //load Mergefactory/extension ExtensionFactory *extensionFactory = new MergeFactory(); if ( activeExtensions.contains( extensionFactory->identifier() ) ) { wdg = extensionFactory->extension( mCore, mWidgetBox ); if ( wdg ) { hbl->addWidget( wdg ); //wdg->hide(); connect( wdg, SIGNAL( modified( const KABC::Addressee::List& ) ), SIGNAL( modified( const KABC::Addressee::List& ) ) ); mExtensionWidgetList.append( wdg ); extensionNames.append( wdg->title() ); } } //load DistributionListfactory/extension extensionFactory = new DistributionListFactory(); if (activeExtensions.contains( extensionFactory->identifier() ) ) { wdg = extensionFactory->extension( mCore, mWidgetBox ); if ( wdg ) { hbl->addWidget( wdg ); //wdg->hide(); connect( wdg, SIGNAL( modified( const KABC::Addressee::List& ) ), SIGNAL( modified( const KABC::Addressee::List& ) ) ); mExtensionWidgetList.append( wdg ); extensionNames.append( wdg->title() ); } } hbl->addStretch(); #endif //KAB_EMBEDDED mActionExtensions->setItems( extensionNames ); mCurrentExtensionWidget = 0; } #ifndef KAB_EMBEDDED_ #include "moc_extensionmanager.cpp" #endif //KAB_EMBEDDED