diff options
author | Katja Marttila <katja.marttila@qt.io> | 2020-06-24 08:00:52 +0300 |
---|---|---|
committer | Katja Marttila <katja.marttila@qt.io> | 2020-06-25 12:16:25 +0300 |
commit | 519899850f86cb99cdd4c2f84f63ac2a28bfe193 (patch) | |
tree | 319e17fa14ec946c85d4895fdba905ec6225ce41 /src | |
parent | 7ab5e03c384f0a9364697743bd274486b1b6c2dd (diff) |
Add possibility to add custom widget from script to certain position
If several custom widgets are added to same page, the order of the
widgets is arbitrary. Added a new member to addWizardPageItem which can
define the position of the widget in the page, relative to another
custom widgets. Non-custom widgets are always placed on top as before.
Task-number: QTIFW-1847
Change-Id: Iadafef3a08e60a8b05b959cb06caea2a2042b419
Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/libs/installer/packagemanagercore.cpp | 17 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore.h | 6 | ||||
-rw-r--r-- | src/libs/installer/packagemanagergui.cpp | 25 | ||||
-rw-r--r-- | src/libs/installer/packagemanagergui.h | 4 |
4 files changed, 39 insertions, 13 deletions
diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp index 92e634601..3a10c3ea3 100644 --- a/src/libs/installer/packagemanagercore.cpp +++ b/src/libs/installer/packagemanagercore.cpp @@ -340,9 +340,11 @@ using namespace QInstaller; */ /*! - \fn PackageManagerCore::wizardWidgetInsertionRequested(QWidget *widget, QInstaller::PackageManagerCore::WizardPage page) + \fn PackageManagerCore::wizardWidgetInsertionRequested(QWidget *widget, + QInstaller::PackageManagerCore::WizardPage page, int position) - Emitted when a \a widget is inserted into \a page by addWizardPageItem(). + Emitted when a \a widget is inserted into \a page by addWizardPageItem(). If several widgets + are added to the same \a page, widget with lower \a position number will be inserted on top. \sa {installer::wizardWidgetInsertionRequested}{installer.wizardWidgetInsertionRequested} */ @@ -1678,10 +1680,13 @@ void PackageManagerCore::deselectComponent(const QString &id) } /*! - \fn PackageManagerCore::addWizardPageItem(QInstaller::Component * component, const QString & name, int page) + \fn PackageManagerCore::addWizardPageItem(QInstaller::Component * component, const QString & name, + int page, int position) Adds the widget with the object name \a name registered by \a component as a GUI element - into the installer's GUI wizard. The widget is added on \a page. + into the installer's GUI wizard. The widget is added on \a page ordered by + \a position number. If several widgets are added to the same page, the widget + with lower \a position number will be inserted on top. See \l{Controller Scripting} for the possible values of \a page. @@ -1691,11 +1696,11 @@ void PackageManagerCore::deselectComponent(const QString &id) \sa {installer::addWizardPageItem}{installer.addWizardPageItem} \sa removeWizardPageItem(), wizardWidgetInsertionRequested() */ -bool PackageManagerCore::addWizardPageItem(Component *component, const QString &name, int page) +bool PackageManagerCore::addWizardPageItem(Component *component, const QString &name, int page, int position) { if (!isCommandLineInstance()) { if (QWidget* const widget = component->userInterface(name)) { - emit wizardWidgetInsertionRequested(widget, static_cast<WizardPage>(page)); + emit wizardWidgetInsertionRequested(widget, static_cast<WizardPage>(page), position); return true; } } else { diff --git a/src/libs/installer/packagemanagercore.h b/src/libs/installer/packagemanagercore.h index f67caeb64..87a14b93d 100644 --- a/src/libs/installer/packagemanagercore.h +++ b/src/libs/installer/packagemanagercore.h @@ -282,7 +282,8 @@ public: Q_INVOKABLE bool addWizardPage(QInstaller::Component *component, const QString &name, int page); Q_INVOKABLE bool removeWizardPage(QInstaller::Component *component, const QString &name); - Q_INVOKABLE bool addWizardPageItem(QInstaller::Component *component, const QString &name, int page); + Q_INVOKABLE bool addWizardPageItem(QInstaller::Component *component, const QString &name, + int page, int position = 100); 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, @@ -354,7 +355,8 @@ Q_SIGNALS: void wizardPageInsertionRequested(QWidget *widget, QInstaller::PackageManagerCore::WizardPage page); void wizardPageRemovalRequested(QWidget *widget); - void wizardWidgetInsertionRequested(QWidget *widget, QInstaller::PackageManagerCore::WizardPage page); + void wizardWidgetInsertionRequested(QWidget *widget, QInstaller::PackageManagerCore::WizardPage page, + int position); void wizardWidgetRemovalRequested(QWidget *widget); void wizardPageVisibilityChangeRequested(bool visible, int page); void setValidatorForCustomPageRequested(QInstaller::Component *component, const QString &name, diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp index f1496ce9f..229c68d4c 100644 --- a/src/libs/installer/packagemanagergui.cpp +++ b/src/libs/installer/packagemanagergui.cpp @@ -792,14 +792,31 @@ void PackageManagerGui::wizardPageRemovalRequested(QWidget *widget) } /*! - Requests the insertion of \a widget on \a page. + Requests the insertion of \a widget on \a page. Widget with lower + \a position number will be inserted on top. */ void PackageManagerGui::wizardWidgetInsertionRequested(QWidget *widget, - QInstaller::PackageManagerCore::WizardPage page) + QInstaller::PackageManagerCore::WizardPage page, int position) { Q_ASSERT(widget); - if (QWizardPage *const p = QWizard::page(page)) { - p->layout()->addWidget(widget); + + if (PackageManagerPage *p = qobject_cast<PackageManagerPage *>(QWizard::page(page))) { + p->m_customWidgets.insert(position, widget); + if (p->m_customWidgets.count() > 1 ) { + //Reorder the custom widgets based on their position + QMultiMap<int, QWidget*>::Iterator it = p->m_customWidgets.begin(); + while (it != p->m_customWidgets.end()) { + p->layout()->removeWidget(it.value()); + ++it; + } + it = p->m_customWidgets.begin(); + while (it != p->m_customWidgets.end()) { + p->layout()->addWidget(it.value()); + ++it; + } + } else { + p->layout()->addWidget(widget); + } packageManagerCore()->controlScriptEngine()->addToGlobalObject(p); packageManagerCore()->componentScriptEngine()->addToGlobalObject(p); } diff --git a/src/libs/installer/packagemanagergui.h b/src/libs/installer/packagemanagergui.h index 099f2e4f3..166bd5225 100644 --- a/src/libs/installer/packagemanagergui.h +++ b/src/libs/installer/packagemanagergui.h @@ -113,7 +113,8 @@ public Q_SLOTS: protected Q_SLOTS: void wizardPageInsertionRequested(QWidget *widget, QInstaller::PackageManagerCore::WizardPage page); void wizardPageRemovalRequested(QWidget *widget); - void wizardWidgetInsertionRequested(QWidget *widget, QInstaller::PackageManagerCore::WizardPage page); + void wizardWidgetInsertionRequested(QWidget *widget, QInstaller::PackageManagerCore::WizardPage page, + int position); void wizardWidgetRemovalRequested(QWidget *widget); void wizardPageVisibilityChangeRequested(bool visible, int page); void setValidatorForCustomPageRequested(QInstaller::Component *component, const QString &name, @@ -208,6 +209,7 @@ private: PackageManagerCore *m_core; QInstaller::Component *validatorComponent; + QMultiMap<int, QWidget*> m_customWidgets; friend class PackageManagerGui; }; |