From 5409e2f56265639454a0f97270de7e584d949120 Mon Sep 17 00:00:00 2001 From: kh1 Date: Thu, 20 Jun 2013 13:28:33 +0200 Subject: Allow to add an icon to the link, update example to show all args. Task-number: QTIFW-299 Change-Id: I5ba2560cc57fdf3980466df98cd64420aeefac20 Reviewed-by: Niels Weber Reviewed-by: Tim Jenssen --- src/libs/installer/createshortcutoperation.cpp | 43 +++++++++++++++++--------- 1 file changed, 28 insertions(+), 15 deletions(-) (limited to 'src/libs/installer/createshortcutoperation.cpp') diff --git a/src/libs/installer/createshortcutoperation.cpp b/src/libs/installer/createshortcutoperation.cpp index 5e29337bf..9f9084e05 100644 --- a/src/libs/installer/createshortcutoperation.cpp +++ b/src/libs/installer/createshortcutoperation.cpp @@ -79,12 +79,17 @@ struct DeCoInitializer }; #endif -struct StartsWithWorkingDirectory +struct StartsWith { - bool operator()(const QString &s) + StartsWith(const QString &searchTerm) + : m_searchTerm(searchTerm) {} + + bool operator()(const QString &searchString) { - return s.startsWith(QLatin1String("workingDirectory=")); + return searchString.startsWith(m_searchTerm); } + + QString m_searchTerm; }; static QString parentDirectory(const QString ¤t) @@ -92,20 +97,21 @@ static QString parentDirectory(const QString ¤t) return current.mid(0, current.lastIndexOf(QLatin1Char('/'))); } -static QString takeWorkingDirArgument(QStringList &args) +static QString takeArgument(const QString argument, QStringList *arguments) { - // if the arguments contain an option in the form "workingDirectory=...", find it and consume it - QStringList::iterator wdiropt = std::find_if (args.begin(), args.end(), StartsWithWorkingDirectory()); - if (wdiropt == args.end()) + // if the arguments contain an option in the form "argument=...", find it and consume it + QStringList::iterator it = std::find_if(arguments->begin(), arguments->end(), StartsWith(argument)); + if (it == arguments->end()) return QString(); - const QString workingDir = wdiropt->mid(QString::fromLatin1("workingDirectory=").size()); - args.erase(wdiropt); - return workingDir; + const QString value = it->mid(argument.size()); + arguments->erase(it); + return value; } static bool createLink(const QString &fileName, const QString &linkName, QString workingDir, - QString arguments = QString()) + const QString &arguments = QString(), const QString &iconPath = QString(), + const QString &iconId = QString()) { #ifdef Q_OS_WIN bool success = QFile::link(fileName, linkName); @@ -129,6 +135,8 @@ static bool createLink(const QString &fileName, const QString &linkName, QString psl->SetWorkingDirectory((wchar_t *)workingDir.utf16()); if (!arguments.isNull()) psl->SetArguments((wchar_t*)arguments.utf16()); + if (!iconPath.isNull()) + psl->SetIconLocation((wchar_t*)(iconPath.utf16()), iconId.toInt()); IPersistFile *ppf = NULL; if (SUCCEEDED(psl->QueryInterface(IID_IPersistFile, (void **)&ppf))) { @@ -153,7 +161,8 @@ static bool createLink(const QString &fileName, const QString &linkName, QString Q_UNUSED(workingDir) Q_UNUSED(fileName) Q_UNUSED(linkName) - + Q_UNUSED(iconPath) + Q_UNUSED(iconId) return true; #endif } @@ -183,12 +192,16 @@ void CreateShortcutOperation::backup() bool CreateShortcutOperation::performOperation() { QStringList args = arguments(); - const QString workingDir = takeWorkingDirArgument(args); + + const QString iconId = takeArgument(QString::fromLatin1("iconId="), &args); + const QString iconPath = takeArgument(QString::fromLatin1("iconPath="), &args); + const QString workingDir = takeArgument(QString::fromLatin1("workingDirectory="), &args); if (args.count() != 2 && args.count() != 3) { setError(InvalidArguments); setErrorString(tr("Invalid arguments in %0: %1 arguments given, %2 expected%3.") - .arg(name()).arg(arguments().count()).arg(tr("2 or 3"), tr(" (optional: 'workingDirectory=...')"))); + .arg(name()).arg(arguments().count()).arg(tr("2 or 3"), + tr(" (optional: 'workingDirectory=...', 'iconPath=...', 'iconId=...')"))); return false; } @@ -223,7 +236,7 @@ bool CreateShortcutOperation::performOperation() return false; } - const bool linked = createLink(linkTarget, linkLocation, workingDir, targetArguments); + const bool linked = createLink(linkTarget, linkLocation, workingDir, targetArguments, iconPath, iconId); if (!linked) { setError(UserDefinedError); setErrorString(tr("Could not create link %1: %2").arg(QDir::toNativeSeparators(linkLocation), -- cgit v1.2.3