summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--installerbuilder/libinstaller/libinstaller.pro7
-rw-r--r--installerbuilder/libinstaller/qtcreatorpersistentsettings.cpp177
-rw-r--r--installerbuilder/libinstaller/qtcreatorpersistentsettings.h46
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