summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKatja Marttila <katja.marttila@qt.io>2020-06-24 08:00:52 +0300
committerKatja Marttila <katja.marttila@qt.io>2020-06-25 12:16:25 +0300
commit519899850f86cb99cdd4c2f84f63ac2a28bfe193 (patch)
tree319e17fa14ec946c85d4895fdba905ec6225ce41 /src
parent7ab5e03c384f0a9364697743bd274486b1b6c2dd (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.cpp17
-rw-r--r--src/libs/installer/packagemanagercore.h6
-rw-r--r--src/libs/installer/packagemanagergui.cpp25
-rw-r--r--src/libs/installer/packagemanagergui.h4
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;
};