-rw-r--r-- | microkde/kresources/configdialog.cpp | 125 | ||||
-rw-r--r-- | microkde/kresources/configdialog.h | 5 | ||||
-rw-r--r-- | microkde/kresources/configpage.cpp | 29 | ||||
-rw-r--r-- | microkde/kresources/factory.cpp | 38 | ||||
-rw-r--r-- | microkde/kresources/factory.h | 15 | ||||
-rw-r--r-- | microkde/kresources/manager.h | 12 | ||||
-rw-r--r-- | microkde/kresources/managerimpl.cpp | 13 | ||||
-rw-r--r-- | microkde/kresources/managerimpl.h | 8 | ||||
-rw-r--r-- | microkde/kresources/resource.cpp | 1 | ||||
-rw-r--r-- | microkde/kresources/resource.h | 24 |
10 files changed, 50 insertions, 220 deletions
diff --git a/microkde/kresources/configdialog.cpp b/microkde/kresources/configdialog.cpp index 030b547..24e82bc 100644 --- a/microkde/kresources/configdialog.cpp +++ b/microkde/kresources/configdialog.cpp @@ -12,235 +12,168 @@ 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include <klocale.h> #include <kglobal.h> #include <kmessagebox.h> #include <qgroupbox.h> #include <qlabel.h> #include <qlayout.h> #include <qpushbutton.h> #include <qvbox.h> #include <qcheckbox.h> #include <qscrollview.h> #include <kbuttonbox.h> #include <kdialog.h> #include <klineedit.h> #include "factory.h" #include "configwidget.h" #include "configdialog.h" -#include "syncwidget.h" using namespace KRES; ConfigDialog::ConfigDialog( QWidget *parent, const QString& resourceFamily, Resource* resource, const char *name ) - : KDialogBase( parent, name, true, resource->isSyncable()?i18n( "Sync Profile Configuration" ):i18n( "Resource Configuration" ), - Ok|Cancel, Ok, true )/*, mConfig( config )*/, mSyncWidget_Settings(0), mSyncWidget_Conflicts(0),mSyncWidget_Remote(0), mResource( resource ), mPersistentReadOnly(false) + : KDialogBase( parent, name, true, i18n( "Resource Configuration" ), + Ok|Cancel, Ok, true )/*, mConfig( config )*/, mResource( resource ), mPersistentReadOnly(false) { Factory *factory = Factory::self( resourceFamily ); //US resize( 250, 240 ); resize( KMIN(KGlobal::getDesktopWidth(), 250), KMIN(KGlobal::getDesktopHeight(), 240)); QFrame *main; - if (!mResource->isSyncable()) - main = plainPage(); - else - main = addPage("Profile"); + main = plainPage(); QVBoxLayout *mainLayout = new QVBoxLayout( main, 0, spacingHint() ); QGroupBox *generalGroupBox = new QGroupBox( 2, Qt::Horizontal, main ); generalGroupBox->layout()->setSpacing( spacingHint() ); generalGroupBox->setTitle( i18n( "General Settings" ) ); - new QLabel( mResource->isSyncable()?i18n( "Profile Name:" ):i18n( "Name:" ), generalGroupBox ); + new QLabel( i18n( "Name:" ), generalGroupBox ); mName = new KLineEdit( generalGroupBox ); - if (!mResource->isSyncable()) { - new QLabel("", generalGroupBox ); - mReadOnly = new QCheckBox( i18n( "Read-only" ), generalGroupBox ); - mReadOnly->setChecked( mResource->readOnly() ); - new QLabel("", generalGroupBox ); - mIncludeInSync = new QCheckBox( i18n( "Include in sync" ), generalGroupBox ); - mIncludeInSync->setChecked( mResource->includeInSync() ); - } + new QLabel("", generalGroupBox ); + mReadOnly = new QCheckBox( i18n( "Read-only" ), generalGroupBox ); + mReadOnly->setChecked( mResource->readOnly() ); + + new QLabel("", generalGroupBox ); + mIncludeInSync = new QCheckBox( i18n( "Include in sync" ), generalGroupBox ); + mIncludeInSync->setChecked( mResource->includeInSync() ); mName->setText( mResource->resourceName() ); mainLayout->addWidget( generalGroupBox ); QGroupBox *resourceGroupBox = new QGroupBox( 2, Qt::Horizontal, main ); resourceGroupBox->layout()->setSpacing( spacingHint()); resourceGroupBox->setTitle( i18n( "%1 Resource Settings" ) .arg( factory->typeName( resource->type() ) ) ); mainLayout->addWidget( resourceGroupBox ); mainLayout->addStretch(); mConfigWidget = factory->configWidget( resource->type(), resourceGroupBox ); if ( mConfigWidget ) { connect( mConfigWidget, SIGNAL( setReadOnly( bool ) ), SLOT( setReadOnly( bool ) ) ); + connect( mConfigWidget, SIGNAL( setIncludeInSync( bool ) ), + SLOT( setIncludeInSync( bool ) ) ); connect( mConfigWidget, SIGNAL( setPersistentReadOnly( bool ) ), SLOT( setPersistentReadOnly( bool ) ) ); mConfigWidget->setInEditMode( false ); mConfigWidget->loadSettings( mResource ); mConfigWidget->show(); } - if (mResource->isSyncable()) - { - SyncWidgetContainer* c = factory->syncWidgetContainer( resource->type() ); - - QFrame* syncPage = addPage("Settings"); - QVBoxLayout *syncLayout = new QVBoxLayout( syncPage, 0, spacingHint() ); - mSyncWidget_Settings = c->generateSettingsTab(syncPage); - syncLayout->addWidget( mSyncWidget_Settings ); - - syncPage = addPage("Conflicts"); - syncLayout = new QVBoxLayout( syncPage, 0, spacingHint() ); - mSyncWidget_Conflicts = c->generateConflictsTab(syncPage); - syncLayout->addWidget( mSyncWidget_Conflicts ); - - syncPage = addPage("Remote"); - syncLayout = new QVBoxLayout( syncPage, 0, spacingHint() ); - mSyncWidget_Remote = c->generateRemoteTab(syncPage); - syncLayout->addWidget( mSyncWidget_Remote ); - - - mSyncWidget_Settings->setInEditMode( false ); - mSyncWidget_Settings->loadSettings( mResource ); - mSyncWidget_Settings->show(); - - mSyncWidget_Conflicts->setInEditMode( false ); - mSyncWidget_Conflicts->loadSettings( mResource ); - mSyncWidget_Conflicts->show(); - - mSyncWidget_Remote->setInEditMode( false ); - mSyncWidget_Remote->loadSettings( mResource ); - mSyncWidget_Remote->show(); - - delete c; - -// QGroupBox *syncGroupBox = new QGroupBox( 2, Qt::Horizontal, syncPage ); -// syncGroupBox->layout()->setSpacing( spacingHint()); -// syncGroupBox->setTitle( i18n( "Syncronize Preferences" ) ); -// syncLayout->addWidget( syncGroupBox ); - -// syncLayout->addStretch(); -/*US - mSyncWidget = factory->syncWidget( resource->type(), syncPage ); - syncLayout->addWidget( mSyncWidget ); - if ( mSyncWidget ) { - mSyncWidget->setInEditMode( false ); - mSyncWidget->loadSettings( mResource ); - mSyncWidget->show(); - } - */ - } - - - connect( mName, SIGNAL( textChanged(const QString &)), SLOT( slotNameChanged(const QString &))); slotNameChanged( mName->text() ); //US setMinimumSize( 400, 250 ); setMinimumSize( KMIN(KGlobal::getDesktopWidth(), 400), KMIN(KGlobal::getDesktopHeight(), 250)); } void ConfigDialog::setInEditMode( bool value ) { if ( mConfigWidget ) mConfigWidget->setInEditMode( value ); - - if ( mSyncWidget_Settings ) - mSyncWidget_Settings->setInEditMode( value ); - if ( mSyncWidget_Conflicts ) - mSyncWidget_Conflicts->setInEditMode( value ); - if ( mSyncWidget_Remote ) - mSyncWidget_Remote->setInEditMode( value ); - } void ConfigDialog::slotNameChanged( const QString &text) { enableButtonOK( !text.isEmpty() ); } void ConfigDialog::setReadOnly( bool value ) { - if (!mResource->isSyncable()) { - if (mPersistentReadOnly == false) mReadOnly->setChecked( value ); else mReadOnly->setChecked( true ); - } } -void ConfigDialog::setPersistentReadOnly( bool value ) +void ConfigDialog::setIncludeInSync( bool value ) { - if (!mResource->isSyncable()) { + if (mPersistentReadOnly == false) + mIncludeInSync->setChecked( value ); + else + mIncludeInSync->setChecked( true ); +} +void ConfigDialog::setPersistentReadOnly( bool value ) +{ mPersistentReadOnly = value; - if (value == true) + if (value == true) { setReadOnly( true ); + setIncludeInSync( true ); + } mReadOnly->setEnabled( !value ); - } + mIncludeInSync->setEnabled (!value ); } + void ConfigDialog::accept() { if ( mName->text().isEmpty() ) { - KMessageBox::sorry( this, mResource->isSyncable()?i18n( "Please enter a profile name" ):i18n( "Please enter a resource name" ) ); + KMessageBox::sorry( this, i18n( "Please enter a resource name" ) ); return; } mResource->setResourceName( mName->text() ); - if (!mResource->isSyncable()) - mResource->setReadOnly( mReadOnly->isChecked() ); - mResource->setIncludeInSync( mIncludeInSync->isChecked() ); + mResource->setReadOnly( mReadOnly->isChecked() ); + mResource->setIncludeInSync( mIncludeInSync->isChecked() ); if ( mConfigWidget ) { // First save generic information // Also save setting of specific resource type mConfigWidget->saveSettings( mResource ); } - if ( mSyncWidget_Settings ) - mSyncWidget_Settings->saveSettings( mResource ); - if ( mSyncWidget_Conflicts ) - mSyncWidget_Conflicts->saveSettings( mResource ); - if ( mSyncWidget_Remote ) - mSyncWidget_Remote->saveSettings( mResource ); - - KDialog::accept(); } //US #include "configdialog.moc" diff --git a/microkde/kresources/configdialog.h b/microkde/kresources/configdialog.h index ed3ecab..b205975 100644 --- a/microkde/kresources/configdialog.h +++ b/microkde/kresources/configdialog.h @@ -2,67 +2,64 @@ This file is part of libkresources. Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef KRESOURCES_CONFIGDIALOG_H #define KRESOURCES_CONFIGDIALOG_H #include <kdialogbase.h> class KLineEdit; class QCheckBox; class KButtonBox; namespace KRES { class Resource; class ConfigWidget; - class SyncWidget; class ConfigDialog : public KDialogBase { Q_OBJECT public: // Resource=0: create new resource ConfigDialog( QWidget *parent, const QString& resourceFamily, Resource* resource, const char *name = 0); void setInEditMode( bool value ); protected slots: void accept(); void setReadOnly( bool value ); + void setIncludeInSync( bool value ); void setPersistentReadOnly( bool value ); void slotNameChanged( const QString &text); private: ConfigWidget *mConfigWidget; - SyncWidget *mSyncWidget_Settings; - SyncWidget *mSyncWidget_Conflicts; - SyncWidget *mSyncWidget_Remote; Resource* mResource; KLineEdit *mName; QCheckBox *mReadOnly; QCheckBox *mIncludeInSync; //US add a persistent readonly flag. We need that for opie and qtopia addressbooks. bool mPersistentReadOnly; }; } #endif diff --git a/microkde/kresources/configpage.cpp b/microkde/kresources/configpage.cpp index 02c5fb1..533be51 100644 --- a/microkde/kresources/configpage.cpp +++ b/microkde/kresources/configpage.cpp @@ -28,67 +28,64 @@ Copyright (c) 2004 Ulf Schenk $Id$ */ #include <qgroupbox.h> #include <qinputdialog.h> #include <qlabel.h> #include <qlayout.h> #include <kapplication.h> #include <kcombobox.h> #include <kdebug.h> #include <klocale.h> #include <kmessagebox.h> #include <ksimpleconfig.h> #include <kstandarddirs.h> #include <kurlrequester.h> #include <klistview.h> #include <kbuttonbox.h> //US #include <ktrader.h> #include "resource.h" #include "configdialog.h" #include "configpage.h" //US #include <qpushbutton.h> #include <qfile.h> #include <kglobal.h> using namespace KRES; -const QString ConfigPage::syncfamily = "syncprofiles"; - - class ConfigViewItem : public QCheckListItem { public: ConfigViewItem( QListView *parent, Resource* resource ) : QCheckListItem( parent, resource->resourceName(), CheckBox ), mResource( resource ), mIsStandard( false ) { setText( 1, mResource->type() ); setOn( mResource->isActive() ); } void setStandard( bool value ) { setText( 2, ( value ? i18n( "Yes" ) : QString::null ) ); mIsStandard = value; } bool standard() const { return mIsStandard; } bool readOnly() const { return mResource->readOnly(); } Resource *resource() { return mResource; } private: Resource* mResource; bool mIsStandard; }; ConfigPage::ConfigPage( QWidget *parent, const char *name ) : QWidget( parent, name ), mCurrentManager( 0 ), @@ -155,87 +152,85 @@ ConfigPage::ConfigPage( QWidget *parent, const char *name ) load(); } ConfigPage::~ConfigPage() { QValueList<ResourcePageInfo>::Iterator it; for ( it = mInfoMap.begin(); it != mInfoMap.end(); ++it ) { (*it).mManager->removeListener( this ); delete (*it).mManager; delete (*it).mConfig; } mConfig->writeEntry( "CurrentFamily", mFamilyCombo->currentItem() ); delete mConfig; mConfig = 0; } void ConfigPage::load() { kdDebug(5650) << "ConfigPage::load()" << endl; mListView->clear(); //US we remove the dynamic pluginloader, and set the one family we need (contact) manually. //US KTrader::OfferList plugins = KTrader::self()->query( "KResources/Plugin" ); //US KTrader::OfferList::ConstIterator it; //US for ( it = plugins.begin(); it != plugins.end(); ++it ) { //US QVariant tmp = (*it)->property( "X-KDE-ResourceFamily" ); //US QString family = tmp.toString(); QStringList families; - families << "contact" << syncfamily; + families << "contact"; for ( QStringList::Iterator it = families.begin(); it != families.end(); ++it ) { QString family = (*it); if ( !family.isEmpty() ) { if ( !mFamilyMap.contains( family ) ) { - mCurrentManager = new Manager<Resource>( family, (family == syncfamily) ); + mCurrentManager = new Manager<Resource>( family ); if ( mCurrentManager ) { mFamilyMap.append( family ); mCurrentManager->addListener( this ); ResourcePageInfo info; info.mManager = mCurrentManager; QString configDir = KGlobal::dirs()->saveLocation( "config" ); //QString configDir = KStandardDirs::appDir() + "/config"; if ( family == "contact" && QFile::exists( configDir + "/kabcrc" ) ) { info.mConfig = new KConfig( locateLocal( "config", "kabcrc" ) ); } else if ( family == "calendar" && QFile::exists( configDir + "/kcalrc" ) ) { info.mConfig = new KConfig( locateLocal( "config", "kcalrc" ) ); - } else if ( family == syncfamily && QFile::exists( configDir + "/kabcsyncrc" ) ) { - info.mConfig = new KConfig( locateLocal( "config", "kabcsyncrc" ) ); } else { QString configFile = locateLocal( "config", QString( "kresources/%1/stdrc" ).arg( family ) ); info.mConfig = new KConfig( configFile ); } info.mManager->readConfig( info.mConfig ); mInfoMap.append( info ); } } } } mCurrentManager = 0; mFamilyCombo->insertStringList( mFamilyMap ); int currentFamily = mConfig->readNumEntry( "CurrentFamily", 0 ); mFamilyCombo->setCurrentItem( currentFamily ); slotFamilyChanged( currentFamily ); } void ConfigPage::save() { saveResourceSettings(); QValueList<ResourcePageInfo>::Iterator it; for ( it = mInfoMap.begin(); it != mInfoMap.end(); ++it ) (*it).mManager->writeConfig( (*it).mConfig ); emit changed( false ); } void ConfigPage::defaults() @@ -281,98 +276,82 @@ void ConfigPage::slotFamilyChanged( int pos ) if ( mListView->childCount() == 0 ) { //US qDebug("ConfigPage::slotFamilyChanged 4.5 "); defaults(); emit changed( true ); mCurrentManager->writeConfig( mCurrentConfig ); } else { //US qDebug("ConfigPage::slotFamilyChanged 4.6 "); if ( !standardResource ) { KMessageBox::sorry( this, i18n( "There is no standard resource!<br> Please select one." ) ); //US qDebug("ConfigPage::slotFamilyChanged 4.7" ); } emit changed( false ); } } void ConfigPage::slotAdd() { if ( !mCurrentManager ) return; QStringList types = mCurrentManager->resourceTypeNames(); QStringList descs = mCurrentManager->resourceTypeDescriptions(); bool ok = false; QString desc; - if (mFamily == syncfamily) - { - desc = QInputDialog::getItem( i18n( "Sync Configuration" ), - i18n( "Select resource type for the new sync profile:" ), descs, 0, - false, &ok, this ); - } - else - { - desc = QInputDialog::getItem( i18n( "Resource Configuration" ), + desc = QInputDialog::getItem( i18n( "Resource Configuration" ), i18n( "Select type of the new resource:" ), descs, 0, false, &ok, this ); - } if ( !ok ) return; QString type = types[ descs.findIndex( desc ) ]; // Create new resource Resource *resource = mCurrentManager->createResource( type ); if ( !resource ) { KMessageBox::error( this, i18n("Unable to create resource of type '%1'.") .arg( type ) ); return; } - if (mFamily == syncfamily) - { - resource->setResourceName( type + "-syncprofile" ); - } - else - { - resource->setResourceName( type + "-resource" ); - } + resource->setResourceName( type + "-resource" ); ConfigDialog dlg( this, mFamily, resource, "KRES::ConfigDialog" ); if ( dlg.exec() ) { mCurrentManager->add( resource ); ConfigViewItem *item = new ConfigViewItem( mListView, resource ); mLastItem = item; // if there are only read-only resources we'll set this resource // as standard resource if ( !resource->readOnly() ) { bool onlyReadOnly = true; QListViewItem *it = mListView->firstChild(); while ( it != 0 ) { ConfigViewItem *confIt = static_cast<ConfigViewItem*>( it ); if ( !confIt->readOnly() && confIt != item ) onlyReadOnly = false; it = it->itemBelow(); } if ( onlyReadOnly ) item->setStandard( true ); } emit changed( true ); } else { delete resource; resource = 0; } diff --git a/microkde/kresources/factory.cpp b/microkde/kresources/factory.cpp index e44fce3..4e4456d 100644 --- a/microkde/kresources/factory.cpp +++ b/microkde/kresources/factory.cpp @@ -158,132 +158,98 @@ ConfigWidget *Factory::configWidget( const QString& type, QWidget *parent ) { if ( type.isEmpty() || !mTypeMap.contains( type ) ) return 0; //US KService::Ptr ptr = mTypeMap[ type ]; //US KLibFactory *factory = KLibLoader::self()->factory( ptr->library().latin1() ); PluginInfo* pi = mTypeMap[ type ]; KLibFactory *factory = (KLibFactory *)KLibLoader::self()->factory( pi->library.latin1() ); if ( !factory ) { qDebug("KRES::Factory::configWidget(): Factory creation failed for library %s", pi->library.latin1()); kdDebug() << "KRES::Factory::configWidget(): Factory creation failed" << endl; return 0; } PluginFactoryBase *pluginFactory = static_cast<PluginFactoryBase *>( factory ); if ( !pluginFactory ) { qDebug("KRES::Factory::configWidget(): no plugin factory for library %s", pi->library.latin1()); kdDebug() << "KRES::Factory::configWidget(): no plugin factory." << endl; return 0; } ConfigWidget *wdg = pluginFactory->configWidget( parent ); if ( !wdg ) { //US kdDebug() << "'" << ptr->library() << "' is not a " + mResourceFamily + " plugin." << endl; qDebug("%s is not a %s plugin.", pi->library.latin1(), mResourceFamily.latin1()); return 0; } return wdg; } -SyncWidgetContainer *Factory::syncWidgetContainer( const QString& type ) -{ - if ( type.isEmpty() || !mTypeMap.contains( type ) ) - return 0; - -//US KService::Ptr ptr = mTypeMap[ type ]; -//US KLibFactory *factory = KLibLoader::self()->factory( ptr->library().latin1() ); - PluginInfo* pi = mTypeMap[ type ]; - KLibFactory *factory = (KLibFactory *)KLibLoader::self()->factory( pi->library.latin1() ); - if ( !factory ) { - qDebug("KRES::Factory::syncWidget(): Factory creation failed for library %s", pi->library.latin1()); - kdDebug() << "KRES::Factory::syncWidget(): Factory creation failed" << endl; - return 0; - } - - PluginFactoryBase *pluginFactory = static_cast<PluginFactoryBase *>( factory ); - - if ( !pluginFactory ) { - qDebug("KRES::Factory::syncWidget(): no plugin factory for library %s", pi->library.latin1()); - kdDebug() << "KRES::Factory::syncWidget(): no plugin factory." << endl; - return 0; - } - - SyncWidgetContainer *wdg = pluginFactory->syncWidgetContainer( ); - if ( !wdg ) { -//US kdDebug() << "'" << ptr->library() << "' is not a " + mResourceFamily + " plugin." << endl; - qDebug("%s is not a %s plugin.", pi->library.latin1(), mResourceFamily.latin1()); - return 0; - } - return wdg; - -} - - QString Factory::typeName( const QString &type ) const { if ( type.isEmpty() || !mTypeMap.contains( type ) ) return QString(); //US KService::Ptr ptr = mTypeMap[ type ]; //US return ptr->name(); PluginInfo* pi = mTypeMap[ type ]; return pi->nameLabel; } QString Factory::typeDescription( const QString &type ) const { if ( type.isEmpty() || !mTypeMap.contains( type ) ) return QString(); //US KService::Ptr ptr = mTypeMap[ type ]; //US return ptr->comment(); PluginInfo* pi = mTypeMap[ type ]; return pi->descriptionLabel; } -Resource *Factory::resource( const QString& type, const KConfig *config, bool syncable ) +Resource *Factory::resource( const QString& type, const KConfig *config ) { if ( type.isEmpty() || !mTypeMap.contains( type ) ) return 0; /*US load the lib not dynamicly. !! KService::Ptr ptr = mTypeMap[ type ]; KLibFactory *factory = KLibLoader::self()->factory( ptr->library().latin1() ); if ( !factory ) { kdDebug() << "KRES::Factory::resource(): Factory creation failed" << endl; return 0; } */ PluginInfo* pi = mTypeMap[ type ]; KLibFactory *factory = (KLibFactory *)KLibLoader::self()->factory( pi->library.latin1() ); if ( !factory ) { qDebug("KRES::Factory::resource(): Factory creation failed for library %s", pi->library.latin1()); kdDebug() << "KRES::Factory::resource(): Factory creation failed" << endl; return 0; } PluginFactoryBase *pluginFactory = static_cast<PluginFactoryBase *>( factory ); if ( !pluginFactory ) { qDebug("KRES::Factory::resource(): no plugin factory for library %s", pi->library.latin1()); kdDebug() << "KRES::Factory::resource(): no plugin factory." << endl; return 0; } - Resource *resource = pluginFactory->resource( config, syncable ); + Resource *resource = pluginFactory->resource( config ); if ( !resource ) { //US kdDebug() << "'" << ptr->library() << "' is not a " + mResourceFamily + " plugin." << endl; qDebug("%s is not a %s plugin.", pi->library.latin1(), mResourceFamily.latin1()); return 0; } resource->setType( type ); return resource; } diff --git a/microkde/kresources/factory.h b/microkde/kresources/factory.h index 0e4231b..ea01b23 100644 --- a/microkde/kresources/factory.h +++ b/microkde/kresources/factory.h @@ -5,135 +5,122 @@ Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org> Copyright (c) 2003 Cornelius Schumacher <schumacher@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 as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef KRESOURCES_FACTORY_H #define KRESOURCES_FACTORY_H #include <qdict.h> #include <qstring.h> #include <kconfig.h> #include "resource.h" namespace KRES { -class SyncWidgetContainer; class ConfigWidget; //US struct PluginInfo { QString library; QString nameLabel; QString descriptionLabel; }; /** * Class for loading resource plugins. * Do not use this class directly. Use ResourceManager instead * * Example: * * <pre> * KABC::Factory<Calendar> *factory = KABC::Factory<Calendar>::self(); * * QStringList list = factory->resources(); * QStringList::Iterator it; * for ( it = list.begin(); it != list.end(); ++it ) { * Resource<Calendar> *resource = factory->resource( (*it), * KABC::StdAddressBook::self(), 0 ); * // do something with resource * } * </pre> */ class Factory { public: /** * Returns the global resource factory. */ static Factory *self( const QString& resourceFamily ); ~Factory(); /** * Returns the config widget for the given resource type, * or a null pointer if resource type doesn't exist. * * @param type The type of the resource, returned by @ref resources() * @param resource The resource to be editted. * @param parent The parent widget */ ConfigWidget *configWidget( const QString& type, QWidget *parent = 0 ); /** - * Returns the sync widget for the given resource type, - * or a null pointer if resource type doesn't exist, - * or a null pointer if resource does not support syncing. - * - * @param type The type of the resource, returned by @ref resources() - * @param resource The resource to be editted. - * @param parent The parent widget - */ - SyncWidgetContainer *syncWidgetContainer( const QString& type ); - - /** * Returns a pointer to a resource object or a null pointer * if resource type doesn't exist. * * @param type The type of the resource, returned by @ref resources() * @param ab The address book, the resource should belong to * @param config The config object where the resource get it settings from, or 0 if a new resource should be created. - * @param syncable If the resource should support syncing capabilities. */ - Resource *resource( const QString& type, const KConfig *config, bool syncable ); + Resource *resource( const QString& type, const KConfig *config); /** * Returns a list of all available resource types. */ QStringList typeNames() const; /** * Returns the name for a special type. */ QString typeName( const QString &type ) const; /** * Returns the description for a special type. */ QString typeDescription( const QString &type ) const; protected: Factory( const QString& resourceFamily); private: static QDict<Factory> *mSelves; QString mResourceFamily; //US QMap<QString, KService::Ptr> mTypeMap; //US lets store the pluginfo struct as value instead of a KService QMap<QString, PluginInfo*> mTypeMap; }; } #endif diff --git a/microkde/kresources/manager.h b/microkde/kresources/manager.h index 7e9e19a..0e6f838 100644 --- a/microkde/kresources/manager.h +++ b/microkde/kresources/manager.h @@ -138,75 +138,70 @@ class Manager : private ManagerImplListener */ bool checkActive() { if ( !mList || mIt == mList->end() ) return false; return !(*mIt)->isActive(); } Resource::List::Iterator mIt; Resource::List *mList; }; ActiveIterator activeBegin() { ActiveIterator it; it.mIt = mImpl->resourceList()->begin(); it.mList = mImpl->resourceList(); if ( it.mIt != mImpl->resourceList()->end() ) { if ( !(*it)->isActive() ) it++; } return it; } ActiveIterator activeEnd() { ActiveIterator it; it.mIt = mImpl->resourceList()->end(); it.mList = mImpl->resourceList(); return it; } bool isEmpty() const { return mImpl->resourceList()->isEmpty(); } - /** - Return true, if the manager manages syncable resources. - */ - bool manageSyncable() { return mImpl->manageSyncable(); } - - Manager( const QString &family, bool syncable ) + Manager( const QString &family ) { mFactory = Factory::self( family ); // The managerimpl will use the same Factory object as the manager // because of the Factory::self() pattern - mImpl = new ManagerImpl( family, syncable ); + mImpl = new ManagerImpl( family ); mImpl->setListener( this ); mListeners = new QPtrList<ManagerListener<T> >; } virtual ~Manager() { mImpl->setListener( 0 ); delete mListeners; delete mImpl; } /** Recreate Resource objects from configuration file. If cfg is 0, read standard configuration file. */ void readConfig( KConfig *cfg = 0 ) { mImpl->readConfig( cfg ); } /** Write configuration of Resource objects to configuration file. If cfg is 0, write to standard configuration file. */ void writeConfig( KConfig *cfg = 0 ) { mImpl->writeConfig( cfg ); } /** Add resource to manager. This passes ownership of the Resource object @@ -231,69 +226,68 @@ class Manager : private ManagerImplListener { if ( resource ) mImpl->setStandardResource( resource ); } void setActive( Resource *resource, bool active ) { if ( resource ) mImpl->setActive( resource, active ); } /** Returns a list of the names of the reources managed by the Manager for this family. */ QStringList resourceNames() const { return mImpl->resourceNames(); } ConfigWidget *configWidget( const QString& type, QWidget *parent = 0 ) { return mFactory->resourceConfigWidget( type, parent ); } /** Creates a new resource of type @param type, with default settings. The resource is not added to the manager, the application has to do that. Returns a pointer to a resource object or a null pointer if resource type doesn't exist. @param type The type of the resource, one of those returned by @ref resourceTypeNames() - * @param syncable If the resource should support syncing capabilities. */ T *createResource( const QString& type ) { - return (T *)( mFactory->resource( type, 0, mImpl->manageSyncable() ) ); + return (T *)( mFactory->resource( type, 0 ) ); } /** Returns a list of the names of all available resource types. */ QStringList resourceTypeNames() const { return mFactory->typeNames(); } QStringList resourceTypeDescriptions() const { QStringList typeDescs; QStringList types = mFactory->typeNames(); for ( QStringList::ConstIterator it = types.begin(); it != types.end(); ++it ) { QString desc = mFactory->typeName( *it ); if ( !mFactory->typeDescription( *it ).isEmpty() ) desc += " (" + mFactory->typeDescription( *it ) + ")"; typeDescs.append( desc ); } return typeDescs; } void resourceChanged( T *resource ) { mImpl->resourceChanged( resource ); } void addListener( ManagerListener<T> *listener ) diff --git a/microkde/kresources/managerimpl.cpp b/microkde/kresources/managerimpl.cpp index 3655f50..81bbbec 100644 --- a/microkde/kresources/managerimpl.cpp +++ b/microkde/kresources/managerimpl.cpp @@ -12,66 +12,66 @@ 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Enhanced Version of the file for platform independent KDE tools. Copyright (c) 2004 Ulf Schenk $Id$ */ #include <kglobal.h> #include <kapplication.h> #include <kdebug.h> #include <kconfig.h> #include <kstandarddirs.h> #include "resource.h" #include "factory.h" #include "managerimpl.h" using namespace KRES; -ManagerImpl::ManagerImpl( const QString &family, bool syncable ) - : mFamily( family ), mSyncable(syncable), mConfig( 0 ), mStdConfig( 0 ), mStandard( 0 ), +ManagerImpl::ManagerImpl( const QString &family ) + : mFamily( family ), mConfig( 0 ), mStdConfig( 0 ), mStandard( 0 ), mFactory( 0 ) { kdDebug(5650) << "ManagerImpl::ManagerImpl()" << endl; } ManagerImpl::~ManagerImpl() { kdDebug(5650) << "ManagerImpl::~ManagerImpl()" << endl; Resource::List::ConstIterator it; for ( it = mResources.begin(); it != mResources.end(); ++it ) { delete *it; } delete mStdConfig; } void ManagerImpl::createStandardConfig() { if ( !mStdConfig ) { QString file = locateLocal( "data", KGlobal::getAppName() + "/kresources/" + mFamily + "rc" ); mStdConfig = new KConfig( file ); } mConfig = mStdConfig; } void ManagerImpl::readConfig( KConfig *cfg ) @@ -239,65 +239,65 @@ QPtrList<Resource> ManagerImpl::resources( bool active ) QPtrList<Resource> result; Resource::List::ConstIterator it; for ( it = mResources.begin(); it != mResources.end(); ++it ) { if ( (*it)->isActive() == active ) { result.append( *it ); } } return result; } void ManagerImpl::setListener( ManagerImplListener *listener ) { mListener = listener; } Resource* ManagerImpl::readResourceConfig( const QString& identifier, bool checkActive ) { kdDebug() << "ManagerImpl::readResourceConfig() " << identifier << endl; // qDebug("ManagerImpl::readResourceConfig() %s", identifier.latin1()); mConfig->setGroup( "Resource_" + identifier ); #ifdef _WIN32_ // we use plugins on win32. the group is stored in a static variable // such that gourp info not avail on win32 plugins // to fix that, it would be a looooot of work mConfig->setTempGroup( "Resource_" + identifier ); #endif QString type = mConfig->readEntry( "ResourceType" ); QString name = mConfig->readEntry( "ResourceName" ); - Resource *resource = mFactory->resource( type, mConfig, mSyncable ); + Resource *resource = mFactory->resource( type, mConfig ); if ( !resource ) { qDebug("Failed to create resource with id %s ",identifier.latin1() ); return 0; } if ( resource->identifier().isEmpty() ) resource->setIdentifier( identifier ); mConfig->setGroup( "General" ); QString standardKey = mConfig->readEntry( "Standard" ); if ( standardKey == identifier ) { mStandard = resource; } if ( checkActive ) { QStringList activeKeys = mConfig->readListEntry( "ResourceKeys" ); resource->setActive( activeKeys.contains( identifier ) ); } mResources.append( resource ); return resource; } void ManagerImpl::writeResourceConfig( Resource *resource, bool checkActive ) { QString key = resource->identifier(); kdDebug(5650) << "Saving resource " << key << endl; if ( !mConfig ) createStandardConfig(); @@ -335,40 +335,33 @@ void ManagerImpl::removeResource( Resource *resource ) mConfig->setGroup( "General" ); QStringList activeKeys = mConfig->readListEntry( "ResourceKeys" ); if ( activeKeys.contains( key ) ) { activeKeys.remove( key ); mConfig->writeEntry( "ResourceKeys", activeKeys ); } else { QStringList passiveKeys = mConfig->readListEntry( "PassiveResourceKeys" ); passiveKeys.remove( key ); mConfig->writeEntry( "PassiveResourceKeys", passiveKeys ); } QString standardKey = mConfig->readEntry( "Standard" ); if ( standardKey == key ) { mConfig->writeEntry( "Standard", "" ); } mConfig->deleteGroup( "Resource_" + resource->identifier() ); mConfig->sync(); } Resource* ManagerImpl::getResource( const QString& identifier ) { Resource::List::ConstIterator it; for ( it = mResources.begin(); it != mResources.end(); ++it ) { if ( (*it)->identifier() == identifier ) return *it; } return 0; } -/** - Return true, if the manager manages syncable resources. -*/ -bool ManagerImpl::manageSyncable() const -{ - return mSyncable; -} diff --git a/microkde/kresources/managerimpl.h b/microkde/kresources/managerimpl.h index 0425279..56a2db6 100644 --- a/microkde/kresources/managerimpl.h +++ b/microkde/kresources/managerimpl.h @@ -36,91 +36,85 @@ $Id$ #include <qdict.h> //US #include <qobject.h> #include "resource.h" class KConfig; namespace KRES { class Resource; class Factory; class ManagerImplListener { public: virtual void resourceAdded( Resource *resource ) = 0; virtual void resourceModified( Resource *resource ) = 0; virtual void resourceDeleted( Resource *resource ) = 0; }; /** @internal Do not use this class directly. Use ResourceManager instead */ class ManagerImpl : public QObject { Q_OBJECT public: - ManagerImpl( const QString &family, bool syncable); + ManagerImpl( const QString &family); ~ManagerImpl(); void readConfig( KConfig * ); void writeConfig( KConfig * ); void add( Resource *resource, bool useDCOP = true ); void remove( Resource *resource, bool useDCOP = true ); Resource *standardResource(); void setStandardResource( Resource *resource ); void setActive( Resource *resource, bool active ); Resource::List *resourceList(); QPtrList<Resource> resources(); // Get only active or passive resources QPtrList<Resource> resources( bool active ); QStringList resourceNames(); void setListener( ManagerImplListener *listener ); - /** - Return true, if the manager manages syncable resources. - */ - bool manageSyncable() const; - public slots: void resourceChanged( Resource *resource ); private: // dcop calls private: void createStandardConfig(); Resource *readResourceConfig( const QString& identifier, bool checkActive ); void writeResourceConfig( Resource *resource, bool checkActive ); void removeResource( Resource *resource ); Resource *getResource( Resource *resource ); Resource *getResource( const QString& identifier ); QString mFamily; - bool mSyncable; KConfig *mConfig; KConfig *mStdConfig; Resource *mStandard; Factory *mFactory; Resource::List mResources; ManagerImplListener *mListener; }; } #endif diff --git a/microkde/kresources/resource.cpp b/microkde/kresources/resource.cpp index f79bcd0..cccd485 100644 --- a/microkde/kresources/resource.cpp +++ b/microkde/kresources/resource.cpp @@ -169,36 +169,37 @@ bool Resource::readOnly() const return d->mReadOnly; } void Resource::setResourceName( const QString &name ) { d->mName = name; } QString Resource::resourceName() const { return d->mName; } void Resource::setActive( bool value ) { d->mActive = value; } bool Resource::isActive() const { return d->mActive; } void Resource::dump() const { qDebug("Resource::dump() "); kdDebug(5650) << "Resource:" << endl; kdDebug(5650) << " Name: " << d->mName << endl; kdDebug(5650) << " Identifier: " << d->mIdentifier << endl; kdDebug(5650) << " Type: " << d->mType << endl; kdDebug(5650) << " OpenCount: " << d->mOpenCount << endl; kdDebug(5650) << " ReadOnly: " << ( d->mReadOnly ? "yes" : "no" ) << endl; + kdDebug(5650) << " IncludeInSync: " << ( d->mIncludeInSync ? "yes" : "no" ) << endl; kdDebug(5650) << " Active: " << ( d->mActive ? "yes" : "no" ) << endl; kdDebug(5650) << " IsOpen: " << ( d->mIsOpen ? "yes" : "no" ) << endl; } diff --git a/microkde/kresources/resource.h b/microkde/kresources/resource.h index 70b5613..ed5af96 100644 --- a/microkde/kresources/resource.h +++ b/microkde/kresources/resource.h @@ -11,65 +11,64 @@ 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef KRESOURCES_RESOURCE_H #define KRESOURCES_RESOURCE_H //US #ifdef QT_THREAD_SUPPORT #include <qmutex.h> #endif //QT_THREAD_SUPPORT #include <qvaluelist.h> #include <qwidget.h> #include <qobject.h> #include <klibloader.h> class KConfig; namespace KRES { class ConfigWidget; -class SyncWidgetContainer; /** * @internal * @libdoc The KDE Resource library * * NOTE: this library is NOT (YET?) PUBLIC. Do not publish this * interface, it is in constant flux. * * The KDE Resource framework can be used to manage resources of * different types, organized in families. The Resource framework * is currently used for addressbook resources in libkabc and for * calendar resources in libkcal. * * When you want to use the framework for a new family, you need to * <ul><li>Define a name for your resource family</li> * <li>subclass Resource and add the fields and method that are needed * in your application</li> * <li>If needed, override the doOpen() and doClose() methods. * <li> Provide a configuration possibility for resources in your * new family. You can use @ref ResourcesConfigPage to easily create a * KControl applet</li> * <li>In your application, you can use @ref ResourceManager to keep track * of the resources in your family, and you can use @ref ResourceSelectDialog * to let the user select a single resource.</li> * </ul> * * When you want to add a new resource type to an existing resource family, * you need to * <ul><li>Further subclass the family-specific Resource to implement * resource type-specific operation</li> * <li>Subclass ResourceConfigWidget to provide a configuration widget * for your new resource type</li> @@ -203,65 +202,65 @@ void ResourceExampleConfig::saveSettings( KRES::Resource *resource ) * <B>resourceexample.desktop</B>: <pre> [Desktop Entry] Type=Service [Misc] Encoding=UTF-8 Name=Example Resource [Plugin] Type=exchange X-KDE-Library=resourceexample </pre> * <B>Makefile.am</B> <pre> kde_module_LTLIBRARIES = resourceexample.la resourceexample_la_SOURCES = resourceexample.cpp resourceexampleconfig.cpp resourceexample_la_LDFLAGS= $(all_libraries) -module $(KDE_PLUGIN) resourceexample_la_LIBADD= -lkderesources linkdir= $(kde_datadir)/resources/family link_DATA= resourceexample.desktop </pre> * * */ /** * A @ref Resource is a ... * * A subclass should reimplement at least the constructor and the - * @ref writeConfig method. +k * @ref writeConfig method. * */ class Resource : public QObject { Q_OBJECT public: typedef QValueList<Resource *> List; /** * Constructor. Construct resource from config. * @param config Configuration to read persistence information from. * If config==0, create object using default settings. */ Resource( const KConfig* config ); /** * Destructor. */ virtual ~Resource(); /** * Write configuration information for this resource to a configuration * file. If you override this method, remember to call Resource::writeConfig * or Terrible Things(TM) will happen. * @param config Configuration to write persistence information to. */ virtual void writeConfig( KConfig* config ); /** * Open this resource, if it not already open. Increase the open * count of this object, and open the resource by calling @ref doOpen(). @@ -294,125 +293,112 @@ class Resource : public QObject */ QString identifier() const; /** * Returns the type of this resource. */ QString type() const; /** * Mark the resource as read-only. You can override this method, * but also remember to call Resource::setReadOnly(). */ virtual void setReadOnly( bool value ); /** * Returns, if the resource is read-only. */ virtual bool readOnly() const; void setIncludeInSync( bool value ); bool includeInSync() const; /** * Set the name of resource.You can override this method, * but also remember to call Resource::setResourceName(). */ virtual void setResourceName( const QString &name ); /** * Returns the name of resource. */ virtual QString resourceName() const; - - - virtual bool isSyncable() const = 0; - - /** Sets, if the resource is active. */ void setActive( bool active ); /** Return true, if the resource is active. */ bool isActive() const; friend class Factory; friend class ManagerImpl; /** Print resource information as debug output. */ virtual void dump() const; protected: /** * Open this resource. When called, the resource must be in * a closed state. * * Returns true if the resource was opened successfully; * returns false if the resource was not opened successfully. * * The result of this call can be accessed later by @ref isOpen() */ virtual bool doOpen() { return true; } /** * Close this resource. Pre-condition: resource is open. * Post-condition: resource is closed. */ virtual void doClose() {} void setIdentifier( const QString& identifier ); void setType( const QString& type ); private: class ResourcePrivate; ResourcePrivate *d; }; class PluginFactoryBase : public KLibFactory { public: - virtual Resource *resource( const KConfig *config, bool syncable ) = 0; + virtual Resource *resource( const KConfig *config) = 0; virtual ConfigWidget *configWidget( QWidget *parent ) = 0; - virtual SyncWidgetContainer *syncWidgetContainer() = 0; - protected: virtual QObject* createObject( QObject*, const char*, const char*, const QStringList & ) { return 0; } }; -template<class TR,class TC, class TS> +template<class TR,class TC> class PluginFactory : public PluginFactoryBase { public: - Resource *resource( const KConfig *config, bool syncable ) + Resource *resource( const KConfig *config) { - return new TR( config, syncable ); + return new TR( config ); } ConfigWidget *configWidget( QWidget *parent ) { return new TC( parent ); } - - SyncWidgetContainer *syncWidgetContainer() - { - return new TS(); - } - }; } #endif |