diff options
author | Tim Jenssen <tim.jenssen@nokia.com> | 2011-05-16 16:23:58 +0200 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@nokia.com> | 2011-05-16 17:23:02 +0200 |
commit | db0e7385a192492580be4737ceecd4e0df0abb3e (patch) | |
tree | ffe3961ac401652976b699358eaff6a68843a369 | |
parent | c77ba11bf6f50eefe3116c0dca2038030ddaa8bc (diff) |
added qtcreatorpersistentsettings
- as a convenience class to work with persistentsettings
3 files changed, 228 insertions, 2 deletions
diff --git a/installerbuilder/libinstaller/libinstaller.pro b/installerbuilder/libinstaller/libinstaller.pro index 12f81ba59..c92664829 100644 --- a/installerbuilder/libinstaller/libinstaller.pro +++ b/installerbuilder/libinstaller/libinstaller.pro @@ -95,7 +95,8 @@ HEADERS += $$PWD/qinstaller.h \ messageboxhandler.h \ getrepositoriesmetainfojob.h \ licenseoperation.h \ - qtcreator_constants.h + qtcreator_constants.h \ + qtcreatorpersistentsettings.h SOURCES += $$PWD/qinstaller.cpp \ $$PWD/qinstallergui.cpp \ @@ -157,7 +158,9 @@ SOURCES += $$PWD/qinstaller.cpp \ performinstallationform.cpp \ messageboxhandler.cpp \ getrepositoriesmetainfojob.cpp \ - licenseoperation.cpp + licenseoperation.cpp \ + qtcreatorpersistentsettings.cpp + macx { HEADERS += macrelocateqt.h \ diff --git a/installerbuilder/libinstaller/qtcreatorpersistentsettings.cpp b/installerbuilder/libinstaller/qtcreatorpersistentsettings.cpp new file mode 100644 index 000000000..6a980c44b --- /dev/null +++ b/installerbuilder/libinstaller/qtcreatorpersistentsettings.cpp @@ -0,0 +1,177 @@ +#include "qtcreatorpersistentsettings.h" +#include "qtcreator_constants.h" + +#include <QDebug> +#include <QStringList> +#include <QFile> + +QtCreatorPersistentSettings::QtCreatorPersistentSettings() +{ +} + +bool QtCreatorPersistentSettings::init(const QString &fileName) +{ + Q_ASSERT(!fileName.isEmpty()); + if (fileName.isEmpty()) + return false; + m_fileName = fileName; + if (m_reader.load(m_fileName) && !versionCheck()) + return false; + + m_toolChains = readValidToolChains(); + m_abiToDebuggerHash = readAbiToDebuggerHash(); + + return true; +} + +bool QtCreatorPersistentSettings::versionCheck() +{ + QVariantMap data = m_reader.restoreValues(); + + // Check version: + int version = data.value(QLatin1String(TOOLCHAIN_FILE_VERSION_KEY), 0).toInt(); + if (version < 1) + return false; + return true; +} + + +QHash<QString, QVariantMap> QtCreatorPersistentSettings::readValidToolChains() +{ + if (m_fileName.isEmpty()) + return QHash<QString, QVariantMap>(); + + QHash< QString, QVariantMap > toolChainHash; + + QVariantMap data = m_reader.restoreValues(); + + int count = data.value(QLatin1String(TOOLCHAIN_COUNT_KEY), 0).toInt(); + for (int i = 0; i < count; ++i) { + const QString key = QLatin1String(TOOLCHAIN_DATA_KEY) + QString::number(i); + + const QVariantMap toolChainMap = data.value(key).toMap(); + + //gets the path variable, hope ".Path" will stay in QtCreator + QStringList pathContainingKeyList = QStringList(toolChainMap.keys()).filter(QLatin1String( + ".Path")); + foreach(const QString& pathKey, pathContainingKeyList) { + QString path = toolChainMap.value(pathKey).toString(); + if (!path.isEmpty() && QFile::exists(path)) { + toolChainHash.insert(path, toolChainMap); + } + } + } + return toolChainHash; +} + +QHash<QString, QString> QtCreatorPersistentSettings::abiToDebuggerHash() +{ + return m_abiToDebuggerHash; +} + + +QHash<QString, QString> QtCreatorPersistentSettings::readAbiToDebuggerHash() +{ + if (m_fileName.isEmpty()) + return QHash<QString, QString>(); + + QHash<QString, QString> abiToDebuggerHash; + + QVariantMap data = m_reader.restoreValues(); + + // Read default debugger settings (if any) + int count = data.value(QLatin1String(DEFAULT_DEBUGGER_COUNT_KEY)).toInt(); + for (int i = 0; i < count; ++i) { + const QString abiKey = QString::fromLatin1(DEFAULT_DEBUGGER_ABI_KEY) + QString::number(i); + if (!data.contains(abiKey)) + continue; + const QString pathKey = QString::fromLatin1(DEFAULT_DEBUGGER_PATH_KEY) + QString::number(i); + if (!data.contains(pathKey)) + continue; + abiToDebuggerHash.insert(data.value(abiKey).toString(), data.value(pathKey).toString()); + } + return abiToDebuggerHash; +} + + + +bool QtCreatorPersistentSettings::addToolChain(const QtCreatorToolChain &toolChain) +{ + if (toolChain.key.isEmpty()) + return false; + if (toolChain.type.isEmpty()) + return false; + if (toolChain.displayName.isEmpty()) + return false; + if (toolChain.abiString.isEmpty()) + return false; + if (toolChain.compilerPath.isEmpty()) + return false; + + QVariantMap newToolChainVariantMap; + + newToolChainVariantMap.insert(QLatin1String(ID_KEY), + QString(QLatin1String("%1:%2.%3")).arg(toolChain.type, toolChain.compilerPath, toolChain.abiString)); + newToolChainVariantMap.insert(QLatin1String(DISPLAY_NAME_KEY), toolChain.displayName); + newToolChainVariantMap.insert(QString(QLatin1String("ProjectExplorer.%1.Path")).arg(toolChain.key), + toolChain.compilerPath); + newToolChainVariantMap.insert(QString(QLatin1String("ProjectExplorer.%1.TargetAbi")).arg(toolChain.key), + toolChain.abiString); + newToolChainVariantMap.insert(QString(QLatin1String("ProjectExplorer.%1.Debugger")).arg(toolChain.key), + toolChain.debuggerPath); + + m_toolChains.insert(toolChain.compilerPath, newToolChainVariantMap); + return true; +} + +bool QtCreatorPersistentSettings::removeToolChain(const QtCreatorToolChain &toolChain) +{ + m_toolChains.remove(toolChain.compilerPath); + return true; +} + +void QtCreatorPersistentSettings::addDefaultDebugger(const QString &abiString, const QString &debuggerPath) +{ + m_abiToDebuggerHash.insert(abiString, debuggerPath); +} + +void QtCreatorPersistentSettings::removeDefaultDebugger(const QString &abiString) +{ + m_abiToDebuggerHash.remove(abiString); +} + +bool QtCreatorPersistentSettings::save() +{ + if (m_fileName.isEmpty()) + return false; + + m_writer.saveValue(QLatin1String(DEFAULT_DEBUGGER_COUNT_KEY), m_abiToDebuggerHash.count()); + + QHashIterator<QString, QString> it(m_abiToDebuggerHash); + int debuggerCounter = 0; + while(it.hasNext()) { + it.next(); + const QString abiKey = QString::fromLatin1(DEFAULT_DEBUGGER_ABI_KEY) + QString::number( + debuggerCounter); + const QString pathKey = QString::fromLatin1(DEFAULT_DEBUGGER_PATH_KEY) + QString::number( + debuggerCounter); + m_writer.saveValue(abiKey, it.key()); + m_writer.saveValue(pathKey, it.value()); + debuggerCounter++; + } + + m_writer.saveValue(QLatin1String(TOOLCHAIN_COUNT_KEY), m_toolChains.count()); + + int toolChainCounter = 0; + + foreach (const QVariantMap &toolChainMap, m_toolChains.values()) { + if (toolChainMap.isEmpty()) + continue; + m_writer.saveValue(QLatin1String(TOOLCHAIN_DATA_KEY) + QString::number(toolChainCounter++), + toolChainMap); + } + + m_writer.saveValue(QLatin1String(TOOLCHAIN_FILE_VERSION_KEY), 1); + + return m_writer.save(m_fileName, QLatin1String("QtCreatorToolChains")); +} diff --git a/installerbuilder/libinstaller/qtcreatorpersistentsettings.h b/installerbuilder/libinstaller/qtcreatorpersistentsettings.h new file mode 100644 index 000000000..eb43cda39 --- /dev/null +++ b/installerbuilder/libinstaller/qtcreatorpersistentsettings.h @@ -0,0 +1,46 @@ +#ifndef QTCREATORPERSISTENTSETTINGS_H +#define QTCREATORPERSISTENTSETTINGS_H + +#include "persistentsettings.h" + +#include <QHash> +#include <QString> +#include <QVariantMap> + +struct QtCreatorToolChain { + QString key; + QString type; + QString displayName; + QString abiString; + QString compilerPath; + QString debuggerPath; + QString armVersion; + QString force32Bit; +}; + +class QtCreatorPersistentSettings +{ +public: + QtCreatorPersistentSettings(); + bool init(const QString &fileName); + bool addToolChain(const QtCreatorToolChain &toolChain); + bool removeToolChain(const QtCreatorToolChain &toolChain); + void addDefaultDebugger(const QString &abiString, const QString &debuggerPath); + void removeDefaultDebugger(const QString &abiString); + bool save(); + QHash<QString, QString> abiToDebuggerHash(); + +private: + QHash<QString, QVariantMap> readValidToolChains(); + QHash<QString, QString> readAbiToDebuggerHash(); + bool versionCheck(); + + QString m_fileName; + QHash<QString, QVariantMap> m_toolChains; + QHash<QString, QString> m_abiToDebuggerHash; + ProjectExplorer::PersistentSettingsReader m_reader; + ProjectExplorer::PersistentSettingsWriter m_writer; + +}; + +#endif // QTCREATORPERSISTENTSETTINGS_H |