summaryrefslogtreecommitdiffstats
path: root/src/libs/installer
diff options
context:
space:
mode:
authorAndreas Holzammer <andreas.holzammer.qnx@kdab.com>2012-04-25 13:21:12 +0200
committerTim Jenssen <tim.jenssen@nokia.com>2012-04-25 16:17:08 +0200
commit84a7443c75ea3c22d06290ec1fa2e6cf193b20f1 (patch)
tree0515956273f7822aa5b4970b7684824738d7683b /src/libs/installer
parentf691fd7ae2b1c9494174128289f1ade9e5ebdb03 (diff)
Add possibility to verify custom pages.
Introduce setValidatorForCustomPage, to set a validator for a custom page. Change-Id: I24739d9544c20e0b2b1beab1ae90f8b98cc3d542 Reviewed-by: Karsten Heimrich <karsten.heimrich@nokia.com> Reviewed-by: Tim Jenssen <tim.jenssen@nokia.com>
Diffstat (limited to 'src/libs/installer')
-rw-r--r--src/libs/installer/component.cpp12
-rw-r--r--src/libs/installer/component.h5
-rw-r--r--src/libs/installer/packagemanagercore.cpp6
-rw-r--r--src/libs/installer/packagemanagercore.h4
-rw-r--r--src/libs/installer/packagemanagergui.cpp32
-rw-r--r--src/libs/installer/packagemanagergui.h8
6 files changed, 67 insertions, 0 deletions
diff --git a/src/libs/installer/component.cpp b/src/libs/installer/component.cpp
index 8baa4635f..6443819d9 100644
--- a/src/libs/installer/component.cpp
+++ b/src/libs/installer/component.cpp
@@ -917,6 +917,18 @@ bool Component::forcedInstallation() const
return value(scForcedInstallation, scFalse).toLower() == scTrue;
}
+void Component::setValidatorCallbackName(const QString &name)
+{
+ validatorCallbackName = name;
+}
+
+bool Component::validatePage()
+{
+ if (!validatorCallbackName.isEmpty())
+ return callScriptMethod(validatorCallbackName).toBool();
+ return true;
+}
+
/*!
Marks the component for installation. Emits the selectedChanged() signal if the check state changes.
*/
diff --git a/src/libs/installer/component.h b/src/libs/installer/component.h
index 44f9e795b..6ac3056ec 100644
--- a/src/libs/installer/component.h
+++ b/src/libs/installer/component.h
@@ -193,6 +193,10 @@ public:
bool isSelected() const;
bool forcedInstallation() const;
+ void setValidatorCallbackName(const QString &name);
+
+ bool validatePage();
+
public Q_SLOTS:
void setSelected(bool selected);
void setAutoCreateOperations(bool autoCreateOperations);
@@ -220,6 +224,7 @@ private:
const QString &parameter10 = QString());
private:
+ QString validatorCallbackName;
ComponentPrivate *d;
};
diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp
index 03432c31f..985fccbc7 100644
--- a/src/libs/installer/packagemanagercore.cpp
+++ b/src/libs/installer/packagemanagercore.cpp
@@ -736,6 +736,12 @@ bool PackageManagerCore::setDefaultPageVisible(int page, bool visible)
return true;
}
+void PackageManagerCore::setValidatorForCustomPage(Component *component, const QString &name,
+ const QString &callbackName)
+{
+ emit setValidatorForCustomPageRequested(component, name, callbackName);
+}
+
/*!
Adds the widget with objectName() \a name registered by \a component as an GUI element
into the installer's GUI wizard. The widget is added on \a page.
diff --git a/src/libs/installer/packagemanagercore.h b/src/libs/installer/packagemanagercore.h
index 2e7f8d28c..cae72c214 100644
--- a/src/libs/installer/packagemanagercore.h
+++ b/src/libs/installer/packagemanagercore.h
@@ -221,6 +221,8 @@ public:
Q_INVOKABLE bool addWizardPageItem(QInstaller::Component *component, const QString &name, int page);
Q_INVOKABLE bool removeWizardPageItem(QInstaller::Component *component, const QString &name);
Q_INVOKABLE bool setDefaultPageVisible(int page, bool visible);
+ Q_INVOKABLE void setValidatorForCustomPage(QInstaller::Component *component, const QString &name,
+ const QString &callbackName);
void rollBackInstallation();
@@ -276,6 +278,8 @@ Q_SIGNALS:
void wizardWidgetInsertionRequested(QWidget *widget, QInstaller::PackageManagerCore::WizardPage page);
void wizardWidgetRemovalRequested(QWidget *widget);
void wizardPageVisibilityChangeRequested(bool visible, int page);
+ void setValidatorForCustomPageRequested(QInstaller::Component *component, const QString &name,
+ const QString &callbackName);
void setAutomatedPageSwitchEnabled(bool request);
void coreNetworkSettingsChanged();
diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp
index ad71596bd..2840d3ee2 100644
--- a/src/libs/installer/packagemanagergui.cpp
+++ b/src/libs/installer/packagemanagergui.cpp
@@ -255,6 +255,9 @@ PackageManagerGui::PackageManagerGui(PackageManagerCore *core, QWidget *parent)
connect(m_core, SIGNAL(wizardPageVisibilityChangeRequested(bool, int)), this,
SLOT(wizardPageVisibilityChangeRequested(bool, int)), Qt::QueuedConnection);
+ connect(m_core, SIGNAL(setValidatorForCustomPageRequested(QInstaller::Component*, QString, QString)),
+ this, SLOT(setValidatorForCustomPageRequested(QInstaller::Component*, QString, QString)));
+
connect(m_core, SIGNAL(setAutomatedPageSwitchEnabled(bool)), this,
SLOT(setAutomatedPageSwitchEnabled(bool)));
@@ -295,6 +298,22 @@ void PackageManagerGui::clickButton(int wb, int delay)
}
}
+void PackageManagerGui::setValidatorForCustomPageRequested(Component *component, const QString &name,
+ const QString &callbackName)
+{
+ component->setValidatorCallbackName(callbackName);
+
+ const QString componentName = QLatin1String("Dynamic") + name;
+ const QList<int> ids = pageIds();
+ foreach (const int i, ids) {
+ PackageManagerPage *const p = qobject_cast<PackageManagerPage*> (page(i));
+ if (p && p->objectName() == componentName) {
+ p->setValidatePageComponent(component);
+ return;
+ }
+ }
+}
+
/*!
Loads a script to perform the installation non-interactively.
@throws QInstaller::Error if the script is not readable/cannot be parsed
@@ -629,6 +648,7 @@ PackageManagerPage::PackageManagerPage(PackageManagerCore *core)
: m_fresh(true)
, m_complete(true)
, m_core(core)
+ , validatorComponent(0)
{
}
@@ -706,6 +726,18 @@ void PackageManagerPage::setComplete(bool complete)
emit completeChanged();
}
+void PackageManagerPage::setValidatePageComponent(Component *component)
+{
+ validatorComponent = component;
+}
+
+bool PackageManagerPage::validatePage()
+{
+ if (validatorComponent)
+ return validatorComponent->validatePage();
+ return true;
+}
+
void PackageManagerPage::insertWidget(QWidget *widget, const QString &siblingName, int offset)
{
QWidget *sibling = findChild<QWidget *>(siblingName);
diff --git a/src/libs/installer/packagemanagergui.h b/src/libs/installer/packagemanagergui.h
index 68a54eff2..7599c1115 100644
--- a/src/libs/installer/packagemanagergui.h
+++ b/src/libs/installer/packagemanagergui.h
@@ -110,6 +110,8 @@ protected Q_SLOTS:
void wizardPageVisibilityChangeRequested(bool visible, int page);
void slotCurrentPageChanged(int id);
void delayedControlScriptExecution(int id);
+ void setValidatorForCustomPageRequested(QInstaller::Component *component, const QString &name,
+ const QString &callbackName);
void setAutomatedPageSwitchEnabled(bool request);
@@ -149,6 +151,10 @@ public:
virtual bool isInterruptible() const { return false; }
PackageManagerGui* gui() const { return qobject_cast<PackageManagerGui*>(wizard()); }
+ void setValidatePageComponent(QInstaller::Component *component);
+
+ bool validatePage();
+
protected:
PackageManagerCore *packageManagerCore() const;
QVariantHash elementsForPage(const QString &pageName) const;
@@ -176,6 +182,8 @@ private:
bool m_fresh;
bool m_complete;
+ QInstaller::Component *validatorComponent;
+
PackageManagerCore *m_core;
};