AlbumShaper  1.0a3
Public Member Functions | Static Public Member Functions | Private Attributes
Configuration Class Reference

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

#include <configuration.h>

Collaboration diagram for Configuration:
Collaboration graph
[legend]

List of all members.

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 ( )

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

Definition at line 68 of file configuration.cpp.

References curGroup, firstGroup, lastGroup, and settingsFilename.

{
  //-----------------------------
  //Determine settings filename
  //-----------------------------

  //PLATFORM_SPECIFIC_CODE
  
  //Mac OS X
  #if defined(Q_OS_MACX)
  settingsFilename = QDir::homeDirPath() + QString("/Library/Preferences/net.sourceforge.albumshaper.xml");
  //----------------------------- 
  //Windows
  #elif defined(Q_OS_WIN)
  //attempt to get folder location using windows api, if this fails try hard coded path as a last resort
  QString tmp;
  if( !getWindowsFolderLocation(LOCAL_SETTINGS_APPLICATION_DATA,  tmp) )
  { 
    tmp = getenv("USERPROFILE") + QString("/Local Settings/Application Data"); 
  }
  settingsFilename = QDir::convertSeparators( tmp + "/Album Shaper/settings.xml" );
  //-----------------------------
  //Unix/Linux/BSD
  #else
  settingsFilename = QDir::homeDirPath() + QString("/.albumShaper/settings.xml");
  #endif
  //-----------------------------
 
  //no groups by default
  firstGroup = NULL;
  lastGroup = NULL;

  //no group selected by default
  curGroup = NULL;
}
Configuration::~Configuration ( )

Destructor saves settings to disk.

Definition at line 104 of file configuration.cpp.

References firstGroup, and SettingGroup::getNext().

{
  //delete all setting groups
  SettingGroup* cur = firstGroup;
  while(cur != NULL)
  {
    SettingGroup* next = cur->getNext();
    delete cur;
    cur = next;
  }
}

Member Function Documentation

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.

Referenced by main().

{
  //PLATFORM_SPECIFIC_CODE
 
  //-----------------------------
  //Mac OSX requires no directories to be created
  #if defined(Q_OS_MACX)
  return true;
  //-----------------------------
  //Windows
  #elif defined(Q_OS_WIN)
  bool configDirMade = true;

  //attempt to get folder location using windows api, if this fails try hard coded path as a last resort
  QString folderLoc;
  if( !getWindowsFolderLocation(LOCAL_SETTINGS_APPLICATION_DATA,  folderLoc) )
  { 
    folderLoc = getenv("USERPROFILE") + QString("/Local Settings/Application Data"); 
  }
  QDir dataDir( folderLoc );    
  if(!dataDir.exists("Album Shaper"))
  {
    configDirMade = dataDir.mkdir("Album Shaper"); 
  }  
  return configDirMade;
  //-----------------------------
  //Unix/Linux/BSD
  #else
  bool configDirMade = true;
  QDir homeDir( QDir::homeDirPath() );
  if(!homeDir.exists(".albumShaper")) 
  { 
    configDirMade = homeDir.mkdir(".albumShaper"); 
  }
  return configDirMade; 
  #endif    
  //-----------------------------
}
bool Configuration::getBool ( QString  group,
QString  key 
)
double Configuration::getDouble ( QString  group,
QString  key 
)

Fetch double setting.

Definition at line 221 of file configuration.cpp.

References getString().

{
  return getString(group,key).toDouble();
}
float Configuration::getFloat ( QString  group,
QString  key 
)

Fetch float setting.

Definition at line 216 of file configuration.cpp.

References getString().

{
  return getString(group,key).toFloat();
}
int Configuration::getInt ( QString  group,
QString  key 
)

Fetch int setting.

Definition at line 211 of file configuration.cpp.

References getString().

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

{
  return getString(group,key).toInt();
}
QString Configuration::getString ( QString  group,
QString  key 
)

Fetch string setting.

Definition at line 158 of file configuration.cpp.

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(), LoadingSavingWidget::loadSettings(), MosaicOptionsDialog::MosaicOptionsDialog(), TitleWidget::newAlbum(), TitleWidget::saveAsAlbum(), LoadingSavingWidget::setDefaults(), TitleWidget::TitleWidget(), and Window::Window().

{
  //check if cached group is correct group, if not find correct group
  if(curGroup == NULL || curGroup->getName().compare(group) != 0)
  {
    curGroup = firstGroup;
    while(curGroup != NULL)
    {
      if(curGroup->getName().compare(group) == 0)
        break;
      curGroup = curGroup->getNext();
    }

    //if we have not found the group return error value (-1)
    if(curGroup == NULL)
    {
      return "-1";
    }
  }

  //return setting value from group
  return curGroup->getValue(key);
}
bool Configuration::loadSettings ( )

Loads settings.

Definition at line 268 of file configuration.cpp.

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

Referenced by Window::Window().

{
  //-----------------------------------
  //attempt to load xml settings file and construct dom, if either action failes return false
  QFile settingsFile( settingsFilename );
  if( !settingsFile.open( IO_ReadOnly ) )
    return false;

  QDomDocument DOM;
  if( !DOM.setContent( &settingsFile ) )
    return false;

  settingsFile.close();

  //-----------------------------------
  //walk though DOM and look for setting nodes.
  //for each setting fetch, type, key, and value
  //walk through list of settings and find previous setting
  //if previous setting found replace value, otherwise add new setting to list
  QDomElement root = DOM.documentElement();
  QDomNode node = root.firstChild();

  while( !node.isNull() )
  {
    if( node.isElement() && node.nodeName() == "group" )
    {
      //find group name, if no name found then move on to next group
      QDomNamedNodeMap attributes = node.attributes();
      if(attributes.namedItem("name").isNull())
      {
        node = node.nextSibling();
        continue;
      }

      //create group if it does not already exist
      SettingGroup* loadedGroup = NULL;

      //last used group is the one we are looking for
      if(curGroup->getName().compare( attributes.namedItem("name").nodeValue()) == 0)
        loadedGroup = curGroup;
      //search list of groups
      else
      {
        SettingGroup* cur = firstGroup;
        while(cur != NULL)
         {
           //found it!
           if(cur->getName().compare( attributes.namedItem("name").nodeValue()) == 0)
           {
             loadedGroup = cur;
             break;
           }
          //nope, move on to next group
          cur = cur->getNext();
        }
      }
      //if group to be loaded is not found then create it
      if(loadedGroup == NULL)
      {
        loadedGroup = new SettingGroup( attributes.namedItem("name").nodeValue() );
        if(firstGroup == NULL)
          firstGroup = loadedGroup;
        else
          lastGroup->setNext(loadedGroup);
        lastGroup = loadedGroup;
      }

      loadedGroup->loadSettings(node);
    }
    //move on to next setting
    node = node.nextSibling();
  }
  //-----------------------------------
  //loading of settingings was successful
  return true;
}
void Configuration::removeGroup ( QString  group)

Removes an entire group of settings.

Definition at line 226 of file configuration.cpp.

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

Referenced by Window::~Window().

{  
  //iterate through groups, remove group once found
  SettingGroup* prev = NULL;
  curGroup = firstGroup;
  while(curGroup != NULL)
  {
    //found
    if(curGroup->getName().compare(group) == 0)
    {
      //keep handle on group for deletion purposes
      SettingGroup* temp = curGroup;

      //fix head if necessary
      if(curGroup == firstGroup)
        firstGroup = curGroup->getNext();
            
      //fix tail if necessary
      if(lastGroup == curGroup)
        lastGroup = prev;

      //splice out group
      if(prev != NULL)
        prev->setNext( curGroup->getNext() );                 
      
      //update curGroup pointer so valid
      curGroup = curGroup->getNext();

      //free group
      delete temp;
      temp = NULL;
      
      //done       
      return;
    }
    
    //update prev and cur pointers and move along
    prev = curGroup;
    curGroup = curGroup->getNext();        
  }  
}
void Configuration::resetSetting ( QString  group,
QString  key 
)

Resets a setting to it's default value.

Definition at line 182 of file configuration.cpp.

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

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

{
  //check if cached group is correct group, if not find correct group
  if(curGroup == NULL || curGroup->getName().compare(group) != 0)
  {
    curGroup = firstGroup;
    while(curGroup != NULL)
    {
      if(curGroup->getName().compare(group) == 0)
        break;
      curGroup = curGroup->getNext();
    }

    //if we have not found the group return error value (-1)
    if(curGroup == NULL)
    {
      return;
    }
  }

  //return setting value from group
  curGroup->resetSetting(key);
}
bool Configuration::saveSettings ( )

Saves settings.

Definition at line 345 of file configuration.cpp.

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

Referenced by Window::~Window().

{
  //create/open html file
  QFile file( settingsFilename );
  if(file.open(IO_WriteOnly))
  {
    //-----
    QTextStream stream;
    stream.setDevice( &file );
    stream.setEncoding( QTextStream::UnicodeUTF8 );
    
    //write header
    stream << "<settings app=\"Album Shaper\" version=\"" << ALBUMSHAPER_VERSION << "\">\n";

    //iterate over every group
    curGroup = firstGroup;
    while(curGroup != NULL)
    {
      curGroup->saveSettings( stream );
      curGroup = curGroup->getNext();
    }

    //end xml file
    stream << "</settings>\n";

    //success saving settings!
    file.close();
    return true;
  }

  //opening file for saving failed
  file.close();
  return false;
}
void Configuration::setBool ( QString  group,
QString  key,
bool  val 
)
void Configuration::setInt ( QString  group,
QString  key,
int  val 
)

Set int setting.

Definition at line 153 of file configuration.cpp.

References setString().

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

{
  setString( group, key, QString("%1").arg(val) );
}
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.

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(), LoadingSavingWidget::setDefaults(), LayoutSettingsWidget::setDefaults(), setInt(), and Window::~Window().

{
  //check if cached group has same name, if not find group, create it if group does not exist
  if(curGroup == NULL || curGroup->getName().compare(group) != 0)
  {
    curGroup = firstGroup;
    while(curGroup != NULL)
    {
      if(curGroup->getName().compare(group) == 0)
        break;
      curGroup = curGroup->getNext();
    }

    //if we have not found the group create it and add to list
    if(curGroup == NULL)
    {
      //create new group
      curGroup = new SettingGroup(group);

      //add group to list
      if(firstGroup == NULL)
        firstGroup = curGroup;
      else
        lastGroup->setNext(curGroup);
      lastGroup = curGroup;
    }
  }

  //set setting value
  curGroup->setValue(key, value);
}

Member Data Documentation

pointer to currently selected group

Definition at line 84 of file configuration.h.

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

pointer to first group

Definition at line 78 of file configuration.h.

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

pointer to last group

Definition at line 81 of file configuration.h.

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

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: