diff options
Diffstat (limited to 'src/libs/installer/settings.cpp')
-rw-r--r-- | src/libs/installer/settings.cpp | 160 |
1 files changed, 83 insertions, 77 deletions
diff --git a/src/libs/installer/settings.cpp b/src/libs/installer/settings.cpp index a6795598a..d8f409f46 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"); @@ -65,6 +67,7 @@ static const QLatin1String scTmpRepositories("TemporaryRepositories"); static const QLatin1String scUninstallerIniFile("UninstallerIniFile"); static const QLatin1String scRemoteRepositories("RemoteRepositories"); static const QLatin1String scDependsOnLocalInstallerBinary("DependsOnLocalInstallerBinary"); +static const QLatin1String scTranslations("Translations"); static const QLatin1String scFtpProxy("FtpProxy"); static const QLatin1String scHttpProxy("HttpProxy"); @@ -95,6 +98,25 @@ static void raiseError(QXmlStreamReader &reader, const QString &error, Settings: } } +static QStringList readTranslations(QXmlStreamReader &reader, Settings::ParseMode parseMode) +{ + QStringList translations; + while (reader.readNextStartElement()) { + if (reader.name() == QLatin1String("Translation")) { + translations.append(reader.readElementText().toLower()); + } else { + raiseError(reader, QString::fromLatin1("Unexpected element '%1'.").arg(reader.name().toString()), + parseMode); + } + + if (!reader.attributes().isEmpty()) { + raiseError(reader, QString::fromLatin1("Unexpected attribute for element '%1'.").arg(reader + .name().toString()), parseMode); + } + } + return translations; +} + static QSet<Repository> readRepositories(QXmlStreamReader &reader, bool isDefault, Settings::ParseMode parseMode) { QSet<Repository> set; @@ -136,40 +158,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 @@ -237,16 +225,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 << scTranslations; Settings s; s.d->m_data.insert(scPrefix, prefix); @@ -260,22 +246,17 @@ 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 == scTranslations) { + s.setTranslations(readTranslations(reader, parseMode)); + } else 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)); } } @@ -293,6 +274,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)) @@ -344,6 +329,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()); @@ -351,15 +341,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(); @@ -380,6 +385,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(); @@ -548,24 +558,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(); @@ -606,3 +598,17 @@ void Settings::setHttpProxy(const QNetworkProxy &proxy) { d->m_data.insert(scHttpProxy, QVariant::fromValue(proxy)); } + +QStringList Settings::translations() const +{ + const QVariant variant = d->m_data.values(scTranslations); + if (variant.canConvert<QStringList>()) + return variant.value<QStringList>(); + return QStringList(); +} + +void Settings::setTranslations(const QStringList &translations) +{ + d->m_data.remove(scTranslations); + d->m_data.insert(scTranslations, translations); +} |