summaryrefslogtreecommitdiffabout
path: root/microkde/kresources
authorulf69 <ulf69>2004-10-13 21:27:10 (UTC)
committer ulf69 <ulf69>2004-10-13 21:27:10 (UTC)
commit737183a5abd7d7b02048e8a939bafd0a8e803918 (patch) (unidiff)
treeddacf864a06a6669911b1d48862e564399eeb33b /microkde/kresources
parent7bb6c5f55d29ad4632b1f5c7361eee4c0d8b7cb0 (diff)
downloadkdepimpi-737183a5abd7d7b02048e8a939bafd0a8e803918.zip
kdepimpi-737183a5abd7d7b02048e8a939bafd0a8e803918.tar.gz
kdepimpi-737183a5abd7d7b02048e8a939bafd0a8e803918.tar.bz2
removal of syncresources
Diffstat (limited to 'microkde/kresources') (more/less context) (ignore whitespace changes)
-rw-r--r--microkde/kresources/configdialog.cpp125
-rw-r--r--microkde/kresources/configdialog.h5
-rw-r--r--microkde/kresources/configpage.cpp29
-rw-r--r--microkde/kresources/factory.cpp38
-rw-r--r--microkde/kresources/factory.h15
-rw-r--r--microkde/kresources/manager.h12
-rw-r--r--microkde/kresources/managerimpl.cpp13
-rw-r--r--microkde/kresources/managerimpl.h8
-rw-r--r--microkde/kresources/resource.cpp1
-rw-r--r--microkde/kresources/resource.h24
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
@@ -1,246 +1,179 @@
1/* 1/*
2 This file is part of libkresources. 2 This file is part of libkresources.
3 3
4 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> 4 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org>
5 Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org> 5 Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org>
6 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org> 6 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org>
7 7
8 This library is free software; you can redistribute it and/or 8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Library General Public 9 modify it under the terms of the GNU Library General Public
10 License as published by the Free Software Foundation; either 10 License as published by the Free Software Foundation; either
11 version 2 of the License, or (at your option) any later version. 11 version 2 of the License, or (at your option) any later version.
12 12
13 This library is distributed in the hope that it will be useful, 13 This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Library General Public License for more details. 16 Library General Public License for more details.
17 17
18 You should have received a copy of the GNU Library General Public License 18 You should have received a copy of the GNU Library General Public License
19 along with this library; see the file COPYING.LIB. If not, write to 19 along with this library; see the file COPYING.LIB. If not, write to
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. 21 Boston, MA 02111-1307, USA.
22*/ 22*/
23 23
24#include <klocale.h> 24#include <klocale.h>
25#include <kglobal.h> 25#include <kglobal.h>
26#include <kmessagebox.h> 26#include <kmessagebox.h>
27 27
28#include <qgroupbox.h> 28#include <qgroupbox.h>
29#include <qlabel.h> 29#include <qlabel.h>
30#include <qlayout.h> 30#include <qlayout.h>
31#include <qpushbutton.h> 31#include <qpushbutton.h>
32#include <qvbox.h> 32#include <qvbox.h>
33 33
34#include <qcheckbox.h> 34#include <qcheckbox.h>
35#include <qscrollview.h> 35#include <qscrollview.h>
36 36
37#include <kbuttonbox.h> 37#include <kbuttonbox.h>
38#include <kdialog.h> 38#include <kdialog.h>
39#include <klineedit.h> 39#include <klineedit.h>
40 40
41#include "factory.h" 41#include "factory.h"
42#include "configwidget.h" 42#include "configwidget.h"
43#include "configdialog.h" 43#include "configdialog.h"
44#include "syncwidget.h"
45 44
46using namespace KRES; 45using namespace KRES;
47 46
48ConfigDialog::ConfigDialog( QWidget *parent, const QString& resourceFamily, 47ConfigDialog::ConfigDialog( QWidget *parent, const QString& resourceFamily,
49 Resource* resource, const char *name ) 48 Resource* resource, const char *name )
50 : KDialogBase( parent, name, true, resource->isSyncable()?i18n( "Sync Profile Configuration" ):i18n( "Resource Configuration" ), 49 : KDialogBase( parent, name, true, i18n( "Resource Configuration" ),
51 Ok|Cancel, Ok, true )/*, mConfig( config )*/, mSyncWidget_Settings(0), mSyncWidget_Conflicts(0),mSyncWidget_Remote(0), mResource( resource ), mPersistentReadOnly(false) 50 Ok|Cancel, Ok, true )/*, mConfig( config )*/, mResource( resource ), mPersistentReadOnly(false)
52{ 51{
53 52
54 Factory *factory = Factory::self( resourceFamily ); 53 Factory *factory = Factory::self( resourceFamily );
55 54
56//US resize( 250, 240 ); 55//US resize( 250, 240 );
57 resize( KMIN(KGlobal::getDesktopWidth(), 250), KMIN(KGlobal::getDesktopHeight(), 240)); 56 resize( KMIN(KGlobal::getDesktopWidth(), 250), KMIN(KGlobal::getDesktopHeight(), 240));
58 57
59 QFrame *main; 58 QFrame *main;
60 59
61 if (!mResource->isSyncable()) 60 main = plainPage();
62 main = plainPage();
63 else
64 main = addPage("Profile");
65 61
66 QVBoxLayout *mainLayout = new QVBoxLayout( main, 0, spacingHint() ); 62 QVBoxLayout *mainLayout = new QVBoxLayout( main, 0, spacingHint() );
67 63
68 64
69 QGroupBox *generalGroupBox = new QGroupBox( 2, Qt::Horizontal, main ); 65 QGroupBox *generalGroupBox = new QGroupBox( 2, Qt::Horizontal, main );
70 generalGroupBox->layout()->setSpacing( spacingHint() ); 66 generalGroupBox->layout()->setSpacing( spacingHint() );
71 generalGroupBox->setTitle( i18n( "General Settings" ) ); 67 generalGroupBox->setTitle( i18n( "General Settings" ) );
72 68
73 new QLabel( mResource->isSyncable()?i18n( "Profile Name:" ):i18n( "Name:" ), generalGroupBox ); 69 new QLabel( i18n( "Name:" ), generalGroupBox );
74 70
75 mName = new KLineEdit( generalGroupBox ); 71 mName = new KLineEdit( generalGroupBox );
76 72
77 if (!mResource->isSyncable()) { 73 new QLabel("", generalGroupBox );
78 new QLabel("", generalGroupBox ); 74 mReadOnly = new QCheckBox( i18n( "Read-only" ), generalGroupBox );
79 mReadOnly = new QCheckBox( i18n( "Read-only" ), generalGroupBox ); 75 mReadOnly->setChecked( mResource->readOnly() );
80 mReadOnly->setChecked( mResource->readOnly() ); 76
81 new QLabel("", generalGroupBox ); 77 new QLabel("", generalGroupBox );
82 mIncludeInSync = new QCheckBox( i18n( "Include in sync" ), generalGroupBox ); 78 mIncludeInSync = new QCheckBox( i18n( "Include in sync" ), generalGroupBox );
83 mIncludeInSync->setChecked( mResource->includeInSync() ); 79 mIncludeInSync->setChecked( mResource->includeInSync() );
84 }
85 80
86 mName->setText( mResource->resourceName() ); 81 mName->setText( mResource->resourceName() );
87 82
88 mainLayout->addWidget( generalGroupBox ); 83 mainLayout->addWidget( generalGroupBox );
89 84
90 QGroupBox *resourceGroupBox = new QGroupBox( 2, Qt::Horizontal, main ); 85 QGroupBox *resourceGroupBox = new QGroupBox( 2, Qt::Horizontal, main );
91 resourceGroupBox->layout()->setSpacing( spacingHint()); 86 resourceGroupBox->layout()->setSpacing( spacingHint());
92 resourceGroupBox->setTitle( i18n( "%1 Resource Settings" ) 87 resourceGroupBox->setTitle( i18n( "%1 Resource Settings" )
93 .arg( factory->typeName( resource->type() ) ) ); 88 .arg( factory->typeName( resource->type() ) ) );
94 mainLayout->addWidget( resourceGroupBox ); 89 mainLayout->addWidget( resourceGroupBox );
95 90
96 mainLayout->addStretch(); 91 mainLayout->addStretch();
97 92
98 mConfigWidget = factory->configWidget( resource->type(), resourceGroupBox ); 93 mConfigWidget = factory->configWidget( resource->type(), resourceGroupBox );
99 if ( mConfigWidget ) { 94 if ( mConfigWidget ) {
100 connect( mConfigWidget, SIGNAL( setReadOnly( bool ) ), 95 connect( mConfigWidget, SIGNAL( setReadOnly( bool ) ),
101 SLOT( setReadOnly( bool ) ) ); 96 SLOT( setReadOnly( bool ) ) );
97 connect( mConfigWidget, SIGNAL( setIncludeInSync( bool ) ),
98 SLOT( setIncludeInSync( bool ) ) );
102 connect( mConfigWidget, SIGNAL( setPersistentReadOnly( bool ) ), 99 connect( mConfigWidget, SIGNAL( setPersistentReadOnly( bool ) ),
103 SLOT( setPersistentReadOnly( bool ) ) ); 100 SLOT( setPersistentReadOnly( bool ) ) );
104 mConfigWidget->setInEditMode( false ); 101 mConfigWidget->setInEditMode( false );
105 mConfigWidget->loadSettings( mResource ); 102 mConfigWidget->loadSettings( mResource );
106 mConfigWidget->show(); 103 mConfigWidget->show();
107 104
108 } 105 }
109 106
110 if (mResource->isSyncable())
111 {
112 SyncWidgetContainer* c = factory->syncWidgetContainer( resource->type() );
113
114 QFrame* syncPage = addPage("Settings");
115 QVBoxLayout *syncLayout = new QVBoxLayout( syncPage, 0, spacingHint() );
116 mSyncWidget_Settings = c->generateSettingsTab(syncPage);
117 syncLayout->addWidget( mSyncWidget_Settings );
118
119 syncPage = addPage("Conflicts");
120 syncLayout = new QVBoxLayout( syncPage, 0, spacingHint() );
121 mSyncWidget_Conflicts = c->generateConflictsTab(syncPage);
122 syncLayout->addWidget( mSyncWidget_Conflicts );
123
124 syncPage = addPage("Remote");
125 syncLayout = new QVBoxLayout( syncPage, 0, spacingHint() );
126 mSyncWidget_Remote = c->generateRemoteTab(syncPage);
127 syncLayout->addWidget( mSyncWidget_Remote );
128
129
130 mSyncWidget_Settings->setInEditMode( false );
131 mSyncWidget_Settings->loadSettings( mResource );
132 mSyncWidget_Settings->show();
133
134 mSyncWidget_Conflicts->setInEditMode( false );
135 mSyncWidget_Conflicts->loadSettings( mResource );
136 mSyncWidget_Conflicts->show();
137
138 mSyncWidget_Remote->setInEditMode( false );
139 mSyncWidget_Remote->loadSettings( mResource );
140 mSyncWidget_Remote->show();
141
142 delete c;
143
144// QGroupBox *syncGroupBox = new QGroupBox( 2, Qt::Horizontal, syncPage );
145// syncGroupBox->layout()->setSpacing( spacingHint());
146// syncGroupBox->setTitle( i18n( "Syncronize Preferences" ) );
147// syncLayout->addWidget( syncGroupBox );
148
149// syncLayout->addStretch();
150/*US
151 mSyncWidget = factory->syncWidget( resource->type(), syncPage );
152 syncLayout->addWidget( mSyncWidget );
153 if ( mSyncWidget ) {
154 mSyncWidget->setInEditMode( false );
155 mSyncWidget->loadSettings( mResource );
156 mSyncWidget->show();
157 }
158 */
159 }
160
161
162
163 107
164 connect( mName, SIGNAL( textChanged(const QString &)), 108 connect( mName, SIGNAL( textChanged(const QString &)),
165 SLOT( slotNameChanged(const QString &))); 109 SLOT( slotNameChanged(const QString &)));
166 110
167 slotNameChanged( mName->text() ); 111 slotNameChanged( mName->text() );
168 112
169//US setMinimumSize( 400, 250 ); 113//US setMinimumSize( 400, 250 );
170 setMinimumSize( KMIN(KGlobal::getDesktopWidth(), 400), KMIN(KGlobal::getDesktopHeight(), 250)); 114 setMinimumSize( KMIN(KGlobal::getDesktopWidth(), 400), KMIN(KGlobal::getDesktopHeight(), 250));
171 115
172} 116}
173 117
174void ConfigDialog::setInEditMode( bool value ) 118void ConfigDialog::setInEditMode( bool value )
175{ 119{
176 if ( mConfigWidget ) 120 if ( mConfigWidget )
177 mConfigWidget->setInEditMode( value ); 121 mConfigWidget->setInEditMode( value );
178
179 if ( mSyncWidget_Settings )
180 mSyncWidget_Settings->setInEditMode( value );
181 if ( mSyncWidget_Conflicts )
182 mSyncWidget_Conflicts->setInEditMode( value );
183 if ( mSyncWidget_Remote )
184 mSyncWidget_Remote->setInEditMode( value );
185
186} 122}
187 123
188void ConfigDialog::slotNameChanged( const QString &text) 124void ConfigDialog::slotNameChanged( const QString &text)
189{ 125{
190 enableButtonOK( !text.isEmpty() ); 126 enableButtonOK( !text.isEmpty() );
191} 127}
192 128
193void ConfigDialog::setReadOnly( bool value ) 129void ConfigDialog::setReadOnly( bool value )
194{ 130{
195 if (!mResource->isSyncable()) {
196
197 if (mPersistentReadOnly == false) 131 if (mPersistentReadOnly == false)
198 mReadOnly->setChecked( value ); 132 mReadOnly->setChecked( value );
199 else 133 else
200 mReadOnly->setChecked( true ); 134 mReadOnly->setChecked( true );
201 }
202} 135}
203 136
204void ConfigDialog::setPersistentReadOnly( bool value ) 137void ConfigDialog::setIncludeInSync( bool value )
205{ 138{
206 if (!mResource->isSyncable()) { 139 if (mPersistentReadOnly == false)
140 mIncludeInSync->setChecked( value );
141 else
142 mIncludeInSync->setChecked( true );
143}
207 144
145void ConfigDialog::setPersistentReadOnly( bool value )
146{
208 mPersistentReadOnly = value; 147 mPersistentReadOnly = value;
209 148
210 if (value == true) 149 if (value == true) {
211 setReadOnly( true ); 150 setReadOnly( true );
151 setIncludeInSync( true );
152 }
212 153
213 mReadOnly->setEnabled( !value ); 154 mReadOnly->setEnabled( !value );
214 } 155 mIncludeInSync->setEnabled (!value );
215} 156}
216 157
158
217void ConfigDialog::accept() 159void ConfigDialog::accept()
218{ 160{
219 if ( mName->text().isEmpty() ) { 161 if ( mName->text().isEmpty() ) {
220 KMessageBox::sorry( this, mResource->isSyncable()?i18n( "Please enter a profile name" ):i18n( "Please enter a resource name" ) ); 162 KMessageBox::sorry( this, i18n( "Please enter a resource name" ) );
221 return; 163 return;
222 } 164 }
223 165
224 mResource->setResourceName( mName->text() ); 166 mResource->setResourceName( mName->text() );
225 if (!mResource->isSyncable()) 167 mResource->setReadOnly( mReadOnly->isChecked() );
226 mResource->setReadOnly( mReadOnly->isChecked() ); 168 mResource->setIncludeInSync( mIncludeInSync->isChecked() );
227 mResource->setIncludeInSync( mIncludeInSync->isChecked() );
228 169
229 if ( mConfigWidget ) { 170 if ( mConfigWidget ) {
230 // First save generic information 171 // First save generic information
231 // Also save setting of specific resource type 172 // Also save setting of specific resource type
232 mConfigWidget->saveSettings( mResource ); 173 mConfigWidget->saveSettings( mResource );
233 } 174 }
234 175
235 if ( mSyncWidget_Settings )
236 mSyncWidget_Settings->saveSettings( mResource );
237 if ( mSyncWidget_Conflicts )
238 mSyncWidget_Conflicts->saveSettings( mResource );
239 if ( mSyncWidget_Remote )
240 mSyncWidget_Remote->saveSettings( mResource );
241
242
243 KDialog::accept(); 176 KDialog::accept();
244} 177}
245 178
246//US #include "configdialog.moc" 179//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
@@ -1,68 +1,65 @@
1/* 1/*
2 This file is part of libkresources. 2 This file is part of libkresources.
3 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> 3 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org>
4 Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org> 4 Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22#ifndef KRESOURCES_CONFIGDIALOG_H 22#ifndef KRESOURCES_CONFIGDIALOG_H
23#define KRESOURCES_CONFIGDIALOG_H 23#define KRESOURCES_CONFIGDIALOG_H
24 24
25#include <kdialogbase.h> 25#include <kdialogbase.h>
26 26
27class KLineEdit; 27class KLineEdit;
28class QCheckBox; 28class QCheckBox;
29class KButtonBox; 29class KButtonBox;
30 30
31namespace KRES { 31namespace KRES {
32 class Resource; 32 class Resource;
33 class ConfigWidget; 33 class ConfigWidget;
34 class SyncWidget;
35 34
36class ConfigDialog : public KDialogBase 35class ConfigDialog : public KDialogBase
37{ 36{
38 Q_OBJECT 37 Q_OBJECT
39 public: 38 public:
40 // Resource=0: create new resource 39 // Resource=0: create new resource
41 ConfigDialog( QWidget *parent, const QString& resourceFamily, 40 ConfigDialog( QWidget *parent, const QString& resourceFamily,
42 Resource* resource, const char *name = 0); 41 Resource* resource, const char *name = 0);
43 42
44 void setInEditMode( bool value ); 43 void setInEditMode( bool value );
45 44
46 protected slots: 45 protected slots:
47 void accept(); 46 void accept();
48 void setReadOnly( bool value ); 47 void setReadOnly( bool value );
48 void setIncludeInSync( bool value );
49 void setPersistentReadOnly( bool value ); 49 void setPersistentReadOnly( bool value );
50 void slotNameChanged( const QString &text); 50 void slotNameChanged( const QString &text);
51 51
52 private: 52 private:
53 ConfigWidget *mConfigWidget; 53 ConfigWidget *mConfigWidget;
54 SyncWidget *mSyncWidget_Settings;
55 SyncWidget *mSyncWidget_Conflicts;
56 SyncWidget *mSyncWidget_Remote;
57 Resource* mResource; 54 Resource* mResource;
58 55
59 KLineEdit *mName; 56 KLineEdit *mName;
60 QCheckBox *mReadOnly; 57 QCheckBox *mReadOnly;
61 QCheckBox *mIncludeInSync; 58 QCheckBox *mIncludeInSync;
62//US add a persistent readonly flag. We need that for opie and qtopia addressbooks. 59//US add a persistent readonly flag. We need that for opie and qtopia addressbooks.
63 bool mPersistentReadOnly; 60 bool mPersistentReadOnly;
64}; 61};
65 62
66} 63}
67 64
68#endif 65#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
@@ -1,442 +1,421 @@
1/* 1/*
2 This file is part of libkresources. 2 This file is part of libkresources.
3 3
4 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> 4 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org>
5 Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org> 5 Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org>
6 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org> 6 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org>
7 7
8 This library is free software; you can redistribute it and/or 8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Library General Public 9 modify it under the terms of the GNU Library General Public
10 License as published by the Free Software Foundation; either 10 License as published by the Free Software Foundation; either
11 version 2 of the License, or (at your option) any later version. 11 version 2 of the License, or (at your option) any later version.
12 12
13 This library is distributed in the hope that it will be useful, 13 This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Library General Public License for more details. 16 Library General Public License for more details.
17 17
18 You should have received a copy of the GNU Library General Public License 18 You should have received a copy of the GNU Library General Public License
19 along with this library; see the file COPYING.LIB. If not, write to 19 along with this library; see the file COPYING.LIB. If not, write to
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. 21 Boston, MA 02111-1307, USA.
22*/ 22*/
23 23
24/* 24/*
25Enhanced Version of the file for platform independent KDE tools. 25Enhanced Version of the file for platform independent KDE tools.
26Copyright (c) 2004 Ulf Schenk 26Copyright (c) 2004 Ulf Schenk
27 27
28$Id$ 28$Id$
29*/ 29*/
30 30
31#include <qgroupbox.h> 31#include <qgroupbox.h>
32#include <qinputdialog.h> 32#include <qinputdialog.h>
33#include <qlabel.h> 33#include <qlabel.h>
34#include <qlayout.h> 34#include <qlayout.h>
35 35
36#include <kapplication.h> 36#include <kapplication.h>
37#include <kcombobox.h> 37#include <kcombobox.h>
38#include <kdebug.h> 38#include <kdebug.h>
39#include <klocale.h> 39#include <klocale.h>
40#include <kmessagebox.h> 40#include <kmessagebox.h>
41#include <ksimpleconfig.h> 41#include <ksimpleconfig.h>
42#include <kstandarddirs.h> 42#include <kstandarddirs.h>
43#include <kurlrequester.h> 43#include <kurlrequester.h>
44#include <klistview.h> 44#include <klistview.h>
45#include <kbuttonbox.h> 45#include <kbuttonbox.h>
46//US #include <ktrader.h> 46//US #include <ktrader.h>
47 47
48#include "resource.h" 48#include "resource.h"
49#include "configdialog.h" 49#include "configdialog.h"
50 50
51#include "configpage.h" 51#include "configpage.h"
52 52
53//US 53//US
54#include <qpushbutton.h> 54#include <qpushbutton.h>
55#include <qfile.h> 55#include <qfile.h>
56#include <kglobal.h> 56#include <kglobal.h>
57 57
58using namespace KRES; 58using namespace KRES;
59 59
60const QString ConfigPage::syncfamily = "syncprofiles";
61
62
63class ConfigViewItem : public QCheckListItem 60class ConfigViewItem : public QCheckListItem
64{ 61{
65 public: 62 public:
66 ConfigViewItem( QListView *parent, Resource* resource ) : 63 ConfigViewItem( QListView *parent, Resource* resource ) :
67 QCheckListItem( parent, resource->resourceName(), CheckBox ), 64 QCheckListItem( parent, resource->resourceName(), CheckBox ),
68 mResource( resource ), 65 mResource( resource ),
69 mIsStandard( false ) 66 mIsStandard( false )
70 { 67 {
71 setText( 1, mResource->type() ); 68 setText( 1, mResource->type() );
72 setOn( mResource->isActive() ); 69 setOn( mResource->isActive() );
73 } 70 }
74 71
75 void setStandard( bool value ) 72 void setStandard( bool value )
76 { 73 {
77 setText( 2, ( value ? i18n( "Yes" ) : QString::null ) ); 74 setText( 2, ( value ? i18n( "Yes" ) : QString::null ) );
78 mIsStandard = value; 75 mIsStandard = value;
79 } 76 }
80 77
81 bool standard() const { return mIsStandard; } 78 bool standard() const { return mIsStandard; }
82 bool readOnly() const { return mResource->readOnly(); } 79 bool readOnly() const { return mResource->readOnly(); }
83 80
84 Resource *resource() { return mResource; } 81 Resource *resource() { return mResource; }
85 82
86 private: 83 private:
87 Resource* mResource; 84 Resource* mResource;
88 85
89 bool mIsStandard; 86 bool mIsStandard;
90}; 87};
91 88
92ConfigPage::ConfigPage( QWidget *parent, const char *name ) 89ConfigPage::ConfigPage( QWidget *parent, const char *name )
93 : QWidget( parent, name ), 90 : QWidget( parent, name ),
94 mCurrentManager( 0 ), 91 mCurrentManager( 0 ),
95 mCurrentConfig( 0 ) 92 mCurrentConfig( 0 )
96{ 93{
97 setCaption( i18n( "Resource Configuration" ) ); 94 setCaption( i18n( "Resource Configuration" ) );
98 95
99 QVBoxLayout *mainLayout = new QVBoxLayout( this ); 96 QVBoxLayout *mainLayout = new QVBoxLayout( this );
100 97
101 QGroupBox *groupBox = new QGroupBox( i18n( "Resources" ), this ); 98 QGroupBox *groupBox = new QGroupBox( i18n( "Resources" ), this );
102 groupBox->setColumnLayout(0, Qt::Vertical ); 99 groupBox->setColumnLayout(0, Qt::Vertical );
103 groupBox->layout()->setSpacing( 3 ); 100 groupBox->layout()->setSpacing( 3 );
104 groupBox->layout()->setMargin( 5 ); 101 groupBox->layout()->setMargin( 5 );
105 QGridLayout *groupBoxLayout = new QGridLayout( groupBox->layout(), 4, 2 ); 102 QGridLayout *groupBoxLayout = new QGridLayout( groupBox->layout(), 4, 2 );
106 103
107//US mFamilyCombo = new KComboBox( false, groupBox ); 104//US mFamilyCombo = new KComboBox( false, groupBox );
108 mFamilyCombo = new KComboBox( groupBox ); 105 mFamilyCombo = new KComboBox( groupBox );
109 groupBoxLayout->addMultiCellWidget( mFamilyCombo, 0, 0, 0, 1 ); 106 groupBoxLayout->addMultiCellWidget( mFamilyCombo, 0, 0, 0, 1 );
110 107
111 mListView = new KListView( groupBox ); 108 mListView = new KListView( groupBox );
112 mListView->setAllColumnsShowFocus( true ); 109 mListView->setAllColumnsShowFocus( true );
113 mListView->addColumn( i18n( "Name" ) ); 110 mListView->addColumn( i18n( "Name" ) );
114 mListView->addColumn( i18n( "Type" ) ); 111 mListView->addColumn( i18n( "Type" ) );
115 mListView->addColumn( i18n( "Standard" ) ); 112 mListView->addColumn( i18n( "Standard" ) );
116 113
117//US groupBoxLayout->addWidget( mListView, 1, 0 ); 114//US groupBoxLayout->addWidget( mListView, 1, 0 );
118 groupBoxLayout->addMultiCellWidget( mListView, 1, 1, 0, 1 ); 115 groupBoxLayout->addMultiCellWidget( mListView, 1, 1, 0, 1 );
119 116
120 117
121 mAddButton = new QPushButton( i18n( "&Add..." ), groupBox ); 118 mAddButton = new QPushButton( i18n( "&Add..." ), groupBox );
122 groupBoxLayout->addWidget( mAddButton, 2, 0 ); 119 groupBoxLayout->addWidget( mAddButton, 2, 0 );
123 mRemoveButton = new QPushButton( i18n( "&Remove" ), groupBox ); 120 mRemoveButton = new QPushButton( i18n( "&Remove" ), groupBox );
124 groupBoxLayout->addWidget( mRemoveButton, 2, 1 ); 121 groupBoxLayout->addWidget( mRemoveButton, 2, 1 );
125 mEditButton = new QPushButton( i18n( "&Edit..." ), groupBox ); 122 mEditButton = new QPushButton( i18n( "&Edit..." ), groupBox );
126 groupBoxLayout->addWidget( mEditButton, 3, 0 ); 123 groupBoxLayout->addWidget( mEditButton, 3, 0 );
127 mStandardButton = new QPushButton( i18n( "&Use as Standard" ), groupBox ); 124 mStandardButton = new QPushButton( i18n( "&Use as Standard" ), groupBox );
128 groupBoxLayout->addWidget( mStandardButton, 3, 1 ); 125 groupBoxLayout->addWidget( mStandardButton, 3, 1 );
129 126
130 mRemoveButton->setEnabled( false ); 127 mRemoveButton->setEnabled( false );
131 mEditButton->setEnabled( false ); 128 mEditButton->setEnabled( false );
132 mStandardButton->setEnabled( false ); 129 mStandardButton->setEnabled( false );
133 130
134 131
135 connect( mAddButton, SIGNAL( clicked() ), SLOT(slotAdd()) ); 132 connect( mAddButton, SIGNAL( clicked() ), SLOT(slotAdd()) );
136 connect( mRemoveButton, SIGNAL( clicked() ), SLOT(slotRemove()) ); 133 connect( mRemoveButton, SIGNAL( clicked() ), SLOT(slotRemove()) );
137 connect( mEditButton, SIGNAL( clicked() ), SLOT(slotEdit()) ); 134 connect( mEditButton, SIGNAL( clicked() ), SLOT(slotEdit()) );
138 connect( mStandardButton, SIGNAL( clicked() ), SLOT(slotStandard()) ); 135 connect( mStandardButton, SIGNAL( clicked() ), SLOT(slotStandard()) );
139 136
140 137
141 mainLayout->addWidget( groupBox ); 138 mainLayout->addWidget( groupBox );
142 139
143 connect( mFamilyCombo, SIGNAL( activated( int ) ), 140 connect( mFamilyCombo, SIGNAL( activated( int ) ),
144 SLOT( slotFamilyChanged( int ) ) ); 141 SLOT( slotFamilyChanged( int ) ) );
145 connect( mListView, SIGNAL( selectionChanged() ), 142 connect( mListView, SIGNAL( selectionChanged() ),
146 SLOT( slotSelectionChanged() ) ); 143 SLOT( slotSelectionChanged() ) );
147 connect( mListView, SIGNAL( clicked( QListViewItem * ) ), 144 connect( mListView, SIGNAL( clicked( QListViewItem * ) ),
148 SLOT( slotItemClicked( QListViewItem * ) ) ); 145 SLOT( slotItemClicked( QListViewItem * ) ) );
149 146
150 mLastItem = 0; 147 mLastItem = 0;
151 148
152//US mConfig = new KConfig( "kcmkresourcesrc" ); 149//US mConfig = new KConfig( "kcmkresourcesrc" );
153 mConfig = new KConfig( locateLocal( "config", "kcmkresourcesrc") ); 150 mConfig = new KConfig( locateLocal( "config", "kcmkresourcesrc") );
154 mConfig->setGroup( "General" ); 151 mConfig->setGroup( "General" );
155 152
156 load(); 153 load();
157} 154}
158 155
159ConfigPage::~ConfigPage() 156ConfigPage::~ConfigPage()
160{ 157{
161 QValueList<ResourcePageInfo>::Iterator it; 158 QValueList<ResourcePageInfo>::Iterator it;
162 for ( it = mInfoMap.begin(); it != mInfoMap.end(); ++it ) { 159 for ( it = mInfoMap.begin(); it != mInfoMap.end(); ++it ) {
163 (*it).mManager->removeListener( this ); 160 (*it).mManager->removeListener( this );
164 delete (*it).mManager; 161 delete (*it).mManager;
165 delete (*it).mConfig; 162 delete (*it).mConfig;
166 } 163 }
167 164
168 mConfig->writeEntry( "CurrentFamily", mFamilyCombo->currentItem() ); 165 mConfig->writeEntry( "CurrentFamily", mFamilyCombo->currentItem() );
169 delete mConfig; 166 delete mConfig;
170 mConfig = 0; 167 mConfig = 0;
171} 168}
172 169
173void ConfigPage::load() 170void ConfigPage::load()
174{ 171{
175 kdDebug(5650) << "ConfigPage::load()" << endl; 172 kdDebug(5650) << "ConfigPage::load()" << endl;
176 173
177 mListView->clear(); 174 mListView->clear();
178 175
179//US we remove the dynamic pluginloader, and set the one family we need (contact) manually. 176//US we remove the dynamic pluginloader, and set the one family we need (contact) manually.
180 177
181//US KTrader::OfferList plugins = KTrader::self()->query( "KResources/Plugin" ); 178//US KTrader::OfferList plugins = KTrader::self()->query( "KResources/Plugin" );
182//US KTrader::OfferList::ConstIterator it; 179//US KTrader::OfferList::ConstIterator it;
183//US for ( it = plugins.begin(); it != plugins.end(); ++it ) { 180//US for ( it = plugins.begin(); it != plugins.end(); ++it ) {
184//US QVariant tmp = (*it)->property( "X-KDE-ResourceFamily" ); 181//US QVariant tmp = (*it)->property( "X-KDE-ResourceFamily" );
185//US QString family = tmp.toString(); 182//US QString family = tmp.toString();
186 QStringList families; 183 QStringList families;
187 families << "contact" << syncfamily; 184 families << "contact";
188 185
189 186
190 for ( QStringList::Iterator it = families.begin(); it != families.end(); ++it ) 187 for ( QStringList::Iterator it = families.begin(); it != families.end(); ++it )
191 { 188 {
192 QString family = (*it); 189 QString family = (*it);
193 if ( !family.isEmpty() ) { 190 if ( !family.isEmpty() ) {
194 if ( !mFamilyMap.contains( family ) ) { 191 if ( !mFamilyMap.contains( family ) ) {
195 mCurrentManager = new Manager<Resource>( family, (family == syncfamily) ); 192 mCurrentManager = new Manager<Resource>( family );
196 if ( mCurrentManager ) { 193 if ( mCurrentManager ) {
197 mFamilyMap.append( family ); 194 mFamilyMap.append( family );
198 mCurrentManager->addListener( this ); 195 mCurrentManager->addListener( this );
199 196
200 ResourcePageInfo info; 197 ResourcePageInfo info;
201 info.mManager = mCurrentManager; 198 info.mManager = mCurrentManager;
202 QString configDir = KGlobal::dirs()->saveLocation( "config" ); 199 QString configDir = KGlobal::dirs()->saveLocation( "config" );
203 //QString configDir = KStandardDirs::appDir() + "/config"; 200 //QString configDir = KStandardDirs::appDir() + "/config";
204 if ( family == "contact" && QFile::exists( configDir + "/kabcrc" ) ) { 201 if ( family == "contact" && QFile::exists( configDir + "/kabcrc" ) ) {
205 info.mConfig = new KConfig( locateLocal( "config", "kabcrc" ) ); 202 info.mConfig = new KConfig( locateLocal( "config", "kabcrc" ) );
206 } else if ( family == "calendar" && QFile::exists( configDir + "/kcalrc" ) ) { 203 } else if ( family == "calendar" && QFile::exists( configDir + "/kcalrc" ) ) {
207 info.mConfig = new KConfig( locateLocal( "config", "kcalrc" ) ); 204 info.mConfig = new KConfig( locateLocal( "config", "kcalrc" ) );
208 } else if ( family == syncfamily && QFile::exists( configDir + "/kabcsyncrc" ) ) {
209 info.mConfig = new KConfig( locateLocal( "config", "kabcsyncrc" ) );
210 } else { 205 } else {
211 QString configFile = locateLocal( "config", QString( "kresources/%1/stdrc" ).arg( family ) ); 206 QString configFile = locateLocal( "config", QString( "kresources/%1/stdrc" ).arg( family ) );
212 info.mConfig = new KConfig( configFile ); 207 info.mConfig = new KConfig( configFile );
213 } 208 }
214 info.mManager->readConfig( info.mConfig ); 209 info.mManager->readConfig( info.mConfig );
215 210
216 mInfoMap.append( info ); 211 mInfoMap.append( info );
217 } 212 }
218 } 213 }
219 } 214 }
220 } 215 }
221 mCurrentManager = 0; 216 mCurrentManager = 0;
222 217
223 mFamilyCombo->insertStringList( mFamilyMap ); 218 mFamilyCombo->insertStringList( mFamilyMap );
224 219
225 int currentFamily = mConfig->readNumEntry( "CurrentFamily", 0 ); 220 int currentFamily = mConfig->readNumEntry( "CurrentFamily", 0 );
226 mFamilyCombo->setCurrentItem( currentFamily ); 221 mFamilyCombo->setCurrentItem( currentFamily );
227 slotFamilyChanged( currentFamily ); 222 slotFamilyChanged( currentFamily );
228} 223}
229 224
230void ConfigPage::save() 225void ConfigPage::save()
231{ 226{
232 saveResourceSettings(); 227 saveResourceSettings();
233 228
234 QValueList<ResourcePageInfo>::Iterator it; 229 QValueList<ResourcePageInfo>::Iterator it;
235 for ( it = mInfoMap.begin(); it != mInfoMap.end(); ++it ) 230 for ( it = mInfoMap.begin(); it != mInfoMap.end(); ++it )
236 (*it).mManager->writeConfig( (*it).mConfig ); 231 (*it).mManager->writeConfig( (*it).mConfig );
237 232
238 emit changed( false ); 233 emit changed( false );
239} 234}
240 235
241void ConfigPage::defaults() 236void ConfigPage::defaults()
242{ 237{
243} 238}
244 239
245void ConfigPage::slotFamilyChanged( int pos ) 240void ConfigPage::slotFamilyChanged( int pos )
246{ 241{
247 if ( pos < 0 || pos >= (int)mFamilyMap.count() ) 242 if ( pos < 0 || pos >= (int)mFamilyMap.count() )
248 return; 243 return;
249 244
250 saveResourceSettings(); 245 saveResourceSettings();
251 246
252 mFamily = mFamilyMap[ pos ]; 247 mFamily = mFamilyMap[ pos ];
253 248
254//US qDebug("ConfigPage::slotFamilyChanged 4 family=%s", mFamily.latin1()); 249//US qDebug("ConfigPage::slotFamilyChanged 4 family=%s", mFamily.latin1());
255 250
256 mCurrentManager = mInfoMap[ pos ].mManager; 251 mCurrentManager = mInfoMap[ pos ].mManager;
257 mCurrentConfig = mInfoMap[ pos ].mConfig; 252 mCurrentConfig = mInfoMap[ pos ].mConfig;
258 253
259 if ( !mCurrentManager ) 254 if ( !mCurrentManager )
260 kdDebug(5650) << "ERROR: cannot create ResourceManager<Resource>( mFamily )" << endl; 255 kdDebug(5650) << "ERROR: cannot create ResourceManager<Resource>( mFamily )" << endl;
261 256
262 mListView->clear(); 257 mListView->clear();
263 258
264 if ( mCurrentManager->isEmpty() ) { 259 if ( mCurrentManager->isEmpty() ) {
265//US qDebug("ConfigPage::slotFamilyChanged 4.1 mCurrentManager=%ul", mCurrentManager ); 260//US qDebug("ConfigPage::slotFamilyChanged 4.1 mCurrentManager=%ul", mCurrentManager );
266 261
267 defaults(); 262 defaults();
268 } 263 }
269 264
270 Resource *standardResource = mCurrentManager->standardResource(); 265 Resource *standardResource = mCurrentManager->standardResource();
271 266
272//US qDebug("ConfigPage::slotFamilyChanged 4.4 resourcename=%s", standardResource->resourceName().latin1()); 267//US qDebug("ConfigPage::slotFamilyChanged 4.4 resourcename=%s", standardResource->resourceName().latin1());
273 268
274 269
275 Manager<Resource>::Iterator it; 270 Manager<Resource>::Iterator it;
276 for ( it = mCurrentManager->begin(); it != mCurrentManager->end(); ++it ) { 271 for ( it = mCurrentManager->begin(); it != mCurrentManager->end(); ++it ) {
277 ConfigViewItem *item = new ConfigViewItem( mListView, *it ); 272 ConfigViewItem *item = new ConfigViewItem( mListView, *it );
278 if ( *it == standardResource ) 273 if ( *it == standardResource )
279 item->setStandard( true ); 274 item->setStandard( true );
280 } 275 }
281 276
282 if ( mListView->childCount() == 0 ) { 277 if ( mListView->childCount() == 0 ) {
283//US qDebug("ConfigPage::slotFamilyChanged 4.5 "); 278//US qDebug("ConfigPage::slotFamilyChanged 4.5 ");
284 279
285 defaults(); 280 defaults();
286 emit changed( true ); 281 emit changed( true );
287 mCurrentManager->writeConfig( mCurrentConfig ); 282 mCurrentManager->writeConfig( mCurrentConfig );
288 } else { 283 } else {
289//US qDebug("ConfigPage::slotFamilyChanged 4.6 "); 284//US qDebug("ConfigPage::slotFamilyChanged 4.6 ");
290 285
291 if ( !standardResource ) { 286 if ( !standardResource ) {
292 KMessageBox::sorry( this, i18n( "There is no standard resource!<br> Please select one." ) ); 287 KMessageBox::sorry( this, i18n( "There is no standard resource!<br> Please select one." ) );
293 288
294//US qDebug("ConfigPage::slotFamilyChanged 4.7" ); 289//US qDebug("ConfigPage::slotFamilyChanged 4.7" );
295 290
296 } 291 }
297 292
298 emit changed( false ); 293 emit changed( false );
299 } 294 }
300} 295}
301 296
302void ConfigPage::slotAdd() 297void ConfigPage::slotAdd()
303{ 298{
304 if ( !mCurrentManager ) 299 if ( !mCurrentManager )
305 return; 300 return;
306 301
307 QStringList types = mCurrentManager->resourceTypeNames(); 302 QStringList types = mCurrentManager->resourceTypeNames();
308 QStringList descs = mCurrentManager->resourceTypeDescriptions(); 303 QStringList descs = mCurrentManager->resourceTypeDescriptions();
309 bool ok = false; 304 bool ok = false;
310 305
311 QString desc; 306 QString desc;
312 307
313 if (mFamily == syncfamily) 308 desc = QInputDialog::getItem( i18n( "Resource Configuration" ),
314 {
315 desc = QInputDialog::getItem( i18n( "Sync Configuration" ),
316 i18n( "Select resource type for the new sync profile:" ), descs, 0,
317 false, &ok, this );
318 }
319 else
320 {
321 desc = QInputDialog::getItem( i18n( "Resource Configuration" ),
322 i18n( "Select type of the new resource:" ), descs, 0, 309 i18n( "Select type of the new resource:" ), descs, 0,
323 false, &ok, this ); 310 false, &ok, this );
324 }
325 311
326 if ( !ok ) 312 if ( !ok )
327 return; 313 return;
328 314
329 QString type = types[ descs.findIndex( desc ) ]; 315 QString type = types[ descs.findIndex( desc ) ];
330 316
331 // Create new resource 317 // Create new resource
332 Resource *resource = mCurrentManager->createResource( type ); 318 Resource *resource = mCurrentManager->createResource( type );
333 if ( !resource ) { 319 if ( !resource ) {
334 KMessageBox::error( this, i18n("Unable to create resource of type '%1'.") 320 KMessageBox::error( this, i18n("Unable to create resource of type '%1'.")
335 .arg( type ) ); 321 .arg( type ) );
336 return; 322 return;
337 } 323 }
338 324
339 if (mFamily == syncfamily) 325 resource->setResourceName( type + "-resource" );
340 {
341 resource->setResourceName( type + "-syncprofile" );
342 }
343 else
344 {
345 resource->setResourceName( type + "-resource" );
346 }
347 326
348 ConfigDialog dlg( this, mFamily, resource, "KRES::ConfigDialog" ); 327 ConfigDialog dlg( this, mFamily, resource, "KRES::ConfigDialog" );
349 328
350 if ( dlg.exec() ) { 329 if ( dlg.exec() ) {
351 mCurrentManager->add( resource ); 330 mCurrentManager->add( resource );
352 331
353 ConfigViewItem *item = new ConfigViewItem( mListView, resource ); 332 ConfigViewItem *item = new ConfigViewItem( mListView, resource );
354 333
355 mLastItem = item; 334 mLastItem = item;
356 335
357 // if there are only read-only resources we'll set this resource 336 // if there are only read-only resources we'll set this resource
358 // as standard resource 337 // as standard resource
359 if ( !resource->readOnly() ) { 338 if ( !resource->readOnly() ) {
360 bool onlyReadOnly = true; 339 bool onlyReadOnly = true;
361 QListViewItem *it = mListView->firstChild(); 340 QListViewItem *it = mListView->firstChild();
362 while ( it != 0 ) { 341 while ( it != 0 ) {
363 ConfigViewItem *confIt = static_cast<ConfigViewItem*>( it ); 342 ConfigViewItem *confIt = static_cast<ConfigViewItem*>( it );
364 if ( !confIt->readOnly() && confIt != item ) 343 if ( !confIt->readOnly() && confIt != item )
365 onlyReadOnly = false; 344 onlyReadOnly = false;
366 345
367 it = it->itemBelow(); 346 it = it->itemBelow();
368 } 347 }
369 348
370 if ( onlyReadOnly ) 349 if ( onlyReadOnly )
371 item->setStandard( true ); 350 item->setStandard( true );
372 } 351 }
373 352
374 emit changed( true ); 353 emit changed( true );
375 } else { 354 } else {
376 delete resource; 355 delete resource;
377 resource = 0; 356 resource = 0;
378 } 357 }
379} 358}
380 359
381void ConfigPage::slotRemove() 360void ConfigPage::slotRemove()
382{ 361{
383 if ( !mCurrentManager ) 362 if ( !mCurrentManager )
384 return; 363 return;
385 364
386 QListViewItem *item = mListView->currentItem(); 365 QListViewItem *item = mListView->currentItem();
387 ConfigViewItem *confItem = static_cast<ConfigViewItem*>( item ); 366 ConfigViewItem *confItem = static_cast<ConfigViewItem*>( item );
388 367
389 if ( !confItem ) 368 if ( !confItem )
390 return; 369 return;
391 370
392 if ( confItem->standard() ) { 371 if ( confItem->standard() ) {
393 KMessageBox::sorry( this, i18n( "You cannot remove your standard resource!\n Please select a new standard resource first." ) ); 372 KMessageBox::sorry( this, i18n( "You cannot remove your standard resource!\n Please select a new standard resource first." ) );
394 return; 373 return;
395 } 374 }
396 375
397 mCurrentManager->remove( confItem->resource() ); 376 mCurrentManager->remove( confItem->resource() );
398 377
399 if ( item == mLastItem ) 378 if ( item == mLastItem )
400 mLastItem = 0; 379 mLastItem = 0;
401 380
402 mListView->takeItem( item ); 381 mListView->takeItem( item );
403 delete item; 382 delete item;
404 383
405 emit changed( true ); 384 emit changed( true );
406} 385}
407 386
408void ConfigPage::slotEdit() 387void ConfigPage::slotEdit()
409{ 388{
410 if ( !mCurrentManager ) 389 if ( !mCurrentManager )
411 return; 390 return;
412 391
413 QListViewItem *item = mListView->currentItem(); 392 QListViewItem *item = mListView->currentItem();
414 ConfigViewItem *configItem = static_cast<ConfigViewItem*>( item ); 393 ConfigViewItem *configItem = static_cast<ConfigViewItem*>( item );
415 if ( !configItem ) 394 if ( !configItem )
416 return; 395 return;
417 396
418 Resource *resource = configItem->resource(); 397 Resource *resource = configItem->resource();
419 398
420 ConfigDialog dlg( this, mFamily, resource, "KRES::ConfigDialog" ); 399 ConfigDialog dlg( this, mFamily, resource, "KRES::ConfigDialog" );
421 400
422 if ( dlg.exec() ) { 401 if ( dlg.exec() ) {
423 configItem->setText( 0, resource->resourceName() ); 402 configItem->setText( 0, resource->resourceName() );
424 configItem->setText( 1, resource->type() ); 403 configItem->setText( 1, resource->type() );
425 404
426 if ( configItem->standard() && configItem->readOnly() ) { 405 if ( configItem->standard() && configItem->readOnly() ) {
427 KMessageBox::sorry( this, i18n( "You cannot use a read-only<br> resource as standard!" ) ); 406 KMessageBox::sorry( this, i18n( "You cannot use a read-only<br> resource as standard!" ) );
428 configItem->setStandard( false ); 407 configItem->setStandard( false );
429 } 408 }
430 409
431 mCurrentManager->resourceChanged( resource ); 410 mCurrentManager->resourceChanged( resource );
432 emit changed( true ); 411 emit changed( true );
433 } 412 }
434} 413}
435 414
436void ConfigPage::slotStandard() 415void ConfigPage::slotStandard()
437{ 416{
438 if ( !mCurrentManager ) 417 if ( !mCurrentManager )
439 return; 418 return;
440 419
441 ConfigViewItem *item = static_cast<ConfigViewItem*>( mListView->currentItem() ); 420 ConfigViewItem *item = static_cast<ConfigViewItem*>( mListView->currentItem() );
442 if ( !item ) 421 if ( !item )
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
@@ -94,196 +94,162 @@ Factory::Factory( const QString& resourceFamily) :
94 info->nameLabel = i18n( "ldap" ); 94 info->nameLabel = i18n( "ldap" );
95 info->descriptionLabel = i18n( "No description available" ); 95 info->descriptionLabel = i18n( "No description available" );
96 mTypeMap.insert( "ldap", info ); 96 mTypeMap.insert( "ldap", info );
97 97
98 //US add opie plugin only, if the library exists. 98 //US add opie plugin only, if the library exists.
99 QString libname = "microkabc_opie"; 99 QString libname = "microkabc_opie";
100 QString path = KLibLoader::findLibrary( QFile::encodeName( libname ) ); 100 QString path = KLibLoader::findLibrary( QFile::encodeName( libname ) );
101 if ( !path.isEmpty() ) 101 if ( !path.isEmpty() )
102 { 102 {
103 info = new PluginInfo; 103 info = new PluginInfo;
104 info->library = libname; 104 info->library = libname;
105 info->nameLabel = i18n( "opie" ); 105 info->nameLabel = i18n( "opie" );
106 info->descriptionLabel = i18n( "Opie PIM Addressbook." ); 106 info->descriptionLabel = i18n( "Opie PIM Addressbook." );
107 mTypeMap.insert( "opie", info ); 107 mTypeMap.insert( "opie", info );
108 } 108 }
109 109
110 //US add qtopia plugin only, if the library exists. 110 //US add qtopia plugin only, if the library exists.
111 libname = "microkabc_qtopia"; 111 libname = "microkabc_qtopia";
112 path = KLibLoader::findLibrary( QFile::encodeName( libname ) ); 112 path = KLibLoader::findLibrary( QFile::encodeName( libname ) );
113 if ( !path.isEmpty() ) 113 if ( !path.isEmpty() )
114 { 114 {
115 info = new PluginInfo; 115 info = new PluginInfo;
116 info->library = libname; 116 info->library = libname;
117 info->nameLabel = i18n( "qtopia" ); 117 info->nameLabel = i18n( "qtopia" );
118 info->descriptionLabel = i18n( "Qtopia PIM Addressbook." ); 118 info->descriptionLabel = i18n( "Qtopia PIM Addressbook." );
119 mTypeMap.insert( "qtopia", info ); 119 mTypeMap.insert( "qtopia", info );
120 } 120 }
121 121
122 //US add sharp plugin only, if the library exists. 122 //US add sharp plugin only, if the library exists.
123 libname = "microkabc_sharpdtm"; 123 libname = "microkabc_sharpdtm";
124 path = KLibLoader::findLibrary( QFile::encodeName( libname ) ); 124 path = KLibLoader::findLibrary( QFile::encodeName( libname ) );
125 if ( !path.isEmpty() ) 125 if ( !path.isEmpty() )
126 { 126 {
127 info = new PluginInfo; 127 info = new PluginInfo;
128 info->library = libname; 128 info->library = libname;
129 info->nameLabel = i18n( "sharp" ); 129 info->nameLabel = i18n( "sharp" );
130 info->descriptionLabel = i18n( "Sharp DTM Addressbook." ); 130 info->descriptionLabel = i18n( "Sharp DTM Addressbook." );
131 mTypeMap.insert( "sharp", info ); 131 mTypeMap.insert( "sharp", info );
132 } 132 }
133 133
134 134
135} 135}
136 136
137Factory::~Factory() 137Factory::~Factory()
138{ 138{
139} 139}
140 140
141QStringList Factory::typeNames() const 141QStringList Factory::typeNames() const
142{ 142{
143//US method QMap::keys() not available yet. SO collect the data manually 143//US method QMap::keys() not available yet. SO collect the data manually
144//US return mTypeMap.keys(); 144//US return mTypeMap.keys();
145 145
146 QStringList result; 146 QStringList result;
147 147
148 QMap<QString, PluginInfo*>::ConstIterator it; 148 QMap<QString, PluginInfo*>::ConstIterator it;
149 for( it = mTypeMap.begin(); it != mTypeMap.end(); ++it ) { 149 for( it = mTypeMap.begin(); it != mTypeMap.end(); ++it ) {
150 result << it.key().latin1(); 150 result << it.key().latin1();
151// qDebug("Factory::typeNames() : %s ", it.key().latin1()); 151// qDebug("Factory::typeNames() : %s ", it.key().latin1());
152 152
153 } 153 }
154 return result; 154 return result;
155} 155}
156 156
157ConfigWidget *Factory::configWidget( const QString& type, QWidget *parent ) 157ConfigWidget *Factory::configWidget( const QString& type, QWidget *parent )
158{ 158{
159 if ( type.isEmpty() || !mTypeMap.contains( type ) ) 159 if ( type.isEmpty() || !mTypeMap.contains( type ) )
160 return 0; 160 return 0;
161 161
162//US KService::Ptr ptr = mTypeMap[ type ]; 162//US KService::Ptr ptr = mTypeMap[ type ];
163//US KLibFactory *factory = KLibLoader::self()->factory( ptr->library().latin1() ); 163//US KLibFactory *factory = KLibLoader::self()->factory( ptr->library().latin1() );
164 PluginInfo* pi = mTypeMap[ type ]; 164 PluginInfo* pi = mTypeMap[ type ];
165 KLibFactory *factory = (KLibFactory *)KLibLoader::self()->factory( pi->library.latin1() ); 165 KLibFactory *factory = (KLibFactory *)KLibLoader::self()->factory( pi->library.latin1() );
166 if ( !factory ) { 166 if ( !factory ) {
167 qDebug("KRES::Factory::configWidget(): Factory creation failed for library %s", pi->library.latin1()); 167 qDebug("KRES::Factory::configWidget(): Factory creation failed for library %s", pi->library.latin1());
168 kdDebug() << "KRES::Factory::configWidget(): Factory creation failed" << endl; 168 kdDebug() << "KRES::Factory::configWidget(): Factory creation failed" << endl;
169 return 0; 169 return 0;
170 } 170 }
171 171
172 PluginFactoryBase *pluginFactory = static_cast<PluginFactoryBase *>( factory ); 172 PluginFactoryBase *pluginFactory = static_cast<PluginFactoryBase *>( factory );
173 173
174 if ( !pluginFactory ) { 174 if ( !pluginFactory ) {
175 qDebug("KRES::Factory::configWidget(): no plugin factory for library %s", pi->library.latin1()); 175 qDebug("KRES::Factory::configWidget(): no plugin factory for library %s", pi->library.latin1());
176 kdDebug() << "KRES::Factory::configWidget(): no plugin factory." << endl; 176 kdDebug() << "KRES::Factory::configWidget(): no plugin factory." << endl;
177 return 0; 177 return 0;
178 } 178 }
179 179
180 ConfigWidget *wdg = pluginFactory->configWidget( parent ); 180 ConfigWidget *wdg = pluginFactory->configWidget( parent );
181 if ( !wdg ) { 181 if ( !wdg ) {
182//US kdDebug() << "'" << ptr->library() << "' is not a " + mResourceFamily + " plugin." << endl; 182//US kdDebug() << "'" << ptr->library() << "' is not a " + mResourceFamily + " plugin." << endl;
183 qDebug("%s is not a %s plugin.", pi->library.latin1(), mResourceFamily.latin1()); 183 qDebug("%s is not a %s plugin.", pi->library.latin1(), mResourceFamily.latin1());
184 return 0; 184 return 0;
185 } 185 }
186 return wdg; 186 return wdg;
187 187
188} 188}
189 189
190SyncWidgetContainer *Factory::syncWidgetContainer( const QString& type )
191{
192 if ( type.isEmpty() || !mTypeMap.contains( type ) )
193 return 0;
194
195//US KService::Ptr ptr = mTypeMap[ type ];
196//US KLibFactory *factory = KLibLoader::self()->factory( ptr->library().latin1() );
197 PluginInfo* pi = mTypeMap[ type ];
198 KLibFactory *factory = (KLibFactory *)KLibLoader::self()->factory( pi->library.latin1() );
199 if ( !factory ) {
200 qDebug("KRES::Factory::syncWidget(): Factory creation failed for library %s", pi->library.latin1());
201 kdDebug() << "KRES::Factory::syncWidget(): Factory creation failed" << endl;
202 return 0;
203 }
204
205 PluginFactoryBase *pluginFactory = static_cast<PluginFactoryBase *>( factory );
206
207 if ( !pluginFactory ) {
208 qDebug("KRES::Factory::syncWidget(): no plugin factory for library %s", pi->library.latin1());
209 kdDebug() << "KRES::Factory::syncWidget(): no plugin factory." << endl;
210 return 0;
211 }
212
213 SyncWidgetContainer *wdg = pluginFactory->syncWidgetContainer( );
214 if ( !wdg ) {
215//US kdDebug() << "'" << ptr->library() << "' is not a " + mResourceFamily + " plugin." << endl;
216 qDebug("%s is not a %s plugin.", pi->library.latin1(), mResourceFamily.latin1());
217 return 0;
218 }
219 return wdg;
220
221}
222
223
224QString Factory::typeName( const QString &type ) const 190QString Factory::typeName( const QString &type ) const
225{ 191{
226 if ( type.isEmpty() || !mTypeMap.contains( type ) ) 192 if ( type.isEmpty() || !mTypeMap.contains( type ) )
227 return QString(); 193 return QString();
228 194
229 195
230//US KService::Ptr ptr = mTypeMap[ type ]; 196//US KService::Ptr ptr = mTypeMap[ type ];
231//US return ptr->name(); 197//US return ptr->name();
232 PluginInfo* pi = mTypeMap[ type ]; 198 PluginInfo* pi = mTypeMap[ type ];
233 return pi->nameLabel; 199 return pi->nameLabel;
234 200
235} 201}
236 202
237QString Factory::typeDescription( const QString &type ) const 203QString Factory::typeDescription( const QString &type ) const
238{ 204{
239 if ( type.isEmpty() || !mTypeMap.contains( type ) ) 205 if ( type.isEmpty() || !mTypeMap.contains( type ) )
240 return QString(); 206 return QString();
241 207
242//US KService::Ptr ptr = mTypeMap[ type ]; 208//US KService::Ptr ptr = mTypeMap[ type ];
243//US return ptr->comment(); 209//US return ptr->comment();
244 PluginInfo* pi = mTypeMap[ type ]; 210 PluginInfo* pi = mTypeMap[ type ];
245 return pi->descriptionLabel; 211 return pi->descriptionLabel;
246} 212}
247 213
248Resource *Factory::resource( const QString& type, const KConfig *config, bool syncable ) 214Resource *Factory::resource( const QString& type, const KConfig *config )
249{ 215{
250 216
251 217
252 if ( type.isEmpty() || !mTypeMap.contains( type ) ) 218 if ( type.isEmpty() || !mTypeMap.contains( type ) )
253 return 0; 219 return 0;
254 220
255/*US load the lib not dynamicly. !! 221/*US load the lib not dynamicly. !!
256 KService::Ptr ptr = mTypeMap[ type ]; 222 KService::Ptr ptr = mTypeMap[ type ];
257 KLibFactory *factory = KLibLoader::self()->factory( ptr->library().latin1() ); 223 KLibFactory *factory = KLibLoader::self()->factory( ptr->library().latin1() );
258 if ( !factory ) { 224 if ( !factory ) {
259 kdDebug() << "KRES::Factory::resource(): Factory creation failed" << endl; 225 kdDebug() << "KRES::Factory::resource(): Factory creation failed" << endl;
260 return 0; 226 return 0;
261 } 227 }
262*/ 228*/
263 PluginInfo* pi = mTypeMap[ type ]; 229 PluginInfo* pi = mTypeMap[ type ];
264 KLibFactory *factory = (KLibFactory *)KLibLoader::self()->factory( pi->library.latin1() ); 230 KLibFactory *factory = (KLibFactory *)KLibLoader::self()->factory( pi->library.latin1() );
265 if ( !factory ) { 231 if ( !factory ) {
266 qDebug("KRES::Factory::resource(): Factory creation failed for library %s", pi->library.latin1()); 232 qDebug("KRES::Factory::resource(): Factory creation failed for library %s", pi->library.latin1());
267 kdDebug() << "KRES::Factory::resource(): Factory creation failed" << endl; 233 kdDebug() << "KRES::Factory::resource(): Factory creation failed" << endl;
268 return 0; 234 return 0;
269 } 235 }
270 236
271 PluginFactoryBase *pluginFactory = static_cast<PluginFactoryBase *>( factory ); 237 PluginFactoryBase *pluginFactory = static_cast<PluginFactoryBase *>( factory );
272 238
273 if ( !pluginFactory ) { 239 if ( !pluginFactory ) {
274 qDebug("KRES::Factory::resource(): no plugin factory for library %s", pi->library.latin1()); 240 qDebug("KRES::Factory::resource(): no plugin factory for library %s", pi->library.latin1());
275 kdDebug() << "KRES::Factory::resource(): no plugin factory." << endl; 241 kdDebug() << "KRES::Factory::resource(): no plugin factory." << endl;
276 return 0; 242 return 0;
277 } 243 }
278 244
279 Resource *resource = pluginFactory->resource( config, syncable ); 245 Resource *resource = pluginFactory->resource( config );
280 if ( !resource ) { 246 if ( !resource ) {
281//US kdDebug() << "'" << ptr->library() << "' is not a " + mResourceFamily + " plugin." << endl; 247//US kdDebug() << "'" << ptr->library() << "' is not a " + mResourceFamily + " plugin." << endl;
282 qDebug("%s is not a %s plugin.", pi->library.latin1(), mResourceFamily.latin1()); 248 qDebug("%s is not a %s plugin.", pi->library.latin1(), mResourceFamily.latin1());
283 return 0; 249 return 0;
284 } 250 }
285 251
286 resource->setType( type ); 252 resource->setType( type );
287 253
288 return resource; 254 return resource;
289} 255}
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
@@ -1,139 +1,126 @@
1/* 1/*
2 This file is part of libkresources. 2 This file is part of libkresources.
3 3
4 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> 4 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org>
5 Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org> 5 Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org>
6 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org> 6 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org>
7 7
8 This library is free software; you can redistribute it and/or 8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Library General Public 9 modify it under the terms of the GNU Library General Public
10 License as published by the Free Software Foundation; either 10 License as published by the Free Software Foundation; either
11 version 2 of the License, or (at your option) any later version. 11 version 2 of the License, or (at your option) any later version.
12 12
13 This library is distributed in the hope that it will be useful, 13 This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Library General Public License for more details. 16 Library General Public License for more details.
17 17
18 You should have received a copy of the GNU Library General Public License 18 You should have received a copy of the GNU Library General Public License
19 along with this library; see the file COPYING.LIB. If not, write to 19 along with this library; see the file COPYING.LIB. If not, write to
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. 21 Boston, MA 02111-1307, USA.
22*/ 22*/
23 23
24#ifndef KRESOURCES_FACTORY_H 24#ifndef KRESOURCES_FACTORY_H
25#define KRESOURCES_FACTORY_H 25#define KRESOURCES_FACTORY_H
26 26
27#include <qdict.h> 27#include <qdict.h>
28#include <qstring.h> 28#include <qstring.h>
29 29
30#include <kconfig.h> 30#include <kconfig.h>
31 31
32 32
33#include "resource.h" 33#include "resource.h"
34 34
35namespace KRES { 35namespace KRES {
36 36
37class SyncWidgetContainer;
38class ConfigWidget; 37class ConfigWidget;
39 38
40//US 39//US
41struct PluginInfo 40struct PluginInfo
42{ 41{
43 QString library; 42 QString library;
44 QString nameLabel; 43 QString nameLabel;
45 QString descriptionLabel; 44 QString descriptionLabel;
46}; 45};
47 46
48 47
49/** 48/**
50 * Class for loading resource plugins. 49 * Class for loading resource plugins.
51 * Do not use this class directly. Use ResourceManager instead 50 * Do not use this class directly. Use ResourceManager instead
52 * 51 *
53 * Example: 52 * Example:
54 * 53 *
55 * <pre> 54 * <pre>
56 * KABC::Factory<Calendar> *factory = KABC::Factory<Calendar>::self(); 55 * KABC::Factory<Calendar> *factory = KABC::Factory<Calendar>::self();
57 * 56 *
58 * QStringList list = factory->resources(); 57 * QStringList list = factory->resources();
59 * QStringList::Iterator it; 58 * QStringList::Iterator it;
60 * for ( it = list.begin(); it != list.end(); ++it ) { 59 * for ( it = list.begin(); it != list.end(); ++it ) {
61 * Resource<Calendar> *resource = factory->resource( (*it), 60 * Resource<Calendar> *resource = factory->resource( (*it),
62 * KABC::StdAddressBook::self(), 0 ); 61 * KABC::StdAddressBook::self(), 0 );
63 * // do something with resource 62 * // do something with resource
64 * } 63 * }
65 * </pre> 64 * </pre>
66 */ 65 */
67class Factory 66class Factory
68{ 67{
69 public: 68 public:
70 69
71 70
72 /** 71 /**
73 * Returns the global resource factory. 72 * Returns the global resource factory.
74 */ 73 */
75 static Factory *self( const QString& resourceFamily ); 74 static Factory *self( const QString& resourceFamily );
76 75
77 ~Factory(); 76 ~Factory();
78 77
79 /** 78 /**
80 * Returns the config widget for the given resource type, 79 * Returns the config widget for the given resource type,
81 * or a null pointer if resource type doesn't exist. 80 * or a null pointer if resource type doesn't exist.
82 * 81 *
83 * @param type The type of the resource, returned by @ref resources() 82 * @param type The type of the resource, returned by @ref resources()
84 * @param resource The resource to be editted. 83 * @param resource The resource to be editted.
85 * @param parent The parent widget 84 * @param parent The parent widget
86 */ 85 */
87 ConfigWidget *configWidget( const QString& type, QWidget *parent = 0 ); 86 ConfigWidget *configWidget( const QString& type, QWidget *parent = 0 );
88 87
89 /** 88 /**
90 * Returns the sync widget for the given resource type,
91 * or a null pointer if resource type doesn't exist,
92 * or a null pointer if resource does not support syncing.
93 *
94 * @param type The type of the resource, returned by @ref resources()
95 * @param resource The resource to be editted.
96 * @param parent The parent widget
97 */
98 SyncWidgetContainer *syncWidgetContainer( const QString& type );
99
100 /**
101 * Returns a pointer to a resource object or a null pointer 89 * Returns a pointer to a resource object or a null pointer
102 * if resource type doesn't exist. 90 * if resource type doesn't exist.
103 * 91 *
104 * @param type The type of the resource, returned by @ref resources() 92 * @param type The type of the resource, returned by @ref resources()
105 * @param ab The address book, the resource should belong to 93 * @param ab The address book, the resource should belong to
106 * @param config The config object where the resource get it settings from, or 0 if a new resource should be created. 94 * @param config The config object where the resource get it settings from, or 0 if a new resource should be created.
107 * @param syncable If the resource should support syncing capabilities.
108 */ 95 */
109 Resource *resource( const QString& type, const KConfig *config, bool syncable ); 96 Resource *resource( const QString& type, const KConfig *config);
110 97
111 /** 98 /**
112 * Returns a list of all available resource types. 99 * Returns a list of all available resource types.
113 */ 100 */
114 QStringList typeNames() const; 101 QStringList typeNames() const;
115 102
116 /** 103 /**
117 * Returns the name for a special type. 104 * Returns the name for a special type.
118 */ 105 */
119 QString typeName( const QString &type ) const; 106 QString typeName( const QString &type ) const;
120 107
121 /** 108 /**
122 * Returns the description for a special type. 109 * Returns the description for a special type.
123 */ 110 */
124 QString typeDescription( const QString &type ) const; 111 QString typeDescription( const QString &type ) const;
125 112
126 protected: 113 protected:
127 Factory( const QString& resourceFamily); 114 Factory( const QString& resourceFamily);
128 115
129 private: 116 private:
130 static QDict<Factory> *mSelves; 117 static QDict<Factory> *mSelves;
131 118
132 QString mResourceFamily; 119 QString mResourceFamily;
133//US QMap<QString, KService::Ptr> mTypeMap; 120//US QMap<QString, KService::Ptr> mTypeMap;
134//US lets store the pluginfo struct as value instead of a KService 121//US lets store the pluginfo struct as value instead of a KService
135 QMap<QString, PluginInfo*> mTypeMap; 122 QMap<QString, PluginInfo*> mTypeMap;
136}; 123};
137 124
138} 125}
139#endif 126#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
@@ -74,273 +74,267 @@ class Manager : private ManagerImplListener
74 T *operator*() { return static_cast<T *>( *mIt ); } 74 T *operator*() { return static_cast<T *>( *mIt ); }
75 Iterator &operator++() { mIt++; return *this; } 75 Iterator &operator++() { mIt++; return *this; }
76 Iterator &operator++(int) { mIt++; return *this; } 76 Iterator &operator++(int) { mIt++; return *this; }
77 Iterator &operator--() { mIt--; return *this; } 77 Iterator &operator--() { mIt--; return *this; }
78 Iterator &operator--(int) { mIt--; return *this; } 78 Iterator &operator--(int) { mIt--; return *this; }
79 bool operator==( const Iterator &it ) { return mIt == it.mIt; } 79 bool operator==( const Iterator &it ) { return mIt == it.mIt; }
80 bool operator!=( const Iterator &it ) { return mIt != it.mIt; } 80 bool operator!=( const Iterator &it ) { return mIt != it.mIt; }
81 81
82 private: 82 private:
83 Resource::List::Iterator mIt; 83 Resource::List::Iterator mIt;
84 }; 84 };
85 85
86 Iterator begin() 86 Iterator begin()
87 { 87 {
88 Iterator it; 88 Iterator it;
89 it.mIt = mImpl->resourceList()->begin(); 89 it.mIt = mImpl->resourceList()->begin();
90 return it; 90 return it;
91 } 91 }
92 92
93 Iterator end() 93 Iterator end()
94 { 94 {
95 Iterator it; 95 Iterator it;
96 it.mIt = mImpl->resourceList()->end(); 96 it.mIt = mImpl->resourceList()->end();
97 return it; 97 return it;
98 } 98 }
99 99
100 class ActiveIterator 100 class ActiveIterator
101 { 101 {
102 friend class Manager; 102 friend class Manager;
103 public: 103 public:
104 ActiveIterator() : mList( 0 ) {}; 104 ActiveIterator() : mList( 0 ) {};
105 ActiveIterator( const ActiveIterator &it ) 105 ActiveIterator( const ActiveIterator &it )
106 { 106 {
107 mIt = it.mIt; 107 mIt = it.mIt;
108 mList = it.mList; 108 mList = it.mList;
109 } 109 }
110 110
111 T *operator*() { return static_cast<T *>( *mIt ); } 111 T *operator*() { return static_cast<T *>( *mIt ); }
112 ActiveIterator &operator++() 112 ActiveIterator &operator++()
113 { 113 {
114 do { mIt++; } while ( checkActive() ); 114 do { mIt++; } while ( checkActive() );
115 return *this; 115 return *this;
116 } 116 }
117 ActiveIterator &operator++(int) 117 ActiveIterator &operator++(int)
118 { 118 {
119 do { mIt++; } while ( checkActive() ); 119 do { mIt++; } while ( checkActive() );
120 return *this; 120 return *this;
121 } 121 }
122 ActiveIterator &operator--() 122 ActiveIterator &operator--()
123 { 123 {
124 do { mIt--; } while ( checkActive() ); 124 do { mIt--; } while ( checkActive() );
125 return *this; 125 return *this;
126 } 126 }
127 ActiveIterator &operator--(int) 127 ActiveIterator &operator--(int)
128 { 128 {
129 do { mIt--; } while ( checkActive() ); 129 do { mIt--; } while ( checkActive() );
130 return *this; 130 return *this;
131 } 131 }
132 bool operator==( const ActiveIterator &it ) { return mIt == it.mIt; } 132 bool operator==( const ActiveIterator &it ) { return mIt == it.mIt; }
133 bool operator!=( const ActiveIterator &it ) { return mIt != it.mIt; } 133 bool operator!=( const ActiveIterator &it ) { return mIt != it.mIt; }
134 134
135 private: 135 private:
136 /** 136 /**
137 Check if iterator needs to be advanced once more. 137 Check if iterator needs to be advanced once more.
138 */ 138 */
139 bool checkActive() 139 bool checkActive()
140 { 140 {
141 if ( !mList || mIt == mList->end() ) return false; 141 if ( !mList || mIt == mList->end() ) return false;
142 return !(*mIt)->isActive(); 142 return !(*mIt)->isActive();
143 } 143 }
144 144
145 Resource::List::Iterator mIt; 145 Resource::List::Iterator mIt;
146 Resource::List *mList; 146 Resource::List *mList;
147 }; 147 };
148 148
149 ActiveIterator activeBegin() 149 ActiveIterator activeBegin()
150 { 150 {
151 ActiveIterator it; 151 ActiveIterator it;
152 it.mIt = mImpl->resourceList()->begin(); 152 it.mIt = mImpl->resourceList()->begin();
153 it.mList = mImpl->resourceList(); 153 it.mList = mImpl->resourceList();
154 if ( it.mIt != mImpl->resourceList()->end() ) { 154 if ( it.mIt != mImpl->resourceList()->end() ) {
155 if ( !(*it)->isActive() ) it++; 155 if ( !(*it)->isActive() ) it++;
156 } 156 }
157 return it; 157 return it;
158 } 158 }
159 159
160 ActiveIterator activeEnd() 160 ActiveIterator activeEnd()
161 { 161 {
162 ActiveIterator it; 162 ActiveIterator it;
163 it.mIt = mImpl->resourceList()->end(); 163 it.mIt = mImpl->resourceList()->end();
164 it.mList = mImpl->resourceList(); 164 it.mList = mImpl->resourceList();
165 return it; 165 return it;
166 } 166 }
167 167
168 bool isEmpty() const { return mImpl->resourceList()->isEmpty(); } 168 bool isEmpty() const { return mImpl->resourceList()->isEmpty(); }
169 169
170 /** 170 Manager( const QString &family )
171 Return true, if the manager manages syncable resources.
172 */
173 bool manageSyncable() { return mImpl->manageSyncable(); }
174
175 Manager( const QString &family, bool syncable )
176 { 171 {
177 mFactory = Factory::self( family ); 172 mFactory = Factory::self( family );
178 // The managerimpl will use the same Factory object as the manager 173 // The managerimpl will use the same Factory object as the manager
179 // because of the Factory::self() pattern 174 // because of the Factory::self() pattern
180 mImpl = new ManagerImpl( family, syncable ); 175 mImpl = new ManagerImpl( family );
181 mImpl->setListener( this ); 176 mImpl->setListener( this );
182 177
183 mListeners = new QPtrList<ManagerListener<T> >; 178 mListeners = new QPtrList<ManagerListener<T> >;
184 } 179 }
185 180
186 virtual ~Manager() 181 virtual ~Manager()
187 { 182 {
188 mImpl->setListener( 0 ); 183 mImpl->setListener( 0 );
189 delete mListeners; 184 delete mListeners;
190 delete mImpl; 185 delete mImpl;
191 } 186 }
192 187
193 /** 188 /**
194 Recreate Resource objects from configuration file. If cfg is 0, read standard 189 Recreate Resource objects from configuration file. If cfg is 0, read standard
195 configuration file. 190 configuration file.
196 */ 191 */
197 void readConfig( KConfig *cfg = 0 ) 192 void readConfig( KConfig *cfg = 0 )
198 { 193 {
199 mImpl->readConfig( cfg ); 194 mImpl->readConfig( cfg );
200 } 195 }
201 196
202 /** 197 /**
203 Write configuration of Resource objects to configuration file. If cfg is 0, write 198 Write configuration of Resource objects to configuration file. If cfg is 0, write
204 to standard configuration file. 199 to standard configuration file.
205 */ 200 */
206 void writeConfig( KConfig *cfg = 0 ) 201 void writeConfig( KConfig *cfg = 0 )
207 { 202 {
208 mImpl->writeConfig( cfg ); 203 mImpl->writeConfig( cfg );
209 } 204 }
210 205
211 /** 206 /**
212 Add resource to manager. This passes ownership of the Resource object 207 Add resource to manager. This passes ownership of the Resource object
213 to the manager. 208 to the manager.
214 */ 209 */
215 void add( Resource *resource ) 210 void add( Resource *resource )
216 { 211 {
217 if ( resource ) mImpl->add( resource ); 212 if ( resource ) mImpl->add( resource );
218 } 213 }
219 214
220 void remove( Resource *resource ) 215 void remove( Resource *resource )
221 { 216 {
222 if ( resource ) mImpl->remove( resource ); 217 if ( resource ) mImpl->remove( resource );
223 } 218 }
224 219
225 T* standardResource() 220 T* standardResource()
226 { 221 {
227 return static_cast<T *>( mImpl->standardResource() ); 222 return static_cast<T *>( mImpl->standardResource() );
228 } 223 }
229 224
230 void setStandardResource( T *resource ) 225 void setStandardResource( T *resource )
231 { 226 {
232 if ( resource ) mImpl->setStandardResource( resource ); 227 if ( resource ) mImpl->setStandardResource( resource );
233 } 228 }
234 229
235 void setActive( Resource *resource, bool active ) 230 void setActive( Resource *resource, bool active )
236 { 231 {
237 if ( resource ) mImpl->setActive( resource, active ); 232 if ( resource ) mImpl->setActive( resource, active );
238 } 233 }
239 234
240 /** 235 /**
241 Returns a list of the names of the reources managed by the 236 Returns a list of the names of the reources managed by the
242 Manager for this family. 237 Manager for this family.
243 */ 238 */
244 QStringList resourceNames() const 239 QStringList resourceNames() const
245 { 240 {
246 return mImpl->resourceNames(); 241 return mImpl->resourceNames();
247 } 242 }
248 243
249 ConfigWidget *configWidget( const QString& type, QWidget *parent = 0 ) 244 ConfigWidget *configWidget( const QString& type, QWidget *parent = 0 )
250 { 245 {
251 return mFactory->resourceConfigWidget( type, parent ); 246 return mFactory->resourceConfigWidget( type, parent );
252 } 247 }
253 248
254 /** 249 /**
255 Creates a new resource of type @param type, with default 250 Creates a new resource of type @param type, with default
256 settings. The resource is 251 settings. The resource is
257 not added to the manager, the application has to do that. 252 not added to the manager, the application has to do that.
258 Returns a pointer to a resource object or a null pointer 253 Returns a pointer to a resource object or a null pointer
259 if resource type doesn't exist. 254 if resource type doesn't exist.
260 255
261 @param type The type of the resource, one of those returned 256 @param type The type of the resource, one of those returned
262 by @ref resourceTypeNames() 257 by @ref resourceTypeNames()
263 * @param syncable If the resource should support syncing capabilities.
264 */ 258 */
265 T *createResource( const QString& type ) 259 T *createResource( const QString& type )
266 { 260 {
267 return (T *)( mFactory->resource( type, 0, mImpl->manageSyncable() ) ); 261 return (T *)( mFactory->resource( type, 0 ) );
268 } 262 }
269 263
270 /** 264 /**
271 Returns a list of the names of all available resource types. 265 Returns a list of the names of all available resource types.
272 */ 266 */
273 QStringList resourceTypeNames() const 267 QStringList resourceTypeNames() const
274 { 268 {
275 return mFactory->typeNames(); 269 return mFactory->typeNames();
276 } 270 }
277 271
278 QStringList resourceTypeDescriptions() const 272 QStringList resourceTypeDescriptions() const
279 { 273 {
280 QStringList typeDescs; 274 QStringList typeDescs;
281 QStringList types = mFactory->typeNames(); 275 QStringList types = mFactory->typeNames();
282 276
283 for ( QStringList::ConstIterator it = types.begin(); it != types.end(); ++it ) { 277 for ( QStringList::ConstIterator it = types.begin(); it != types.end(); ++it ) {
284 QString desc = mFactory->typeName( *it ); 278 QString desc = mFactory->typeName( *it );
285 if ( !mFactory->typeDescription( *it ).isEmpty() ) 279 if ( !mFactory->typeDescription( *it ).isEmpty() )
286 desc += " (" + mFactory->typeDescription( *it ) + ")"; 280 desc += " (" + mFactory->typeDescription( *it ) + ")";
287 281
288 typeDescs.append( desc ); 282 typeDescs.append( desc );
289 } 283 }
290 284
291 return typeDescs; 285 return typeDescs;
292 } 286 }
293 287
294 void resourceChanged( T *resource ) 288 void resourceChanged( T *resource )
295 { 289 {
296 mImpl->resourceChanged( resource ); 290 mImpl->resourceChanged( resource );
297 } 291 }
298 292
299 void addListener( ManagerListener<T> *listener ) 293 void addListener( ManagerListener<T> *listener )
300 { 294 {
301 mListeners->append( listener ); 295 mListeners->append( listener );
302 } 296 }
303 297
304 void removeListener( ManagerListener<T> *listener ) 298 void removeListener( ManagerListener<T> *listener )
305 { 299 {
306 mListeners->remove( listener ); 300 mListeners->remove( listener );
307 } 301 }
308 302
309 virtual void resourceAdded( Resource *res ) 303 virtual void resourceAdded( Resource *res )
310 { 304 {
311 kdDebug(5650) << "Manager::resourceAdded " << res->resourceName() << endl; 305 kdDebug(5650) << "Manager::resourceAdded " << res->resourceName() << endl;
312 T* resource = (T *)( res ); 306 T* resource = (T *)( res );
313 ManagerListener<T> *listener; 307 ManagerListener<T> *listener;
314 for ( listener = mListeners->first(); listener; listener = mListeners->next() ) 308 for ( listener = mListeners->first(); listener; listener = mListeners->next() )
315 listener->resourceAdded( resource ); 309 listener->resourceAdded( resource );
316 } 310 }
317 311
318 virtual void resourceModified( Resource *res ) 312 virtual void resourceModified( Resource *res )
319 { 313 {
320 kdDebug(5650) << "Manager::resourceModified " << res->resourceName() << endl; 314 kdDebug(5650) << "Manager::resourceModified " << res->resourceName() << endl;
321 T* resource = (T *)( res ); 315 T* resource = (T *)( res );
322 ManagerListener<T> *listener; 316 ManagerListener<T> *listener;
323 for ( listener = mListeners->first(); listener; listener = mListeners->next() ) 317 for ( listener = mListeners->first(); listener; listener = mListeners->next() )
324 listener->resourceModified( resource ); 318 listener->resourceModified( resource );
325 } 319 }
326 320
327 virtual void resourceDeleted( Resource *res ) 321 virtual void resourceDeleted( Resource *res )
328 { 322 {
329 kdDebug(5650) << "Manager::resourceDeleted " << res->resourceName() << endl; 323 kdDebug(5650) << "Manager::resourceDeleted " << res->resourceName() << endl;
330 T* resource = (T *)( res ); 324 T* resource = (T *)( res );
331 ManagerListener<T> *listener; 325 ManagerListener<T> *listener;
332 for ( listener = mListeners->first(); listener; listener = mListeners->next() ) { 326 for ( listener = mListeners->first(); listener; listener = mListeners->next() ) {
333 kdDebug(5650) << "Notifying a listener to Manager..." << endl; 327 kdDebug(5650) << "Notifying a listener to Manager..." << endl;
334 listener->resourceDeleted( resource ); 328 listener->resourceDeleted( resource );
335 } 329 }
336 } 330 }
337 331
338 private: 332 private:
339 ManagerImpl *mImpl; 333 ManagerImpl *mImpl;
340 Factory *mFactory; 334 Factory *mFactory;
341 QPtrList<ManagerListener<T> > *mListeners; 335 QPtrList<ManagerListener<T> > *mListeners;
342}; 336};
343 337
344} 338}
345 339
346#endif 340#endif
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
@@ -1,141 +1,141 @@
1/* 1/*
2 This file is part of libkresources. 2 This file is part of libkresources.
3 3
4 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> 4 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org>
5 Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org> 5 Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org>
6 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org> 6 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org>
7 7
8 This library is free software; you can redistribute it and/or 8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Library General Public 9 modify it under the terms of the GNU Library General Public
10 License as published by the Free Software Foundation; either 10 License as published by the Free Software Foundation; either
11 version 2 of the License, or (at your option) any later version. 11 version 2 of the License, or (at your option) any later version.
12 12
13 This library is distributed in the hope that it will be useful, 13 This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Library General Public License for more details. 16 Library General Public License for more details.
17 17
18 You should have received a copy of the GNU Library General Public License 18 You should have received a copy of the GNU Library General Public License
19 along with this library; see the file COPYING.LIB. If not, write to 19 along with this library; see the file COPYING.LIB. If not, write to
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. 21 Boston, MA 02111-1307, USA.
22*/ 22*/
23 23
24/* 24/*
25Enhanced Version of the file for platform independent KDE tools. 25Enhanced Version of the file for platform independent KDE tools.
26Copyright (c) 2004 Ulf Schenk 26Copyright (c) 2004 Ulf Schenk
27 27
28$Id$ 28$Id$
29*/ 29*/
30 30
31#include <kglobal.h> 31#include <kglobal.h>
32 32
33#include <kapplication.h> 33#include <kapplication.h>
34#include <kdebug.h> 34#include <kdebug.h>
35#include <kconfig.h> 35#include <kconfig.h>
36#include <kstandarddirs.h> 36#include <kstandarddirs.h>
37 37
38#include "resource.h" 38#include "resource.h"
39#include "factory.h" 39#include "factory.h"
40#include "managerimpl.h" 40#include "managerimpl.h"
41 41
42using namespace KRES; 42using namespace KRES;
43 43
44ManagerImpl::ManagerImpl( const QString &family, bool syncable ) 44ManagerImpl::ManagerImpl( const QString &family )
45 : mFamily( family ), mSyncable(syncable), mConfig( 0 ), mStdConfig( 0 ), mStandard( 0 ), 45 : mFamily( family ), mConfig( 0 ), mStdConfig( 0 ), mStandard( 0 ),
46 mFactory( 0 ) 46 mFactory( 0 )
47 47
48{ 48{
49 kdDebug(5650) << "ManagerImpl::ManagerImpl()" << endl; 49 kdDebug(5650) << "ManagerImpl::ManagerImpl()" << endl;
50 50
51 51
52} 52}
53 53
54ManagerImpl::~ManagerImpl() 54ManagerImpl::~ManagerImpl()
55{ 55{
56 kdDebug(5650) << "ManagerImpl::~ManagerImpl()" << endl; 56 kdDebug(5650) << "ManagerImpl::~ManagerImpl()" << endl;
57 57
58 Resource::List::ConstIterator it; 58 Resource::List::ConstIterator it;
59 for ( it = mResources.begin(); it != mResources.end(); ++it ) { 59 for ( it = mResources.begin(); it != mResources.end(); ++it ) {
60 delete *it; 60 delete *it;
61 } 61 }
62 62
63 delete mStdConfig; 63 delete mStdConfig;
64} 64}
65 65
66void ManagerImpl::createStandardConfig() 66void ManagerImpl::createStandardConfig()
67{ 67{
68 if ( !mStdConfig ) { 68 if ( !mStdConfig ) {
69 QString file = locateLocal( "data", KGlobal::getAppName() 69 QString file = locateLocal( "data", KGlobal::getAppName()
70 + "/kresources/" + mFamily + "rc" ); 70 + "/kresources/" + mFamily + "rc" );
71 mStdConfig = new KConfig( file ); 71 mStdConfig = new KConfig( file );
72 } 72 }
73 73
74 mConfig = mStdConfig; 74 mConfig = mStdConfig;
75} 75}
76 76
77void ManagerImpl::readConfig( KConfig *cfg ) 77void ManagerImpl::readConfig( KConfig *cfg )
78{ 78{
79 kdDebug(5650) << "ManagerImpl::readConfig()" << endl; 79 kdDebug(5650) << "ManagerImpl::readConfig()" << endl;
80 80
81 delete mFactory; 81 delete mFactory;
82 mFactory = Factory::self( mFamily ); 82 mFactory = Factory::self( mFamily );
83 83
84 if ( !cfg ) { 84 if ( !cfg ) {
85 createStandardConfig(); 85 createStandardConfig();
86 } else { 86 } else {
87 mConfig = cfg; 87 mConfig = cfg;
88 } 88 }
89 89
90 mStandard = 0; 90 mStandard = 0;
91 91
92 mConfig->setGroup( "General" ); 92 mConfig->setGroup( "General" );
93 93
94 QStringList keys = mConfig->readListEntry( "ResourceKeys" ); 94 QStringList keys = mConfig->readListEntry( "ResourceKeys" );
95 keys += mConfig->readListEntry( "PassiveResourceKeys" ); 95 keys += mConfig->readListEntry( "PassiveResourceKeys" );
96 96
97 QString standardKey = mConfig->readEntry( "Standard" ); 97 QString standardKey = mConfig->readEntry( "Standard" );
98 98
99 for ( QStringList::Iterator it = keys.begin(); it != keys.end(); ++it ) { 99 for ( QStringList::Iterator it = keys.begin(); it != keys.end(); ++it ) {
100 readResourceConfig( *it, false ); 100 readResourceConfig( *it, false );
101 } 101 }
102 102
103} 103}
104 104
105void ManagerImpl::writeConfig( KConfig *cfg ) 105void ManagerImpl::writeConfig( KConfig *cfg )
106{ 106{
107//USqDebug("ManagerImpl::writeConfig begin this= %ul cfg=%ul", this, cfg); 107//USqDebug("ManagerImpl::writeConfig begin this= %ul cfg=%ul", this, cfg);
108 108
109 109
110 kdDebug(5650) << "ManagerImpl::writeConfig()" << endl; 110 kdDebug(5650) << "ManagerImpl::writeConfig()" << endl;
111 111
112 if ( !cfg ) { 112 if ( !cfg ) {
113 createStandardConfig(); 113 createStandardConfig();
114 } else { 114 } else {
115 mConfig = cfg; 115 mConfig = cfg;
116 } 116 }
117 117
118 QStringList activeKeys; 118 QStringList activeKeys;
119 QStringList passiveKeys; 119 QStringList passiveKeys;
120 120
121 // First write all keys, collect active and passive keys on the way 121 // First write all keys, collect active and passive keys on the way
122 Resource::List::Iterator it; 122 Resource::List::Iterator it;
123 for ( it = mResources.begin(); it != mResources.end(); ++it ) { 123 for ( it = mResources.begin(); it != mResources.end(); ++it ) {
124 writeResourceConfig( *it, false ); 124 writeResourceConfig( *it, false );
125 125
126 QString key = (*it)->identifier(); 126 QString key = (*it)->identifier();
127 if( (*it)->isActive() ) 127 if( (*it)->isActive() )
128 activeKeys.append( key ); 128 activeKeys.append( key );
129 else 129 else
130 passiveKeys.append( key ); 130 passiveKeys.append( key );
131 } 131 }
132 132
133 // And then the general group 133 // And then the general group
134 134
135 kdDebug(5650) << "Saving general info" << endl; 135 kdDebug(5650) << "Saving general info" << endl;
136 mConfig->setGroup( "General" ); 136 mConfig->setGroup( "General" );
137 mConfig->writeEntry( "ResourceKeys", activeKeys ); 137 mConfig->writeEntry( "ResourceKeys", activeKeys );
138 mConfig->writeEntry( "PassiveResourceKeys", passiveKeys ); 138 mConfig->writeEntry( "PassiveResourceKeys", passiveKeys );
139 if ( mStandard ) 139 if ( mStandard )
140 mConfig->writeEntry( "Standard", mStandard->identifier() ); 140 mConfig->writeEntry( "Standard", mStandard->identifier() );
141 else 141 else
@@ -175,200 +175,193 @@ void ManagerImpl::remove( Resource *resource, bool useDCOP )
175 175
176 delete resource; 176 delete resource;
177 177
178 kdDebug(5650) << "Finished ManagerImpl::remove()" << endl; 178 kdDebug(5650) << "Finished ManagerImpl::remove()" << endl;
179} 179}
180 180
181void ManagerImpl::setActive( Resource *resource, bool active ) 181void ManagerImpl::setActive( Resource *resource, bool active )
182{ 182{
183 if ( resource && resource->isActive() != active ) { 183 if ( resource && resource->isActive() != active ) {
184 resource->setActive( active ); 184 resource->setActive( active );
185 } 185 }
186} 186}
187 187
188Resource *ManagerImpl::standardResource() 188Resource *ManagerImpl::standardResource()
189{ 189{
190 return mStandard; 190 return mStandard;
191} 191}
192 192
193void ManagerImpl::setStandardResource( Resource *resource ) 193void ManagerImpl::setStandardResource( Resource *resource )
194{ 194{
195 mStandard = resource; 195 mStandard = resource;
196} 196}
197 197
198void ManagerImpl::resourceChanged( Resource *resource ) 198void ManagerImpl::resourceChanged( Resource *resource )
199{ 199{
200 writeResourceConfig( resource, true ); 200 writeResourceConfig( resource, true );
201 201
202 202
203// ManagerIface_stub allManagers( "*", "ManagerIface_" + mFamily.utf8() ); 203// ManagerIface_stub allManagers( "*", "ManagerIface_" + mFamily.utf8() );
204// allManagers.dcopResourceModified( resource->identifier() ); 204// allManagers.dcopResourceModified( resource->identifier() );
205} 205}
206 206
207// DCOP asynchronous functions 207// DCOP asynchronous functions
208//US since we work from inside the application, we call the methods directly. 208//US since we work from inside the application, we call the methods directly.
209 209
210QStringList ManagerImpl::resourceNames() 210QStringList ManagerImpl::resourceNames()
211{ 211{
212 QStringList result; 212 QStringList result;
213 213
214 Resource::List::ConstIterator it; 214 Resource::List::ConstIterator it;
215 for ( it = mResources.begin(); it != mResources.end(); ++it ) { 215 for ( it = mResources.begin(); it != mResources.end(); ++it ) {
216 result.append( (*it)->resourceName() ); 216 result.append( (*it)->resourceName() );
217 } 217 }
218 return result; 218 return result;
219} 219}
220 220
221Resource::List *ManagerImpl::resourceList() 221Resource::List *ManagerImpl::resourceList()
222{ 222{
223 return &mResources; 223 return &mResources;
224} 224}
225 225
226QPtrList<Resource> ManagerImpl::resources() 226QPtrList<Resource> ManagerImpl::resources()
227{ 227{
228 QPtrList<Resource> result; 228 QPtrList<Resource> result;
229 229
230 Resource::List::ConstIterator it; 230 Resource::List::ConstIterator it;
231 for ( it = mResources.begin(); it != mResources.end(); ++it ) { 231 for ( it = mResources.begin(); it != mResources.end(); ++it ) {
232 result.append( *it ); 232 result.append( *it );
233 } 233 }
234 return result; 234 return result;
235} 235}
236 236
237QPtrList<Resource> ManagerImpl::resources( bool active ) 237QPtrList<Resource> ManagerImpl::resources( bool active )
238{ 238{
239 QPtrList<Resource> result; 239 QPtrList<Resource> result;
240 240
241 Resource::List::ConstIterator it; 241 Resource::List::ConstIterator it;
242 for ( it = mResources.begin(); it != mResources.end(); ++it ) { 242 for ( it = mResources.begin(); it != mResources.end(); ++it ) {
243 if ( (*it)->isActive() == active ) { 243 if ( (*it)->isActive() == active ) {
244 result.append( *it ); 244 result.append( *it );
245 } 245 }
246 } 246 }
247 return result; 247 return result;
248} 248}
249 249
250void ManagerImpl::setListener( ManagerImplListener *listener ) 250void ManagerImpl::setListener( ManagerImplListener *listener )
251{ 251{
252 mListener = listener; 252 mListener = listener;
253} 253}
254 254
255Resource* ManagerImpl::readResourceConfig( const QString& identifier, 255Resource* ManagerImpl::readResourceConfig( const QString& identifier,
256 bool checkActive ) 256 bool checkActive )
257{ 257{
258 kdDebug() << "ManagerImpl::readResourceConfig() " << identifier << endl; 258 kdDebug() << "ManagerImpl::readResourceConfig() " << identifier << endl;
259 259
260// qDebug("ManagerImpl::readResourceConfig() %s", identifier.latin1()); 260// qDebug("ManagerImpl::readResourceConfig() %s", identifier.latin1());
261 261
262 mConfig->setGroup( "Resource_" + identifier ); 262 mConfig->setGroup( "Resource_" + identifier );
263#ifdef _WIN32_ 263#ifdef _WIN32_
264 // we use plugins on win32. the group is stored in a static variable 264 // we use plugins on win32. the group is stored in a static variable
265 // such that gourp info not avail on win32 plugins 265 // such that gourp info not avail on win32 plugins
266 // to fix that, it would be a looooot of work 266 // to fix that, it would be a looooot of work
267 mConfig->setTempGroup( "Resource_" + identifier ); 267 mConfig->setTempGroup( "Resource_" + identifier );
268#endif 268#endif
269 QString type = mConfig->readEntry( "ResourceType" ); 269 QString type = mConfig->readEntry( "ResourceType" );
270 QString name = mConfig->readEntry( "ResourceName" ); 270 QString name = mConfig->readEntry( "ResourceName" );
271 Resource *resource = mFactory->resource( type, mConfig, mSyncable ); 271 Resource *resource = mFactory->resource( type, mConfig );
272 if ( !resource ) { 272 if ( !resource ) {
273 qDebug("Failed to create resource with id %s ",identifier.latin1() ); 273 qDebug("Failed to create resource with id %s ",identifier.latin1() );
274 return 0; 274 return 0;
275 } 275 }
276 276
277 if ( resource->identifier().isEmpty() ) 277 if ( resource->identifier().isEmpty() )
278 resource->setIdentifier( identifier ); 278 resource->setIdentifier( identifier );
279 279
280 mConfig->setGroup( "General" ); 280 mConfig->setGroup( "General" );
281 281
282 QString standardKey = mConfig->readEntry( "Standard" ); 282 QString standardKey = mConfig->readEntry( "Standard" );
283 if ( standardKey == identifier ) { 283 if ( standardKey == identifier ) {
284 mStandard = resource; 284 mStandard = resource;
285 } 285 }
286 286
287 if ( checkActive ) { 287 if ( checkActive ) {
288 QStringList activeKeys = mConfig->readListEntry( "ResourceKeys" ); 288 QStringList activeKeys = mConfig->readListEntry( "ResourceKeys" );
289 resource->setActive( activeKeys.contains( identifier ) ); 289 resource->setActive( activeKeys.contains( identifier ) );
290 } 290 }
291 mResources.append( resource ); 291 mResources.append( resource );
292 292
293 return resource; 293 return resource;
294} 294}
295 295
296void ManagerImpl::writeResourceConfig( Resource *resource, 296void ManagerImpl::writeResourceConfig( Resource *resource,
297 bool checkActive ) 297 bool checkActive )
298{ 298{
299 QString key = resource->identifier(); 299 QString key = resource->identifier();
300 300
301 kdDebug(5650) << "Saving resource " << key << endl; 301 kdDebug(5650) << "Saving resource " << key << endl;
302 302
303 if ( !mConfig ) createStandardConfig(); 303 if ( !mConfig ) createStandardConfig();
304 304
305 mConfig->setGroup( "Resource_" + key ); 305 mConfig->setGroup( "Resource_" + key );
306 resource->writeConfig( mConfig ); 306 resource->writeConfig( mConfig );
307 307
308 mConfig->setGroup( "General" ); 308 mConfig->setGroup( "General" );
309 QString standardKey = mConfig->readEntry( "Standard" ); 309 QString standardKey = mConfig->readEntry( "Standard" );
310 310
311 if ( resource == mStandard && standardKey != key ) 311 if ( resource == mStandard && standardKey != key )
312 mConfig->writeEntry( "Standard", resource->identifier() ); 312 mConfig->writeEntry( "Standard", resource->identifier() );
313 else if ( resource != mStandard && standardKey == key ) 313 else if ( resource != mStandard && standardKey == key )
314 mConfig->writeEntry( "Standard", "" ); 314 mConfig->writeEntry( "Standard", "" );
315 315
316 if ( checkActive ) { 316 if ( checkActive ) {
317 QStringList activeKeys = mConfig->readListEntry( "ResourceKeys" ); 317 QStringList activeKeys = mConfig->readListEntry( "ResourceKeys" );
318 if ( resource->isActive() && !activeKeys.contains( key ) ) { 318 if ( resource->isActive() && !activeKeys.contains( key ) ) {
319 activeKeys.append( resource->identifier() ); 319 activeKeys.append( resource->identifier() );
320 mConfig->writeEntry( "ResourceKeys", activeKeys ); 320 mConfig->writeEntry( "ResourceKeys", activeKeys );
321 } else if ( !resource->isActive() && activeKeys.contains( key ) ) { 321 } else if ( !resource->isActive() && activeKeys.contains( key ) ) {
322 activeKeys.remove( key ); 322 activeKeys.remove( key );
323 mConfig->writeEntry( "ResourceKeys", activeKeys ); 323 mConfig->writeEntry( "ResourceKeys", activeKeys );
324 } 324 }
325 } 325 }
326 326
327 mConfig->sync(); 327 mConfig->sync();
328} 328}
329 329
330void ManagerImpl::removeResource( Resource *resource ) 330void ManagerImpl::removeResource( Resource *resource )
331{ 331{
332 QString key = resource->identifier(); 332 QString key = resource->identifier();
333 333
334 if ( !mConfig ) createStandardConfig(); 334 if ( !mConfig ) createStandardConfig();
335 335
336 mConfig->setGroup( "General" ); 336 mConfig->setGroup( "General" );
337 QStringList activeKeys = mConfig->readListEntry( "ResourceKeys" ); 337 QStringList activeKeys = mConfig->readListEntry( "ResourceKeys" );
338 if ( activeKeys.contains( key ) ) { 338 if ( activeKeys.contains( key ) ) {
339 activeKeys.remove( key ); 339 activeKeys.remove( key );
340 mConfig->writeEntry( "ResourceKeys", activeKeys ); 340 mConfig->writeEntry( "ResourceKeys", activeKeys );
341 } else { 341 } else {
342 QStringList passiveKeys = mConfig->readListEntry( "PassiveResourceKeys" ); 342 QStringList passiveKeys = mConfig->readListEntry( "PassiveResourceKeys" );
343 passiveKeys.remove( key ); 343 passiveKeys.remove( key );
344 mConfig->writeEntry( "PassiveResourceKeys", passiveKeys ); 344 mConfig->writeEntry( "PassiveResourceKeys", passiveKeys );
345 } 345 }
346 346
347 QString standardKey = mConfig->readEntry( "Standard" ); 347 QString standardKey = mConfig->readEntry( "Standard" );
348 if ( standardKey == key ) { 348 if ( standardKey == key ) {
349 mConfig->writeEntry( "Standard", "" ); 349 mConfig->writeEntry( "Standard", "" );
350 } 350 }
351 351
352 mConfig->deleteGroup( "Resource_" + resource->identifier() ); 352 mConfig->deleteGroup( "Resource_" + resource->identifier() );
353 353
354 mConfig->sync(); 354 mConfig->sync();
355} 355}
356 356
357Resource* ManagerImpl::getResource( const QString& identifier ) 357Resource* ManagerImpl::getResource( const QString& identifier )
358{ 358{
359 Resource::List::ConstIterator it; 359 Resource::List::ConstIterator it;
360 for ( it = mResources.begin(); it != mResources.end(); ++it ) { 360 for ( it = mResources.begin(); it != mResources.end(); ++it ) {
361 if ( (*it)->identifier() == identifier ) 361 if ( (*it)->identifier() == identifier )
362 return *it; 362 return *it;
363 } 363 }
364 return 0; 364 return 0;
365} 365}
366 366
367/**
368 Return true, if the manager manages syncable resources.
369*/
370bool ManagerImpl::manageSyncable() const
371{
372 return mSyncable;
373}
374 367
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
@@ -1,126 +1,120 @@
1/* 1/*
2 This file is part of libkresources. 2 This file is part of libkresources.
3 3
4 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> 4 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org>
5 Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org> 5 Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org>
6 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org> 6 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org>
7 7
8 This library is free software; you can redistribute it and/or 8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Library General Public 9 modify it under the terms of the GNU Library General Public
10 License as published by the Free Software Foundation; either 10 License as published by the Free Software Foundation; either
11 version 2 of the License, or (at your option) any later version. 11 version 2 of the License, or (at your option) any later version.
12 12
13 This library is distributed in the hope that it will be useful, 13 This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Library General Public License for more details. 16 Library General Public License for more details.
17 17
18 You should have received a copy of the GNU Library General Public License 18 You should have received a copy of the GNU Library General Public License
19 along with this library; see the file COPYING.LIB. If not, write to 19 along with this library; see the file COPYING.LIB. If not, write to
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. 21 Boston, MA 02111-1307, USA.
22*/ 22*/
23 23
24/* 24/*
25Enhanced Version of the file for platform independent KDE tools. 25Enhanced Version of the file for platform independent KDE tools.
26Copyright (c) 2004 Ulf Schenk 26Copyright (c) 2004 Ulf Schenk
27 27
28$Id$ 28$Id$
29*/ 29*/
30 30
31#ifndef KRESOURCES_MANAGERIMPL_H 31#ifndef KRESOURCES_MANAGERIMPL_H
32#define KRESOURCES_MANAGERIMPL_H 32#define KRESOURCES_MANAGERIMPL_H
33 33
34#include <qstring.h> 34#include <qstring.h>
35#include <qptrlist.h> 35#include <qptrlist.h>
36#include <qdict.h> 36#include <qdict.h>
37//US 37//US
38#include <qobject.h> 38#include <qobject.h>
39 39
40#include "resource.h" 40#include "resource.h"
41 41
42 42
43class KConfig; 43class KConfig;
44 44
45namespace KRES { 45namespace KRES {
46 46
47class Resource; 47class Resource;
48class Factory; 48class Factory;
49 49
50class ManagerImplListener 50class ManagerImplListener
51{ 51{
52 public: 52 public:
53 virtual void resourceAdded( Resource *resource ) = 0; 53 virtual void resourceAdded( Resource *resource ) = 0;
54 virtual void resourceModified( Resource *resource ) = 0; 54 virtual void resourceModified( Resource *resource ) = 0;
55 virtual void resourceDeleted( Resource *resource ) = 0; 55 virtual void resourceDeleted( Resource *resource ) = 0;
56}; 56};
57 57
58 58
59/** 59/**
60 @internal 60 @internal
61 61
62 Do not use this class directly. Use ResourceManager instead 62 Do not use this class directly. Use ResourceManager instead
63*/ 63*/
64class ManagerImpl : public QObject 64class ManagerImpl : public QObject
65{ 65{
66 Q_OBJECT 66 Q_OBJECT
67 public: 67 public:
68 ManagerImpl( const QString &family, bool syncable); 68 ManagerImpl( const QString &family);
69 ~ManagerImpl(); 69 ~ManagerImpl();
70 70
71 void readConfig( KConfig * ); 71 void readConfig( KConfig * );
72 void writeConfig( KConfig * ); 72 void writeConfig( KConfig * );
73 73
74 void add( Resource *resource, bool useDCOP = true ); 74 void add( Resource *resource, bool useDCOP = true );
75 void remove( Resource *resource, bool useDCOP = true ); 75 void remove( Resource *resource, bool useDCOP = true );
76 76
77 Resource *standardResource(); 77 Resource *standardResource();
78 void setStandardResource( Resource *resource ); 78 void setStandardResource( Resource *resource );
79 79
80 void setActive( Resource *resource, bool active ); 80 void setActive( Resource *resource, bool active );
81 81
82 Resource::List *resourceList(); 82 Resource::List *resourceList();
83 83
84 QPtrList<Resource> resources(); 84 QPtrList<Resource> resources();
85 85
86 // Get only active or passive resources 86 // Get only active or passive resources
87 QPtrList<Resource> resources( bool active ); 87 QPtrList<Resource> resources( bool active );
88 88
89 QStringList resourceNames(); 89 QStringList resourceNames();
90 90
91 void setListener( ManagerImplListener *listener ); 91 void setListener( ManagerImplListener *listener );
92 92
93 /**
94 Return true, if the manager manages syncable resources.
95 */
96 bool manageSyncable() const;
97
98 public slots: 93 public slots:
99 void resourceChanged( Resource *resource ); 94 void resourceChanged( Resource *resource );
100 95
101 private: 96 private:
102 // dcop calls 97 // dcop calls
103 98
104 private: 99 private:
105 void createStandardConfig(); 100 void createStandardConfig();
106 101
107 Resource *readResourceConfig( const QString& identifier, bool checkActive ); 102 Resource *readResourceConfig( const QString& identifier, bool checkActive );
108 void writeResourceConfig( Resource *resource, bool checkActive ); 103 void writeResourceConfig( Resource *resource, bool checkActive );
109 104
110 void removeResource( Resource *resource ); 105 void removeResource( Resource *resource );
111 Resource *getResource( Resource *resource ); 106 Resource *getResource( Resource *resource );
112 Resource *getResource( const QString& identifier ); 107 Resource *getResource( const QString& identifier );
113 108
114 QString mFamily; 109 QString mFamily;
115 bool mSyncable;
116 KConfig *mConfig; 110 KConfig *mConfig;
117 KConfig *mStdConfig; 111 KConfig *mStdConfig;
118 Resource *mStandard; 112 Resource *mStandard;
119 Factory *mFactory; 113 Factory *mFactory;
120 Resource::List mResources; 114 Resource::List mResources;
121 ManagerImplListener *mListener; 115 ManagerImplListener *mListener;
122}; 116};
123 117
124} 118}
125 119
126#endif 120#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
@@ -105,100 +105,101 @@ bool Resource::open()
105 } 105 }
106 d->mOpenCount++; 106 d->mOpenCount++;
107 return d->mIsOpen; 107 return d->mIsOpen;
108} 108}
109 109
110void Resource::close() 110void Resource::close()
111{ 111{
112#ifdef QT_THREAD_SUPPORT 112#ifdef QT_THREAD_SUPPORT
113 QMutexLocker guard( &(d->mMutex) ); 113 QMutexLocker guard( &(d->mMutex) );
114#endif 114#endif
115 if ( !d->mOpenCount ) { 115 if ( !d->mOpenCount ) {
116 kdDebug(5650) << "ERROR: Resource " << resourceName() << " closed more times than previously opened" << endl; 116 kdDebug(5650) << "ERROR: Resource " << resourceName() << " closed more times than previously opened" << endl;
117 return; 117 return;
118 } 118 }
119 d->mOpenCount--; 119 d->mOpenCount--;
120 if ( !d->mOpenCount ) { 120 if ( !d->mOpenCount ) {
121 kdDebug(5650) << "Closing resource " << resourceName() << endl; 121 kdDebug(5650) << "Closing resource " << resourceName() << endl;
122 doClose(); 122 doClose();
123 d->mIsOpen = false; 123 d->mIsOpen = false;
124 } else { 124 } else {
125 kdDebug(5650) << "Not yet closing resource " << resourceName() << ", open count = " << d->mOpenCount << endl; 125 kdDebug(5650) << "Not yet closing resource " << resourceName() << ", open count = " << d->mOpenCount << endl;
126 } 126 }
127} 127}
128 128
129bool Resource::isOpen() const 129bool Resource::isOpen() const
130{ 130{
131 return d->mIsOpen; 131 return d->mIsOpen;
132} 132}
133 133
134void Resource::setIdentifier( const QString& identifier ) 134void Resource::setIdentifier( const QString& identifier )
135{ 135{
136 d->mIdentifier = identifier; 136 d->mIdentifier = identifier;
137} 137}
138 138
139QString Resource::identifier() const 139QString Resource::identifier() const
140{ 140{
141 return d->mIdentifier; 141 return d->mIdentifier;
142} 142}
143 143
144void Resource::setType( const QString& type ) 144void Resource::setType( const QString& type )
145{ 145{
146 d->mType = type; 146 d->mType = type;
147} 147}
148 148
149QString Resource::type() const 149QString Resource::type() const
150{ 150{
151 return d->mType; 151 return d->mType;
152} 152}
153 153
154void Resource::setIncludeInSync( bool value ) 154void Resource::setIncludeInSync( bool value )
155{ 155{
156 d->mIncludeInSync = value; 156 d->mIncludeInSync = value;
157} 157}
158bool Resource::includeInSync() const 158bool Resource::includeInSync() const
159{ 159{
160 return d->mIncludeInSync; 160 return d->mIncludeInSync;
161} 161}
162void Resource::setReadOnly( bool value ) 162void Resource::setReadOnly( bool value )
163{ 163{
164 d->mReadOnly = value; 164 d->mReadOnly = value;
165} 165}
166 166
167bool Resource::readOnly() const 167bool Resource::readOnly() const
168{ 168{
169 return d->mReadOnly; 169 return d->mReadOnly;
170} 170}
171 171
172void Resource::setResourceName( const QString &name ) 172void Resource::setResourceName( const QString &name )
173{ 173{
174 d->mName = name; 174 d->mName = name;
175} 175}
176 176
177QString Resource::resourceName() const 177QString Resource::resourceName() const
178{ 178{
179 return d->mName; 179 return d->mName;
180} 180}
181 181
182void Resource::setActive( bool value ) 182void Resource::setActive( bool value )
183{ 183{
184 d->mActive = value; 184 d->mActive = value;
185} 185}
186 186
187bool Resource::isActive() const 187bool Resource::isActive() const
188{ 188{
189 return d->mActive; 189 return d->mActive;
190} 190}
191 191
192void Resource::dump() const 192void Resource::dump() const
193{ 193{
194 qDebug("Resource::dump() "); 194 qDebug("Resource::dump() ");
195 kdDebug(5650) << "Resource:" << endl; 195 kdDebug(5650) << "Resource:" << endl;
196 kdDebug(5650) << " Name: " << d->mName << endl; 196 kdDebug(5650) << " Name: " << d->mName << endl;
197 kdDebug(5650) << " Identifier: " << d->mIdentifier << endl; 197 kdDebug(5650) << " Identifier: " << d->mIdentifier << endl;
198 kdDebug(5650) << " Type: " << d->mType << endl; 198 kdDebug(5650) << " Type: " << d->mType << endl;
199 kdDebug(5650) << " OpenCount: " << d->mOpenCount << endl; 199 kdDebug(5650) << " OpenCount: " << d->mOpenCount << endl;
200 kdDebug(5650) << " ReadOnly: " << ( d->mReadOnly ? "yes" : "no" ) << endl; 200 kdDebug(5650) << " ReadOnly: " << ( d->mReadOnly ? "yes" : "no" ) << endl;
201 kdDebug(5650) << " IncludeInSync: " << ( d->mIncludeInSync ? "yes" : "no" ) << endl;
201 kdDebug(5650) << " Active: " << ( d->mActive ? "yes" : "no" ) << endl; 202 kdDebug(5650) << " Active: " << ( d->mActive ? "yes" : "no" ) << endl;
202 kdDebug(5650) << " IsOpen: " << ( d->mIsOpen ? "yes" : "no" ) << endl; 203 kdDebug(5650) << " IsOpen: " << ( d->mIsOpen ? "yes" : "no" ) << endl;
203} 204}
204 205
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
@@ -1,418 +1,404 @@
1/* 1/*
2 This file is part of libkresources 2 This file is part of libkresources
3 3
4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
5 Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org> 5 Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org>
6 6
7 This library is free software; you can redistribute it and/or 7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public 8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either 9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version. 10 version 2 of the License, or (at your option) any later version.
11 11
12 This library is distributed in the hope that it will be useful, 12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details. 15 Library General Public License for more details.
16 16
17 You should have received a copy of the GNU Library General Public License 17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to 18 along with this library; see the file COPYING.LIB. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. 20 Boston, MA 02111-1307, USA.
21*/ 21*/
22 22
23#ifndef KRESOURCES_RESOURCE_H 23#ifndef KRESOURCES_RESOURCE_H
24#define KRESOURCES_RESOURCE_H 24#define KRESOURCES_RESOURCE_H
25 25
26//US 26//US
27#ifdef QT_THREAD_SUPPORT 27#ifdef QT_THREAD_SUPPORT
28#include <qmutex.h> 28#include <qmutex.h>
29#endif //QT_THREAD_SUPPORT 29#endif //QT_THREAD_SUPPORT
30 30
31#include <qvaluelist.h> 31#include <qvaluelist.h>
32#include <qwidget.h> 32#include <qwidget.h>
33 33
34#include <qobject.h> 34#include <qobject.h>
35 35
36#include <klibloader.h> 36#include <klibloader.h>
37 37
38class KConfig; 38class KConfig;
39 39
40namespace KRES { 40namespace KRES {
41 41
42class ConfigWidget; 42class ConfigWidget;
43class SyncWidgetContainer;
44 43
45/** 44/**
46 * @internal 45 * @internal
47 * @libdoc The KDE Resource library 46 * @libdoc The KDE Resource library
48 * 47 *
49 * NOTE: this library is NOT (YET?) PUBLIC. Do not publish this 48 * NOTE: this library is NOT (YET?) PUBLIC. Do not publish this
50 * interface, it is in constant flux. 49 * interface, it is in constant flux.
51 * 50 *
52 * The KDE Resource framework can be used to manage resources of 51 * The KDE Resource framework can be used to manage resources of
53 * different types, organized in families. The Resource framework 52 * different types, organized in families. The Resource framework
54 * is currently used for addressbook resources in libkabc and for 53 * is currently used for addressbook resources in libkabc and for
55 * calendar resources in libkcal. 54 * calendar resources in libkcal.
56 * 55 *
57 * When you want to use the framework for a new family, you need to 56 * When you want to use the framework for a new family, you need to
58 * <ul><li>Define a name for your resource family</li> 57 * <ul><li>Define a name for your resource family</li>
59 * <li>subclass Resource and add the fields and method that are needed 58 * <li>subclass Resource and add the fields and method that are needed
60 * in your application</li> 59 * in your application</li>
61 * <li>If needed, override the doOpen() and doClose() methods. 60 * <li>If needed, override the doOpen() and doClose() methods.
62 * <li> Provide a configuration possibility for resources in your 61 * <li> Provide a configuration possibility for resources in your
63 * new family. You can use @ref ResourcesConfigPage to easily create a 62 * new family. You can use @ref ResourcesConfigPage to easily create a
64 * KControl applet</li> 63 * KControl applet</li>
65 * <li>In your application, you can use @ref ResourceManager to keep track 64 * <li>In your application, you can use @ref ResourceManager to keep track
66 * of the resources in your family, and you can use @ref ResourceSelectDialog 65 * of the resources in your family, and you can use @ref ResourceSelectDialog
67 * to let the user select a single resource.</li> 66 * to let the user select a single resource.</li>
68 * </ul> 67 * </ul>
69 * 68 *
70 * When you want to add a new resource type to an existing resource family, 69 * When you want to add a new resource type to an existing resource family,
71 * you need to 70 * you need to
72 * <ul><li>Further subclass the family-specific Resource to implement 71 * <ul><li>Further subclass the family-specific Resource to implement
73 * resource type-specific operation</li> 72 * resource type-specific operation</li>
74 * <li>Subclass ResourceConfigWidget to provide a configuration widget 73 * <li>Subclass ResourceConfigWidget to provide a configuration widget
75 * for your new resource type</li> 74 * for your new resource type</li>
76 * <li>Provide a .desktop file so that the new resource type can be found 75 * <li>Provide a .desktop file so that the new resource type can be found
77 * automatically by the ResourceManager</li> 76 * automatically by the ResourceManager</li>
78 * </ul> 77 * </ul>
79 * 78 *
80 * Example: 79 * Example:
81 * 80 *
82<B>resourceexample.h</B>: 81<B>resourceexample.h</B>:
83<pre> 82<pre>
84#include <kconfig.h> 83#include <kconfig.h>
85#include <kresources/resource.h> 84#include <kresources/resource.h>
86 85
87class ResourceExample : public KRES::ResourceExample 86class ResourceExample : public KRES::ResourceExample
88{ 87{
89public: 88public:
90 ResourceExample( const KConfig * ); 89 ResourceExample( const KConfig * );
91 ~ResourceCalendarExchange(); 90 ~ResourceCalendarExchange();
92 void writeConfig( KConfig *config ); 91 void writeConfig( KConfig *config );
93private: 92private:
94 QString mLocation; 93 QString mLocation;
95 QString mPassword; 94 QString mPassword;
96} 95}
97</pre> 96</pre>
98<B>resourceexample.cpp</B>: 97<B>resourceexample.cpp</B>:
99<pre> 98<pre>
100#include <kconfig.h> 99#include <kconfig.h>
101 100
102#include "resourceexample.h" 101#include "resourceexample.h"
103 102
104ResourceExample::ResourceExample( const KConfig *config ) 103ResourceExample::ResourceExample( const KConfig *config )
105 : Resource( config ) 104 : Resource( config )
106{ 105{
107 if ( config ) { 106 if ( config ) {
108 mLocation = config->readEntry( "Location" ); 107 mLocation = config->readEntry( "Location" );
109 mPassword = KStringHandler::obscure( config->readEntry( "Password" ) ); 108 mPassword = KStringHandler::obscure( config->readEntry( "Password" ) );
110 } else { 109 } else {
111 mLocation = ""; // Or some sensible default 110 mLocation = ""; // Or some sensible default
112 mPassword = ""; 111 mPassword = "";
113 } 112 }
114} 113}
115 114
116void ResourceExample::writeConfig( KConfig *config ) 115void ResourceExample::writeConfig( KConfig *config )
117{ 116{
118 KRES::Resource::writeConfig( config ); 117 KRES::Resource::writeConfig( config );
119 config->writeEntry( "Location", mLocation ); 118 config->writeEntry( "Location", mLocation );
120 config->writeEntry( "Password", KStringHandler::obscure( mPassword ) ); 119 config->writeEntry( "Password", KStringHandler::obscure( mPassword ) );
121} 120}
122 121
123extern "C" 122extern "C"
124{ 123{
125 KRES::ResourceExample *config_widget( QWidget *parent ) { 124 KRES::ResourceExample *config_widget( QWidget *parent ) {
126 return new ResourceExampleConfig( parent, "Configure Example Resource" ); 125 return new ResourceExampleConfig( parent, "Configure Example Resource" );
127 } 126 }
128 127
129 KRES::Resource *resource( const KConfig *config ) { 128 KRES::Resource *resource( const KConfig *config ) {
130 return new ResourceExample( config ); 129 return new ResourceExample( config );
131 } 130 }
132} 131}
133</pre> 132</pre>
134* <B>resourceexampleconfig.h</B>: 133* <B>resourceexampleconfig.h</B>:
135<pre> 134<pre>
136#include <klineedit.h> 135#include <klineedit.h>
137#include <kresources/resourceconfigwidget.h> 136#include <kresources/resourceconfigwidget.h>
138 137
139#include "resourceexample.h" 138#include "resourceexample.h"
140 139
141class ResourceExampleConfig : public KRES::ResourceConfigWidget 140class ResourceExampleConfig : public KRES::ResourceConfigWidget
142{ 141{
143 Q_OBJECT 142 Q_OBJECT
144 143
145public: 144public:
146 ResourceExampleConfig( QWidget* parent = 0, const char* name = 0 ); 145 ResourceExampleConfig( QWidget* parent = 0, const char* name = 0 );
147 146
148public slots: 147public slots:
149 virtual void loadSettings( KRES::Resource *resource); 148 virtual void loadSettings( KRES::Resource *resource);
150 virtual void saveSettings( KRES::Resource *resource ); 149 virtual void saveSettings( KRES::Resource *resource );
151 150
152private: 151private:
153 KLineEdit* mLocationEdit; 152 KLineEdit* mLocationEdit;
154 KLineEdit* mPasswordEdit; 153 KLineEdit* mPasswordEdit;
155}; 154};
156</pre> 155</pre>
157* <B>resourceexampleconfig.cpp</B>: 156* <B>resourceexampleconfig.cpp</B>:
158<pre> 157<pre>
159#include <qlayout.h> 158#include <qlayout.h>
160#include <qlabel.h" 159#include <qlabel.h"
161#include <kresources/resourceconfigwidget.h> 160#include <kresources/resourceconfigwidget.h>
162#include "resourceexample.h" 161#include "resourceexample.h"
163#include "resourceexampleconfig.h" 162#include "resourceexampleconfig.h"
164 163
165ResourceExampleConfig::ResourceExampleConfig( QWidget* parent, const char* name ) 164ResourceExampleConfig::ResourceExampleConfig( QWidget* parent, const char* name )
166 : KRES::ResourceConfigWidget( parent, name ) 165 : KRES::ResourceConfigWidget( parent, name )
167{ 166{
168 resize( 245, 115 ); 167 resize( 245, 115 );
169 QGridLayout *mainLayout = new QGridLayout( this, 2, 2 ); 168 QGridLayout *mainLayout = new QGridLayout( this, 2, 2 );
170 169
171 QLabel *label = new QLabel( i18n( "Location:" ), this ); 170 QLabel *label = new QLabel( i18n( "Location:" ), this );
172 mHostEdit = new KLineEdit( this ); 171 mHostEdit = new KLineEdit( this );
173 mainLayout->addWidget( label, 1, 0 ); 172 mainLayout->addWidget( label, 1, 0 );
174 mainLayout->addWidget( mHostEdit, 1, 1 ); 173 mainLayout->addWidget( mHostEdit, 1, 1 );
175 174
176 label = new QLabel( i18n( "Password:" ), this ); 175 label = new QLabel( i18n( "Password:" ), this );
177 mPasswordEdit = new KLineEdit( this ); 176 mPasswordEdit = new KLineEdit( this );
178 mPasswordEdit->setEchoMode( QLineEdit::Password ); 177 mPasswordEdit->setEchoMode( QLineEdit::Password );
179 mainLayout->addWidget( label, 2, 0 ); 178 mainLayout->addWidget( label, 2, 0 );
180 mainLayout->addWidget( mPasswordEdit, 2, 1 ); 179 mainLayout->addWidget( mPasswordEdit, 2, 1 );
181} 180}
182 181
183void ResourceExampleConfig::loadSettings( KRES::Resource *resource ) 182void ResourceExampleConfig::loadSettings( KRES::Resource *resource )
184{ 183{
185 ResourceExample* res = dynamic_cast<ResourceExample *>( resource ); 184 ResourceExample* res = dynamic_cast<ResourceExample *>( resource );
186 if (res) { 185 if (res) {
187 mHostEdit->setText( res->host() ); 186 mHostEdit->setText( res->host() );
188 mPasswordEdit->setText( res->password() ); 187 mPasswordEdit->setText( res->password() );
189 } else 188 } else
190 kdDebug(5700) << "ERROR: ResourceExampleConfig::loadSettings(): no ResourceExample, cast failed" << endl; 189 kdDebug(5700) << "ERROR: ResourceExampleConfig::loadSettings(): no ResourceExample, cast failed" << endl;
191} 190}
192 191
193void ResourceExampleConfig::saveSettings( KRES::Resource *resource ) 192void ResourceExampleConfig::saveSettings( KRES::Resource *resource )
194{ 193{
195 ResourceExample* res = dynamic_cast<ResourceExample *>( resource ); 194 ResourceExample* res = dynamic_cast<ResourceExample *>( resource );
196 if (res) { 195 if (res) {
197 res->setHost(mHostEdit->text()); 196 res->setHost(mHostEdit->text());
198 res->setPassword(mPasswordEdit->text()); 197 res->setPassword(mPasswordEdit->text());
199 } else 198 } else
200 kdDebug(5700) << "ERROR: ResourceExampleConfig::saveSettings(): no ResourceExample, cast failed" << endl; 199 kdDebug(5700) << "ERROR: ResourceExampleConfig::saveSettings(): no ResourceExample, cast failed" << endl;
201} 200}
202</pre> 201</pre>
203* <B>resourceexample.desktop</B>: 202* <B>resourceexample.desktop</B>:
204<pre> 203<pre>
205[Desktop Entry] 204[Desktop Entry]
206Type=Service 205Type=Service
207 206
208[Misc] 207[Misc]
209Encoding=UTF-8 208Encoding=UTF-8
210Name=Example Resource 209Name=Example Resource
211 210
212[Plugin] 211[Plugin]
213Type=exchange 212Type=exchange
214X-KDE-Library=resourceexample 213X-KDE-Library=resourceexample
215</pre> 214</pre>
216* <B>Makefile.am</B> 215* <B>Makefile.am</B>
217<pre> 216<pre>
218kde_module_LTLIBRARIES = resourceexample.la 217kde_module_LTLIBRARIES = resourceexample.la
219 218
220resourceexample_la_SOURCES = resourceexample.cpp resourceexampleconfig.cpp 219resourceexample_la_SOURCES = resourceexample.cpp resourceexampleconfig.cpp
221resourceexample_la_LDFLAGS= $(all_libraries) -module $(KDE_PLUGIN) 220resourceexample_la_LDFLAGS= $(all_libraries) -module $(KDE_PLUGIN)
222resourceexample_la_LIBADD= -lkderesources 221resourceexample_la_LIBADD= -lkderesources
223 222
224linkdir= $(kde_datadir)/resources/family 223linkdir= $(kde_datadir)/resources/family
225link_DATA= resourceexample.desktop 224link_DATA= resourceexample.desktop
226</pre> 225</pre>
227 * 226 *
228 * 227 *
229 */ 228 */
230 229
231/** 230/**
232 * A @ref Resource is a ... 231 * A @ref Resource is a ...
233 * 232 *
234 * A subclass should reimplement at least the constructor and the 233 * A subclass should reimplement at least the constructor and the
235 * @ref writeConfig method. 234k * @ref writeConfig method.
236 * 235 *
237 */ 236 */
238class Resource : public QObject 237class Resource : public QObject
239{ 238{
240 Q_OBJECT 239 Q_OBJECT
241 240
242 public: 241 public:
243 typedef QValueList<Resource *> List; 242 typedef QValueList<Resource *> List;
244 243
245 /** 244 /**
246 * Constructor. Construct resource from config. 245 * Constructor. Construct resource from config.
247 * @param config Configuration to read persistence information from. 246 * @param config Configuration to read persistence information from.
248 * If config==0, create object using default settings. 247 * If config==0, create object using default settings.
249 */ 248 */
250 Resource( const KConfig* config ); 249 Resource( const KConfig* config );
251 250
252 /** 251 /**
253 * Destructor. 252 * Destructor.
254 */ 253 */
255 virtual ~Resource(); 254 virtual ~Resource();
256 255
257 /** 256 /**
258 * Write configuration information for this resource to a configuration 257 * Write configuration information for this resource to a configuration
259 * file. If you override this method, remember to call Resource::writeConfig 258 * file. If you override this method, remember to call Resource::writeConfig
260 * or Terrible Things(TM) will happen. 259 * or Terrible Things(TM) will happen.
261 * @param config Configuration to write persistence information to. 260 * @param config Configuration to write persistence information to.
262 */ 261 */
263 virtual void writeConfig( KConfig* config ); 262 virtual void writeConfig( KConfig* config );
264 263
265 /** 264 /**
266 * Open this resource, if it not already open. Increase the open 265 * Open this resource, if it not already open. Increase the open
267 * count of this object, and open the resource by calling @ref doOpen(). 266 * count of this object, and open the resource by calling @ref doOpen().
268 * This method may block while another thread is concurrently opening 267 * This method may block while another thread is concurrently opening
269 * or closing the resource. 268 * or closing the resource.
270 * 269 *
271 * Returns true if the resource was already opened or if it was opened 270 * Returns true if the resource was already opened or if it was opened
272 * successfully; returns false if the resource was not opened successfully. 271 * successfully; returns false if the resource was not opened successfully.
273 */ 272 */
274 bool open(); 273 bool open();
275 274
276 /** 275 /**
277 * Decrease the open count of this object, and if the count reaches 276 * Decrease the open count of this object, and if the count reaches
278 * zero, close this resource by calling @ref doClose(). 277 * zero, close this resource by calling @ref doClose().
279 * This method may block while another thread is concurrently closing 278 * This method may block while another thread is concurrently closing
280 * or opening the resource. 279 * or opening the resource.
281 */ 280 */
282 void close(); 281 void close();
283 282
284 /** 283 /**
285 * Returns whether the resource is open or not. 284 * Returns whether the resource is open or not.
286 */ 285 */
287 bool isOpen() const; 286 bool isOpen() const;
288 287
289 /** 288 /**
290 * Returns a unique identifier. The identifier is unique for this resource. 289 * Returns a unique identifier. The identifier is unique for this resource.
291 * It is created when the resource is first created, and it is retained 290 * It is created when the resource is first created, and it is retained
292 * in the resource family configuration file for this resource. 291 * in the resource family configuration file for this resource.
293 * @return This resource's identifier 292 * @return This resource's identifier
294 */ 293 */
295 QString identifier() const; 294 QString identifier() const;
296 295
297 /** 296 /**
298 * Returns the type of this resource. 297 * Returns the type of this resource.
299 */ 298 */
300 QString type() const; 299 QString type() const;
301 300
302 /** 301 /**
303 * Mark the resource as read-only. You can override this method, 302 * Mark the resource as read-only. You can override this method,
304 * but also remember to call Resource::setReadOnly(). 303 * but also remember to call Resource::setReadOnly().
305 */ 304 */
306 virtual void setReadOnly( bool value ); 305 virtual void setReadOnly( bool value );
307 306
308 /** 307 /**
309 * Returns, if the resource is read-only. 308 * Returns, if the resource is read-only.
310 */ 309 */
311 virtual bool readOnly() const; 310 virtual bool readOnly() const;
312 311
313 void setIncludeInSync( bool value ); 312 void setIncludeInSync( bool value );
314 bool includeInSync() const; 313 bool includeInSync() const;
315 /** 314 /**
316 * Set the name of resource.You can override this method, 315 * Set the name of resource.You can override this method,
317 * but also remember to call Resource::setResourceName(). 316 * but also remember to call Resource::setResourceName().
318 */ 317 */
319 virtual void setResourceName( const QString &name ); 318 virtual void setResourceName( const QString &name );
320 319
321 /** 320 /**
322 * Returns the name of resource. 321 * Returns the name of resource.
323 */ 322 */
324 virtual QString resourceName() const; 323 virtual QString resourceName() const;
325 324
326
327
328 virtual bool isSyncable() const = 0;
329
330
331 /** 325 /**
332 Sets, if the resource is active. 326 Sets, if the resource is active.
333 */ 327 */
334 void setActive( bool active ); 328 void setActive( bool active );
335 329
336 /** 330 /**
337 Return true, if the resource is active. 331 Return true, if the resource is active.
338 */ 332 */
339 bool isActive() const; 333 bool isActive() const;
340 334
341 friend class Factory; 335 friend class Factory;
342 friend class ManagerImpl; 336 friend class ManagerImpl;
343 337
344 /** 338 /**
345 Print resource information as debug output. 339 Print resource information as debug output.
346 */ 340 */
347 virtual void dump() const; 341 virtual void dump() const;
348 342
349 343
350 protected: 344 protected:
351 /** 345 /**
352 * Open this resource. When called, the resource must be in 346 * Open this resource. When called, the resource must be in
353 * a closed state. 347 * a closed state.
354 * 348 *
355 * Returns true if the resource was opened successfully; 349 * Returns true if the resource was opened successfully;
356 * returns false if the resource was not opened successfully. 350 * returns false if the resource was not opened successfully.
357 * 351 *
358 * The result of this call can be accessed later by @ref isOpen() 352 * The result of this call can be accessed later by @ref isOpen()
359 */ 353 */
360 virtual bool doOpen() { return true; } 354 virtual bool doOpen() { return true; }
361 355
362 /** 356 /**
363 * Close this resource. Pre-condition: resource is open. 357 * Close this resource. Pre-condition: resource is open.
364 * Post-condition: resource is closed. 358 * Post-condition: resource is closed.
365 */ 359 */
366 virtual void doClose() {} 360 virtual void doClose() {}
367 361
368 void setIdentifier( const QString& identifier ); 362 void setIdentifier( const QString& identifier );
369 void setType( const QString& type ); 363 void setType( const QString& type );
370 364
371 private: 365 private:
372 class ResourcePrivate; 366 class ResourcePrivate;
373 ResourcePrivate *d; 367 ResourcePrivate *d;
374}; 368};
375 369
376class PluginFactoryBase : public KLibFactory 370class PluginFactoryBase : public KLibFactory
377{ 371{
378 public: 372 public:
379 virtual Resource *resource( const KConfig *config, bool syncable ) = 0; 373 virtual Resource *resource( const KConfig *config) = 0;
380 374
381 virtual ConfigWidget *configWidget( QWidget *parent ) = 0; 375 virtual ConfigWidget *configWidget( QWidget *parent ) = 0;
382 376
383 virtual SyncWidgetContainer *syncWidgetContainer() = 0;
384
385 protected: 377 protected:
386 virtual QObject* createObject( QObject*, const char*, const char*, 378 virtual QObject* createObject( QObject*, const char*, const char*,
387 const QStringList & ) 379 const QStringList & )
388 { 380 {
389 return 0; 381 return 0;
390 } 382 }
391}; 383};
392 384
393template<class TR,class TC, class TS> 385template<class TR,class TC>
394class PluginFactory : public PluginFactoryBase 386class PluginFactory : public PluginFactoryBase
395{ 387{
396 public: 388 public:
397 Resource *resource( const KConfig *config, bool syncable ) 389 Resource *resource( const KConfig *config)
398 { 390 {
399 return new TR( config, syncable ); 391 return new TR( config );
400 } 392 }
401 393
402 ConfigWidget *configWidget( QWidget *parent ) 394 ConfigWidget *configWidget( QWidget *parent )
403 { 395 {
404 return new TC( parent ); 396 return new TC( parent );
405 } 397 }
406
407 SyncWidgetContainer *syncWidgetContainer()
408 {
409 return new TS();
410 }
411
412}; 398};
413 399
414 400
415 401
416} 402}
417 403
418#endif 404#endif