From 1e4587c7a32e45cce6e5364bde06dc84547ff489 Mon Sep 17 00:00:00 2001 From: Felix Geyer Date: Fri, 23 Dec 2011 11:59:09 +0100 Subject: Add a class which provides the path to data files. --- src/CMakeLists.txt | 1 + src/core/DataPath.cpp | 76 ++++++++++++++++++++++++++++++++++++++++++++++ src/core/DataPath.h | 36 ++++++++++++++++++++++ src/core/DatabaseIcons.cpp | 6 ++-- 4 files changed, 116 insertions(+), 3 deletions(-) create mode 100644 src/core/DataPath.cpp create mode 100644 src/core/DataPath.h (limited to 'src') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4f8e41b29..1ff8c8793 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -20,6 +20,7 @@ configure_file( config-keepassx.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-keepa set(keepassx_SOURCES core/Database.cpp core/DatabaseIcons.cpp + core/DataPath.cpp core/Endian.cpp core/Entry.cpp core/Group.cpp diff --git a/src/core/DataPath.cpp b/src/core/DataPath.cpp new file mode 100644 index 000000000..be7a41c5f --- /dev/null +++ b/src/core/DataPath.cpp @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2011 Felix Geyer + * + * 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 . + */ + +#include "DataPath.h" + +#include +#include + +#include "config-keepassx.h" + +DataPath* DataPath::m_instance(0); + +QString DataPath::getPath(const QString& name) +{ + if (!m_instance) { + m_instance = new DataPath(); + } + + return m_instance->m_basePath + name; +} + +DataPath::DataPath() +{ + if (false) { + } +#ifdef QT_DEBUG + else if (testSetDir(QString(KEEPASSX_SOURCE_DIR) + "/share")) { + } +#endif +#ifdef Q_WS_X11 + else if (testSetDir(QCoreApplication::applicationDirPath() + "/../share/keepassx")) { + } +#endif +#ifdef Q_WS_MAC + else if (testSetDir(QCoreApplication::applicationDirPath() + "/../Resources/keepassx") { + } +#endif +#ifdef Q_WS_WIN + else if (testSetDir(QCoreApplication::applicationDirPath() + "/share") { + } +#endif + + if (m_basePath.isEmpty()) { + qWarning("DataPath::DataPath: can't find data dir"); + } + else { + m_basePath = QDir::cleanPath(m_basePath) + "/"; + } + + qDebug("%s", m_basePath.toAscii().constData()); +} + +bool DataPath::testSetDir(const QString& dir) +{ + if (QFile::exists(dir + "/icons/database/C00_Password.png")) { + m_basePath = dir; + return true; + } + else { + return false; + } +} diff --git a/src/core/DataPath.h b/src/core/DataPath.h new file mode 100644 index 000000000..7d1056065 --- /dev/null +++ b/src/core/DataPath.h @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2011 Felix Geyer + * + * 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 . + */ + +#ifndef KEEPASSX_DATAPATH_H +#define KEEPASSX_DATAPATH_H + +#include + +class DataPath +{ +public: + static QString getPath(const QString& name); + +private: + DataPath(); + bool testSetDir(const QString& dir); + + static DataPath* m_instance; + QString m_basePath; +}; + +#endif // KEEPASSX_DATAPATH_H diff --git a/src/core/DatabaseIcons.cpp b/src/core/DatabaseIcons.cpp index 3bdb37de6..6e5c942f0 100644 --- a/src/core/DatabaseIcons.cpp +++ b/src/core/DatabaseIcons.cpp @@ -17,7 +17,7 @@ #include "DatabaseIcons.h" -#include "config-keepassx.h" +#include "core/DataPath.h" DatabaseIcons* DatabaseIcons::m_instance(0); @@ -121,8 +121,8 @@ QIcon DatabaseIcons::getIconInternal(int index) return m_iconCache.value(index); } else { - // TODO search multiple paths - QIcon icon(QString(KEEPASSX_SOURCE_DIR).append("/share/icons/database/").append(m_indexToName.at(index))); + QString iconPath = QString("icons/database/").append(m_indexToName.at(index)); + QIcon icon(DataPath::getPath(iconPath)); m_iconCache.insert(index, icon); return icon; -- cgit v1.2.3