summaryrefslogtreecommitdiffabout
path: root/microkde
authorulf69 <ulf69>2004-08-02 18:15:04 (UTC)
committer ulf69 <ulf69>2004-08-02 18:15:04 (UTC)
commite084a79b8aa0174e7587893f9b87d88670ed9f2c (patch) (side-by-side diff)
treed3250447b9352effc8fb953866c772418c5e166c /microkde
parentb4203356adb6008a4b4e6782afdae7dd34178697 (diff)
downloadkdepimpi-e084a79b8aa0174e7587893f9b87d88670ed9f2c.zip
kdepimpi-e084a79b8aa0174e7587893f9b87d88670ed9f2c.tar.gz
kdepimpi-e084a79b8aa0174e7587893f9b87d88670ed9f2c.tar.bz2
added support for the syncing of resources
Diffstat (limited to 'microkde') (more/less context) (ignore whitespace changes)
-rw-r--r--microkde/kresources/configdialog.cpp89
-rw-r--r--microkde/kresources/configdialog.h4
-rw-r--r--microkde/kresources/configpage.cpp75
-rw-r--r--microkde/kresources/configpage.h1
-rw-r--r--microkde/kresources/factory.cpp44
-rw-r--r--microkde/kresources/factory.h26
-rw-r--r--microkde/microkdeE.pro2
7 files changed, 179 insertions, 62 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
@@ -40,12 +40,14 @@
#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 );
@@ -62,12 +64,14 @@ ConfigDialog::ConfigDialog( QWidget *parent, const QString& resourceFamily,
generalGroupBox->setTitle( i18n( "General Settings" ) );
- new QLabel( i18n( "Name:" ), generalGroupBox );
+ new QLabel( mResource->isSyncable()?i18n( "Profile Name:" ):i18n( "Name:" ), generalGroupBox );
mName = new KLineEdit( generalGroupBox );
- mReadOnly = new QCheckBox( i18n( "Read-only" ), 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 );
@@ -83,19 +87,39 @@ ConfigDialog::ConfigDialog( QWidget *parent, const QString& resourceFamily,
mConfigWidget = factory->configWidget( resource->type(), resourceGroupBox );
if ( mConfigWidget ) {
- connect( mConfigWidget, SIGNAL( setReadOnly( bool ) ),
+ connect( mConfigWidget, SIGNAL( setReadOnly( bool ) ),
SLOT( setReadOnly( bool ) ) );
- connect( mConfigWidget, SIGNAL( setPersistentReadOnly( bool ) ),
+ connect( mConfigWidget, SIGNAL( setPersistentReadOnly( bool ) ),
SLOT( setPersistentReadOnly( bool ) ) );
mConfigWidget->setInEditMode( false );
mConfigWidget->loadSettings( mResource );
mConfigWidget->show();
-
+
}
- connect( mName, SIGNAL( textChanged(const QString &)),
+ 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() );
-
+
//US setMinimumSize( 400, 250 );
setMinimumSize( KMIN(KGlobal::getDesktopWidth(), 400), KMIN(KGlobal::getDesktopHeight(), 250));
@@ -107,4 +131,8 @@ void ConfigDialog::setInEditMode( bool value )
if ( mConfigWidget )
mConfigWidget->setInEditMode( value );
+
+ if ( mSyncWidget )
+ mSyncWidget->setInEditMode( value );
+
}
@@ -116,19 +144,24 @@ void ConfigDialog::slotNameChanged( const QString &text)
void ConfigDialog::setReadOnly( bool value )
{
- if (mPersistentReadOnly == false)
- mReadOnly->setChecked( value );
- else
- mReadOnly->setChecked( true );
+ if (!mResource->isSyncable()) {
+
+ if (mPersistentReadOnly == false)
+ mReadOnly->setChecked( value );
+ else
+ mReadOnly->setChecked( true );
+ }
}
void ConfigDialog::setPersistentReadOnly( bool value )
{
- mPersistentReadOnly = value;
-
- if (value == true)
- setReadOnly( true );
-
- mReadOnly->setEnabled( !value );
-
+ if (!mResource->isSyncable()) {
+
+ mPersistentReadOnly = value;
+
+ if (value == true)
+ setReadOnly( true );
+
+ mReadOnly->setEnabled( !value );
+ }
}
@@ -136,10 +169,11 @@ 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() );
- mResource->setReadOnly( mReadOnly->isChecked() );
+ if (!mResource->isSyncable())
+ mResource->setReadOnly( mReadOnly->isChecked() );
if ( mConfigWidget ) {
@@ -149,4 +183,11 @@ void ConfigDialog::accept()
}
+ if ( mSyncWidget ) {
+ // First save generic information
+ // Also save setting of specific resource type
+ mSyncWidget->saveSettings( mResource );
+ }
+
+
KDialog::accept();
}
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
@@ -32,4 +32,5 @@ namespace KRES {
class Resource;
class ConfigWidget;
+ class SyncWidget;
class ConfigDialog : public KDialogBase
@@ -51,4 +52,5 @@ class ConfigDialog : public KDialogBase
private:
ConfigWidget *mConfigWidget;
+ SyncWidget *mSyncWidget;
Resource* mResource;
@@ -56,5 +58,5 @@ class ConfigDialog : public KDialogBase
QCheckBox *mReadOnly;
//US add a persistent readonly flag. We need that for opie and qtopia addressbooks.
- bool mPersistentReadOnly;
+ bool mPersistentReadOnly;
};
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
@@ -22,4 +22,11 @@
*/
+/*
+Enhanced Version of the file for platform independent KDE tools.
+Copyright (c) 2004 Ulf Schenk
+
+$Id$
+*/
+
#include <qgroupbox.h>
#include <qinputdialog.h>
@@ -51,4 +58,7 @@
using namespace KRES;
+const QString ConfigPage::syncfamily = "syncprofiles";
+
+
class ConfigViewItem : public QCheckListItem
{
@@ -165,11 +175,13 @@ void ConfigPage::load()
//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 );
@@ -229,5 +241,5 @@ void ConfigPage::slotFamilyChanged( int pos )
//US qDebug("ConfigPage::slotFamilyChanged 4 family=%s", mFamily.latin1());
-
+
mCurrentManager = mInfoMap[ pos ].mManager;
mCurrentConfig = mInfoMap[ pos ].mConfig;
@@ -240,13 +252,13 @@ void ConfigPage::slotFamilyChanged( int pos )
if ( mCurrentManager->isEmpty() ) {
//US qDebug("ConfigPage::slotFamilyChanged 4.1 mCurrentManager=%ul", mCurrentManager );
-
+
defaults();
}
-
+
Resource *standardResource = mCurrentManager->standardResource();
-
+
//US qDebug("ConfigPage::slotFamilyChanged 4.4 resourcename=%s", standardResource->resourceName().latin1());
-
+
Manager<Resource>::Iterator it;
for ( it = mCurrentManager->begin(); it != mCurrentManager->end(); ++it ) {
@@ -255,5 +267,5 @@ void ConfigPage::slotFamilyChanged( int pos )
item->setStandard( true );
}
-
+
if ( mListView->childCount() == 0 ) {
//US qDebug("ConfigPage::slotFamilyChanged 4.5 ");
@@ -264,10 +276,10 @@ 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" );
-
+
}
@@ -284,7 +296,20 @@ void ConfigPage::slotAdd()
QStringList descs = mCurrentManager->resourceTypeDescriptions();
bool ok = false;
- QString desc = QInputDialog::getItem( i18n( "Resource Configuration" ),
- i18n( "Please select type of the new resource:" ), descs, 0,
+
+ 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;
@@ -381,5 +406,5 @@ void ConfigPage::slotEdit()
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 );
}
@@ -400,10 +425,10 @@ void ConfigPage::slotStandard()
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;
}
@@ -465,5 +490,5 @@ void ConfigPage::slotItemClicked( QListViewItem *item )
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;
@@ -480,5 +505,5 @@ void ConfigPage::saveResourceSettings()
if ( mCurrentManager ) {
-
+
QListViewItem *item = mListView->firstChild();
while ( item ) {
@@ -488,8 +513,8 @@ void ConfigPage::saveResourceSettings()
if ( configItem->standard() && !configItem->readOnly() &&
configItem->isOn() ) {
-
+
mCurrentManager->setStandardResource( configItem->resource() );
}
-
+
// check if active or passive resource
configItem->resource()->setActive( configItem->isOn() );
@@ -500,9 +525,9 @@ void ConfigPage::saveResourceSettings()
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
@@ -97,4 +97,5 @@ class ConfigPage : public QWidget, public ManagerListener<Resource>
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
@@ -40,5 +40,5 @@ QDict<Factory> *Factory::mSelves = 0;
static KStaticDeleter< QDict<Factory> > staticDeleter;
-Factory *Factory::self( const QString& resourceFamily )
+Factory *Factory::self( const QString& resourceFamily)
{
@@ -53,5 +53,5 @@ Factory *Factory::self( const QString& resourceFamily )
if ( !factory ) {
- factory = new Factory( resourceFamily );
+ factory = new Factory( resourceFamily);
mSelves->insert( resourceFamily, factory );
}
@@ -60,5 +60,5 @@ Factory *Factory::self( const QString& resourceFamily )
}
-Factory::Factory( const QString& resourceFamily ) :
+Factory::Factory( const QString& resourceFamily) :
mResourceFamily( resourceFamily )
{
@@ -188,4 +188,38 @@ ConfigWidget *Factory::configWidget( const QString& type, QWidget *parent )
}
+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
{
@@ -212,5 +246,5 @@ QString Factory::typeDescription( const QString &type ) const
}
-Resource *Factory::resource( const QString& type, const KConfig *config )
+Resource *Factory::resource( const QString& type, const KConfig *config, bool syncable )
{
@@ -243,5 +277,5 @@ Resource *Factory::resource( const QString& type, const KConfig *config )
}
- Resource *resource = pluginFactory->resource( config );
+ Resource *resource = pluginFactory->resource( config, syncable );
if ( !resource ) {
//US kdDebug() << "'" << ptr->library() << "' is not a " + mResourceFamily + " plugin." << endl;
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
@@ -35,5 +35,5 @@
namespace KRES {
-//US
+//US
struct PluginInfo
{
@@ -66,5 +66,5 @@ class Factory
public:
-
+
/**
* Returns the global resource factory.
@@ -79,5 +79,5 @@ class Factory
*
* @param type The type of the resource, returned by @ref resources()
- * @param resource The resource to be editted.
+ * @param resource The resource to be editted.
* @param parent The parent widget
*/
@@ -85,4 +85,15 @@ class Factory
/**
+ * 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.
@@ -91,6 +102,7 @@ class Factory
* @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 );
/**
@@ -110,5 +122,5 @@ class Factory
protected:
- Factory( const QString& resourceFamily );
+ Factory( const QString& resourceFamily);
private:
@@ -117,6 +129,6 @@ class Factory
QString mResourceFamily;
//US QMap<QString, KService::Ptr> mTypeMap;
-//US lets store the pluginfo struct as value instead of a KService
- QMap<QString, PluginInfo*> mTypeMap;
+//US lets store the pluginfo struct as value instead of a KService
+ QMap<QString, PluginInfo*> mTypeMap;
};
diff --git a/microkde/microkdeE.pro b/microkde/microkdeE.pro
index ec2b1f7..b664c9a 100644
--- a/microkde/microkdeE.pro
+++ b/microkde/microkdeE.pro
@@ -90,4 +90,5 @@ osmartpointer.h \
kresources/configdialog.h \
kresources/kcmkresources.h \
+ kresources/syncwidget.h \
kdecore/kmdcodec.h \
kdecore/kconfigbase.h \
@@ -170,4 +171,5 @@ oprocess.cpp \
kresources/resource.cpp \
kresources/selectdialog.cpp \
+ kresources/syncwidget.cpp \
kutils/kcmultidialog.cpp