summaryrefslogtreecommitdiffabout
path: root/microkde
Unidiff
Diffstat (limited to 'microkde') (more/less context) (ignore whitespace changes)
-rw-r--r--microkde/kresources/configdialog.cpp5
-rw-r--r--microkde/kresources/configdialog.h1
-rw-r--r--microkde/kresources/resource.cpp14
-rw-r--r--microkde/kresources/resource.h2
4 files changed, 20 insertions, 2 deletions
diff --git a/microkde/kresources/configdialog.cpp b/microkde/kresources/configdialog.cpp
index f8240f9..030b547 100644
--- a/microkde/kresources/configdialog.cpp
+++ b/microkde/kresources/configdialog.cpp
@@ -1,241 +1,246 @@
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" 44#include "syncwidget.h"
45 45
46using namespace KRES; 46using namespace KRES;
47 47
48ConfigDialog::ConfigDialog( QWidget *parent, const QString& resourceFamily, 48ConfigDialog::ConfigDialog( QWidget *parent, const QString& resourceFamily,
49 Resource* resource, const char *name ) 49 Resource* resource, const char *name )
50 : KDialogBase( parent, name, true, resource->isSyncable()?i18n( "Sync Profile Configuration" ):i18n( "Resource Configuration" ), 50 : KDialogBase( parent, name, true, resource->isSyncable()?i18n( "Sync Profile Configuration" ):i18n( "Resource Configuration" ),
51 Ok|Cancel, Ok, true )/*, mConfig( config )*/, mSyncWidget_Settings(0), mSyncWidget_Conflicts(0),mSyncWidget_Remote(0), mResource( resource ), mPersistentReadOnly(false) 51 Ok|Cancel, Ok, true )/*, mConfig( config )*/, mSyncWidget_Settings(0), mSyncWidget_Conflicts(0),mSyncWidget_Remote(0), mResource( resource ), mPersistentReadOnly(false)
52{ 52{
53 53
54 Factory *factory = Factory::self( resourceFamily ); 54 Factory *factory = Factory::self( resourceFamily );
55 55
56//US resize( 250, 240 ); 56//US resize( 250, 240 );
57 resize( KMIN(KGlobal::getDesktopWidth(), 250), KMIN(KGlobal::getDesktopHeight(), 240)); 57 resize( KMIN(KGlobal::getDesktopWidth(), 250), KMIN(KGlobal::getDesktopHeight(), 240));
58 58
59 QFrame *main; 59 QFrame *main;
60 60
61 if (!mResource->isSyncable()) 61 if (!mResource->isSyncable())
62 main = plainPage(); 62 main = plainPage();
63 else 63 else
64 main = addPage("Profile"); 64 main = addPage("Profile");
65 65
66 QVBoxLayout *mainLayout = new QVBoxLayout( main, 0, spacingHint() ); 66 QVBoxLayout *mainLayout = new QVBoxLayout( main, 0, spacingHint() );
67 67
68 68
69 QGroupBox *generalGroupBox = new QGroupBox( 2, Qt::Horizontal, main ); 69 QGroupBox *generalGroupBox = new QGroupBox( 2, Qt::Horizontal, main );
70 generalGroupBox->layout()->setSpacing( spacingHint() ); 70 generalGroupBox->layout()->setSpacing( spacingHint() );
71 generalGroupBox->setTitle( i18n( "General Settings" ) ); 71 generalGroupBox->setTitle( i18n( "General Settings" ) );
72 72
73 new QLabel( mResource->isSyncable()?i18n( "Profile Name:" ):i18n( "Name:" ), generalGroupBox ); 73 new QLabel( mResource->isSyncable()?i18n( "Profile Name:" ):i18n( "Name:" ), generalGroupBox );
74 74
75 mName = new KLineEdit( generalGroupBox ); 75 mName = new KLineEdit( generalGroupBox );
76 76
77 if (!mResource->isSyncable()) { 77 if (!mResource->isSyncable()) {
78 new QLabel("", generalGroupBox );
78 mReadOnly = new QCheckBox( i18n( "Read-only" ), generalGroupBox ); 79 mReadOnly = new QCheckBox( i18n( "Read-only" ), generalGroupBox );
79 mReadOnly->setChecked( mResource->readOnly() ); 80 mReadOnly->setChecked( mResource->readOnly() );
81 new QLabel("", generalGroupBox );
82 mIncludeInSync = new QCheckBox( i18n( "Include in sync" ), generalGroupBox );
83 mIncludeInSync->setChecked( mResource->includeInSync() );
80 } 84 }
81 85
82 mName->setText( mResource->resourceName() ); 86 mName->setText( mResource->resourceName() );
83 87
84 mainLayout->addWidget( generalGroupBox ); 88 mainLayout->addWidget( generalGroupBox );
85 89
86 QGroupBox *resourceGroupBox = new QGroupBox( 2, Qt::Horizontal, main ); 90 QGroupBox *resourceGroupBox = new QGroupBox( 2, Qt::Horizontal, main );
87 resourceGroupBox->layout()->setSpacing( spacingHint()); 91 resourceGroupBox->layout()->setSpacing( spacingHint());
88 resourceGroupBox->setTitle( i18n( "%1 Resource Settings" ) 92 resourceGroupBox->setTitle( i18n( "%1 Resource Settings" )
89 .arg( factory->typeName( resource->type() ) ) ); 93 .arg( factory->typeName( resource->type() ) ) );
90 mainLayout->addWidget( resourceGroupBox ); 94 mainLayout->addWidget( resourceGroupBox );
91 95
92 mainLayout->addStretch(); 96 mainLayout->addStretch();
93 97
94 mConfigWidget = factory->configWidget( resource->type(), resourceGroupBox ); 98 mConfigWidget = factory->configWidget( resource->type(), resourceGroupBox );
95 if ( mConfigWidget ) { 99 if ( mConfigWidget ) {
96 connect( mConfigWidget, SIGNAL( setReadOnly( bool ) ), 100 connect( mConfigWidget, SIGNAL( setReadOnly( bool ) ),
97 SLOT( setReadOnly( bool ) ) ); 101 SLOT( setReadOnly( bool ) ) );
98 connect( mConfigWidget, SIGNAL( setPersistentReadOnly( bool ) ), 102 connect( mConfigWidget, SIGNAL( setPersistentReadOnly( bool ) ),
99 SLOT( setPersistentReadOnly( bool ) ) ); 103 SLOT( setPersistentReadOnly( bool ) ) );
100 mConfigWidget->setInEditMode( false ); 104 mConfigWidget->setInEditMode( false );
101 mConfigWidget->loadSettings( mResource ); 105 mConfigWidget->loadSettings( mResource );
102 mConfigWidget->show(); 106 mConfigWidget->show();
103 107
104 } 108 }
105 109
106 if (mResource->isSyncable()) 110 if (mResource->isSyncable())
107 { 111 {
108 SyncWidgetContainer* c = factory->syncWidgetContainer( resource->type() ); 112 SyncWidgetContainer* c = factory->syncWidgetContainer( resource->type() );
109 113
110 QFrame* syncPage = addPage("Settings"); 114 QFrame* syncPage = addPage("Settings");
111 QVBoxLayout *syncLayout = new QVBoxLayout( syncPage, 0, spacingHint() ); 115 QVBoxLayout *syncLayout = new QVBoxLayout( syncPage, 0, spacingHint() );
112 mSyncWidget_Settings = c->generateSettingsTab(syncPage); 116 mSyncWidget_Settings = c->generateSettingsTab(syncPage);
113 syncLayout->addWidget( mSyncWidget_Settings ); 117 syncLayout->addWidget( mSyncWidget_Settings );
114 118
115 syncPage = addPage("Conflicts"); 119 syncPage = addPage("Conflicts");
116 syncLayout = new QVBoxLayout( syncPage, 0, spacingHint() ); 120 syncLayout = new QVBoxLayout( syncPage, 0, spacingHint() );
117 mSyncWidget_Conflicts = c->generateConflictsTab(syncPage); 121 mSyncWidget_Conflicts = c->generateConflictsTab(syncPage);
118 syncLayout->addWidget( mSyncWidget_Conflicts ); 122 syncLayout->addWidget( mSyncWidget_Conflicts );
119 123
120 syncPage = addPage("Remote"); 124 syncPage = addPage("Remote");
121 syncLayout = new QVBoxLayout( syncPage, 0, spacingHint() ); 125 syncLayout = new QVBoxLayout( syncPage, 0, spacingHint() );
122 mSyncWidget_Remote = c->generateRemoteTab(syncPage); 126 mSyncWidget_Remote = c->generateRemoteTab(syncPage);
123 syncLayout->addWidget( mSyncWidget_Remote ); 127 syncLayout->addWidget( mSyncWidget_Remote );
124 128
125 129
126 mSyncWidget_Settings->setInEditMode( false ); 130 mSyncWidget_Settings->setInEditMode( false );
127 mSyncWidget_Settings->loadSettings( mResource ); 131 mSyncWidget_Settings->loadSettings( mResource );
128 mSyncWidget_Settings->show(); 132 mSyncWidget_Settings->show();
129 133
130 mSyncWidget_Conflicts->setInEditMode( false ); 134 mSyncWidget_Conflicts->setInEditMode( false );
131 mSyncWidget_Conflicts->loadSettings( mResource ); 135 mSyncWidget_Conflicts->loadSettings( mResource );
132 mSyncWidget_Conflicts->show(); 136 mSyncWidget_Conflicts->show();
133 137
134 mSyncWidget_Remote->setInEditMode( false ); 138 mSyncWidget_Remote->setInEditMode( false );
135 mSyncWidget_Remote->loadSettings( mResource ); 139 mSyncWidget_Remote->loadSettings( mResource );
136 mSyncWidget_Remote->show(); 140 mSyncWidget_Remote->show();
137 141
138 delete c; 142 delete c;
139 143
140// QGroupBox *syncGroupBox = new QGroupBox( 2, Qt::Horizontal, syncPage ); 144// QGroupBox *syncGroupBox = new QGroupBox( 2, Qt::Horizontal, syncPage );
141// syncGroupBox->layout()->setSpacing( spacingHint()); 145// syncGroupBox->layout()->setSpacing( spacingHint());
142// syncGroupBox->setTitle( i18n( "Syncronize Preferences" ) ); 146// syncGroupBox->setTitle( i18n( "Syncronize Preferences" ) );
143// syncLayout->addWidget( syncGroupBox ); 147// syncLayout->addWidget( syncGroupBox );
144 148
145// syncLayout->addStretch(); 149// syncLayout->addStretch();
146/*US 150/*US
147 mSyncWidget = factory->syncWidget( resource->type(), syncPage ); 151 mSyncWidget = factory->syncWidget( resource->type(), syncPage );
148 syncLayout->addWidget( mSyncWidget ); 152 syncLayout->addWidget( mSyncWidget );
149 if ( mSyncWidget ) { 153 if ( mSyncWidget ) {
150 mSyncWidget->setInEditMode( false ); 154 mSyncWidget->setInEditMode( false );
151 mSyncWidget->loadSettings( mResource ); 155 mSyncWidget->loadSettings( mResource );
152 mSyncWidget->show(); 156 mSyncWidget->show();
153 } 157 }
154 */ 158 */
155 } 159 }
156 160
157 161
158 162
159 163
160 connect( mName, SIGNAL( textChanged(const QString &)), 164 connect( mName, SIGNAL( textChanged(const QString &)),
161 SLOT( slotNameChanged(const QString &))); 165 SLOT( slotNameChanged(const QString &)));
162 166
163 slotNameChanged( mName->text() ); 167 slotNameChanged( mName->text() );
164 168
165//US setMinimumSize( 400, 250 ); 169//US setMinimumSize( 400, 250 );
166 setMinimumSize( KMIN(KGlobal::getDesktopWidth(), 400), KMIN(KGlobal::getDesktopHeight(), 250)); 170 setMinimumSize( KMIN(KGlobal::getDesktopWidth(), 400), KMIN(KGlobal::getDesktopHeight(), 250));
167 171
168} 172}
169 173
170void ConfigDialog::setInEditMode( bool value ) 174void ConfigDialog::setInEditMode( bool value )
171{ 175{
172 if ( mConfigWidget ) 176 if ( mConfigWidget )
173 mConfigWidget->setInEditMode( value ); 177 mConfigWidget->setInEditMode( value );
174 178
175 if ( mSyncWidget_Settings ) 179 if ( mSyncWidget_Settings )
176 mSyncWidget_Settings->setInEditMode( value ); 180 mSyncWidget_Settings->setInEditMode( value );
177 if ( mSyncWidget_Conflicts ) 181 if ( mSyncWidget_Conflicts )
178 mSyncWidget_Conflicts->setInEditMode( value ); 182 mSyncWidget_Conflicts->setInEditMode( value );
179 if ( mSyncWidget_Remote ) 183 if ( mSyncWidget_Remote )
180 mSyncWidget_Remote->setInEditMode( value ); 184 mSyncWidget_Remote->setInEditMode( value );
181 185
182} 186}
183 187
184void ConfigDialog::slotNameChanged( const QString &text) 188void ConfigDialog::slotNameChanged( const QString &text)
185{ 189{
186 enableButtonOK( !text.isEmpty() ); 190 enableButtonOK( !text.isEmpty() );
187} 191}
188 192
189void ConfigDialog::setReadOnly( bool value ) 193void ConfigDialog::setReadOnly( bool value )
190{ 194{
191 if (!mResource->isSyncable()) { 195 if (!mResource->isSyncable()) {
192 196
193 if (mPersistentReadOnly == false) 197 if (mPersistentReadOnly == false)
194 mReadOnly->setChecked( value ); 198 mReadOnly->setChecked( value );
195 else 199 else
196 mReadOnly->setChecked( true ); 200 mReadOnly->setChecked( true );
197 } 201 }
198} 202}
199 203
200void ConfigDialog::setPersistentReadOnly( bool value ) 204void ConfigDialog::setPersistentReadOnly( bool value )
201{ 205{
202 if (!mResource->isSyncable()) { 206 if (!mResource->isSyncable()) {
203 207
204 mPersistentReadOnly = value; 208 mPersistentReadOnly = value;
205 209
206 if (value == true) 210 if (value == true)
207 setReadOnly( true ); 211 setReadOnly( true );
208 212
209 mReadOnly->setEnabled( !value ); 213 mReadOnly->setEnabled( !value );
210 } 214 }
211} 215}
212 216
213void ConfigDialog::accept() 217void ConfigDialog::accept()
214{ 218{
215 if ( mName->text().isEmpty() ) { 219 if ( mName->text().isEmpty() ) {
216 KMessageBox::sorry( this, mResource->isSyncable()?i18n( "Please enter a profile name" ):i18n( "Please enter a resource name" ) ); 220 KMessageBox::sorry( this, mResource->isSyncable()?i18n( "Please enter a profile name" ):i18n( "Please enter a resource name" ) );
217 return; 221 return;
218 } 222 }
219 223
220 mResource->setResourceName( mName->text() ); 224 mResource->setResourceName( mName->text() );
221 if (!mResource->isSyncable()) 225 if (!mResource->isSyncable())
222 mResource->setReadOnly( mReadOnly->isChecked() ); 226 mResource->setReadOnly( mReadOnly->isChecked() );
227 mResource->setIncludeInSync( mIncludeInSync->isChecked() );
223 228
224 if ( mConfigWidget ) { 229 if ( mConfigWidget ) {
225 // First save generic information 230 // First save generic information
226 // Also save setting of specific resource type 231 // Also save setting of specific resource type
227 mConfigWidget->saveSettings( mResource ); 232 mConfigWidget->saveSettings( mResource );
228 } 233 }
229 234
230 if ( mSyncWidget_Settings ) 235 if ( mSyncWidget_Settings )
231 mSyncWidget_Settings->saveSettings( mResource ); 236 mSyncWidget_Settings->saveSettings( mResource );
232 if ( mSyncWidget_Conflicts ) 237 if ( mSyncWidget_Conflicts )
233 mSyncWidget_Conflicts->saveSettings( mResource ); 238 mSyncWidget_Conflicts->saveSettings( mResource );
234 if ( mSyncWidget_Remote ) 239 if ( mSyncWidget_Remote )
235 mSyncWidget_Remote->saveSettings( mResource ); 240 mSyncWidget_Remote->saveSettings( mResource );
236 241
237 242
238 KDialog::accept(); 243 KDialog::accept();
239} 244}
240 245
241//US #include "configdialog.moc" 246//US #include "configdialog.moc"
diff --git a/microkde/kresources/configdialog.h b/microkde/kresources/configdialog.h
index 63cd4e9..ed3ecab 100644
--- a/microkde/kresources/configdialog.h
+++ b/microkde/kresources/configdialog.h
@@ -1,67 +1,68 @@
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; 34 class SyncWidget;
35 35
36class ConfigDialog : public KDialogBase 36class ConfigDialog : public KDialogBase
37{ 37{
38 Q_OBJECT 38 Q_OBJECT
39 public: 39 public:
40 // Resource=0: create new resource 40 // Resource=0: create new resource
41 ConfigDialog( QWidget *parent, const QString& resourceFamily, 41 ConfigDialog( QWidget *parent, const QString& resourceFamily,
42 Resource* resource, const char *name = 0); 42 Resource* resource, const char *name = 0);
43 43
44 void setInEditMode( bool value ); 44 void setInEditMode( bool value );
45 45
46 protected slots: 46 protected slots:
47 void accept(); 47 void accept();
48 void setReadOnly( bool value ); 48 void setReadOnly( 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; 54 SyncWidget *mSyncWidget_Settings;
55 SyncWidget *mSyncWidget_Conflicts; 55 SyncWidget *mSyncWidget_Conflicts;
56 SyncWidget *mSyncWidget_Remote; 56 SyncWidget *mSyncWidget_Remote;
57 Resource* mResource; 57 Resource* mResource;
58 58
59 KLineEdit *mName; 59 KLineEdit *mName;
60 QCheckBox *mReadOnly; 60 QCheckBox *mReadOnly;
61 QCheckBox *mIncludeInSync;
61//US add a persistent readonly flag. We need that for opie and qtopia addressbooks. 62//US add a persistent readonly flag. We need that for opie and qtopia addressbooks.
62 bool mPersistentReadOnly; 63 bool mPersistentReadOnly;
63}; 64};
64 65
65} 66}
66 67
67#endif 68#endif
diff --git a/microkde/kresources/resource.cpp b/microkde/kresources/resource.cpp
index 4f69540..f79bcd0 100644
--- a/microkde/kresources/resource.cpp
+++ b/microkde/kresources/resource.cpp
@@ -1,194 +1,204 @@
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 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 <kdebug.h> 24#include <kdebug.h>
25#include <kapplication.h> 25#include <kapplication.h>
26#include <kconfig.h> 26#include <kconfig.h>
27 27
28#include "resource.h" 28#include "resource.h"
29 29
30using namespace KRES; 30using namespace KRES;
31 31
32class Resource::ResourcePrivate 32class Resource::ResourcePrivate
33{ 33{
34 public: 34 public:
35#ifdef QT_THREAD_SUPPORT 35#ifdef QT_THREAD_SUPPORT
36 QMutex mMutex; 36 QMutex mMutex;
37#endif 37#endif
38 int mOpenCount; 38 int mOpenCount;
39 QString mType; 39 QString mType;
40 QString mIdentifier; 40 QString mIdentifier;
41 bool mReadOnly; 41 bool mReadOnly;
42 bool mIncludeInSync;
42 QString mName; 43 QString mName;
43 bool mActive; 44 bool mActive;
44 bool mIsOpen; 45 bool mIsOpen;
45}; 46};
46 47
47Resource::Resource( const KConfig* config ) 48Resource::Resource( const KConfig* config )
48 : QObject( 0, "" ), d( new ResourcePrivate ) 49 : QObject( 0, "" ), d( new ResourcePrivate )
49{ 50{
50 d->mOpenCount = 0; 51 d->mOpenCount = 0;
51 d->mIsOpen = false; 52 d->mIsOpen = false;
52 53
53 //US compiler claimed that const discards qualifier 54 //US compiler claimed that const discards qualifier
54 KConfig* cfg = (KConfig*)config; 55 KConfig* cfg = (KConfig*)config;
55 if ( cfg ) { 56 if ( cfg ) {
56#ifdef _WIN32_ 57#ifdef _WIN32_
57 // we use plugins on win32. the group is stored in a static variable 58 // we use plugins on win32. the group is stored in a static variable
58 // such that group info not available on win32 plugins 59 // such that group info not available on win32 plugins
59 // to fix that, it would be a looooot of work 60 // to fix that, it would be a looooot of work
60 if ( !cfg->tempGroup().isEmpty() ) 61 if ( !cfg->tempGroup().isEmpty() )
61 cfg->setGroup( cfg->tempGroup() ); 62 cfg->setGroup( cfg->tempGroup() );
62#endif 63#endif
63 d->mType = cfg->readEntry( "ResourceType" ); 64 d->mType = cfg->readEntry( "ResourceType" );
64 d->mName = cfg->readEntry( "ResourceName" ); 65 d->mName = cfg->readEntry( "ResourceName" );
65 d->mReadOnly = cfg->readBoolEntry( "ResourceIsReadOnly", false ); 66 d->mReadOnly = cfg->readBoolEntry( "ResourceIsReadOnly", false );
67 d->mIncludeInSync = cfg->readBoolEntry( "ResourceIncludeInSync", true );;
66 d->mActive = cfg->readBoolEntry( "ResourceIsActive", true ); 68 d->mActive = cfg->readBoolEntry( "ResourceIsActive", true );
67 d->mIdentifier = cfg->readEntry( "ResourceIdentifier" ); 69 d->mIdentifier = cfg->readEntry( "ResourceIdentifier" );
68 } else { 70 } else {
69 d->mType = "type"; 71 d->mType = "type";
70 d->mName = "resource-name"; 72 d->mName = "resource-name";
71 d->mReadOnly = false; 73 d->mReadOnly = false;
74 d->mIncludeInSync = true;
72 d->mActive = true; 75 d->mActive = true;
73 d->mIdentifier = KApplication::randomString( 10 ); 76 d->mIdentifier = KApplication::randomString( 10 );
74 } 77 }
75} 78}
76 79
77Resource::~Resource() 80Resource::~Resource()
78{ 81{
79 delete d; 82 delete d;
80 d = 0; 83 d = 0;
81} 84}
82 85
83void Resource::writeConfig( KConfig* config ) 86void Resource::writeConfig( KConfig* config )
84{ 87{
85
86
87 config->writeEntry( "ResourceType", d->mType ); 88 config->writeEntry( "ResourceType", d->mType );
88 config->writeEntry( "ResourceName", d->mName ); 89 config->writeEntry( "ResourceName", d->mName );
89 config->writeEntry( "ResourceIsReadOnly", d->mReadOnly ); 90 config->writeEntry( "ResourceIsReadOnly", d->mReadOnly );
91 config->writeEntry( "ResourceIncludeInSync", d->mIncludeInSync );
90 config->writeEntry( "ResourceIsActive", d->mActive ); 92 config->writeEntry( "ResourceIsActive", d->mActive );
91 config->writeEntry( "ResourceIdentifier", d->mIdentifier ); 93 config->writeEntry( "ResourceIdentifier", d->mIdentifier );
92} 94}
93 95
94bool Resource::open() 96bool Resource::open()
95{ 97{
96 d->mIsOpen = true; 98 d->mIsOpen = true;
97#ifdef QT_THREAD_SUPPORT 99#ifdef QT_THREAD_SUPPORT
98 QMutexLocker guard( &(d->mMutex) ); 100 QMutexLocker guard( &(d->mMutex) );
99#endif 101#endif
100 if ( !d->mOpenCount ) { 102 if ( !d->mOpenCount ) {
101 kdDebug(5650) << "Opening resource " << resourceName() << endl; 103 kdDebug(5650) << "Opening resource " << resourceName() << endl;
102 d->mIsOpen = doOpen(); 104 d->mIsOpen = doOpen();
103 } 105 }
104 d->mOpenCount++; 106 d->mOpenCount++;
105 return d->mIsOpen; 107 return d->mIsOpen;
106} 108}
107 109
108void Resource::close() 110void Resource::close()
109{ 111{
110#ifdef QT_THREAD_SUPPORT 112#ifdef QT_THREAD_SUPPORT
111 QMutexLocker guard( &(d->mMutex) ); 113 QMutexLocker guard( &(d->mMutex) );
112#endif 114#endif
113 if ( !d->mOpenCount ) { 115 if ( !d->mOpenCount ) {
114 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;
115 return; 117 return;
116 } 118 }
117 d->mOpenCount--; 119 d->mOpenCount--;
118 if ( !d->mOpenCount ) { 120 if ( !d->mOpenCount ) {
119 kdDebug(5650) << "Closing resource " << resourceName() << endl; 121 kdDebug(5650) << "Closing resource " << resourceName() << endl;
120 doClose(); 122 doClose();
121 d->mIsOpen = false; 123 d->mIsOpen = false;
122 } else { 124 } else {
123 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;
124 } 126 }
125} 127}
126 128
127bool Resource::isOpen() const 129bool Resource::isOpen() const
128{ 130{
129 return d->mIsOpen; 131 return d->mIsOpen;
130} 132}
131 133
132void Resource::setIdentifier( const QString& identifier ) 134void Resource::setIdentifier( const QString& identifier )
133{ 135{
134 d->mIdentifier = identifier; 136 d->mIdentifier = identifier;
135} 137}
136 138
137QString Resource::identifier() const 139QString Resource::identifier() const
138{ 140{
139 return d->mIdentifier; 141 return d->mIdentifier;
140} 142}
141 143
142void Resource::setType( const QString& type ) 144void Resource::setType( const QString& type )
143{ 145{
144 d->mType = type; 146 d->mType = type;
145} 147}
146 148
147QString Resource::type() const 149QString Resource::type() const
148{ 150{
149 return d->mType; 151 return d->mType;
150} 152}
151 153
154void Resource::setIncludeInSync( bool value )
155{
156 d->mIncludeInSync = value;
157}
158bool Resource::includeInSync() const
159{
160 return d->mIncludeInSync;
161}
152void Resource::setReadOnly( bool value ) 162void Resource::setReadOnly( bool value )
153{ 163{
154 d->mReadOnly = value; 164 d->mReadOnly = value;
155} 165}
156 166
157bool Resource::readOnly() const 167bool Resource::readOnly() const
158{ 168{
159 return d->mReadOnly; 169 return d->mReadOnly;
160} 170}
161 171
162void Resource::setResourceName( const QString &name ) 172void Resource::setResourceName( const QString &name )
163{ 173{
164 d->mName = name; 174 d->mName = name;
165} 175}
166 176
167QString Resource::resourceName() const 177QString Resource::resourceName() const
168{ 178{
169 return d->mName; 179 return d->mName;
170} 180}
171 181
172void Resource::setActive( bool value ) 182void Resource::setActive( bool value )
173{ 183{
174 d->mActive = value; 184 d->mActive = value;
175} 185}
176 186
177bool Resource::isActive() const 187bool Resource::isActive() const
178{ 188{
179 return d->mActive; 189 return d->mActive;
180} 190}
181 191
182void Resource::dump() const 192void Resource::dump() const
183{ 193{
184 qDebug("Resource::dump() "); 194 qDebug("Resource::dump() ");
185 kdDebug(5650) << "Resource:" << endl; 195 kdDebug(5650) << "Resource:" << endl;
186 kdDebug(5650) << " Name: " << d->mName << endl; 196 kdDebug(5650) << " Name: " << d->mName << endl;
187 kdDebug(5650) << " Identifier: " << d->mIdentifier << endl; 197 kdDebug(5650) << " Identifier: " << d->mIdentifier << endl;
188 kdDebug(5650) << " Type: " << d->mType << endl; 198 kdDebug(5650) << " Type: " << d->mType << endl;
189 kdDebug(5650) << " OpenCount: " << d->mOpenCount << endl; 199 kdDebug(5650) << " OpenCount: " << d->mOpenCount << endl;
190 kdDebug(5650) << " ReadOnly: " << ( d->mReadOnly ? "yes" : "no" ) << endl; 200 kdDebug(5650) << " ReadOnly: " << ( d->mReadOnly ? "yes" : "no" ) << endl;
191 kdDebug(5650) << " Active: " << ( d->mActive ? "yes" : "no" ) << endl; 201 kdDebug(5650) << " Active: " << ( d->mActive ? "yes" : "no" ) << endl;
192 kdDebug(5650) << " IsOpen: " << ( d->mIsOpen ? "yes" : "no" ) << endl; 202 kdDebug(5650) << " IsOpen: " << ( d->mIsOpen ? "yes" : "no" ) << endl;
193} 203}
194 204
diff --git a/microkde/kresources/resource.h b/microkde/kresources/resource.h
index 580b5d1..70b5613 100644
--- a/microkde/kresources/resource.h
+++ b/microkde/kresources/resource.h
@@ -217,192 +217,194 @@ X-KDE-Library=resourceexample
217<pre> 217<pre>
218kde_module_LTLIBRARIES = resourceexample.la 218kde_module_LTLIBRARIES = resourceexample.la
219 219
220resourceexample_la_SOURCES = resourceexample.cpp resourceexampleconfig.cpp 220resourceexample_la_SOURCES = resourceexample.cpp resourceexampleconfig.cpp
221resourceexample_la_LDFLAGS= $(all_libraries) -module $(KDE_PLUGIN) 221resourceexample_la_LDFLAGS= $(all_libraries) -module $(KDE_PLUGIN)
222resourceexample_la_LIBADD= -lkderesources 222resourceexample_la_LIBADD= -lkderesources
223 223
224linkdir= $(kde_datadir)/resources/family 224linkdir= $(kde_datadir)/resources/family
225link_DATA= resourceexample.desktop 225link_DATA= resourceexample.desktop
226</pre> 226</pre>
227 * 227 *
228 * 228 *
229 */ 229 */
230 230
231/** 231/**
232 * A @ref Resource is a ... 232 * A @ref Resource is a ...
233 * 233 *
234 * A subclass should reimplement at least the constructor and the 234 * A subclass should reimplement at least the constructor and the
235 * @ref writeConfig method. 235 * @ref writeConfig method.
236 * 236 *
237 */ 237 */
238class Resource : public QObject 238class Resource : public QObject
239{ 239{
240 Q_OBJECT 240 Q_OBJECT
241 241
242 public: 242 public:
243 typedef QValueList<Resource *> List; 243 typedef QValueList<Resource *> List;
244 244
245 /** 245 /**
246 * Constructor. Construct resource from config. 246 * Constructor. Construct resource from config.
247 * @param config Configuration to read persistence information from. 247 * @param config Configuration to read persistence information from.
248 * If config==0, create object using default settings. 248 * If config==0, create object using default settings.
249 */ 249 */
250 Resource( const KConfig* config ); 250 Resource( const KConfig* config );
251 251
252 /** 252 /**
253 * Destructor. 253 * Destructor.
254 */ 254 */
255 virtual ~Resource(); 255 virtual ~Resource();
256 256
257 /** 257 /**
258 * Write configuration information for this resource to a configuration 258 * Write configuration information for this resource to a configuration
259 * file. If you override this method, remember to call Resource::writeConfig 259 * file. If you override this method, remember to call Resource::writeConfig
260 * or Terrible Things(TM) will happen. 260 * or Terrible Things(TM) will happen.
261 * @param config Configuration to write persistence information to. 261 * @param config Configuration to write persistence information to.
262 */ 262 */
263 virtual void writeConfig( KConfig* config ); 263 virtual void writeConfig( KConfig* config );
264 264
265 /** 265 /**
266 * Open this resource, if it not already open. Increase the open 266 * Open this resource, if it not already open. Increase the open
267 * count of this object, and open the resource by calling @ref doOpen(). 267 * count of this object, and open the resource by calling @ref doOpen().
268 * This method may block while another thread is concurrently opening 268 * This method may block while another thread is concurrently opening
269 * or closing the resource. 269 * or closing the resource.
270 * 270 *
271 * Returns true if the resource was already opened or if it was opened 271 * Returns true if the resource was already opened or if it was opened
272 * successfully; returns false if the resource was not opened successfully. 272 * successfully; returns false if the resource was not opened successfully.
273 */ 273 */
274 bool open(); 274 bool open();
275 275
276 /** 276 /**
277 * Decrease the open count of this object, and if the count reaches 277 * Decrease the open count of this object, and if the count reaches
278 * zero, close this resource by calling @ref doClose(). 278 * zero, close this resource by calling @ref doClose().
279 * This method may block while another thread is concurrently closing 279 * This method may block while another thread is concurrently closing
280 * or opening the resource. 280 * or opening the resource.
281 */ 281 */
282 void close(); 282 void close();
283 283
284 /** 284 /**
285 * Returns whether the resource is open or not. 285 * Returns whether the resource is open or not.
286 */ 286 */
287 bool isOpen() const; 287 bool isOpen() const;
288 288
289 /** 289 /**
290 * Returns a unique identifier. The identifier is unique for this resource. 290 * 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 291 * It is created when the resource is first created, and it is retained
292 * in the resource family configuration file for this resource. 292 * in the resource family configuration file for this resource.
293 * @return This resource's identifier 293 * @return This resource's identifier
294 */ 294 */
295 QString identifier() const; 295 QString identifier() const;
296 296
297 /** 297 /**
298 * Returns the type of this resource. 298 * Returns the type of this resource.
299 */ 299 */
300 QString type() const; 300 QString type() const;
301 301
302 /** 302 /**
303 * Mark the resource as read-only. You can override this method, 303 * Mark the resource as read-only. You can override this method,
304 * but also remember to call Resource::setReadOnly(). 304 * but also remember to call Resource::setReadOnly().
305 */ 305 */
306 virtual void setReadOnly( bool value ); 306 virtual void setReadOnly( bool value );
307 307
308 /** 308 /**
309 * Returns, if the resource is read-only. 309 * Returns, if the resource is read-only.
310 */ 310 */
311 virtual bool readOnly() const; 311 virtual bool readOnly() const;
312 312
313 void setIncludeInSync( bool value );
314 bool includeInSync() const;
313 /** 315 /**
314 * Set the name of resource.You can override this method, 316 * Set the name of resource.You can override this method,
315 * but also remember to call Resource::setResourceName(). 317 * but also remember to call Resource::setResourceName().
316 */ 318 */
317 virtual void setResourceName( const QString &name ); 319 virtual void setResourceName( const QString &name );
318 320
319 /** 321 /**
320 * Returns the name of resource. 322 * Returns the name of resource.
321 */ 323 */
322 virtual QString resourceName() const; 324 virtual QString resourceName() const;
323 325
324 326
325 327
326 virtual bool isSyncable() const = 0; 328 virtual bool isSyncable() const = 0;
327 329
328 330
329 /** 331 /**
330 Sets, if the resource is active. 332 Sets, if the resource is active.
331 */ 333 */
332 void setActive( bool active ); 334 void setActive( bool active );
333 335
334 /** 336 /**
335 Return true, if the resource is active. 337 Return true, if the resource is active.
336 */ 338 */
337 bool isActive() const; 339 bool isActive() const;
338 340
339 friend class Factory; 341 friend class Factory;
340 friend class ManagerImpl; 342 friend class ManagerImpl;
341 343
342 /** 344 /**
343 Print resource information as debug output. 345 Print resource information as debug output.
344 */ 346 */
345 virtual void dump() const; 347 virtual void dump() const;
346 348
347 349
348 protected: 350 protected:
349 /** 351 /**
350 * Open this resource. When called, the resource must be in 352 * Open this resource. When called, the resource must be in
351 * a closed state. 353 * a closed state.
352 * 354 *
353 * Returns true if the resource was opened successfully; 355 * Returns true if the resource was opened successfully;
354 * returns false if the resource was not opened successfully. 356 * returns false if the resource was not opened successfully.
355 * 357 *
356 * The result of this call can be accessed later by @ref isOpen() 358 * The result of this call can be accessed later by @ref isOpen()
357 */ 359 */
358 virtual bool doOpen() { return true; } 360 virtual bool doOpen() { return true; }
359 361
360 /** 362 /**
361 * Close this resource. Pre-condition: resource is open. 363 * Close this resource. Pre-condition: resource is open.
362 * Post-condition: resource is closed. 364 * Post-condition: resource is closed.
363 */ 365 */
364 virtual void doClose() {} 366 virtual void doClose() {}
365 367
366 void setIdentifier( const QString& identifier ); 368 void setIdentifier( const QString& identifier );
367 void setType( const QString& type ); 369 void setType( const QString& type );
368 370
369 private: 371 private:
370 class ResourcePrivate; 372 class ResourcePrivate;
371 ResourcePrivate *d; 373 ResourcePrivate *d;
372}; 374};
373 375
374class PluginFactoryBase : public KLibFactory 376class PluginFactoryBase : public KLibFactory
375{ 377{
376 public: 378 public:
377 virtual Resource *resource( const KConfig *config, bool syncable ) = 0; 379 virtual Resource *resource( const KConfig *config, bool syncable ) = 0;
378 380
379 virtual ConfigWidget *configWidget( QWidget *parent ) = 0; 381 virtual ConfigWidget *configWidget( QWidget *parent ) = 0;
380 382
381 virtual SyncWidgetContainer *syncWidgetContainer() = 0; 383 virtual SyncWidgetContainer *syncWidgetContainer() = 0;
382 384
383 protected: 385 protected:
384 virtual QObject* createObject( QObject*, const char*, const char*, 386 virtual QObject* createObject( QObject*, const char*, const char*,
385 const QStringList & ) 387 const QStringList & )
386 { 388 {
387 return 0; 389 return 0;
388 } 390 }
389}; 391};
390 392
391template<class TR,class TC, class TS> 393template<class TR,class TC, class TS>
392class PluginFactory : public PluginFactoryBase 394class PluginFactory : public PluginFactoryBase
393{ 395{
394 public: 396 public:
395 Resource *resource( const KConfig *config, bool syncable ) 397 Resource *resource( const KConfig *config, bool syncable )
396 { 398 {
397 return new TR( config, syncable ); 399 return new TR( config, syncable );
398 } 400 }
399 401
400 ConfigWidget *configWidget( QWidget *parent ) 402 ConfigWidget *configWidget( QWidget *parent )
401 { 403 {
402 return new TC( parent ); 404 return new TC( parent );
403 } 405 }
404 406
405 SyncWidgetContainer *syncWidgetContainer() 407 SyncWidgetContainer *syncWidgetContainer()
406 { 408 {
407 return new TS(); 409 return new TS();
408 } 410 }