Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/keepassxreboot/keepassxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFelix Geyer <debfx@fobos.de>2011-12-25 22:17:40 +0400
committerFelix Geyer <debfx@fobos.de>2011-12-25 22:17:40 +0400
commit35066bca8b0c4a0cb391581c1991070fb2b846c0 (patch)
tree27278643ba3ff3519679f8b36d98d0f349dc013d /src
parent21acb02e3e43d170df3db1f0bd4f9938cd81a865 (diff)
Implement global config class.
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/core/Config.cpp79
-rw-r--r--src/core/Config.h42
-rw-r--r--src/main.cpp1
4 files changed, 123 insertions, 0 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 1ff8c8793..c888f9538 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -18,6 +18,7 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} )
configure_file( config-keepassx.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-keepassx.h )
set(keepassx_SOURCES
+ core/Config.cpp
core/Database.cpp
core/DatabaseIcons.cpp
core/DataPath.cpp
diff --git a/src/core/Config.cpp b/src/core/Config.cpp
new file mode 100644
index 000000000..b0def78aa
--- /dev/null
+++ b/src/core/Config.cpp
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2011 Felix Geyer <debfx@fobos.de>
+ *
+ * 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 or (at your option)
+ * version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "Config.h"
+
+#include <QtCore/QDir>
+#include <QtCore/QSettings>
+#include <QtGui/QDesktopServices>
+
+QVariant Config::get(const QString& key, const QVariant& defaultValue)
+{
+ return m_settings->value(key, defaultValue);
+}
+
+void Config::set(const QString& key, const QVariant& value)
+{
+ m_settings->setValue(key, value);
+}
+
+Config::Config()
+{
+ QString userPath;
+ QString homePath = QDir::homePath();
+
+#if defined(Q_WS_X11)
+ QByteArray env = qgetenv("XDG_CONFIG_HOME");
+ if (env.isEmpty()) {
+ userPath = homePath;
+ userPath += "/.config";
+ }
+ else if (env[0] == '/') {
+ userPath = QFile::decodeName(env);
+ }
+ else {
+ userPath = homePath;
+ userPath += '/';
+ userPath += QFile::decodeName(env);
+ }
+
+ userPath += "/keepassx/";
+#elif defined(Q_WS_MAC)
+ // TODO where to store the config on mac?
+ userPath = homePath;
+ userPath += "/.keepassx/";
+#elif defined(Q_WS_WIN)
+ // we can't use QDesktopServices on X11 as it uses XDG_DATA_HOME instead of XDG_CONFIG_HOME
+ userPath = QDir::fromNativeSeparators(QDesktopServices::storageLocation(QDesktopServices::DataLocation));
+ userPath += "/keepassx/";
+#endif
+
+ userPath += "keepassx2.ini";
+
+ m_settings = new QSettings(userPath, QSettings::IniFormat);
+}
+
+Config* config()
+{
+ static Config* instance(0);
+
+ if (!instance) {
+ instance = new Config();
+ }
+
+ return instance;
+}
diff --git a/src/core/Config.h b/src/core/Config.h
new file mode 100644
index 000000000..f8c57a7e7
--- /dev/null
+++ b/src/core/Config.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2011 Felix Geyer <debfx@fobos.de>
+ *
+ * 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 or (at your option)
+ * version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSX_CONFIG_H
+#define KEEPASSX_CONFIG_H
+
+
+#include <QtCore/QVariant>
+
+class QSettings;
+
+class Config
+{
+public:
+ QVariant get(const QString& key, const QVariant& defaultValue = QVariant());
+ void set(const QString& key, const QVariant& value);
+
+private:
+ Config();
+
+ QSettings* m_settings;
+
+ friend Config* config();
+};
+
+Config* config();
+
+#endif // KEEPASSX_CONFIG_H
diff --git a/src/main.cpp b/src/main.cpp
index 07d7f8e8a..4e336ca7f 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -31,6 +31,7 @@
int main(int argc, char **argv)
{
QApplication app(argc, argv);
+ // don't set applicationName or organizationName as that changes QDesktopServices::storageLocation
Crypto::init();