Revamped a lot of the settings stuff. This should fix the Q_ASSERT that would appear
[quassel.git] / src / common / settings.cpp
index b5ca916..5224560 100644 (file)
@@ -1,11 +1,11 @@
 /***************************************************************************
- *   Copyright (C) 2005-07 by The Quassel Team                             *
+ *   Copyright (C) 2005-07 by the Quassel IRC Team                         *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
  *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
+ *   (at your option) version 3.                                           *
  *                                                                         *
  *   This program is distributed in the hope that it will be useful,       *
  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 
+#include <QCoreApplication>
 #include <QSettings>
 #include <QStringList>
 #include <QDebug>
 
 #ifdef Q_WS_QWS
 #include <Qtopia>
-#include <QCoreApplication>
 #endif
 
 #include "settings.h"
 
-Settings::Settings(QString g) : group(g) {
+Settings::Settings(QString g, QString applicationName) : QSettings(QCoreApplication::organizationName(), applicationName), group(g) {
 
+/* we need to call the constructor immediately in order to set the path...
 #ifndef Q_WS_QWS
-  QSettings();
+  QSettings(QCoreApplication::organizationName(), applicationName);
 #else
   // FIXME sandboxDir() is not currently working correctly...
   //if(Qtopia::sandboxDir().isEmpty()) QSettings();
   //else QSettings(Qtopia::sandboxDir() + "/etc/QuasselIRC.conf", QSettings::NativeFormat);
   // ...so we have to use a workaround:
-  /*
   QString appPath = QCoreApplication::applicationFilePath();
   if(appPath.startsWith(Qtopia::packagePath())) {
     QString sandboxPath = appPath.left(Qtopia::packagePath().length() + 32);
     QSettings(sandboxPath + "/etc/QuasselIRC.conf", QSettings::IniFormat);
+    qDebug() << sandboxPath + "/etc/QuasselIRC.conf";
   } else {
-    QSettings();
+    QSettings(QCoreApplication::organizationName(), applicationName);
   }
-  */
-  QSettings();
 #endif
+*/
 }
 
 Settings::~Settings() {
@@ -67,15 +67,21 @@ QStringList Settings::allLocalKeys() {
   return res;
 }
 
-QStringList Settings::localChildKeys() {
-  beginGroup(group);
+QStringList Settings::localChildKeys(const QString &rootkey) {
+  QString g;
+  if(rootkey.isEmpty()) g = group;
+  else g = QString("%1/%2").arg(group, rootkey);
+  beginGroup(g);
   QStringList res = childKeys();
   endGroup();
   return res;
 }
 
-QStringList Settings::localChildGroups() {
-  beginGroup(group);
+QStringList Settings::localChildGroups(const QString &rootkey) {
+  QString g;
+  if(rootkey.isEmpty()) g = group;
+  else g = QString("%1/%2").arg(group, rootkey);
+  beginGroup(g);
   QStringList res = childGroups();
   endGroup();
   return res;