diff options
Diffstat (limited to 'src/libs/installer/settings.cpp')
-rw-r--r-- | src/libs/installer/settings.cpp | 124 |
1 files changed, 47 insertions, 77 deletions
diff --git a/src/libs/installer/settings.cpp b/src/libs/installer/settings.cpp index acc664fb4..2635dc10c 100644 --- a/src/libs/installer/settings.cpp +++ b/src/libs/installer/settings.cpp @@ -52,10 +52,12 @@ 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 scBanner("Banner"); static const QLatin1String scProductUrl("ProductUrl"); static const QLatin1String scBackground("Background"); static const QLatin1String scAdminTargetDir("AdminTargetDir"); @@ -134,40 +136,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, Settings::ParseMode parseMode) -{ - 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()) { - raiseError(reader, QLatin1String("Expected non-empty attribute 'name' for element 'Page'."), - parseMode); - } - 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 { - raiseError(reader, QString::fromLatin1("Unexpected element '%1'.").arg(reader.name().toString()), - parseMode); - } - } - return hash; -} // -- Settings::Private @@ -235,16 +203,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 << scBanner << 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); @@ -258,22 +224,15 @@ Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix, parseMode); } - if (blackList.contains(name)) { - if (name == scRemoteRepositories) - s.addDefaultRepositories(readRepositories(reader, true, parseMode)); + if (name == scIcon) + qWarning() << "Deprecated element 'Icon'."; - if (name == scPages) { - qWarning() << "Deprecated element 'Pages'."; - QHash<QString, QVariantHash> pages = readPages(reader, parseMode); - 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, parseMode)); } else { - if (s.d->m_data.contains(name)) { - // instead of raising parse mode based error, raise a real error - reader.raiseError(QString::fromLatin1("Element '%1' has been defined before.").arg(name)); - } s.d->m_data.insert(name, reader.readElementText(QXmlStreamReader::SkipChildElements)); } } @@ -291,6 +250,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)) @@ -342,6 +305,11 @@ QString Settings::watermark() const return d->makeAbsolutePath(d->m_data.value(scWatermark).toString()); } +QString Settings::banner() const +{ + return d->makeAbsolutePath(d->m_data.value(scBanner).toString()); +} + QString Settings::background() const { return d->makeAbsolutePath(d->m_data.value(scBackground).toString()); @@ -349,15 +317,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(); @@ -378,6 +361,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(); @@ -546,24 +534,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(); |