diff options
author | Frerich Raabe <raabe@froglogic.com> | 2016-06-03 16:07:52 +0200 |
---|---|---|
committer | Katja Marttila <katja.marttila@qt.io> | 2016-06-15 09:48:16 +0000 |
commit | 86c218e7fa619864112abba5fa607f847fc114f3 (patch) | |
tree | d181721919542754fd3445150a49754cba5e6a59 /src | |
parent | b4a1a89e306367feaec56ce9902d15234ece5f84 (diff) |
Introduced gui.setTextItems() method
This utility function can be used to populate a Qt control which is
backed by some QAbstractItemModel with a list of strings. E.g. this can
be used to populate a QComboBox or any QAbstractItemView with some
items.
This is very useful since in many cases, the methods for adding elements
to such controls are neither slots, nor marked with Q_INVOKABLE and such
unreachable from the script code.
Change-Id: I2195f41e53765ef3a798477ed08d8f09ab5c4379
Reviewed-by: Katja Marttila <katja.marttila@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/libs/installer/packagemanagergui.cpp | 23 | ||||
-rw-r--r-- | src/libs/installer/packagemanagergui.h | 2 | ||||
-rw-r--r-- | src/libs/installer/scriptengine.cpp | 6 | ||||
-rw-r--r-- | src/libs/installer/scriptengine_p.h | 2 |
4 files changed, 33 insertions, 0 deletions
diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp index 408ef0cbc..ec558a7ab 100644 --- a/src/libs/installer/packagemanagergui.cpp +++ b/src/libs/installer/packagemanagergui.cpp @@ -54,7 +54,9 @@ #include <QtCore/QProcess> #include <QtCore/QTimer> +#include <QAbstractItemView> #include <QCheckBox> +#include <QComboBox> #include <QDesktopServices> #include <QFileDialog> #include <QGridLayout> @@ -68,6 +70,7 @@ #include <QProgressBar> #include <QPushButton> #include <QRadioButton> +#include <QStringListModel> #include <QTextBrowser> #include <QTreeView> #include <QVBoxLayout> @@ -436,6 +439,26 @@ bool PackageManagerGui::isSilent() const } /*! + Updates the model of \a object (which must be a QComboBox or + QAbstractItemView) such that it contains the given \a items. +*/ +void PackageManagerGui::setTextItems(QObject *object, const QStringList &items) +{ + if (QComboBox *comboBox = qobject_cast<QComboBox*>(object)) { + comboBox->setModel(new QStringListModel(items)); + return; + } + + if (QAbstractItemView *view = qobject_cast<QAbstractItemView*>(object)) { + view->setModel(new QStringListModel(items)); + return; + } + + qDebug() << "Cannot set text items on object of type" + << object->metaObject()->className() << "."; +} + +/*! Enables automatic page switching when \a request is \c true. */ void PackageManagerGui::setAutomatedPageSwitchEnabled(bool request) diff --git a/src/libs/installer/packagemanagergui.h b/src/libs/installer/packagemanagergui.h index 8faa75263..2940df052 100644 --- a/src/libs/installer/packagemanagergui.h +++ b/src/libs/installer/packagemanagergui.h @@ -96,6 +96,8 @@ public: void setSilent(bool silent); bool isSilent() const; + void setTextItems(QObject *object, const QStringList &items); + Q_SIGNALS: void interrupted(); void languageChanged(); diff --git a/src/libs/installer/scriptengine.cpp b/src/libs/installer/scriptengine.cpp index adf841bde..79f813572 100644 --- a/src/libs/installer/scriptengine.cpp +++ b/src/libs/installer/scriptengine.cpp @@ -212,6 +212,12 @@ void GuiProxy::setSilent(bool silent) m_gui->setSilent(silent); } +void GuiProxy::setTextItems(QObject *object, const QStringList &items) +{ + if (m_gui) + m_gui->setTextItems(object, items); +} + void GuiProxy::cancelButtonClicked() { if (m_gui) diff --git a/src/libs/installer/scriptengine_p.h b/src/libs/installer/scriptengine_p.h index b15478680..90ff56475 100644 --- a/src/libs/installer/scriptengine_p.h +++ b/src/libs/installer/scriptengine_p.h @@ -160,6 +160,8 @@ public: Q_INVOKABLE void setSilent(bool silent); + Q_INVOKABLE void setTextItems(QObject *object, const QStringList &items); + signals: void interrupted(); void languageChanged(); |