diff options
Diffstat (limited to 'src/libs/installer/settings.cpp')
-rw-r--r-- | src/libs/installer/settings.cpp | 117 |
1 files changed, 41 insertions, 76 deletions
diff --git a/src/libs/installer/settings.cpp b/src/libs/installer/settings.cpp index 79eee652f..9fc31c3cb 100644 --- a/src/libs/installer/settings.cpp +++ b/src/libs/installer/settings.cpp @@ -41,7 +41,6 @@ #include "settings.h" #include "errors.h" -#include "qinstallerglobal.h" #include "repository.h" #include <QtCore/QFileInfo> @@ -52,8 +51,9 @@ using namespace QInstaller; static const QLatin1String scIcon("Icon"); +static const QLatin1String scInstallerApplicationIcon("InstallerApplicationIcon"); +static const QLatin1String scInstallerWindowIcon("InstallerWindowIcon"); static const QLatin1String scLogo("Logo"); -static const QLatin1String scPages("Pages"); static const QLatin1String scPrefix("Prefix"); static const QLatin1String scWatermark("Watermark"); static const QLatin1String scProductUrl("ProductUrl"); @@ -115,40 +115,6 @@ static QSet<Repository> readRepositories(QXmlStreamReader &reader, bool isDefaul return set; } -static QVariantHash readTitles(QXmlStreamReader &reader) -{ - QVariantHash hash; - while (reader.readNextStartElement()) - hash.insert(reader.name().toString(), reader.readElementText(QXmlStreamReader::SkipChildElements)); - return hash; -} - -static QHash<QString, QVariantHash> readPages(QXmlStreamReader &reader) -{ - QHash<QString, QVariantHash> hash; - while (reader.readNextStartElement()) { - if (reader.name() == QLatin1String("Page")) { - QVariantHash pageElements; - const QString pageName = reader.attributes().value(QLatin1String("name")).toString(); - if (pageName.isEmpty()) - reader.raiseError(QLatin1String("Expected non-empty attribute 'name' for element 'Page'.")); - - while (reader.readNextStartElement()) { - const QString name = reader.name().toString(); - if (name == QLatin1String("Title") || name == QLatin1String("SubTitle")) { - pageElements.insert(name, readTitles(reader)); - } else { - pageElements.insert(name, reader.readElementText(QXmlStreamReader::SkipChildElements)); - } - } - hash.insert(pageName, pageElements); - } else { - reader.raiseError(QString::fromLatin1("Unexpected element '%1'.").arg(reader.name().toString())); - } - } - return hash; -} - // -- Settings::Private @@ -215,16 +181,14 @@ Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix) QStringList elementList; elementList << scName << scVersion << scTitle << scPublisher << scProductUrl << scTargetDir << scAdminTargetDir - << scIcon << scLogo << scWatermark << scBackground + << scIcon << scInstallerApplicationIcon << scInstallerWindowIcon + << scLogo << scWatermark << scBackground << scStartMenuDir << scUninstallerName << scUninstallerIniFile << scRemoveTargetDir - << scRunProgram << scRunProgramDescription + << scRunProgram << scRunProgramArguments << scRunProgramDescription << scDependsOnLocalInstallerBinary << scAllowSpaceInPath << scAllowNonAsciiCharacters << scRepositorySettingsPageVisible << scTargetConfigurationFile - << scRemoteRepositories << scPages; - - QStringList blackList; - blackList << scRemoteRepositories << scPages; + << scRemoteRepositories; Settings s; s.d->m_data.insert(scPrefix, prefix); @@ -237,20 +201,15 @@ Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix) if (!reader.attributes().isEmpty()) reader.raiseError(QString::fromLatin1("Unexpected attribute for element '%1'.").arg(name)); - if (blackList.contains(name)) { - if (name == scRemoteRepositories) - s.addDefaultRepositories(readRepositories(reader, true)); + if (name == scIcon) + qWarning() << "Deprecated element 'Icon'."; - if (name == scPages) { - qWarning() << "Deprecated element 'Pages'."; - QHash<QString, QVariantHash> pages = readPages(reader); - const QStringList &keys = pages.keys(); - foreach (const QString &key, keys) - s.d->m_data.insert(key, pages.value(key)); - } + if (s.d->m_data.contains(name)) + reader.raiseError(QString::fromLatin1("Element '%1' has been defined before.").arg(name)); + + if (name == scRemoteRepositories) { + s.addDefaultRepositories(readRepositories(reader, true)); } else { - if (s.d->m_data.contains(name)) - reader.raiseError(QString::fromLatin1("Element '%1' has been defined before.").arg(name)); s.d->m_data.insert(name, reader.readElementText(QXmlStreamReader::SkipChildElements)); } } @@ -268,6 +227,10 @@ Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix) // Add some possible missing values if (!s.d->m_data.contains(scIcon)) s.d->m_data.insert(scIcon, QLatin1String(":/installer")); + if (!s.d->m_data.contains(scInstallerApplicationIcon)) + s.d->m_data.insert(scInstallerApplicationIcon, s.d->m_data.value(scIcon)); + if (!s.d->m_data.contains(scInstallerWindowIcon)) + s.d->m_data.insert(scInstallerWindowIcon, s.d->m_data.value(scIcon).toString() + s.systemIconSuffix()); if (!s.d->m_data.contains(scRemoveTargetDir)) s.d->m_data.insert(scRemoveTargetDir, scTrue); if (!s.d->m_data.contains(scUninstallerName)) @@ -326,15 +289,30 @@ QString Settings::background() const QString Settings::icon() const { - const QString icon = d->makeAbsolutePath(d->m_data.value(scIcon).toString()); + return d->makeAbsolutePath(d->m_data.value(scIcon).toString() + systemIconSuffix()); +} + +QString Settings::installerApplicationIcon() const +{ + return d->makeAbsolutePath(d->m_data.value(scInstallerApplicationIcon).toString() + systemIconSuffix()); +} + +QString Settings::installerWindowIcon() const +{ + return d->makeAbsolutePath(d->m_data.value(scInstallerWindowIcon).toString()); +} + +QString Settings::systemIconSuffix() const +{ #if defined(Q_OS_MAC) - return icon + QLatin1String(".icns"); + return QLatin1String(".icns"); #elif defined(Q_OS_WIN) - return icon + QLatin1String(".ico"); + return QLatin1String(".ico"); #endif - return icon + QLatin1String(".png"); + return QLatin1String(".png"); } + QString Settings::removeTargetDir() const { return d->m_data.value(scRemoveTargetDir).toString(); @@ -355,6 +333,11 @@ QString Settings::runProgram() const return d->m_data.value(scRunProgram).toString(); } +QString Settings::runProgramArguments() const +{ + return d->m_data.value(scRunProgramArguments).toString(); +} + QString Settings::runProgramDescription() const { return d->m_data.value(scRunProgramDescription).toString(); @@ -523,24 +506,6 @@ QVariantList Settings::values(const QString &key, const QVariantList &defaultVal return list.isEmpty() ? defaultValue : list; } -QVariantHash Settings::titlesForPage(const QString &pageName) const -{ - const QVariantHash hash = d->m_data.value(pageName).toHash(); - const QVariant variant = hash.value(QLatin1String("Title"), QVariant()); - if (!variant.canConvert<QVariantHash>()) - return QVariantHash(); - return variant.value<QVariantHash>(); -} - -QVariantHash Settings::subTitlesForPage(const QString &pageName) const -{ - const QVariantHash hash = d->m_data.value(pageName).toHash(); - const QVariant variant = hash.value(QLatin1String("SubTitle"), QVariant()); - if (!variant.canConvert<QVariantHash>()) - return QVariantHash(); - return variant.value<QVariantHash>(); -} - bool Settings::repositorySettingsPageVisible() const { return d->m_data.value(scRepositorySettingsPageVisible, true).toBool(); |