diff options
author | kh1 <karsten.heimrich@digia.com> | 2014-03-31 13:14:01 +0200 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@digia.com> | 2014-04-24 20:07:58 +0200 |
commit | c9d5b84a9487b6a2a944d224ceab3ddf0c5814d8 (patch) | |
tree | 60813f7d8962001fc6b90d00f2e86306f4d7c97d | |
parent | b3112e61685eff103de9b33b38dff1e4b7b802ec (diff) |
Provide an API to get all wizard pages from java script.
Task-number: QTIFW-477
Change-Id: Ic83df19d20ce310e3e295de929020182e1878273
Reviewed-by: Niels Weber <niels.weber@digia.com>
-rw-r--r-- | examples/tutorial/packages/com.vendor.product/meta/installscript.qs | 21 | ||||
-rw-r--r-- | examples/tutorial/packages/com.vendor.product/meta/package.xml | 3 | ||||
-rw-r--r-- | examples/tutorial/packages/com.vendor.product/meta/page.ui | 28 | ||||
-rw-r--r-- | src/libs/installer/packagemanagergui.cpp | 39 | ||||
-rw-r--r-- | src/libs/installer/packagemanagergui.h | 7 | ||||
-rw-r--r-- | src/sdk/tabcontroller.cpp | 2 |
6 files changed, 86 insertions, 14 deletions
diff --git a/examples/tutorial/packages/com.vendor.product/meta/installscript.qs b/examples/tutorial/packages/com.vendor.product/meta/installscript.qs index c97f991c3..2c4dae310 100644 --- a/examples/tutorial/packages/com.vendor.product/meta/installscript.qs +++ b/examples/tutorial/packages/com.vendor.product/meta/installscript.qs @@ -42,6 +42,9 @@ function Component() { // constructor + component.loaded.connect(this, Component.prototype.loaded); + if (!installer.addWizardPage(component, "Page", QInstaller.TargetDirectory)) + print("Could not add the dynamic page."); } Component.prototype.isDefault = function() @@ -59,3 +62,21 @@ Component.prototype.createOperations = function() print(e); } } + +Component.prototype.loaded = function () +{ + var page = gui.pageByObjectName("DynamicPage"); + if (page != null) { + print("Connecting the dynamic page entered signal."); + page.entered.connect(Component.prototype.dynamicPageEntered); + } +} + +Component.prototype.dynamicPageEntered = function () +{ + var pageWidget = gui.pageWidgetByObjectName("DynamicPage"); + if (pageWidget != null) { + print("Setting the widgets label text.") + pageWidget.m_pageLabel.text = "This is a dynamically created page."; + } +} diff --git a/examples/tutorial/packages/com.vendor.product/meta/package.xml b/examples/tutorial/packages/com.vendor.product/meta/package.xml index dd7f4a9d3..71d48c248 100644 --- a/examples/tutorial/packages/com.vendor.product/meta/package.xml +++ b/examples/tutorial/packages/com.vendor.product/meta/package.xml @@ -13,4 +13,7 @@ </Translations> <Default>script</Default> <Script>installscript.qs</Script> + <UserInterfaces> + <UserInterface>page.ui</UserInterface> + </UserInterfaces> </Package> diff --git a/examples/tutorial/packages/com.vendor.product/meta/page.ui b/examples/tutorial/packages/com.vendor.product/meta/page.ui new file mode 100644 index 000000000..68564efa1 --- /dev/null +++ b/examples/tutorial/packages/com.vendor.product/meta/page.ui @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Page</class> + <widget class="QWidget" name="Page"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>300</height> + </rect> + </property> + <property name="windowTitle"> + <string>Dynamic page example</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLabel" name="m_pageLabel"> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp index b4fc797d4..14388776a 100644 --- a/src/libs/installer/packagemanagergui.cpp +++ b/src/libs/installer/packagemanagergui.cpp @@ -116,6 +116,8 @@ TRANSLATOR QInstaller::FinishedPage class DynamicInstallerPage : public PackageManagerPage { + Q_OBJECT + public: explicit DynamicInstallerPage(QWidget *widget, PackageManagerCore *core = 0) : PackageManagerPage(core) @@ -124,13 +126,17 @@ public: setObjectName(QLatin1String("Dynamic") + widget->objectName()); setPixmap(QWizard::WatermarkPixmap, QPixmap()); - setLayout(new QVBoxLayout); setColoredSubTitle(QLatin1String(" ")); setColoredTitle(widget->windowTitle()); m_widget->setProperty("complete", true); m_widget->setProperty("final", false); + m_widget->setProperty("commit", false); widget->installEventFilter(this); + + setLayout(new QVBoxLayout); layout()->addWidget(widget); + layout()->setContentsMargins(0, 0, 0, 0); + layout()->addItem(new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding)); } QWidget *widget() const @@ -156,6 +162,8 @@ protected: emit completeChanged(); if (m_widget->property("final").toBool() != isFinalPage()) setFinalPage(m_widget->property("final").toBool()); + if (m_widget->property("commit").toBool() != isCommitPage()) + setFinalPage(m_widget->property("commit").toBool()); break; default: @@ -505,25 +513,20 @@ void PackageManagerGui::wizardPageVisibilityChangeRequested(bool visible, int p) } } -PackageManagerPage *PackageManagerGui::page(int pageId) const +QWidget *PackageManagerGui::pageById(int id) const { - return qobject_cast<PackageManagerPage*> (QWizard::page(pageId)); + return page(id); } -QWidget *PackageManagerGui::pageWidgetByObjectName(const QString &name) const +QWidget *PackageManagerGui::pageByObjectName(const QString &name) const { const QList<int> ids = pageIds(); foreach (const int i, ids) { PackageManagerPage *const p = qobject_cast<PackageManagerPage*> (page(i)); - if (p && p->objectName() == name) { - // For dynamic pages, return the contained widget (as read from the UI file), not the - // wrapper page - if (DynamicInstallerPage *dp = dynamic_cast<DynamicInstallerPage*>(p)) - return dp->widget(); + if (p && p->objectName() == name) return p; - } } - qDebug() << "No page found for object name" << name; + qWarning() << "No page found for object name" << name; return 0; } @@ -532,6 +535,20 @@ QWidget *PackageManagerGui::currentPageWidget() const return currentPage(); } +QWidget *PackageManagerGui::pageWidgetByObjectName(const QString &name) const +{ + QWidget *const widget = pageByObjectName(name); + if (PackageManagerPage *const p = qobject_cast<PackageManagerPage*> (widget)) { + // For dynamic pages, return the contained widget (as read from the UI file), not the + // wrapper page + if (DynamicInstallerPage *dp = qobject_cast<DynamicInstallerPage *>(p)) + return dp->widget(); + return p; + } + qWarning() << "No page found for object name" << name; + return 0; +} + void PackageManagerGui::cancelButtonClicked() { const int id = currentId(); diff --git a/src/libs/installer/packagemanagergui.h b/src/libs/installer/packagemanagergui.h index 948fb346a..906f3530d 100644 --- a/src/libs/installer/packagemanagergui.h +++ b/src/libs/installer/packagemanagergui.h @@ -83,9 +83,12 @@ public: void loadControlScript(const QString& scriptPath); void callControlScriptMethod(const QString& methodName); - Q_INVOKABLE PackageManagerPage* page(int pageId) const; - Q_INVOKABLE QWidget* pageWidgetByObjectName(const QString& name) const; + Q_INVOKABLE QWidget *pageById(int id) const; + Q_INVOKABLE QWidget *pageByObjectName(const QString &name) const; + Q_INVOKABLE QWidget* currentPageWidget() const; + Q_INVOKABLE QWidget* pageWidgetByObjectName(const QString &name) const; + Q_INVOKABLE QString defaultButtonText(int wizardButton) const; Q_INVOKABLE void clickButton(int wizardButton, int delayInMs = 0); Q_INVOKABLE bool isButtonEnabled(int wizardButton); diff --git a/src/sdk/tabcontroller.cpp b/src/sdk/tabcontroller.cpp index d0e322251..0bc832e9f 100644 --- a/src/sdk/tabcontroller.cpp +++ b/src/sdk/tabcontroller.cpp @@ -197,7 +197,7 @@ void TabController::onSettingsButtonClicked() void TabController::onCurrentIdChanged(int newId) { if (d->m_gui) { - if (PackageManagerPage *page = d->m_gui->page(newId)) + if (PackageManagerPage *page = qobject_cast<PackageManagerPage *>(d->m_gui->page(newId))) d->m_gui->showSettingsButton(page->settingsButtonRequested()); } } |