author | zautrix <zautrix> | 2004-10-13 14:23:28 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2004-10-13 14:23:28 (UTC) |
commit | 2cfda2af7cba3c9aff2d7722421b5d33b7f56cb6 (patch) (unidiff) | |
tree | f1e664ddf31aae347b1a119c9111cbd1c931bf89 /microkde | |
parent | d41893fb0a49fbb080326a4c1fd98e1a032a182a (diff) | |
download | kdepimpi-2cfda2af7cba3c9aff2d7722421b5d33b7f56cb6.zip kdepimpi-2cfda2af7cba3c9aff2d7722421b5d33b7f56cb6.tar.gz kdepimpi-2cfda2af7cba3c9aff2d7722421b5d33b7f56cb6.tar.bz2 |
more sync fixes
-rw-r--r-- | microkde/kresources/configdialog.cpp | 5 | ||||
-rw-r--r-- | microkde/kresources/configdialog.h | 1 | ||||
-rw-r--r-- | microkde/kresources/resource.cpp | 14 | ||||
-rw-r--r-- | microkde/kresources/resource.h | 2 |
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 | ||
46 | using namespace KRES; | 46 | using namespace KRES; |
47 | 47 | ||
48 | ConfigDialog::ConfigDialog( QWidget *parent, const QString& resourceFamily, | 48 | ConfigDialog::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 | ||
170 | void ConfigDialog::setInEditMode( bool value ) | 174 | void 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 | ||
184 | void ConfigDialog::slotNameChanged( const QString &text) | 188 | void ConfigDialog::slotNameChanged( const QString &text) |
185 | { | 189 | { |
186 | enableButtonOK( !text.isEmpty() ); | 190 | enableButtonOK( !text.isEmpty() ); |
187 | } | 191 | } |
188 | 192 | ||
189 | void ConfigDialog::setReadOnly( bool value ) | 193 | void 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 | ||
200 | void ConfigDialog::setPersistentReadOnly( bool value ) | 204 | void 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 | ||
213 | void ConfigDialog::accept() | 217 | void 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 | ||
27 | class KLineEdit; | 27 | class KLineEdit; |
28 | class QCheckBox; | 28 | class QCheckBox; |
29 | class KButtonBox; | 29 | class KButtonBox; |
30 | 30 | ||
31 | namespace KRES { | 31 | namespace KRES { |
32 | class Resource; | 32 | class Resource; |
33 | class ConfigWidget; | 33 | class ConfigWidget; |
34 | class SyncWidget; | 34 | class SyncWidget; |
35 | 35 | ||
36 | class ConfigDialog : public KDialogBase | 36 | class 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 | ||
30 | using namespace KRES; | 30 | using namespace KRES; |
31 | 31 | ||
32 | class Resource::ResourcePrivate | 32 | class 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 | ||
47 | Resource::Resource( const KConfig* config ) | 48 | Resource::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 | ||
77 | Resource::~Resource() | 80 | Resource::~Resource() |
78 | { | 81 | { |
79 | delete d; | 82 | delete d; |
80 | d = 0; | 83 | d = 0; |
81 | } | 84 | } |
82 | 85 | ||
83 | void Resource::writeConfig( KConfig* config ) | 86 | void 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 | ||
94 | bool Resource::open() | 96 | bool 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 | ||
108 | void Resource::close() | 110 | void 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 | ||
127 | bool Resource::isOpen() const | 129 | bool Resource::isOpen() const |
128 | { | 130 | { |
129 | return d->mIsOpen; | 131 | return d->mIsOpen; |
130 | } | 132 | } |
131 | 133 | ||
132 | void Resource::setIdentifier( const QString& identifier ) | 134 | void Resource::setIdentifier( const QString& identifier ) |
133 | { | 135 | { |
134 | d->mIdentifier = identifier; | 136 | d->mIdentifier = identifier; |
135 | } | 137 | } |
136 | 138 | ||
137 | QString Resource::identifier() const | 139 | QString Resource::identifier() const |
138 | { | 140 | { |
139 | return d->mIdentifier; | 141 | return d->mIdentifier; |
140 | } | 142 | } |
141 | 143 | ||
142 | void Resource::setType( const QString& type ) | 144 | void Resource::setType( const QString& type ) |
143 | { | 145 | { |
144 | d->mType = type; | 146 | d->mType = type; |
145 | } | 147 | } |
146 | 148 | ||
147 | QString Resource::type() const | 149 | QString Resource::type() const |
148 | { | 150 | { |
149 | return d->mType; | 151 | return d->mType; |
150 | } | 152 | } |
151 | 153 | ||
154 | void Resource::setIncludeInSync( bool value ) | ||
155 | { | ||
156 | d->mIncludeInSync = value; | ||
157 | } | ||
158 | bool Resource::includeInSync() const | ||
159 | { | ||
160 | return d->mIncludeInSync; | ||
161 | } | ||
152 | void Resource::setReadOnly( bool value ) | 162 | void Resource::setReadOnly( bool value ) |
153 | { | 163 | { |
154 | d->mReadOnly = value; | 164 | d->mReadOnly = value; |
155 | } | 165 | } |
156 | 166 | ||
157 | bool Resource::readOnly() const | 167 | bool Resource::readOnly() const |
158 | { | 168 | { |
159 | return d->mReadOnly; | 169 | return d->mReadOnly; |
160 | } | 170 | } |
161 | 171 | ||
162 | void Resource::setResourceName( const QString &name ) | 172 | void Resource::setResourceName( const QString &name ) |
163 | { | 173 | { |
164 | d->mName = name; | 174 | d->mName = name; |
165 | } | 175 | } |
166 | 176 | ||
167 | QString Resource::resourceName() const | 177 | QString Resource::resourceName() const |
168 | { | 178 | { |
169 | return d->mName; | 179 | return d->mName; |
170 | } | 180 | } |
171 | 181 | ||
172 | void Resource::setActive( bool value ) | 182 | void Resource::setActive( bool value ) |
173 | { | 183 | { |
174 | d->mActive = value; | 184 | d->mActive = value; |
175 | } | 185 | } |
176 | 186 | ||
177 | bool Resource::isActive() const | 187 | bool Resource::isActive() const |
178 | { | 188 | { |
179 | return d->mActive; | 189 | return d->mActive; |
180 | } | 190 | } |
181 | 191 | ||
182 | void Resource::dump() const | 192 | void 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 | |||
@@ -1,416 +1,418 @@ | |||
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 | ||
38 | class KConfig; | 38 | class KConfig; |
39 | 39 | ||
40 | namespace KRES { | 40 | namespace KRES { |
41 | 41 | ||
42 | class ConfigWidget; | 42 | class ConfigWidget; |
43 | class SyncWidgetContainer; | 43 | class SyncWidgetContainer; |
44 | 44 | ||
45 | /** | 45 | /** |
46 | * @internal | 46 | * @internal |
47 | * @libdoc The KDE Resource library | 47 | * @libdoc The KDE Resource library |
48 | * | 48 | * |
49 | * NOTE: this library is NOT (YET?) PUBLIC. Do not publish this | 49 | * NOTE: this library is NOT (YET?) PUBLIC. Do not publish this |
50 | * interface, it is in constant flux. | 50 | * interface, it is in constant flux. |
51 | * | 51 | * |
52 | * The KDE Resource framework can be used to manage resources of | 52 | * The KDE Resource framework can be used to manage resources of |
53 | * different types, organized in families. The Resource framework | 53 | * different types, organized in families. The Resource framework |
54 | * is currently used for addressbook resources in libkabc and for | 54 | * is currently used for addressbook resources in libkabc and for |
55 | * calendar resources in libkcal. | 55 | * calendar resources in libkcal. |
56 | * | 56 | * |
57 | * When you want to use the framework for a new family, you need to | 57 | * 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> | 58 | * <ul><li>Define a name for your resource family</li> |
59 | * <li>subclass Resource and add the fields and method that are needed | 59 | * <li>subclass Resource and add the fields and method that are needed |
60 | * in your application</li> | 60 | * in your application</li> |
61 | * <li>If needed, override the doOpen() and doClose() methods. | 61 | * <li>If needed, override the doOpen() and doClose() methods. |
62 | * <li> Provide a configuration possibility for resources in your | 62 | * <li> Provide a configuration possibility for resources in your |
63 | * new family. You can use @ref ResourcesConfigPage to easily create a | 63 | * new family. You can use @ref ResourcesConfigPage to easily create a |
64 | * KControl applet</li> | 64 | * KControl applet</li> |
65 | * <li>In your application, you can use @ref ResourceManager to keep track | 65 | * <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 | 66 | * of the resources in your family, and you can use @ref ResourceSelectDialog |
67 | * to let the user select a single resource.</li> | 67 | * to let the user select a single resource.</li> |
68 | * </ul> | 68 | * </ul> |
69 | * | 69 | * |
70 | * When you want to add a new resource type to an existing resource family, | 70 | * When you want to add a new resource type to an existing resource family, |
71 | * you need to | 71 | * you need to |
72 | * <ul><li>Further subclass the family-specific Resource to implement | 72 | * <ul><li>Further subclass the family-specific Resource to implement |
73 | * resource type-specific operation</li> | 73 | * resource type-specific operation</li> |
74 | * <li>Subclass ResourceConfigWidget to provide a configuration widget | 74 | * <li>Subclass ResourceConfigWidget to provide a configuration widget |
75 | * for your new resource type</li> | 75 | * for your new resource type</li> |
76 | * <li>Provide a .desktop file so that the new resource type can be found | 76 | * <li>Provide a .desktop file so that the new resource type can be found |
77 | * automatically by the ResourceManager</li> | 77 | * automatically by the ResourceManager</li> |
78 | * </ul> | 78 | * </ul> |
79 | * | 79 | * |
80 | * Example: | 80 | * Example: |
81 | * | 81 | * |
82 | <B>resourceexample.h</B>: | 82 | <B>resourceexample.h</B>: |
83 | <pre> | 83 | <pre> |
84 | #include <kconfig.h> | 84 | #include <kconfig.h> |
85 | #include <kresources/resource.h> | 85 | #include <kresources/resource.h> |
86 | 86 | ||
87 | class ResourceExample : public KRES::ResourceExample | 87 | class ResourceExample : public KRES::ResourceExample |
88 | { | 88 | { |
89 | public: | 89 | public: |
90 | ResourceExample( const KConfig * ); | 90 | ResourceExample( const KConfig * ); |
91 | ~ResourceCalendarExchange(); | 91 | ~ResourceCalendarExchange(); |
92 | void writeConfig( KConfig *config ); | 92 | void writeConfig( KConfig *config ); |
93 | private: | 93 | private: |
94 | QString mLocation; | 94 | QString mLocation; |
95 | QString mPassword; | 95 | QString mPassword; |
96 | } | 96 | } |
97 | </pre> | 97 | </pre> |
98 | <B>resourceexample.cpp</B>: | 98 | <B>resourceexample.cpp</B>: |
99 | <pre> | 99 | <pre> |
100 | #include <kconfig.h> | 100 | #include <kconfig.h> |
101 | 101 | ||
102 | #include "resourceexample.h" | 102 | #include "resourceexample.h" |
103 | 103 | ||
104 | ResourceExample::ResourceExample( const KConfig *config ) | 104 | ResourceExample::ResourceExample( const KConfig *config ) |
105 | : Resource( config ) | 105 | : Resource( config ) |
106 | { | 106 | { |
107 | if ( config ) { | 107 | if ( config ) { |
108 | mLocation = config->readEntry( "Location" ); | 108 | mLocation = config->readEntry( "Location" ); |
109 | mPassword = KStringHandler::obscure( config->readEntry( "Password" ) ); | 109 | mPassword = KStringHandler::obscure( config->readEntry( "Password" ) ); |
110 | } else { | 110 | } else { |
111 | mLocation = ""; // Or some sensible default | 111 | mLocation = ""; // Or some sensible default |
112 | mPassword = ""; | 112 | mPassword = ""; |
113 | } | 113 | } |
114 | } | 114 | } |
115 | 115 | ||
116 | void ResourceExample::writeConfig( KConfig *config ) | 116 | void ResourceExample::writeConfig( KConfig *config ) |
117 | { | 117 | { |
118 | KRES::Resource::writeConfig( config ); | 118 | KRES::Resource::writeConfig( config ); |
119 | config->writeEntry( "Location", mLocation ); | 119 | config->writeEntry( "Location", mLocation ); |
120 | config->writeEntry( "Password", KStringHandler::obscure( mPassword ) ); | 120 | config->writeEntry( "Password", KStringHandler::obscure( mPassword ) ); |
121 | } | 121 | } |
122 | 122 | ||
123 | extern "C" | 123 | extern "C" |
124 | { | 124 | { |
125 | KRES::ResourceExample *config_widget( QWidget *parent ) { | 125 | KRES::ResourceExample *config_widget( QWidget *parent ) { |
126 | return new ResourceExampleConfig( parent, "Configure Example Resource" ); | 126 | return new ResourceExampleConfig( parent, "Configure Example Resource" ); |
127 | } | 127 | } |
128 | 128 | ||
129 | KRES::Resource *resource( const KConfig *config ) { | 129 | KRES::Resource *resource( const KConfig *config ) { |
130 | return new ResourceExample( config ); | 130 | return new ResourceExample( config ); |
131 | } | 131 | } |
132 | } | 132 | } |
133 | </pre> | 133 | </pre> |
134 | * <B>resourceexampleconfig.h</B>: | 134 | * <B>resourceexampleconfig.h</B>: |
135 | <pre> | 135 | <pre> |
136 | #include <klineedit.h> | 136 | #include <klineedit.h> |
137 | #include <kresources/resourceconfigwidget.h> | 137 | #include <kresources/resourceconfigwidget.h> |
138 | 138 | ||
139 | #include "resourceexample.h" | 139 | #include "resourceexample.h" |
140 | 140 | ||
141 | class ResourceExampleConfig : public KRES::ResourceConfigWidget | 141 | class ResourceExampleConfig : public KRES::ResourceConfigWidget |
142 | { | 142 | { |
143 | Q_OBJECT | 143 | Q_OBJECT |
144 | 144 | ||
145 | public: | 145 | public: |
146 | ResourceExampleConfig( QWidget* parent = 0, const char* name = 0 ); | 146 | ResourceExampleConfig( QWidget* parent = 0, const char* name = 0 ); |
147 | 147 | ||
148 | public slots: | 148 | public slots: |
149 | virtual void loadSettings( KRES::Resource *resource); | 149 | virtual void loadSettings( KRES::Resource *resource); |
150 | virtual void saveSettings( KRES::Resource *resource ); | 150 | virtual void saveSettings( KRES::Resource *resource ); |
151 | 151 | ||
152 | private: | 152 | private: |
153 | KLineEdit* mLocationEdit; | 153 | KLineEdit* mLocationEdit; |
154 | KLineEdit* mPasswordEdit; | 154 | KLineEdit* mPasswordEdit; |
155 | }; | 155 | }; |
156 | </pre> | 156 | </pre> |
157 | * <B>resourceexampleconfig.cpp</B>: | 157 | * <B>resourceexampleconfig.cpp</B>: |
158 | <pre> | 158 | <pre> |
159 | #include <qlayout.h> | 159 | #include <qlayout.h> |
160 | #include <qlabel.h" | 160 | #include <qlabel.h" |
161 | #include <kresources/resourceconfigwidget.h> | 161 | #include <kresources/resourceconfigwidget.h> |
162 | #include "resourceexample.h" | 162 | #include "resourceexample.h" |
163 | #include "resourceexampleconfig.h" | 163 | #include "resourceexampleconfig.h" |
164 | 164 | ||
165 | ResourceExampleConfig::ResourceExampleConfig( QWidget* parent, const char* name ) | 165 | ResourceExampleConfig::ResourceExampleConfig( QWidget* parent, const char* name ) |
166 | : KRES::ResourceConfigWidget( parent, name ) | 166 | : KRES::ResourceConfigWidget( parent, name ) |
167 | { | 167 | { |
168 | resize( 245, 115 ); | 168 | resize( 245, 115 ); |
169 | QGridLayout *mainLayout = new QGridLayout( this, 2, 2 ); | 169 | QGridLayout *mainLayout = new QGridLayout( this, 2, 2 ); |
170 | 170 | ||
171 | QLabel *label = new QLabel( i18n( "Location:" ), this ); | 171 | QLabel *label = new QLabel( i18n( "Location:" ), this ); |
172 | mHostEdit = new KLineEdit( this ); | 172 | mHostEdit = new KLineEdit( this ); |
173 | mainLayout->addWidget( label, 1, 0 ); | 173 | mainLayout->addWidget( label, 1, 0 ); |
174 | mainLayout->addWidget( mHostEdit, 1, 1 ); | 174 | mainLayout->addWidget( mHostEdit, 1, 1 ); |
175 | 175 | ||
176 | label = new QLabel( i18n( "Password:" ), this ); | 176 | label = new QLabel( i18n( "Password:" ), this ); |
177 | mPasswordEdit = new KLineEdit( this ); | 177 | mPasswordEdit = new KLineEdit( this ); |
178 | mPasswordEdit->setEchoMode( QLineEdit::Password ); | 178 | mPasswordEdit->setEchoMode( QLineEdit::Password ); |
179 | mainLayout->addWidget( label, 2, 0 ); | 179 | mainLayout->addWidget( label, 2, 0 ); |
180 | mainLayout->addWidget( mPasswordEdit, 2, 1 ); | 180 | mainLayout->addWidget( mPasswordEdit, 2, 1 ); |
181 | } | 181 | } |
182 | 182 | ||
183 | void ResourceExampleConfig::loadSettings( KRES::Resource *resource ) | 183 | void ResourceExampleConfig::loadSettings( KRES::Resource *resource ) |
184 | { | 184 | { |
185 | ResourceExample* res = dynamic_cast<ResourceExample *>( resource ); | 185 | ResourceExample* res = dynamic_cast<ResourceExample *>( resource ); |
186 | if (res) { | 186 | if (res) { |
187 | mHostEdit->setText( res->host() ); | 187 | mHostEdit->setText( res->host() ); |
188 | mPasswordEdit->setText( res->password() ); | 188 | mPasswordEdit->setText( res->password() ); |
189 | } else | 189 | } else |
190 | kdDebug(5700) << "ERROR: ResourceExampleConfig::loadSettings(): no ResourceExample, cast failed" << endl; | 190 | kdDebug(5700) << "ERROR: ResourceExampleConfig::loadSettings(): no ResourceExample, cast failed" << endl; |
191 | } | 191 | } |
192 | 192 | ||
193 | void ResourceExampleConfig::saveSettings( KRES::Resource *resource ) | 193 | void ResourceExampleConfig::saveSettings( KRES::Resource *resource ) |
194 | { | 194 | { |
195 | ResourceExample* res = dynamic_cast<ResourceExample *>( resource ); | 195 | ResourceExample* res = dynamic_cast<ResourceExample *>( resource ); |
196 | if (res) { | 196 | if (res) { |
197 | res->setHost(mHostEdit->text()); | 197 | res->setHost(mHostEdit->text()); |
198 | res->setPassword(mPasswordEdit->text()); | 198 | res->setPassword(mPasswordEdit->text()); |
199 | } else | 199 | } else |
200 | kdDebug(5700) << "ERROR: ResourceExampleConfig::saveSettings(): no ResourceExample, cast failed" << endl; | 200 | kdDebug(5700) << "ERROR: ResourceExampleConfig::saveSettings(): no ResourceExample, cast failed" << endl; |
201 | } | 201 | } |
202 | </pre> | 202 | </pre> |
203 | * <B>resourceexample.desktop</B>: | 203 | * <B>resourceexample.desktop</B>: |
204 | <pre> | 204 | <pre> |
205 | [Desktop Entry] | 205 | [Desktop Entry] |
206 | Type=Service | 206 | Type=Service |
207 | 207 | ||
208 | [Misc] | 208 | [Misc] |
209 | Encoding=UTF-8 | 209 | Encoding=UTF-8 |
210 | Name=Example Resource | 210 | Name=Example Resource |
211 | 211 | ||
212 | [Plugin] | 212 | [Plugin] |
213 | Type=exchange | 213 | Type=exchange |
214 | X-KDE-Library=resourceexample | 214 | X-KDE-Library=resourceexample |
215 | </pre> | 215 | </pre> |
216 | * <B>Makefile.am</B> | 216 | * <B>Makefile.am</B> |
217 | <pre> | 217 | <pre> |
218 | kde_module_LTLIBRARIES = resourceexample.la | 218 | kde_module_LTLIBRARIES = resourceexample.la |
219 | 219 | ||
220 | resourceexample_la_SOURCES = resourceexample.cpp resourceexampleconfig.cpp | 220 | resourceexample_la_SOURCES = resourceexample.cpp resourceexampleconfig.cpp |
221 | resourceexample_la_LDFLAGS= $(all_libraries) -module $(KDE_PLUGIN) | 221 | resourceexample_la_LDFLAGS= $(all_libraries) -module $(KDE_PLUGIN) |
222 | resourceexample_la_LIBADD= -lkderesources | 222 | resourceexample_la_LIBADD= -lkderesources |
223 | 223 | ||
224 | linkdir= $(kde_datadir)/resources/family | 224 | linkdir= $(kde_datadir)/resources/family |
225 | link_DATA= resourceexample.desktop | 225 | link_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 | */ |
238 | class Resource : public QObject | 238 | class 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 | ||
374 | class PluginFactoryBase : public KLibFactory | 376 | class 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 | ||
391 | template<class TR,class TC, class TS> | 393 | template<class TR,class TC, class TS> |
392 | class PluginFactory : public PluginFactoryBase | 394 | class 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 | } |
409 | 411 | ||
410 | }; | 412 | }; |
411 | 413 | ||
412 | 414 | ||
413 | 415 | ||
414 | } | 416 | } |
415 | 417 | ||
416 | #endif | 418 | #endif |