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,9 +1,9 @@
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
@@ -18,12 +18,19 @@
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>
@@ -31,42 +38,42 @@
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;
@@ -76,41 +83,41 @@ void ManagerImpl::readConfig( KConfig *cfg )
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 ) {
@@ -126,39 +133,39 @@ void ManagerImpl::writeConfig( KConfig *cfg )
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;
@@ -175,18 +182,18 @@ void 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{
@@ -246,25 +253,25 @@ void ManagerImpl::setListener( ManagerImplListener *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() )
@@ -302,13 +309,13 @@ void ManagerImpl::writeResourceConfig( Resource *resource,
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 ) ) {
@@ -322,13 +329,13 @@ void ManagerImpl::writeResourceConfig( Resource *resource,
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 {
@@ -353,6 +360,15 @@ Resource* ManagerImpl::getResource( const QString& identifier )
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