summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/installerfw.qdoc4
-rw-r--r--src/libs/installer/packagemanagergui.cpp14
-rw-r--r--src/libs/installer/packagemanagergui.h7
-rw-r--r--src/libs/installer/settings.cpp9
-rw-r--r--src/libs/installer/settings.h2
-rw-r--r--src/sdk/installerbase.cpp3
-rw-r--r--src/sdk/installerbasecommons.cpp6
-rw-r--r--src/sdk/installerbasecommons.h4
-rw-r--r--src/sdk/tabcontroller.cpp3
-rw-r--r--tests/auto/installer/settings/data/full_config.xml2
-rw-r--r--tests/auto/installer/settings/tst_settings.cpp1
11 files changed, 25 insertions, 30 deletions
diff --git a/doc/installerfw.qdoc b/doc/installerfw.qdoc
index bf8475c11..24c0a8afd 100644
--- a/doc/installerfw.qdoc
+++ b/doc/installerfw.qdoc
@@ -290,7 +290,9 @@
\li UrlQueryString
\li This string needs to be in the form "key=value" and will be appended to archive download
requests. This can be used to transmit information to the webserver hosting the repository.
-
+ \row
+ \li ControlScript
+ \li Filename for a custom installer control script. See \l{Controller Scripting}.
\endtable
*/
diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp
index 35a509f22..4653c7ff6 100644
--- a/src/libs/installer/packagemanagergui.cpp
+++ b/src/libs/installer/packagemanagergui.cpp
@@ -504,7 +504,7 @@ void PackageManagerGui::wizardPageInsertionRequested(QWidget *widget,
void PackageManagerGui::wizardPageRemovalRequested(QWidget *widget)
{
foreach (int pageId, pageIds()) {
- DynamicInstallerPage *const dynamicPage = dynamic_cast<DynamicInstallerPage*>(page(pageId));
+ DynamicInstallerPage *const dynamicPage = qobject_cast<DynamicInstallerPage*>(page(pageId));
if (dynamicPage == 0)
continue;
if (dynamicPage->widget() != widget)
@@ -1007,8 +1007,6 @@ bool IntroductionPage::validatePage()
setErrorMessage(core->error());
}
- callControlScript(QLatin1String("UpdaterSelectedCallback"));
-
if (m_updatesFetched) {
if (core->components(QInstaller::PackageManagerCore::ComponentType::Root).count() <= 0)
setErrorMessage(QString::fromLatin1("<b>%1</b>").arg(tr("No updates available.")));
@@ -1038,8 +1036,6 @@ bool IntroductionPage::validatePage()
}
}
- callControlScript(QLatin1String("PackageManagerSelectedCallback"));
-
if (m_allPackagesFetched || localPackagesTreeFetched)
setComplete(true);
}
@@ -1121,14 +1117,6 @@ void IntroductionPage::setErrorMessage(const QString &error)
#endif
}
-void IntroductionPage::callControlScript(const QString &callback)
-{
- // Initialize the gui. Needs to be done after check repositories as only then the ui can handle
- // hide of pages depending on the components.
- gui()->init();
- gui()->callControlScriptMethod(callback);
-}
-
bool IntroductionPage::validRepositoriesAvailable() const
{
const PackageManagerCore *const core = packageManagerCore();
diff --git a/src/libs/installer/packagemanagergui.h b/src/libs/installer/packagemanagergui.h
index 6c3c56fc9..2830b1b3d 100644
--- a/src/libs/installer/packagemanagergui.h
+++ b/src/libs/installer/packagemanagergui.h
@@ -72,8 +72,7 @@ class INSTALLER_EXPORT PackageManagerGui : public QWizard
public:
explicit PackageManagerGui(PackageManagerCore *core, QWidget *parent = 0);
- virtual ~PackageManagerGui();
- virtual void init() = 0;
+ virtual ~PackageManagerGui() = 0;
void loadControlScript(const QString& scriptPath);
void callControlScriptMethod(const QString& methodName);
@@ -219,7 +218,7 @@ public:
void showMaintenanceTools();
void setMaintenanceToolsEnabled(bool enable);
- public Q_SLOTS:
+public Q_SLOTS:
void onCoreNetworkSettingsChanged();
void setMessage(const QString &msg);
void onProgressChanged(int progress);
@@ -238,8 +237,6 @@ private:
void leaving();
void showWidgets(bool show);
- void callControlScript(const QString &callback);
-
bool validRepositoriesAvailable() const;
private:
diff --git a/src/libs/installer/settings.cpp b/src/libs/installer/settings.cpp
index c00cfd794..a225d4262 100644
--- a/src/libs/installer/settings.cpp
+++ b/src/libs/installer/settings.cpp
@@ -66,6 +66,8 @@ static const QLatin1String scFtpProxy("FtpProxy");
static const QLatin1String scHttpProxy("HttpProxy");
static const QLatin1String scProxyType("ProxyType");
+const char scControlScript[] = "ControlScript";
+
template <typename T>
static QSet<T> variantListToSet(const QVariantList &list)
{
@@ -253,7 +255,7 @@ Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix,
<< scAllowSpaceInPath << scAllowNonAsciiCharacters << scWizardStyle << scTitleColor
<< scWizardDefaultWidth << scWizardDefaultHeight
<< scRepositorySettingsPageVisible << scTargetConfigurationFile
- << scRemoteRepositories << scTranslations;
+ << scRemoteRepositories << scTranslations << QLatin1String(scControlScript);
Settings s;
s.d->m_data.insert(scPrefix, prefix);
@@ -683,3 +685,8 @@ void Settings::setTranslations(const QStringList &translations)
{
d->m_data.insert(scTranslations, translations);
}
+
+QString Settings::controlScript() const
+{
+ return d->m_data.value(QLatin1String(scControlScript)).toString();
+}
diff --git a/src/libs/installer/settings.h b/src/libs/installer/settings.h
index 33f6c0ae1..a9cf08d85 100644
--- a/src/libs/installer/settings.h
+++ b/src/libs/installer/settings.h
@@ -151,6 +151,8 @@ public:
QStringList translations() const;
void setTranslations(const QStringList &translations);
+ QString controlScript() const;
+
private:
class Private;
QSharedDataPointer<Private> d;
diff --git a/src/sdk/installerbase.cpp b/src/sdk/installerbase.cpp
index 6253f3e25..7eb816a1a 100644
--- a/src/sdk/installerbase.cpp
+++ b/src/sdk/installerbase.cpp
@@ -141,6 +141,9 @@ int InstallerBase::run()
controlScript = parser.value(QLatin1String(CommandLineOptions::Script));
if (!QFileInfo(controlScript).exists())
throw QInstaller::Error(QLatin1String("Script file does not exist."));
+ } else if (!m_core->settings().controlScript().isEmpty()) {
+ controlScript = QLatin1String(":/metadata/installer-config/")
+ + m_core->settings().controlScript();
}
if (parser.isSet(QLatin1String(CommandLineOptions::Proxy))) {
diff --git a/src/sdk/installerbasecommons.cpp b/src/sdk/installerbasecommons.cpp
index efdd58b75..8b7953eda 100644
--- a/src/sdk/installerbasecommons.cpp
+++ b/src/sdk/installerbasecommons.cpp
@@ -64,10 +64,7 @@ InstallerGui::InstallerGui(PackageManagerCore *core)
setPage(PackageManagerCore::ReadyForInstallation, new ReadyForInstallationPage(core));
setPage(PackageManagerCore::PerformInstallation, new PerformInstallationPage(core));
setPage(PackageManagerCore::InstallationFinished, new FinishedPage(core));
-}
-void InstallerGui::init()
-{
foreach (const int id, pageIds()) {
packageManagerCore()->controlScriptEngine()->addQObjectChildren(page(id));
packageManagerCore()->componentScriptEngine()->addQObjectChildren(page(id));
@@ -104,10 +101,7 @@ MaintenanceGui::MaintenanceGui(PackageManagerCore *core)
if (core->isUninstaller())
wizardPageVisibilityChangeRequested(false, PackageManagerCore::InstallationFinished + 1);
-}
-void MaintenanceGui::init()
-{
foreach (const int id, pageIds()) {
packageManagerCore()->controlScriptEngine()->addQObjectChildren(page(id));
packageManagerCore()->componentScriptEngine()->addQObjectChildren(page(id));
diff --git a/src/sdk/installerbasecommons.h b/src/sdk/installerbasecommons.h
index b3ba68c35..f6bde1fd0 100644
--- a/src/sdk/installerbasecommons.h
+++ b/src/sdk/installerbasecommons.h
@@ -46,7 +46,7 @@ class InstallerGui : public QInstaller::PackageManagerGui
public:
explicit InstallerGui(QInstaller::PackageManagerCore *core);
- virtual void init();
+ ~InstallerGui() {}
};
@@ -58,7 +58,7 @@ class MaintenanceGui : public QInstaller::PackageManagerGui
public:
explicit MaintenanceGui(QInstaller::PackageManagerCore *core);
- virtual void init();
+ ~MaintenanceGui() {}
private Q_SLOTS:
void updateRestartPage();
diff --git a/src/sdk/tabcontroller.cpp b/src/sdk/tabcontroller.cpp
index 035622dfb..4cdb23d50 100644
--- a/src/sdk/tabcontroller.cpp
+++ b/src/sdk/tabcontroller.cpp
@@ -121,9 +121,8 @@ int TabController::init()
d->m_init = true;
// this should called as early as possible, to handle error message boxes for example
if (!d->m_controlScript.isEmpty()) {
- qDebug() << "Non-interactive installation using script:" << d->m_controlScript;
-
d->m_gui->loadControlScript(d->m_controlScript);
+ qDebug() << "Using control script:" << d->m_controlScript;
}
connect(d->m_gui, SIGNAL(currentIdChanged(int)), this, SLOT(onCurrentIdChanged(int)));
diff --git a/tests/auto/installer/settings/data/full_config.xml b/tests/auto/installer/settings/data/full_config.xml
index 52e18c904..e2cae369e 100644
--- a/tests/auto/installer/settings/data/full_config.xml
+++ b/tests/auto/installer/settings/data/full_config.xml
@@ -53,4 +53,6 @@ File should contain all elements we allow in a config.xml
<Translation>de_de</Translation>
<Translation>qt_de</Translation>
</Translations>
+
+ <ControlScript>controlscript.js</ControlScript>
</Installer>
diff --git a/tests/auto/installer/settings/tst_settings.cpp b/tests/auto/installer/settings/tst_settings.cpp
index 24095c966..626acfab1 100644
--- a/tests/auto/installer/settings/tst_settings.cpp
+++ b/tests/auto/installer/settings/tst_settings.cpp
@@ -84,6 +84,7 @@ void tst_Settings::loadTutorialConfig()
QCOMPARE(settings.httpProxy(), QNetworkProxy());
QCOMPARE(settings.translations(), QStringList());
+ QCOMPARE(settings.controlScript(), QString());
}
void tst_Settings::loadFullConfig()