From 84a7443c75ea3c22d06290ec1fa2e6cf193b20f1 Mon Sep 17 00:00:00 2001 From: Andreas Holzammer Date: Wed, 25 Apr 2012 13:21:12 +0200 Subject: Add possibility to verify custom pages. Introduce setValidatorForCustomPage, to set a validator for a custom page. Change-Id: I24739d9544c20e0b2b1beab1ae90f8b98cc3d542 Reviewed-by: Karsten Heimrich Reviewed-by: Tim Jenssen --- src/libs/installer/component.cpp | 12 ++++++++++++ src/libs/installer/component.h | 5 +++++ src/libs/installer/packagemanagercore.cpp | 6 ++++++ src/libs/installer/packagemanagercore.h | 4 ++++ src/libs/installer/packagemanagergui.cpp | 32 +++++++++++++++++++++++++++++++ src/libs/installer/packagemanagergui.h | 8 ++++++++ 6 files changed, 67 insertions(+) (limited to 'src/libs/installer') 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 ¶meter10 = 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 ids = pageIds(); + foreach (const int i, ids) { + PackageManagerPage *const p = qobject_cast (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(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(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; }; -- cgit v1.2.3