-rw-r--r-- | microkde/kresources/configdialog.cpp | 55 | ||||
-rw-r--r-- | microkde/kresources/configdialog.h | 2 | ||||
-rw-r--r-- | microkde/kresources/configpage.cpp | 43 | ||||
-rw-r--r-- | microkde/kresources/configpage.h | 1 | ||||
-rw-r--r-- | microkde/kresources/factory.cpp | 38 | ||||
-rw-r--r-- | microkde/kresources/factory.h | 14 | ||||
-rw-r--r-- | microkde/microkdeE.pro | 2 |
7 files changed, 136 insertions, 19 deletions
diff --git a/microkde/kresources/configdialog.cpp b/microkde/kresources/configdialog.cpp index 0fc199c..90febca 100644 --- a/microkde/kresources/configdialog.cpp +++ b/microkde/kresources/configdialog.cpp @@ -38,16 +38,18 @@ #include "factory.h" #include "configwidget.h" #include "configdialog.h" +#include "syncwidget.h" using namespace KRES; ConfigDialog::ConfigDialog( QWidget *parent, const QString& resourceFamily, - /*const QString& type,*/ Resource* resource, /*KConfig *config, */const char *name ) - : KDialogBase( parent, name, true, i18n( "Resource Configuration" ), - Ok|Cancel, Ok, true )/*, mConfig( config )*/, mResource( resource ), mPersistentReadOnly(false) + 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(0), mResource( resource ), mPersistentReadOnly(false) { + Factory *factory = Factory::self( resourceFamily ); //US resize( 250, 240 ); resize( KMIN(KGlobal::getDesktopWidth(), 250), KMIN(KGlobal::getDesktopHeight(), 240)); @@ -60,16 +62,18 @@ ConfigDialog::ConfigDialog( QWidget *parent, const QString& resourceFamily, QGroupBox *generalGroupBox = new QGroupBox( 2, Qt::Horizontal, main ); generalGroupBox->layout()->setSpacing( spacingHint() ); generalGroupBox->setTitle( i18n( "General Settings" ) ); - new QLabel( i18n( "Name:" ), generalGroupBox ); + new QLabel( mResource->isSyncable()?i18n( "Profile Name:" ):i18n( "Name:" ), generalGroupBox ); mName = new KLineEdit( generalGroupBox ); + if (!mResource->isSyncable()) { mReadOnly = new QCheckBox( i18n( "Read-only" ), generalGroupBox ); + mReadOnly->setChecked( mResource->readOnly() ); + } mName->setText( mResource->resourceName() ); - mReadOnly->setChecked( mResource->readOnly() ); mainLayout->addWidget( generalGroupBox ); QGroupBox *resourceGroupBox = new QGroupBox( 2, Qt::Horizontal, main ); @@ -91,8 +95,28 @@ ConfigDialog::ConfigDialog( QWidget *parent, const QString& resourceFamily, mConfigWidget->show(); } + if (mResource->isSyncable()) + { + QGroupBox *syncGroupBox = new QGroupBox( 2, Qt::Horizontal, main ); + syncGroupBox->layout()->setSpacing( spacingHint()); + syncGroupBox->setTitle( i18n( "Syncronize Preferences" ) ); + mainLayout->addWidget( syncGroupBox ); + + mainLayout->addStretch(); + + mSyncWidget = factory->syncWidget( resource->type(), syncGroupBox ); + if ( mSyncWidget ) { + mSyncWidget->setInEditMode( false ); + mSyncWidget->loadSettings( mResource ); + mSyncWidget->show(); + } + } + + + + connect( mName, SIGNAL( textChanged(const QString &)), SLOT( slotNameChanged(const QString &))); slotNameChanged( mName->text() ); @@ -105,8 +129,12 @@ ConfigDialog::ConfigDialog( QWidget *parent, const QString& resourceFamily, void ConfigDialog::setInEditMode( bool value ) { if ( mConfigWidget ) mConfigWidget->setInEditMode( value ); + + if ( mSyncWidget ) + mSyncWidget->setInEditMode( value ); + } void ConfigDialog::slotNameChanged( const QString &text) { @@ -114,41 +142,54 @@ void ConfigDialog::slotNameChanged( const QString &text) } void ConfigDialog::setReadOnly( bool value ) { + if (!mResource->isSyncable()) { + if (mPersistentReadOnly == false) mReadOnly->setChecked( value ); else mReadOnly->setChecked( true ); } +} void ConfigDialog::setPersistentReadOnly( bool value ) { + if (!mResource->isSyncable()) { + mPersistentReadOnly = value; if (value == true) setReadOnly( true ); mReadOnly->setEnabled( !value ); - + } } void ConfigDialog::accept() { if ( mName->text().isEmpty() ) { - KMessageBox::sorry( this, i18n( "Please enter a resource name" ) ); + KMessageBox::sorry( this, mResource->isSyncable()?i18n( "Please enter a profile name" ):i18n( "Please enter a resource name" ) ); return; } mResource->setResourceName( mName->text() ); + if (!mResource->isSyncable()) mResource->setReadOnly( mReadOnly->isChecked() ); if ( mConfigWidget ) { // First save generic information // Also save setting of specific resource type mConfigWidget->saveSettings( mResource ); } + if ( mSyncWidget ) { + // First save generic information + // Also save setting of specific resource type + mSyncWidget->saveSettings( mResource ); + } + + KDialog::accept(); } //US #include "configdialog.moc" diff --git a/microkde/kresources/configdialog.h b/microkde/kresources/configdialog.h index ba66f8e..b629347 100644 --- a/microkde/kresources/configdialog.h +++ b/microkde/kresources/configdialog.h @@ -30,8 +30,9 @@ class KButtonBox; namespace KRES { class Resource; class ConfigWidget; + class SyncWidget; class ConfigDialog : public KDialogBase { Q_OBJECT @@ -49,8 +50,9 @@ class ConfigDialog : public KDialogBase void slotNameChanged( const QString &text); private: ConfigWidget *mConfigWidget; + SyncWidget *mSyncWidget; Resource* mResource; KLineEdit *mName; QCheckBox *mReadOnly; diff --git a/microkde/kresources/configpage.cpp b/microkde/kresources/configpage.cpp index 8782ffd..912c62e 100644 --- a/microkde/kresources/configpage.cpp +++ b/microkde/kresources/configpage.cpp @@ -20,8 +20,15 @@ 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 <qgroupbox.h> #include <qinputdialog.h> #include <qlabel.h> #include <qlayout.h> @@ -49,8 +56,11 @@ #include <kglobal.h> using namespace KRES; +const QString ConfigPage::syncfamily = "syncprofiles"; + + class ConfigViewItem : public QCheckListItem { public: ConfigViewItem( QListView *parent, Resource* resource ) : @@ -163,15 +173,17 @@ void ConfigPage::load() //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" << "sync-contacts"; + families << "contact" << syncfamily; + + 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 ); + mCurrentManager = new Manager<Resource>( family, (family == syncfamily) ); if ( mCurrentManager ) { mFamilyMap.append( family ); mCurrentManager->addListener( this ); @@ -264,9 +276,9 @@ void ConfigPage::slotFamilyChanged( int pos ) } else { //US qDebug("ConfigPage::slotFamilyChanged 4.6 "); if ( !standardResource ) { - KMessageBox::sorry( this, i18n( "There is no standard resource! Please select one." ) ); + KMessageBox::sorry( this, i18n( "There is no standard resource!<br> Please select one." ) ); //US qDebug("ConfigPage::slotFamilyChanged 4.7" ); } @@ -282,11 +294,24 @@ void ConfigPage::slotAdd() QStringList types = mCurrentManager->resourceTypeNames(); QStringList descs = mCurrentManager->resourceTypeDescriptions(); bool ok = false; - QString desc = QInputDialog::getItem( i18n( "Resource Configuration" ), + + QString desc; + + if (mFamily == syncfamily) + { + desc = QInputDialog::getItem( i18n( "Sync Configuration" ), + i18n( "Please select resource type for new sync profile:" ), descs, 0, + false, &ok, this ); + } + else + { + desc = QInputDialog::getItem( i18n( "Resource Configuration" ), i18n( "Please select type of the new resource:" ), descs, 0, false, &ok, this ); + } + if ( !ok ) return; QString type = types[ descs.findIndex( desc ) ]; @@ -379,9 +404,9 @@ void ConfigPage::slotEdit() configItem->setText( 0, resource->resourceName() ); configItem->setText( 1, resource->type() ); if ( configItem->standard() && configItem->readOnly() ) { - KMessageBox::sorry( this, i18n( "You cannot use a read-only resource as standard!" ) ); + KMessageBox::sorry( this, i18n( "You cannot use a read-only<br> resource as standard!" ) ); configItem->setStandard( false ); } mCurrentManager->resourceChanged( resource ); @@ -398,14 +423,14 @@ void ConfigPage::slotStandard() if ( !item ) return; if ( item->readOnly() ) { - KMessageBox::sorry( this, i18n( "You cannot use a read-only resource as standard!" ) ); + KMessageBox::sorry( this, i18n( "You cannot use a read-only<br>resource as standard!" ) ); return; } if ( !item->isOn() ) { - KMessageBox::sorry( this, i18n( "You cannot use an inactive resource as standard!" ) ); + KMessageBox::sorry( this, i18n( "You cannot use an inactive<br>resource as standard!" ) ); return; } QListViewItem *it = mListView->firstChild(); @@ -463,9 +488,9 @@ void ConfigPage::slotItemClicked( QListViewItem *item ) ConfigViewItem *configItem = static_cast<ConfigViewItem *>( item ); if ( !configItem ) return; if ( configItem->standard() && !configItem->isOn() ) { - KMessageBox::sorry( this, i18n( "You cannot deactivate the standard resource. Choose another standard resource first." ) ); + KMessageBox::sorry( this, i18n( "You cannot deactivate the<br>standard resource. Choose<br>another standard resource first." ) ); configItem->setOn( true ); return; } @@ -498,9 +523,9 @@ void ConfigPage::saveResourceSettings() } mCurrentManager->writeConfig( mCurrentConfig ); if ( !mCurrentManager->standardResource() ) - KMessageBox::sorry( this, i18n( "There is no valid standard resource! Please select one which is neither read-only nor inactive." ) ); + KMessageBox::sorry( this, i18n( "There is no valid standard resource!<br>Please select one which is neither read-only nor inactive." ) ); } qDebug("ConfigPage::saveResourceSettings() end"); diff --git a/microkde/kresources/configpage.h b/microkde/kresources/configpage.h index 492ea54..be9239e 100644 --- a/microkde/kresources/configpage.h +++ b/microkde/kresources/configpage.h @@ -95,8 +95,9 @@ class ConfigPage : public QWidget, public ManagerListener<Resource> QPushButton* mEditButton; QPushButton* mStandardButton; QListViewItem* mLastItem; + static const QString syncfamily; }; } diff --git a/microkde/kresources/factory.cpp b/microkde/kresources/factory.cpp index f82e94c..7a5c2f6 100644 --- a/microkde/kresources/factory.cpp +++ b/microkde/kresources/factory.cpp @@ -186,8 +186,42 @@ ConfigWidget *Factory::configWidget( const QString& type, QWidget *parent ) return wdg; } +SyncWidget *Factory::syncWidget( 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::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; + } + + SyncWidget *wdg = pluginFactory->syncWidget( 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; + +} + + QString Factory::typeName( const QString &type ) const { if ( type.isEmpty() || !mTypeMap.contains( type ) ) return QString(); @@ -210,9 +244,9 @@ QString Factory::typeDescription( const QString &type ) const PluginInfo* pi = mTypeMap[ type ]; return pi->descriptionLabel; } -Resource *Factory::resource( const QString& type, const KConfig *config ) +Resource *Factory::resource( const QString& type, const KConfig *config, bool syncable ) { if ( type.isEmpty() || !mTypeMap.contains( type ) ) @@ -241,9 +275,9 @@ Resource *Factory::resource( const QString& type, const KConfig *config ) kdDebug() << "KRES::Factory::resource(): no plugin factory." << endl; return 0; } - Resource *resource = pluginFactory->resource( config ); + Resource *resource = pluginFactory->resource( config, syncable ); 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; diff --git a/microkde/kresources/factory.h b/microkde/kresources/factory.h index ad67ab3..a265bc8 100644 --- a/microkde/kresources/factory.h +++ b/microkde/kresources/factory.h @@ -83,16 +83,28 @@ class Factory */ 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 + */ + SyncWidget *syncWidget( const QString& type, QWidget *parent = 0 ); + + /** * 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 ); + Resource *resource( const QString& type, const KConfig *config, bool syncable ); /** * Returns a list of all available resource types. */ diff --git a/microkde/microkdeE.pro b/microkde/microkdeE.pro index ec2b1f7..b664c9a 100644 --- a/microkde/microkdeE.pro +++ b/microkde/microkdeE.pro @@ -88,8 +88,9 @@ osmartpointer.h \ kresources/configpage.h \ kresources/configwidget.h \ kresources/configdialog.h \ kresources/kcmkresources.h \ + kresources/syncwidget.h \ kdecore/kmdcodec.h \ kdecore/kconfigbase.h \ kdecore/klocale.h \ kdecore/klibloader.h \ @@ -168,6 +169,7 @@ oprocess.cpp \ kresources/kcmkresources.cpp \ kresources/managerimpl.cpp \ kresources/resource.cpp \ kresources/selectdialog.cpp \ + kresources/syncwidget.cpp \ kutils/kcmultidialog.cpp |