summaryrefslogtreecommitdiffabout
path: root/microkde/kresources/managerimpl.cpp
Unidiff
Diffstat (limited to 'microkde/kresources/managerimpl.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--microkde/kresources/managerimpl.cpp70
1 files changed, 43 insertions, 27 deletions
diff --git a/microkde/kresources/managerimpl.cpp b/microkde/kresources/managerimpl.cpp
index 785b6b4..3655f50 100644
--- a/microkde/kresources/managerimpl.cpp
+++ b/microkde/kresources/managerimpl.cpp
@@ -1,198 +1,205 @@
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/*
25Enhanced Version of the file for platform independent KDE tools.
26Copyright (c) 2004 Ulf Schenk
27
28$Id$
29*/
30
24#include <kglobal.h> 31#include <kglobal.h>
25 32
26#include <kapplication.h> 33#include <kapplication.h>
27#include <kdebug.h> 34#include <kdebug.h>
28#include <kconfig.h> 35#include <kconfig.h>
29#include <kstandarddirs.h> 36#include <kstandarddirs.h>
30 37
31#include "resource.h" 38#include "resource.h"
32#include "factory.h" 39#include "factory.h"
33#include "managerimpl.h" 40#include "managerimpl.h"
34 41
35using namespace KRES; 42using namespace KRES;
36 43
37ManagerImpl::ManagerImpl( const QString &family ) 44ManagerImpl::ManagerImpl( const QString &family, bool syncable )
38 : mFamily( family ), mConfig( 0 ), mStdConfig( 0 ), mStandard( 0 ), 45 : mFamily( family ), mSyncable(syncable), mConfig( 0 ), mStdConfig( 0 ), mStandard( 0 ),
39 mFactory( 0 ) 46 mFactory( 0 )
40 47
41{ 48{
42 kdDebug(5650) << "ManagerImpl::ManagerImpl()" << endl; 49 kdDebug(5650) << "ManagerImpl::ManagerImpl()" << endl;
43 50
44 51
45} 52}
46 53
47ManagerImpl::~ManagerImpl() 54ManagerImpl::~ManagerImpl()
48{ 55{
49 kdDebug(5650) << "ManagerImpl::~ManagerImpl()" << endl; 56 kdDebug(5650) << "ManagerImpl::~ManagerImpl()" << endl;
50 57
51 Resource::List::ConstIterator it; 58 Resource::List::ConstIterator it;
52 for ( it = mResources.begin(); it != mResources.end(); ++it ) { 59 for ( it = mResources.begin(); it != mResources.end(); ++it ) {
53 delete *it; 60 delete *it;
54 } 61 }
55 62
56 delete mStdConfig; 63 delete mStdConfig;
57} 64}
58 65
59void ManagerImpl::createStandardConfig() 66void ManagerImpl::createStandardConfig()
60{ 67{
61 if ( !mStdConfig ) { 68 if ( !mStdConfig ) {
62 QString file = locateLocal( "data", KGlobal::getAppName() 69 QString file = locateLocal( "data", KGlobal::getAppName()
63 + "/kresources/" + mFamily + "rc" ); 70 + "/kresources/" + mFamily + "rc" );
64 mStdConfig = new KConfig( file ); 71 mStdConfig = new KConfig( file );
65 } 72 }
66 73
67 mConfig = mStdConfig; 74 mConfig = mStdConfig;
68} 75}
69 76
70void ManagerImpl::readConfig( KConfig *cfg ) 77void ManagerImpl::readConfig( KConfig *cfg )
71{ 78{
72 kdDebug(5650) << "ManagerImpl::readConfig()" << endl; 79 kdDebug(5650) << "ManagerImpl::readConfig()" << endl;
73 80
74 delete mFactory; 81 delete mFactory;
75 mFactory = Factory::self( mFamily ); 82 mFactory = Factory::self( mFamily );
76 83
77 if ( !cfg ) { 84 if ( !cfg ) {
78 createStandardConfig(); 85 createStandardConfig();
79 } else { 86 } else {
80 mConfig = cfg; 87 mConfig = cfg;
81 } 88 }
82 89
83 mStandard = 0; 90 mStandard = 0;
84 91
85 mConfig->setGroup( "General" ); 92 mConfig->setGroup( "General" );
86 93
87 QStringList keys = mConfig->readListEntry( "ResourceKeys" ); 94 QStringList keys = mConfig->readListEntry( "ResourceKeys" );
88 keys += mConfig->readListEntry( "PassiveResourceKeys" ); 95 keys += mConfig->readListEntry( "PassiveResourceKeys" );
89 96
90 QString standardKey = mConfig->readEntry( "Standard" ); 97 QString standardKey = mConfig->readEntry( "Standard" );
91 98
92 for ( QStringList::Iterator it = keys.begin(); it != keys.end(); ++it ) { 99 for ( QStringList::Iterator it = keys.begin(); it != keys.end(); ++it ) {
93 readResourceConfig( *it, false ); 100 readResourceConfig( *it, false );
94 } 101 }
95 102
96} 103}
97 104
98void ManagerImpl::writeConfig( KConfig *cfg ) 105void ManagerImpl::writeConfig( KConfig *cfg )
99{ 106{
100//USqDebug("ManagerImpl::writeConfig begin this= %ul cfg=%ul", this, cfg); 107//USqDebug("ManagerImpl::writeConfig begin this= %ul cfg=%ul", this, cfg);
101 108
102 109
103 kdDebug(5650) << "ManagerImpl::writeConfig()" << endl; 110 kdDebug(5650) << "ManagerImpl::writeConfig()" << endl;
104 111
105 if ( !cfg ) { 112 if ( !cfg ) {
106 createStandardConfig(); 113 createStandardConfig();
107 } else { 114 } else {
108 mConfig = cfg; 115 mConfig = cfg;
109 } 116 }
110 117
111 QStringList activeKeys; 118 QStringList activeKeys;
112 QStringList passiveKeys; 119 QStringList passiveKeys;
113 120
114 // First write all keys, collect active and passive keys on the way 121 // First write all keys, collect active and passive keys on the way
115 Resource::List::Iterator it; 122 Resource::List::Iterator it;
116 for ( it = mResources.begin(); it != mResources.end(); ++it ) { 123 for ( it = mResources.begin(); it != mResources.end(); ++it ) {
117 writeResourceConfig( *it, false ); 124 writeResourceConfig( *it, false );
118 125
119 QString key = (*it)->identifier(); 126 QString key = (*it)->identifier();
120 if( (*it)->isActive() ) 127 if( (*it)->isActive() )
121 activeKeys.append( key ); 128 activeKeys.append( key );
122 else 129 else
123 passiveKeys.append( key ); 130 passiveKeys.append( key );
124 } 131 }
125 132
126 // And then the general group 133 // And then the general group
127 134
128 kdDebug(5650) << "Saving general info" << endl; 135 kdDebug(5650) << "Saving general info" << endl;
129 mConfig->setGroup( "General" ); 136 mConfig->setGroup( "General" );
130 mConfig->writeEntry( "ResourceKeys", activeKeys ); 137 mConfig->writeEntry( "ResourceKeys", activeKeys );
131 mConfig->writeEntry( "PassiveResourceKeys", passiveKeys ); 138 mConfig->writeEntry( "PassiveResourceKeys", passiveKeys );
132 if ( mStandard ) 139 if ( mStandard )
133 mConfig->writeEntry( "Standard", mStandard->identifier() ); 140 mConfig->writeEntry( "Standard", mStandard->identifier() );
134 else 141 else
135 mConfig->writeEntry( "Standard", "" ); 142 mConfig->writeEntry( "Standard", "" );
136 143
137 mConfig->sync(); 144 mConfig->sync();
138 kdDebug(5650) << "ManagerImpl::save() finished" << endl; 145 kdDebug(5650) << "ManagerImpl::save() finished" << endl;
139 146
140//US qDebug("ManagerImpl::writeConfig end this= %ul cfg=%ul", this, cfg); 147//US qDebug("ManagerImpl::writeConfig end this= %ul cfg=%ul", this, cfg);
141 148
142} 149}
143 150
144void ManagerImpl::add( Resource *resource, bool useDCOP ) 151void ManagerImpl::add( Resource *resource, bool useDCOP )
145{ 152{
146qDebug("ManagerImpl::add begin this= %ul resource=%ul", this, resource); 153qDebug("ManagerImpl::add begin this= %ul resource=%ul", this, resource);
147 154
148 resource->setActive( true ); 155 resource->setActive( true );
149 156
150 if ( mResources.isEmpty() ) { 157 if ( mResources.isEmpty() ) {
151 mStandard = resource; 158 mStandard = resource;
152 } 159 }
153 160
154 mResources.append( resource ); 161 mResources.append( resource );
155 162
156 writeResourceConfig( resource, true ); 163 writeResourceConfig( resource, true );
157 164
158 qDebug("ManagerImpl::add end this= %ul resource=%ul", this, resource); 165 qDebug("ManagerImpl::add end this= %ul resource=%ul", this, resource);
159 166
160} 167}
161 168
162void ManagerImpl::remove( Resource *resource, bool useDCOP ) 169void ManagerImpl::remove( Resource *resource, bool useDCOP )
163{ 170{
164 if ( mStandard == resource ) mStandard = 0; 171 if ( mStandard == resource ) mStandard = 0;
165 removeResource( resource ); 172 removeResource( resource );
166 173
167 mResources.remove( resource ); 174 mResources.remove( resource );
168 175
169 delete resource; 176 delete resource;
170 177
171 kdDebug(5650) << "Finished ManagerImpl::remove()" << endl; 178 kdDebug(5650) << "Finished ManagerImpl::remove()" << endl;
172} 179}
173 180
174void ManagerImpl::setActive( Resource *resource, bool active ) 181void ManagerImpl::setActive( Resource *resource, bool active )
175{ 182{
176 if ( resource && resource->isActive() != active ) { 183 if ( resource && resource->isActive() != active ) {
177 resource->setActive( active ); 184 resource->setActive( active );
178 } 185 }
179} 186}
180 187
181Resource *ManagerImpl::standardResource() 188Resource *ManagerImpl::standardResource()
182{ 189{
183 return mStandard; 190 return mStandard;
184} 191}
185 192
186void ManagerImpl::setStandardResource( Resource *resource ) 193void ManagerImpl::setStandardResource( Resource *resource )
187{ 194{
188 mStandard = resource; 195 mStandard = resource;
189} 196}
190 197
191void ManagerImpl::resourceChanged( Resource *resource ) 198void ManagerImpl::resourceChanged( Resource *resource )
192{ 199{
193 writeResourceConfig( resource, true ); 200 writeResourceConfig( resource, true );
194 201
195 202
196// ManagerIface_stub allManagers( "*", "ManagerIface_" + mFamily.utf8() ); 203// ManagerIface_stub allManagers( "*", "ManagerIface_" + mFamily.utf8() );
197// allManagers.dcopResourceModified( resource->identifier() ); 204// allManagers.dcopResourceModified( resource->identifier() );
198} 205}
@@ -240,37 +247,37 @@ QPtrList<Resource> ManagerImpl::resources( bool active )
240 return result; 247 return result;
241} 248}
242 249
243void ManagerImpl::setListener( ManagerImplListener *listener ) 250void ManagerImpl::setListener( ManagerImplListener *listener )
244{ 251{
245 mListener = listener; 252 mListener = listener;
246} 253}
247 254
248Resource* ManagerImpl::readResourceConfig( const QString& identifier, 255Resource* ManagerImpl::readResourceConfig( const QString& identifier,
249 bool checkActive ) 256 bool checkActive )
250{ 257{
251 kdDebug() << "ManagerImpl::readResourceConfig() " << identifier << endl; 258 kdDebug() << "ManagerImpl::readResourceConfig() " << identifier << endl;
252 259
253// qDebug("ManagerImpl::readResourceConfig() %s", identifier.latin1()); 260// qDebug("ManagerImpl::readResourceConfig() %s", identifier.latin1());
254 261
255 mConfig->setGroup( "Resource_" + identifier ); 262 mConfig->setGroup( "Resource_" + identifier );
256#ifdef _WIN32_ 263#ifdef _WIN32_
257 // we use plugins on win32. the group is stored in a static variable 264 // we use plugins on win32. the group is stored in a static variable
258 // such that gourp info not avail on win32 plugins 265 // such that gourp info not avail on win32 plugins
259 // to fix that, it would be a looooot of work 266 // to fix that, it would be a looooot of work
260 mConfig->setTempGroup( "Resource_" + identifier ); 267 mConfig->setTempGroup( "Resource_" + identifier );
261#endif 268#endif
262 QString type = mConfig->readEntry( "ResourceType" ); 269 QString type = mConfig->readEntry( "ResourceType" );
263 QString name = mConfig->readEntry( "ResourceName" ); 270 QString name = mConfig->readEntry( "ResourceName" );
264 Resource *resource = mFactory->resource( type, mConfig ); 271 Resource *resource = mFactory->resource( type, mConfig, mSyncable );
265 if ( !resource ) { 272 if ( !resource ) {
266 qDebug("Failed to create resource with id %s ",identifier.latin1() ); 273 qDebug("Failed to create resource with id %s ",identifier.latin1() );
267 return 0; 274 return 0;
268 } 275 }
269 276
270 if ( resource->identifier().isEmpty() ) 277 if ( resource->identifier().isEmpty() )
271 resource->setIdentifier( identifier ); 278 resource->setIdentifier( identifier );
272 279
273 mConfig->setGroup( "General" ); 280 mConfig->setGroup( "General" );
274 281
275 QString standardKey = mConfig->readEntry( "Standard" ); 282 QString standardKey = mConfig->readEntry( "Standard" );
276 if ( standardKey == identifier ) { 283 if ( standardKey == identifier ) {
@@ -296,45 +303,45 @@ void ManagerImpl::writeResourceConfig( Resource *resource,
296 if ( !mConfig ) createStandardConfig(); 303 if ( !mConfig ) createStandardConfig();
297 304
298 mConfig->setGroup( "Resource_" + key ); 305 mConfig->setGroup( "Resource_" + key );
299 resource->writeConfig( mConfig ); 306 resource->writeConfig( mConfig );
300 307
301 mConfig->setGroup( "General" ); 308 mConfig->setGroup( "General" );
302 QString standardKey = mConfig->readEntry( "Standard" ); 309 QString standardKey = mConfig->readEntry( "Standard" );
303 310
304 if ( resource == mStandard && standardKey != key ) 311 if ( resource == mStandard && standardKey != key )
305 mConfig->writeEntry( "Standard", resource->identifier() ); 312 mConfig->writeEntry( "Standard", resource->identifier() );
306 else if ( resource != mStandard && standardKey == key ) 313 else if ( resource != mStandard && standardKey == key )
307 mConfig->writeEntry( "Standard", "" ); 314 mConfig->writeEntry( "Standard", "" );
308 315
309 if ( checkActive ) { 316 if ( checkActive ) {
310 QStringList activeKeys = mConfig->readListEntry( "ResourceKeys" ); 317 QStringList activeKeys = mConfig->readListEntry( "ResourceKeys" );
311 if ( resource->isActive() && !activeKeys.contains( key ) ) { 318 if ( resource->isActive() && !activeKeys.contains( key ) ) {
312 activeKeys.append( resource->identifier() ); 319 activeKeys.append( resource->identifier() );
313 mConfig->writeEntry( "ResourceKeys", activeKeys ); 320 mConfig->writeEntry( "ResourceKeys", activeKeys );
314 } else if ( !resource->isActive() && activeKeys.contains( key ) ) { 321 } else if ( !resource->isActive() && activeKeys.contains( key ) ) {
315 activeKeys.remove( key ); 322 activeKeys.remove( key );
316 mConfig->writeEntry( "ResourceKeys", activeKeys ); 323 mConfig->writeEntry( "ResourceKeys", activeKeys );
317 } 324 }
318 } 325 }
319 326
320 mConfig->sync(); 327 mConfig->sync();
321} 328}
322 329
323void ManagerImpl::removeResource( Resource *resource ) 330void ManagerImpl::removeResource( Resource *resource )
324{ 331{
325 QString key = resource->identifier(); 332 QString key = resource->identifier();
326 333
327 if ( !mConfig ) createStandardConfig(); 334 if ( !mConfig ) createStandardConfig();
328 335
329 mConfig->setGroup( "General" ); 336 mConfig->setGroup( "General" );
330 QStringList activeKeys = mConfig->readListEntry( "ResourceKeys" ); 337 QStringList activeKeys = mConfig->readListEntry( "ResourceKeys" );
331 if ( activeKeys.contains( key ) ) { 338 if ( activeKeys.contains( key ) ) {
332 activeKeys.remove( key ); 339 activeKeys.remove( key );
333 mConfig->writeEntry( "ResourceKeys", activeKeys ); 340 mConfig->writeEntry( "ResourceKeys", activeKeys );
334 } else { 341 } else {
335 QStringList passiveKeys = mConfig->readListEntry( "PassiveResourceKeys" ); 342 QStringList passiveKeys = mConfig->readListEntry( "PassiveResourceKeys" );
336 passiveKeys.remove( key ); 343 passiveKeys.remove( key );
337 mConfig->writeEntry( "PassiveResourceKeys", passiveKeys ); 344 mConfig->writeEntry( "PassiveResourceKeys", passiveKeys );
338 } 345 }
339 346
340 QString standardKey = mConfig->readEntry( "Standard" ); 347 QString standardKey = mConfig->readEntry( "Standard" );
@@ -347,12 +354,21 @@ void ManagerImpl::removeResource( Resource *resource )
347 mConfig->sync(); 354 mConfig->sync();
348} 355}
349 356
350Resource* ManagerImpl::getResource( const QString& identifier ) 357Resource* ManagerImpl::getResource( const QString& identifier )
351{ 358{
352 Resource::List::ConstIterator it; 359 Resource::List::ConstIterator it;
353 for ( it = mResources.begin(); it != mResources.end(); ++it ) { 360 for ( it = mResources.begin(); it != mResources.end(); ++it ) {
354 if ( (*it)->identifier() == identifier ) 361 if ( (*it)->identifier() == identifier )
355 return *it; 362 return *it;
356 } 363 }
357 return 0; 364 return 0;
358} 365}
366
367/**
368 Return true, if the manager manages syncable resources.
369*/
370bool ManagerImpl::manageSyncable() const
371{
372 return mSyncable;
373}
374