diff options
author | Katja Marttila <katja.marttila@qt.io> | 2020-05-05 13:31:32 +0300 |
---|---|---|
committer | Katja Marttila <katja.marttila@qt.io> | 2020-05-26 15:08:51 +0300 |
commit | 17a4630886d4a91362f508f27022ae48e076d9c3 (patch) | |
tree | 6975e737ae17555de11605e515cfe79337aea760 /src/libs/installer/scriptengine.cpp | |
parent | 0fcfdebf88372d527008ff0a080bf0f9eb493c9a (diff) |
CLI: Add new option --file-query to auto answer QFileDialog
QFileDialog.getExistingDirectory and QFileDialog.getOpenFileName
can be called from scipt. If command line interface is used, user must
type the correct directory or file name from command line during install.
With --file-query option user can give the values when running the
installer or maintenancetool with syntax --file-query
filedialogId=C:/temp,filedialogId2=C:/temp/file.txt.
Task-number: QTIFW-1631
Change-Id: I5e58be6b509cf00de832646ef31ec4eda90773be
Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
Diffstat (limited to 'src/libs/installer/scriptengine.cpp')
-rw-r--r-- | src/libs/installer/scriptengine.cpp | 69 |
1 files changed, 67 insertions, 2 deletions
diff --git a/src/libs/installer/scriptengine.cpp b/src/libs/installer/scriptengine.cpp index 994fa1406..accd54957 100644 --- a/src/libs/installer/scriptengine.cpp +++ b/src/libs/installer/scriptengine.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -265,6 +265,71 @@ void GuiProxy::setModified(bool value) m_gui->setModified(value); } +QFileDialogProxy::QFileDialogProxy(PackageManagerCore *core): m_core(core) +{ +} + +QString QFileDialogProxy::getExistingDirectory(const QString &caption, + const QString &dir, const QString &identifier) +{ + if (m_core->isCommandLineInstance()) { + return getExistingFileOrDirectory(caption, identifier, true); + } else { + return QFileDialog::getExistingDirectory(0, caption, dir); + } +} + +QString QFileDialogProxy::getOpenFileName(const QString &caption, const QString &dir, + const QString &filter, const QString &identifier) +{ + if (m_core->isCommandLineInstance()) { + return getExistingFileOrDirectory(caption, identifier, false); + } else { + return QFileDialog::getOpenFileName(0, caption, dir, filter); + } +} + +QString QFileDialogProxy::getExistingFileOrDirectory(const QString &caption, + const QString &identifier, bool isDirectory) +{ + QHash<QString, QString> autoAnswers = m_core->fileDialogAutomaticAnswers(); + QString selectedDirectoryOrFile; + QString errorString; + if (autoAnswers.contains(identifier)) { + selectedDirectoryOrFile = autoAnswers.value(identifier); + QFileInfo fileInfo(selectedDirectoryOrFile); + if (isDirectory ? fileInfo.isDir() : fileInfo.isFile()) { + qCDebug(QInstaller::lcInstallerInstallLog).nospace() << "Automatic answer for "<< identifier + << ": " << selectedDirectoryOrFile; + } else { + if (isDirectory) + errorString = QString::fromLatin1("Automatic answer for %1: Directory '%2' not found.") + .arg(identifier, selectedDirectoryOrFile); + else + errorString = QString::fromLatin1("Automatic answer for %1: File '%2' not found.") + .arg(identifier, selectedDirectoryOrFile); + selectedDirectoryOrFile = QString(); + } + } else { + qDebug().nospace().noquote() << identifier << ": " << caption << ": "; + QTextStream stream(stdin); + stream.readLineInto(&selectedDirectoryOrFile); + QFileInfo fileInfo(selectedDirectoryOrFile); + if (isDirectory ? !fileInfo.isDir() : !fileInfo.isFile()) { + if (isDirectory) + errorString = QString::fromLatin1("Directory '%1' not found.") + .arg(selectedDirectoryOrFile); + else + errorString = QString::fromLatin1("File '%1' not found.") + .arg(selectedDirectoryOrFile); + selectedDirectoryOrFile = QString(); + } + } + if (!errorString.isEmpty()) + qCWarning(QInstaller::lcInstallerInstallLog).nospace() << errorString; + return selectedDirectoryOrFile; +} + /*! Constructs a script engine with \a core as parent. @@ -275,7 +340,7 @@ ScriptEngine::ScriptEngine(PackageManagerCore *core) : { QJSValue global = m_engine.globalObject(); global.setProperty(QLatin1String("console"), m_engine.newQObject(new ConsoleProxy)); - global.setProperty(QLatin1String("QFileDialog"), m_engine.newQObject(new QFileDialogProxy)); + global.setProperty(QLatin1String("QFileDialog"), m_engine.newQObject(new QFileDialogProxy(core))); const QJSValue proxy = m_engine.newQObject(new InstallerProxy(this, core)); global.setProperty(QLatin1String("InstallerProxy"), proxy); global.setProperty(QLatin1String("print"), m_engine.newQObject(new ConsoleProxy) |