AlbumShaper 1.0a3
Configuration Class Reference

Configuration object manages all user-specific application settings. More...

#include <configuration.h>

Collaboration diagram for Configuration:

Public Member Functions

 Configuration ()
 Creates configuration variables using default values, then attempts to load settings from disk.
 
 ~Configuration ()
 Destructor saves settings to disk.
 
bool loadSettings ()
 Loads settings.
 
bool saveSettings ()
 Saves settings.
 
void setString (QString group, QString key, QString value)
 Sets a setting value, if group does not exist it is created, if setting does not exist it is also created.
 
void setBool (QString group, QString key, bool val)
 Set bool setting.
 
void setInt (QString group, QString key, int val)
 Set int setting.
 
QString getString (QString group, QString key)
 Fetch string setting.
 
bool getBool (QString group, QString key)
 Fetch bool setting.
 
int getInt (QString group, QString key)
 Fetch int setting.
 
float getFloat (QString group, QString key)
 Fetch float setting.
 
double getDouble (QString group, QString key)
 Fetch double setting.
 
void resetSetting (QString group, QString key)
 Resets a setting to it's default value.
 
void removeGroup (QString group)
 Removes an entire group of settings.
 

Static Public Member Functions

static bool constructSettingsDirectory ()
 Constructs any necessary directories for loading and saving user settings, returns false if unsuccessful.
 

Private Attributes

QString settingsFilename
 Settings filename.
 
SettingGroupfirstGroup
 pointer to first group
 
SettingGrouplastGroup
 pointer to last group
 
SettingGroupcurGroup
 pointer to currently selected group
 

Detailed Description

Configuration object manages all user-specific application settings.

Definition at line 24 of file configuration.h.

Constructor & Destructor Documentation

◆ Configuration()

Configuration::Configuration ( )

Creates configuration variables using default values, then attempts to load settings from disk.

Definition at line 68 of file configuration.cpp.

69{
70 //-----------------------------
71 //Determine settings filename
72 //-----------------------------
73
74 //PLATFORM_SPECIFIC_CODE
75
76 //Mac OS X
77 #if defined(Q_OS_MACX)
78 settingsFilename = QDir::homeDirPath() + QString("/Library/Preferences/net.sourceforge.albumshaper.xml");
79 //-----------------------------
80 //Windows
81 #elif defined(Q_OS_WIN)
82 //attempt to get folder location using windows api, if this fails try hard coded path as a last resort
83 QString tmp;
84 if( !getWindowsFolderLocation(LOCAL_SETTINGS_APPLICATION_DATA, tmp) )
85 {
86 tmp = getenv("USERPROFILE") + QString("/Local Settings/Application Data");
87 }
88 settingsFilename = QDir::convertSeparators( tmp + "/Album Shaper/settings.xml" );
89 //-----------------------------
90 //Unix/Linux/BSD
91 #else
92 settingsFilename = QDir::homeDirPath() + QString("/.albumShaper/settings.xml");
93 #endif
94 //-----------------------------
95
96 //no groups by default
97 firstGroup = NULL;
98 lastGroup = NULL;
99
100 //no group selected by default
101 curGroup = NULL;
102}
QString settingsFilename
Settings filename.
SettingGroup * curGroup
pointer to currently selected group
SettingGroup * lastGroup
pointer to last group
SettingGroup * firstGroup
pointer to first group

References curGroup, firstGroup, lastGroup, and settingsFilename.

◆ ~Configuration()

Configuration::~Configuration ( )

Destructor saves settings to disk.

Definition at line 104 of file configuration.cpp.

105{
106 //delete all setting groups
108 while(cur != NULL)
109 {
110 SettingGroup* next = cur->getNext();
111 delete cur;
112 cur = next;
113 }
114}
SettingGroup contains settings which are releated.
SettingGroup * getNext()
returns the next groupsetting

References firstGroup, and SettingGroup::getNext().

Member Function Documentation

◆ constructSettingsDirectory()

bool Configuration::constructSettingsDirectory ( )
static

Constructs any necessary directories for loading and saving user settings, returns false if unsuccessful.

Definition at line 29 of file configuration.cpp.

30{
31 //PLATFORM_SPECIFIC_CODE
32
33 //-----------------------------
34 //Mac OSX requires no directories to be created
35 #if defined(Q_OS_MACX)
36 return true;
37 //-----------------------------
38 //Windows
39 #elif defined(Q_OS_WIN)
40 bool configDirMade = true;
41
42 //attempt to get folder location using windows api, if this fails try hard coded path as a last resort
43 QString folderLoc;
44 if( !getWindowsFolderLocation(LOCAL_SETTINGS_APPLICATION_DATA, folderLoc) )
45 {
46 folderLoc = getenv("USERPROFILE") + QString("/Local Settings/Application Data");
47 }
48 QDir dataDir( folderLoc );
49 if(!dataDir.exists("Album Shaper"))
50 {
51 configDirMade = dataDir.mkdir("Album Shaper");
52 }
53 return configDirMade;
54 //-----------------------------
55 //Unix/Linux/BSD
56 #else
57 bool configDirMade = true;
58 QDir homeDir( QDir::homeDirPath() );
59 if(!homeDir.exists(".albumShaper"))
60 {
61 configDirMade = homeDir.mkdir(".albumShaper");
62 }
63 return configDirMade;
64 #endif
65 //-----------------------------
66}

Referenced by main().

◆ getBool()

bool Configuration::getBool ( QString group,
QString key )

◆ getDouble()

double Configuration::getDouble ( QString group,
QString key )

Fetch double setting.

Definition at line 221 of file configuration.cpp.

222{
223 return getString(group,key).toDouble();
224}

References getString().

◆ getFloat()

float Configuration::getFloat ( QString group,
QString key )

Fetch float setting.

Definition at line 216 of file configuration.cpp.

217{
218 return getString(group,key).toFloat();
219}

References getString().

◆ getInt()

int Configuration::getInt ( QString group,
QString key )

Fetch int setting.

Definition at line 211 of file configuration.cpp.

212{
213 return getString(group,key).toInt();
214}

References getString().

Referenced by LayoutSettingsWidget::loadSettings(), and main().

◆ getString()

QString Configuration::getString ( QString group,
QString key )

Fetch string setting.

Definition at line 158 of file configuration.cpp.

159{
160 //check if cached group is correct group, if not find correct group
161 if(curGroup == NULL || curGroup->getName().compare(group) != 0)
162 {
164 while(curGroup != NULL)
165 {
166 if(curGroup->getName().compare(group) == 0)
167 break;
169 }
170
171 //if we have not found the group return error value (-1)
172 if(curGroup == NULL)
173 {
174 return "-1";
175 }
176 }
177
178 //return setting value from group
179 return curGroup->getValue(key);
180}
QString getValue(QString key)
Returns a setting value.
QString getName()
Returns group's name.

References curGroup, firstGroup, SettingGroup::getName(), SettingGroup::getNext(), and SettingGroup::getValue().

Referenced by SubalbumWidget::addImageAction(), TitleWidget::createTmpDir(), TitleWidget::exportLargeImages(), TitleWidget::exportSmallWebGallery(), getBool(), getDouble(), getFloat(), getInt(), TitleWidget::loadAlbum(), TitleWidget::loadAlbum(), LoadingSavingWidget::loadSettings(), MosaicOptionsDialog::MosaicOptionsDialog(), TitleWidget::newAlbum(), TitleWidget::saveAsAlbum(), LoadingSavingWidget::setDefaults(), TitleWidget::TitleWidget(), and Window::Window().

◆ loadSettings()

bool Configuration::loadSettings ( )

Loads settings.

Definition at line 268 of file configuration.cpp.

269{
270 //-----------------------------------
271 //attempt to load xml settings file and construct dom, if either action failes return false
272 QFile settingsFile( settingsFilename );
273 if( !settingsFile.open( QIODevice::ReadOnly ) )
274 return false;
275
276 QDomDocument DOM;
277 if( !DOM.setContent( &settingsFile ) )
278 return false;
279
280 settingsFile.close();
281
282 //-----------------------------------
283 //walk though DOM and look for setting nodes.
284 //for each setting fetch, type, key, and value
285 //walk through list of settings and find previous setting
286 //if previous setting found replace value, otherwise add new setting to list
287 QDomElement root = DOM.documentElement();
288 QDomNode node = root.firstChild();
289
290 while( !node.isNull() )
291 {
292 if( node.isElement() && node.nodeName() == "group" )
293 {
294 //find group name, if no name found then move on to next group
295 QDomNamedNodeMap attributes = node.attributes();
296 if(attributes.namedItem("name").isNull())
297 {
298 node = node.nextSibling();
299 continue;
300 }
301
302 //create group if it does not already exist
303 SettingGroup* loadedGroup = NULL;
304
305 //last used group is the one we are looking for
306 if(curGroup->getName().compare( attributes.namedItem("name").nodeValue()) == 0)
307 loadedGroup = curGroup;
308 //search list of groups
309 else
310 {
312 while(cur != NULL)
313 {
314 //found it!
315 if(cur->getName().compare( attributes.namedItem("name").nodeValue()) == 0)
316 {
317 loadedGroup = cur;
318 break;
319 }
320 //nope, move on to next group
321 cur = cur->getNext();
322 }
323 }
324 //if group to be loaded is not found then create it
325 if(loadedGroup == NULL)
326 {
327 loadedGroup = new SettingGroup( attributes.namedItem("name").nodeValue() );
328 if(firstGroup == NULL)
329 firstGroup = loadedGroup;
330 else
331 lastGroup->setNext(loadedGroup);
332 lastGroup = loadedGroup;
333 }
334
335 loadedGroup->loadSettings(node);
336 }
337 //move on to next setting
338 node = node.nextSibling();
339 }
340 //-----------------------------------
341 //loading of settingings was successful
342 return true;
343}
void setNext(SettingGroup *next)
sets the next group setting
void loadSettings(QDomNode &node)

References curGroup, firstGroup, SettingGroup::getName(), SettingGroup::getNext(), lastGroup, SettingGroup::loadSettings(), SettingGroup::setNext(), and settingsFilename.

Referenced by Window::Window().

◆ removeGroup()

void Configuration::removeGroup ( QString group)

Removes an entire group of settings.

Definition at line 226 of file configuration.cpp.

227{
228 //iterate through groups, remove group once found
229 SettingGroup* prev = NULL;
231 while(curGroup != NULL)
232 {
233 //found
234 if(curGroup->getName().compare(group) == 0)
235 {
236 //keep handle on group for deletion purposes
237 SettingGroup* temp = curGroup;
238
239 //fix head if necessary
240 if(curGroup == firstGroup)
242
243 //fix tail if necessary
244 if(lastGroup == curGroup)
245 lastGroup = prev;
246
247 //splice out group
248 if(prev != NULL)
249 prev->setNext( curGroup->getNext() );
250
251 //update curGroup pointer so valid
253
254 //free group
255 delete temp;
256 temp = NULL;
257
258 //done
259 return;
260 }
261
262 //update prev and cur pointers and move along
263 prev = curGroup;
265 }
266}

References curGroup, firstGroup, SettingGroup::getName(), SettingGroup::getNext(), lastGroup, and SettingGroup::setNext().

Referenced by Window::~Window().

◆ resetSetting()

void Configuration::resetSetting ( QString group,
QString key )

Resets a setting to it's default value.

Definition at line 182 of file configuration.cpp.

183{
184 //check if cached group is correct group, if not find correct group
185 if(curGroup == NULL || curGroup->getName().compare(group) != 0)
186 {
188 while(curGroup != NULL)
189 {
190 if(curGroup->getName().compare(group) == 0)
191 break;
193 }
194
195 //if we have not found the group return error value (-1)
196 if(curGroup == NULL)
197 {
198 return;
199 }
200 }
201
202 //return setting value from group
204}
void resetSetting(QString key)
resets a setting to its default value

References curGroup, firstGroup, SettingGroup::getName(), SettingGroup::getNext(), and SettingGroup::resetSetting().

Referenced by SubalbumWidget::addImageAction(), TitleWidget::createTmpDir(), TitleWidget::loadAlbum(), MosaicOptionsDialog::MosaicOptionsDialog(), and Window::Window().

◆ saveSettings()

bool Configuration::saveSettings ( )

Saves settings.

Definition at line 345 of file configuration.cpp.

346{
347 //create/open html file
348 QFile file( settingsFilename );
349 if(file.open(QIODevice::WriteOnly))
350 {
351 //-----
352 Q3TextStream stream;
353 stream.setDevice( &file );
354 stream.setEncoding( Q3TextStream::UnicodeUTF8 );
355
356 //write header
357 stream << "<settings app=\"Album Shaper\" version=\"" << ALBUMSHAPER_VERSION << "\">\n";
358
359 //iterate over every group
361 while(curGroup != NULL)
362 {
363 curGroup->saveSettings( stream );
365 }
366
367 //end xml file
368 stream << "</settings>\n";
369
370 //success saving settings!
371 file.close();
372 return true;
373 }
374
375 //opening file for saving failed
376 file.close();
377 return false;
378}
void saveSettings(Q3TextStream &stream)
writes out this group to file
#define ALBUMSHAPER_VERSION
Definition config.h:21

References ALBUMSHAPER_VERSION, curGroup, firstGroup, SettingGroup::getNext(), SettingGroup::saveSettings(), and settingsFilename.

Referenced by Window::~Window().

◆ setBool()

void Configuration::setBool ( QString group,
QString key,
bool val )

Set bool setting.

Definition at line 148 of file configuration.cpp.

149{
150 setString( group, key, (val ? "1" : "0" ) );
151}
void setString(QString group, QString key, QString value)
Sets a setting value, if group does not exist it is created, if setting does not exist it is also cre...

References setString().

Referenced by main(), AlertsWidget::saveSettings(), LayoutSettingsWidget::saveSettings(), LoadingSavingWidget::saveSettings(), AlertsWidget::setDefaults(), LayoutSettingsWidget::setDefaults(), LoadingSavingWidget::setDefaults(), and MiscSettings::setDefaults().

◆ setInt()

void Configuration::setInt ( QString group,
QString key,
int val )

Set int setting.

Definition at line 153 of file configuration.cpp.

154{
155 setString( group, key, QString("%1").arg(val) );
156}

References setString().

Referenced by LayoutSettingsWidget::saveSettings(), LayoutSettingsWidget::setDefaults(), LoadingSavingWidget::setDefaults(), MiscSettings::setDefaults(), and Window::~Window().

◆ setString()

void Configuration::setString ( QString group,
QString key,
QString value )

Sets a setting value, if group does not exist it is created, if setting does not exist it is also created.

Definition at line 116 of file configuration.cpp.

117{
118 //check if cached group has same name, if not find group, create it if group does not exist
119 if(curGroup == NULL || curGroup->getName().compare(group) != 0)
120 {
122 while(curGroup != NULL)
123 {
124 if(curGroup->getName().compare(group) == 0)
125 break;
127 }
128
129 //if we have not found the group create it and add to list
130 if(curGroup == NULL)
131 {
132 //create new group
133 curGroup = new SettingGroup(group);
134
135 //add group to list
136 if(firstGroup == NULL)
138 else
141 }
142 }
143
144 //set setting value
145 curGroup->setValue(key, value);
146}
void setValue(QString key, QString value)
Sets a setting value, create new setting if setting not found.

References curGroup, firstGroup, SettingGroup::getName(), SettingGroup::getNext(), lastGroup, SettingGroup::setNext(), and SettingGroup::setValue().

Referenced by SubalbumWidget::addImageAction(), TitleWidget::loadAlbum(), TitleWidget::saveAlbum(), TitleWidget::saveAsAlbum(), LoadingSavingWidget::saveSettings(), setBool(), AlertsWidget::setDefaults(), LayoutSettingsWidget::setDefaults(), LoadingSavingWidget::setDefaults(), setInt(), and Window::~Window().

Member Data Documentation

◆ curGroup

SettingGroup* Configuration::curGroup
private

pointer to currently selected group

Definition at line 84 of file configuration.h.

Referenced by Configuration(), getString(), loadSettings(), removeGroup(), resetSetting(), saveSettings(), and setString().

◆ firstGroup

SettingGroup* Configuration::firstGroup
private

pointer to first group

Definition at line 78 of file configuration.h.

Referenced by Configuration(), getString(), loadSettings(), removeGroup(), resetSetting(), saveSettings(), setString(), and ~Configuration().

◆ lastGroup

SettingGroup* Configuration::lastGroup
private

pointer to last group

Definition at line 81 of file configuration.h.

Referenced by Configuration(), loadSettings(), removeGroup(), and setString().

◆ settingsFilename

QString Configuration::settingsFilename
private

Settings filename.

Definition at line 75 of file configuration.h.

Referenced by Configuration(), loadSettings(), and saveSettings().


The documentation for this class was generated from the following files: