summaryrefslogtreecommitdiffabout
path: root/microkde/kresources
authorzautrix <zautrix>2004-07-08 11:20:17 (UTC)
committer zautrix <zautrix>2004-07-08 11:20:17 (UTC)
commit3f84322a2da502f95be386372da9f75ed17df574 (patch) (unidiff)
tree9a4ccd4568c38d60bb1efa7a6713f4d0914aae86 /microkde/kresources
parent40cf8102d2f38b5e952b889ffbd19cb1d428fc9b (diff)
downloadkdepimpi-3f84322a2da502f95be386372da9f75ed17df574.zip
kdepimpi-3f84322a2da502f95be386372da9f75ed17df574.tar.gz
kdepimpi-3f84322a2da502f95be386372da9f75ed17df574.tar.bz2
Fixes for resource plugin handling on wintendo
Diffstat (limited to 'microkde/kresources') (more/less context) (ignore whitespace changes)
-rw-r--r--microkde/kresources/managerimpl.cpp11
-rw-r--r--microkde/kresources/resource.cpp7
2 files changed, 15 insertions, 3 deletions
diff --git a/microkde/kresources/managerimpl.cpp b/microkde/kresources/managerimpl.cpp
index 1baa6be..785b6b4 100644
--- a/microkde/kresources/managerimpl.cpp
+++ b/microkde/kresources/managerimpl.cpp
@@ -1,353 +1,358 @@
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 <kglobal.h> 24#include <kglobal.h>
25 25
26#include <kapplication.h> 26#include <kapplication.h>
27#include <kdebug.h> 27#include <kdebug.h>
28#include <kconfig.h> 28#include <kconfig.h>
29#include <kstandarddirs.h> 29#include <kstandarddirs.h>
30 30
31#include "resource.h" 31#include "resource.h"
32#include "factory.h" 32#include "factory.h"
33#include "managerimpl.h" 33#include "managerimpl.h"
34 34
35using namespace KRES; 35using namespace KRES;
36 36
37ManagerImpl::ManagerImpl( const QString &family ) 37ManagerImpl::ManagerImpl( const QString &family )
38 : mFamily( family ), mConfig( 0 ), mStdConfig( 0 ), mStandard( 0 ), 38 : mFamily( family ), mConfig( 0 ), mStdConfig( 0 ), mStandard( 0 ),
39 mFactory( 0 ) 39 mFactory( 0 )
40 40
41{ 41{
42 kdDebug(5650) << "ManagerImpl::ManagerImpl()" << endl; 42 kdDebug(5650) << "ManagerImpl::ManagerImpl()" << endl;
43 43
44 44
45} 45}
46 46
47ManagerImpl::~ManagerImpl() 47ManagerImpl::~ManagerImpl()
48{ 48{
49 kdDebug(5650) << "ManagerImpl::~ManagerImpl()" << endl; 49 kdDebug(5650) << "ManagerImpl::~ManagerImpl()" << endl;
50 50
51 Resource::List::ConstIterator it; 51 Resource::List::ConstIterator it;
52 for ( it = mResources.begin(); it != mResources.end(); ++it ) { 52 for ( it = mResources.begin(); it != mResources.end(); ++it ) {
53 delete *it; 53 delete *it;
54 } 54 }
55 55
56 delete mStdConfig; 56 delete mStdConfig;
57} 57}
58 58
59void ManagerImpl::createStandardConfig() 59void ManagerImpl::createStandardConfig()
60{ 60{
61 if ( !mStdConfig ) { 61 if ( !mStdConfig ) {
62 QString file = locateLocal( "data", KGlobal::getAppName() 62 QString file = locateLocal( "data", KGlobal::getAppName()
63 + "/kresources/" + mFamily + "rc" ); 63 + "/kresources/" + mFamily + "rc" );
64 mStdConfig = new KConfig( file ); 64 mStdConfig = new KConfig( file );
65 } 65 }
66 66
67 mConfig = mStdConfig; 67 mConfig = mStdConfig;
68} 68}
69 69
70void ManagerImpl::readConfig( KConfig *cfg ) 70void ManagerImpl::readConfig( KConfig *cfg )
71{ 71{
72 kdDebug(5650) << "ManagerImpl::readConfig()" << endl; 72 kdDebug(5650) << "ManagerImpl::readConfig()" << endl;
73 73
74 delete mFactory; 74 delete mFactory;
75 mFactory = Factory::self( mFamily ); 75 mFactory = Factory::self( mFamily );
76 76
77 if ( !cfg ) { 77 if ( !cfg ) {
78 createStandardConfig(); 78 createStandardConfig();
79 } else { 79 } else {
80 mConfig = cfg; 80 mConfig = cfg;
81 } 81 }
82 82
83 mStandard = 0; 83 mStandard = 0;
84 84
85 mConfig->setGroup( "General" ); 85 mConfig->setGroup( "General" );
86 86
87 QStringList keys = mConfig->readListEntry( "ResourceKeys" ); 87 QStringList keys = mConfig->readListEntry( "ResourceKeys" );
88 keys += mConfig->readListEntry( "PassiveResourceKeys" ); 88 keys += mConfig->readListEntry( "PassiveResourceKeys" );
89 89
90 QString standardKey = mConfig->readEntry( "Standard" ); 90 QString standardKey = mConfig->readEntry( "Standard" );
91 91
92 for ( QStringList::Iterator it = keys.begin(); it != keys.end(); ++it ) { 92 for ( QStringList::Iterator it = keys.begin(); it != keys.end(); ++it ) {
93 readResourceConfig( *it, false ); 93 readResourceConfig( *it, false );
94 } 94 }
95 95
96} 96}
97 97
98void ManagerImpl::writeConfig( KConfig *cfg ) 98void ManagerImpl::writeConfig( KConfig *cfg )
99{ 99{
100//USqDebug("ManagerImpl::writeConfig begin this= %ul cfg=%ul", this, cfg); 100//USqDebug("ManagerImpl::writeConfig begin this= %ul cfg=%ul", this, cfg);
101 101
102 102
103 kdDebug(5650) << "ManagerImpl::writeConfig()" << endl; 103 kdDebug(5650) << "ManagerImpl::writeConfig()" << endl;
104 104
105 if ( !cfg ) { 105 if ( !cfg ) {
106 createStandardConfig(); 106 createStandardConfig();
107 } else { 107 } else {
108 mConfig = cfg; 108 mConfig = cfg;
109 } 109 }
110 110
111 QStringList activeKeys; 111 QStringList activeKeys;
112 QStringList passiveKeys; 112 QStringList passiveKeys;
113 113
114 // First write all keys, collect active and passive keys on the way 114 // First write all keys, collect active and passive keys on the way
115 Resource::List::Iterator it; 115 Resource::List::Iterator it;
116 for ( it = mResources.begin(); it != mResources.end(); ++it ) { 116 for ( it = mResources.begin(); it != mResources.end(); ++it ) {
117 writeResourceConfig( *it, false ); 117 writeResourceConfig( *it, false );
118 118
119 QString key = (*it)->identifier(); 119 QString key = (*it)->identifier();
120 if( (*it)->isActive() ) 120 if( (*it)->isActive() )
121 activeKeys.append( key ); 121 activeKeys.append( key );
122 else 122 else
123 passiveKeys.append( key ); 123 passiveKeys.append( key );
124 } 124 }
125 125
126 // And then the general group 126 // And then the general group
127 127
128 kdDebug(5650) << "Saving general info" << endl; 128 kdDebug(5650) << "Saving general info" << endl;
129 mConfig->setGroup( "General" ); 129 mConfig->setGroup( "General" );
130 mConfig->writeEntry( "ResourceKeys", activeKeys ); 130 mConfig->writeEntry( "ResourceKeys", activeKeys );
131 mConfig->writeEntry( "PassiveResourceKeys", passiveKeys ); 131 mConfig->writeEntry( "PassiveResourceKeys", passiveKeys );
132 if ( mStandard ) 132 if ( mStandard )
133 mConfig->writeEntry( "Standard", mStandard->identifier() ); 133 mConfig->writeEntry( "Standard", mStandard->identifier() );
134 else 134 else
135 mConfig->writeEntry( "Standard", "" ); 135 mConfig->writeEntry( "Standard", "" );
136 136
137 mConfig->sync(); 137 mConfig->sync();
138 kdDebug(5650) << "ManagerImpl::save() finished" << endl; 138 kdDebug(5650) << "ManagerImpl::save() finished" << endl;
139 139
140//US qDebug("ManagerImpl::writeConfig end this= %ul cfg=%ul", this, cfg); 140//US qDebug("ManagerImpl::writeConfig end this= %ul cfg=%ul", this, cfg);
141 141
142} 142}
143 143
144void ManagerImpl::add( Resource *resource, bool useDCOP ) 144void ManagerImpl::add( Resource *resource, bool useDCOP )
145{ 145{
146qDebug("ManagerImpl::add begin this= %ul resource=%ul", this, resource); 146qDebug("ManagerImpl::add begin this= %ul resource=%ul", this, resource);
147 147
148 resource->setActive( true ); 148 resource->setActive( true );
149 149
150 if ( mResources.isEmpty() ) { 150 if ( mResources.isEmpty() ) {
151 mStandard = resource; 151 mStandard = resource;
152 } 152 }
153 153
154 mResources.append( resource ); 154 mResources.append( resource );
155 155
156 writeResourceConfig( resource, true ); 156 writeResourceConfig( resource, true );
157 157
158 qDebug("ManagerImpl::add end this= %ul resource=%ul", this, resource); 158 qDebug("ManagerImpl::add end this= %ul resource=%ul", this, resource);
159 159
160} 160}
161 161
162void ManagerImpl::remove( Resource *resource, bool useDCOP ) 162void ManagerImpl::remove( Resource *resource, bool useDCOP )
163{ 163{
164 if ( mStandard == resource ) mStandard = 0; 164 if ( mStandard == resource ) mStandard = 0;
165 removeResource( resource ); 165 removeResource( resource );
166 166
167 mResources.remove( resource ); 167 mResources.remove( resource );
168 168
169 delete resource; 169 delete resource;
170 170
171 kdDebug(5650) << "Finished ManagerImpl::remove()" << endl; 171 kdDebug(5650) << "Finished ManagerImpl::remove()" << endl;
172} 172}
173 173
174void ManagerImpl::setActive( Resource *resource, bool active ) 174void ManagerImpl::setActive( Resource *resource, bool active )
175{ 175{
176 if ( resource && resource->isActive() != active ) { 176 if ( resource && resource->isActive() != active ) {
177 resource->setActive( active ); 177 resource->setActive( active );
178 } 178 }
179} 179}
180 180
181Resource *ManagerImpl::standardResource() 181Resource *ManagerImpl::standardResource()
182{ 182{
183 return mStandard; 183 return mStandard;
184} 184}
185 185
186void ManagerImpl::setStandardResource( Resource *resource ) 186void ManagerImpl::setStandardResource( Resource *resource )
187{ 187{
188 mStandard = resource; 188 mStandard = resource;
189} 189}
190 190
191void ManagerImpl::resourceChanged( Resource *resource ) 191void ManagerImpl::resourceChanged( Resource *resource )
192{ 192{
193 writeResourceConfig( resource, true ); 193 writeResourceConfig( resource, true );
194 194
195 195
196// ManagerIface_stub allManagers( "*", "ManagerIface_" + mFamily.utf8() ); 196// ManagerIface_stub allManagers( "*", "ManagerIface_" + mFamily.utf8() );
197// allManagers.dcopResourceModified( resource->identifier() ); 197// allManagers.dcopResourceModified( resource->identifier() );
198} 198}
199 199
200// DCOP asynchronous functions 200// DCOP asynchronous functions
201//US since we work from inside the application, we call the methods directly. 201//US since we work from inside the application, we call the methods directly.
202 202
203QStringList ManagerImpl::resourceNames() 203QStringList ManagerImpl::resourceNames()
204{ 204{
205 QStringList result; 205 QStringList result;
206 206
207 Resource::List::ConstIterator it; 207 Resource::List::ConstIterator it;
208 for ( it = mResources.begin(); it != mResources.end(); ++it ) { 208 for ( it = mResources.begin(); it != mResources.end(); ++it ) {
209 result.append( (*it)->resourceName() ); 209 result.append( (*it)->resourceName() );
210 } 210 }
211 return result; 211 return result;
212} 212}
213 213
214Resource::List *ManagerImpl::resourceList() 214Resource::List *ManagerImpl::resourceList()
215{ 215{
216 return &mResources; 216 return &mResources;
217} 217}
218 218
219QPtrList<Resource> ManagerImpl::resources() 219QPtrList<Resource> ManagerImpl::resources()
220{ 220{
221 QPtrList<Resource> result; 221 QPtrList<Resource> result;
222 222
223 Resource::List::ConstIterator it; 223 Resource::List::ConstIterator it;
224 for ( it = mResources.begin(); it != mResources.end(); ++it ) { 224 for ( it = mResources.begin(); it != mResources.end(); ++it ) {
225 result.append( *it ); 225 result.append( *it );
226 } 226 }
227 return result; 227 return result;
228} 228}
229 229
230QPtrList<Resource> ManagerImpl::resources( bool active ) 230QPtrList<Resource> ManagerImpl::resources( bool active )
231{ 231{
232 QPtrList<Resource> result; 232 QPtrList<Resource> result;
233 233
234 Resource::List::ConstIterator it; 234 Resource::List::ConstIterator it;
235 for ( it = mResources.begin(); it != mResources.end(); ++it ) { 235 for ( it = mResources.begin(); it != mResources.end(); ++it ) {
236 if ( (*it)->isActive() == active ) { 236 if ( (*it)->isActive() == active ) {
237 result.append( *it ); 237 result.append( *it );
238 } 238 }
239 } 239 }
240 return result; 240 return result;
241} 241}
242 242
243void ManagerImpl::setListener( ManagerImplListener *listener ) 243void ManagerImpl::setListener( ManagerImplListener *listener )
244{ 244{
245 mListener = listener; 245 mListener = listener;
246} 246}
247 247
248Resource* ManagerImpl::readResourceConfig( const QString& identifier, 248Resource* ManagerImpl::readResourceConfig( const QString& identifier,
249 bool checkActive ) 249 bool checkActive )
250{ 250{
251 kdDebug() << "ManagerImpl::readResourceConfig() " << identifier << endl; 251 kdDebug() << "ManagerImpl::readResourceConfig() " << identifier << endl;
252 252
253// qDebug("ManagerImpl::readResourceConfig() %s", identifier.latin1()); 253// qDebug("ManagerImpl::readResourceConfig() %s", identifier.latin1());
254 254
255 mConfig->setGroup( "Resource_" + identifier ); 255 mConfig->setGroup( "Resource_" + identifier );
256 256#ifdef _WIN32_
257 // we use plugins on win32. the group is stored in a static variable
258 // such that gourp info not avail on win32 plugins
259 // to fix that, it would be a looooot of work
260 mConfig->setTempGroup( "Resource_" + identifier );
261#endif
257 QString type = mConfig->readEntry( "ResourceType" ); 262 QString type = mConfig->readEntry( "ResourceType" );
258 QString name = mConfig->readEntry( "ResourceName" ); 263 QString name = mConfig->readEntry( "ResourceName" );
259 Resource *resource = mFactory->resource( type, mConfig ); 264 Resource *resource = mFactory->resource( type, mConfig );
260 if ( !resource ) { 265 if ( !resource ) {
261 kdDebug(5650) << "Failed to create resource with id " << identifier << endl; 266 qDebug("Failed to create resource with id %s ",identifier.latin1() );
262 return 0; 267 return 0;
263 } 268 }
264 269
265 if ( resource->identifier().isEmpty() ) 270 if ( resource->identifier().isEmpty() )
266 resource->setIdentifier( identifier ); 271 resource->setIdentifier( identifier );
267 272
268 mConfig->setGroup( "General" ); 273 mConfig->setGroup( "General" );
269 274
270 QString standardKey = mConfig->readEntry( "Standard" ); 275 QString standardKey = mConfig->readEntry( "Standard" );
271 if ( standardKey == identifier ) { 276 if ( standardKey == identifier ) {
272 mStandard = resource; 277 mStandard = resource;
273 } 278 }
274 279
275 if ( checkActive ) { 280 if ( checkActive ) {
276 QStringList activeKeys = mConfig->readListEntry( "ResourceKeys" ); 281 QStringList activeKeys = mConfig->readListEntry( "ResourceKeys" );
277 resource->setActive( activeKeys.contains( identifier ) ); 282 resource->setActive( activeKeys.contains( identifier ) );
278 } 283 }
279 mResources.append( resource ); 284 mResources.append( resource );
280 285
281 return resource; 286 return resource;
282} 287}
283 288
284void ManagerImpl::writeResourceConfig( Resource *resource, 289void ManagerImpl::writeResourceConfig( Resource *resource,
285 bool checkActive ) 290 bool checkActive )
286{ 291{
287 QString key = resource->identifier(); 292 QString key = resource->identifier();
288 293
289 kdDebug(5650) << "Saving resource " << key << endl; 294 kdDebug(5650) << "Saving resource " << key << endl;
290 295
291 if ( !mConfig ) createStandardConfig(); 296 if ( !mConfig ) createStandardConfig();
292 297
293 mConfig->setGroup( "Resource_" + key ); 298 mConfig->setGroup( "Resource_" + key );
294 resource->writeConfig( mConfig ); 299 resource->writeConfig( mConfig );
295 300
296 mConfig->setGroup( "General" ); 301 mConfig->setGroup( "General" );
297 QString standardKey = mConfig->readEntry( "Standard" ); 302 QString standardKey = mConfig->readEntry( "Standard" );
298 303
299 if ( resource == mStandard && standardKey != key ) 304 if ( resource == mStandard && standardKey != key )
300 mConfig->writeEntry( "Standard", resource->identifier() ); 305 mConfig->writeEntry( "Standard", resource->identifier() );
301 else if ( resource != mStandard && standardKey == key ) 306 else if ( resource != mStandard && standardKey == key )
302 mConfig->writeEntry( "Standard", "" ); 307 mConfig->writeEntry( "Standard", "" );
303 308
304 if ( checkActive ) { 309 if ( checkActive ) {
305 QStringList activeKeys = mConfig->readListEntry( "ResourceKeys" ); 310 QStringList activeKeys = mConfig->readListEntry( "ResourceKeys" );
306 if ( resource->isActive() && !activeKeys.contains( key ) ) { 311 if ( resource->isActive() && !activeKeys.contains( key ) ) {
307 activeKeys.append( resource->identifier() ); 312 activeKeys.append( resource->identifier() );
308 mConfig->writeEntry( "ResourceKeys", activeKeys ); 313 mConfig->writeEntry( "ResourceKeys", activeKeys );
309 } else if ( !resource->isActive() && activeKeys.contains( key ) ) { 314 } else if ( !resource->isActive() && activeKeys.contains( key ) ) {
310 activeKeys.remove( key ); 315 activeKeys.remove( key );
311 mConfig->writeEntry( "ResourceKeys", activeKeys ); 316 mConfig->writeEntry( "ResourceKeys", activeKeys );
312 } 317 }
313 } 318 }
314 319
315 mConfig->sync(); 320 mConfig->sync();
316} 321}
317 322
318void ManagerImpl::removeResource( Resource *resource ) 323void ManagerImpl::removeResource( Resource *resource )
319{ 324{
320 QString key = resource->identifier(); 325 QString key = resource->identifier();
321 326
322 if ( !mConfig ) createStandardConfig(); 327 if ( !mConfig ) createStandardConfig();
323 328
324 mConfig->setGroup( "General" ); 329 mConfig->setGroup( "General" );
325 QStringList activeKeys = mConfig->readListEntry( "ResourceKeys" ); 330 QStringList activeKeys = mConfig->readListEntry( "ResourceKeys" );
326 if ( activeKeys.contains( key ) ) { 331 if ( activeKeys.contains( key ) ) {
327 activeKeys.remove( key ); 332 activeKeys.remove( key );
328 mConfig->writeEntry( "ResourceKeys", activeKeys ); 333 mConfig->writeEntry( "ResourceKeys", activeKeys );
329 } else { 334 } else {
330 QStringList passiveKeys = mConfig->readListEntry( "PassiveResourceKeys" ); 335 QStringList passiveKeys = mConfig->readListEntry( "PassiveResourceKeys" );
331 passiveKeys.remove( key ); 336 passiveKeys.remove( key );
332 mConfig->writeEntry( "PassiveResourceKeys", passiveKeys ); 337 mConfig->writeEntry( "PassiveResourceKeys", passiveKeys );
333 } 338 }
334 339
335 QString standardKey = mConfig->readEntry( "Standard" ); 340 QString standardKey = mConfig->readEntry( "Standard" );
336 if ( standardKey == key ) { 341 if ( standardKey == key ) {
337 mConfig->writeEntry( "Standard", "" ); 342 mConfig->writeEntry( "Standard", "" );
338 } 343 }
339 344
340 mConfig->deleteGroup( "Resource_" + resource->identifier() ); 345 mConfig->deleteGroup( "Resource_" + resource->identifier() );
341 346
342 mConfig->sync(); 347 mConfig->sync();
343} 348}
344 349
345Resource* ManagerImpl::getResource( const QString& identifier ) 350Resource* ManagerImpl::getResource( const QString& identifier )
346{ 351{
347 Resource::List::ConstIterator it; 352 Resource::List::ConstIterator it;
348 for ( it = mResources.begin(); it != mResources.end(); ++it ) { 353 for ( it = mResources.begin(); it != mResources.end(); ++it ) {
349 if ( (*it)->identifier() == identifier ) 354 if ( (*it)->identifier() == identifier )
350 return *it; 355 return *it;
351 } 356 }
352 return 0; 357 return 0;
353} 358}
diff --git a/microkde/kresources/resource.cpp b/microkde/kresources/resource.cpp
index 7827a67..991d53d 100644
--- a/microkde/kresources/resource.cpp
+++ b/microkde/kresources/resource.cpp
@@ -1,186 +1,193 @@
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 QString mName; 42 QString mName;
43 bool mActive; 43 bool mActive;
44 bool mIsOpen; 44 bool mIsOpen;
45}; 45};
46 46
47Resource::Resource( const KConfig* config ) 47Resource::Resource( const KConfig* config )
48 : QObject( 0, "" ), d( new ResourcePrivate ) 48 : QObject( 0, "" ), d( new ResourcePrivate )
49{ 49{
50 d->mOpenCount = 0; 50 d->mOpenCount = 0;
51 d->mIsOpen = false; 51 d->mIsOpen = false;
52 52
53 //US compiler claimed that const discards qualifier 53 //US compiler claimed that const discards qualifier
54 KConfig* cfg = (KConfig*)config; 54 KConfig* cfg = (KConfig*)config;
55 if ( cfg ) { 55 if ( cfg ) {
56#ifdef _WIN32_
57 // we use plugins on win32. the group is stored in a static variable
58 // such that group info not available on win32 plugins
59 // to fix that, it would be a looooot of work
60 if ( !cfg->tempGroup().isEmpty() )
61 cfg->setGroup( cfg->tempGroup() );
62#endif
56 d->mType = cfg->readEntry( "ResourceType" ); 63 d->mType = cfg->readEntry( "ResourceType" );
57 d->mName = cfg->readEntry( "ResourceName" ); 64 d->mName = cfg->readEntry( "ResourceName" );
58 d->mReadOnly = cfg->readBoolEntry( "ResourceIsReadOnly", false ); 65 d->mReadOnly = cfg->readBoolEntry( "ResourceIsReadOnly", false );
59 d->mActive = cfg->readBoolEntry( "ResourceIsActive", true ); 66 d->mActive = cfg->readBoolEntry( "ResourceIsActive", true );
60 d->mIdentifier = cfg->readEntry( "ResourceIdentifier" ); 67 d->mIdentifier = cfg->readEntry( "ResourceIdentifier" );
61 } else { 68 } else {
62 d->mType = "type"; 69 d->mType = "type";
63 d->mName = "resource-name"; 70 d->mName = "resource-name";
64 d->mReadOnly = false; 71 d->mReadOnly = false;
65 d->mActive = true; 72 d->mActive = true;
66 d->mIdentifier = KApplication::randomString( 10 ); 73 d->mIdentifier = KApplication::randomString( 10 );
67 } 74 }
68} 75}
69 76
70Resource::~Resource() 77Resource::~Resource()
71{ 78{
72 delete d; 79 delete d;
73 d = 0; 80 d = 0;
74} 81}
75 82
76void Resource::writeConfig( KConfig* config ) 83void Resource::writeConfig( KConfig* config )
77{ 84{
78 85
79 86
80 config->writeEntry( "ResourceType", d->mType ); 87 config->writeEntry( "ResourceType", d->mType );
81 config->writeEntry( "ResourceName", d->mName ); 88 config->writeEntry( "ResourceName", d->mName );
82 config->writeEntry( "ResourceIsReadOnly", d->mReadOnly ); 89 config->writeEntry( "ResourceIsReadOnly", d->mReadOnly );
83 config->writeEntry( "ResourceIsActive", d->mActive ); 90 config->writeEntry( "ResourceIsActive", d->mActive );
84 config->writeEntry( "ResourceIdentifier", d->mIdentifier ); 91 config->writeEntry( "ResourceIdentifier", d->mIdentifier );
85} 92}
86 93
87bool Resource::open() 94bool Resource::open()
88{ 95{
89 d->mIsOpen = true; 96 d->mIsOpen = true;
90#ifdef QT_THREAD_SUPPORT 97#ifdef QT_THREAD_SUPPORT
91 QMutexLocker guard( &(d->mMutex) ); 98 QMutexLocker guard( &(d->mMutex) );
92#endif 99#endif
93 if ( !d->mOpenCount ) { 100 if ( !d->mOpenCount ) {
94 kdDebug(5650) << "Opening resource " << resourceName() << endl; 101 kdDebug(5650) << "Opening resource " << resourceName() << endl;
95 d->mIsOpen = doOpen(); 102 d->mIsOpen = doOpen();
96 } 103 }
97 d->mOpenCount++; 104 d->mOpenCount++;
98 return d->mIsOpen; 105 return d->mIsOpen;
99} 106}
100 107
101void Resource::close() 108void Resource::close()
102{ 109{
103#ifdef QT_THREAD_SUPPORT 110#ifdef QT_THREAD_SUPPORT
104 QMutexLocker guard( &(d->mMutex) ); 111 QMutexLocker guard( &(d->mMutex) );
105#endif 112#endif
106 if ( !d->mOpenCount ) { 113 if ( !d->mOpenCount ) {
107 kdDebug(5650) << "ERROR: Resource " << resourceName() << " closed more times than previously opened" << endl; 114 kdDebug(5650) << "ERROR: Resource " << resourceName() << " closed more times than previously opened" << endl;
108 return; 115 return;
109 } 116 }
110 d->mOpenCount--; 117 d->mOpenCount--;
111 if ( !d->mOpenCount ) { 118 if ( !d->mOpenCount ) {
112 kdDebug(5650) << "Closing resource " << resourceName() << endl; 119 kdDebug(5650) << "Closing resource " << resourceName() << endl;
113 doClose(); 120 doClose();
114 d->mIsOpen = false; 121 d->mIsOpen = false;
115 } else { 122 } else {
116 kdDebug(5650) << "Not yet closing resource " << resourceName() << ", open count = " << d->mOpenCount << endl; 123 kdDebug(5650) << "Not yet closing resource " << resourceName() << ", open count = " << d->mOpenCount << endl;
117 } 124 }
118} 125}
119 126
120bool Resource::isOpen() const 127bool Resource::isOpen() const
121{ 128{
122 return d->mIsOpen; 129 return d->mIsOpen;
123} 130}
124 131
125void Resource::setIdentifier( const QString& identifier ) 132void Resource::setIdentifier( const QString& identifier )
126{ 133{
127 d->mIdentifier = identifier; 134 d->mIdentifier = identifier;
128} 135}
129 136
130QString Resource::identifier() const 137QString Resource::identifier() const
131{ 138{
132 return d->mIdentifier; 139 return d->mIdentifier;
133} 140}
134 141
135void Resource::setType( const QString& type ) 142void Resource::setType( const QString& type )
136{ 143{
137 d->mType = type; 144 d->mType = type;
138} 145}
139 146
140QString Resource::type() const 147QString Resource::type() const
141{ 148{
142 return d->mType; 149 return d->mType;
143} 150}
144 151
145void Resource::setReadOnly( bool value ) 152void Resource::setReadOnly( bool value )
146{ 153{
147 d->mReadOnly = value; 154 d->mReadOnly = value;
148} 155}
149 156
150bool Resource::readOnly() const 157bool Resource::readOnly() const
151{ 158{
152 return d->mReadOnly; 159 return d->mReadOnly;
153} 160}
154 161
155void Resource::setResourceName( const QString &name ) 162void Resource::setResourceName( const QString &name )
156{ 163{
157 d->mName = name; 164 d->mName = name;
158} 165}
159 166
160QString Resource::resourceName() const 167QString Resource::resourceName() const
161{ 168{
162 return d->mName; 169 return d->mName;
163} 170}
164 171
165void Resource::setActive( bool value ) 172void Resource::setActive( bool value )
166{ 173{
167 d->mActive = value; 174 d->mActive = value;
168} 175}
169 176
170bool Resource::isActive() const 177bool Resource::isActive() const
171{ 178{
172 return d->mActive; 179 return d->mActive;
173} 180}
174 181
175void Resource::dump() const 182void Resource::dump() const
176{ 183{
177 qDebug("Resource::dump() "); 184 qDebug("Resource::dump() ");
178 kdDebug(5650) << "Resource:" << endl; 185 kdDebug(5650) << "Resource:" << endl;
179 kdDebug(5650) << " Name: " << d->mName << endl; 186 kdDebug(5650) << " Name: " << d->mName << endl;
180 kdDebug(5650) << " Identifier: " << d->mIdentifier << endl; 187 kdDebug(5650) << " Identifier: " << d->mIdentifier << endl;
181 kdDebug(5650) << " Type: " << d->mType << endl; 188 kdDebug(5650) << " Type: " << d->mType << endl;
182 kdDebug(5650) << " OpenCount: " << d->mOpenCount << endl; 189 kdDebug(5650) << " OpenCount: " << d->mOpenCount << endl;
183 kdDebug(5650) << " ReadOnly: " << ( d->mReadOnly ? "yes" : "no" ) << endl; 190 kdDebug(5650) << " ReadOnly: " << ( d->mReadOnly ? "yes" : "no" ) << endl;
184 kdDebug(5650) << " Active: " << ( d->mActive ? "yes" : "no" ) << endl; 191 kdDebug(5650) << " Active: " << ( d->mActive ? "yes" : "no" ) << endl;
185 kdDebug(5650) << " IsOpen: " << ( d->mIsOpen ? "yes" : "no" ) << endl; 192 kdDebug(5650) << " IsOpen: " << ( d->mIsOpen ? "yes" : "no" ) << endl;
186} 193}