diff options
author | Cidorvan Leite <cidorvan.leite@openbossa.org> | 2012-05-22 11:14:49 -0300 |
---|---|---|
committer | Anselmo L. S. Melo <anselmo.melo@openbossa.org> | 2012-05-24 20:19:12 +0200 |
commit | dde17d96fe30256e9332745a428d5f4f22fc5d72 (patch) | |
tree | 18b753f6a0e1063c4a41b205c9d16a8eba2be0c0 | |
parent | 10284f6d0f8137c7f27da99f1596ad1dc5390024 (diff) |
Added role name property to QuickCompletionModel
This property is needed to select which role from
QML ListModel we use in QuickCompletionModel.
Change-Id: I3ca346cfc7d21373109e8750a0fc60ffd1c5503c
Reviewed-by: Luis Gabriel Lima <luis.gabriel@openbossa.org>
Reviewed-by: Anselmo L. S. Melo <anselmo.melo@openbossa.org>
-rw-r--r-- | examples/models/quickcompletionmodel/main.qml | 70 | ||||
-rw-r--r-- | src/imports/models/uiquickcompletionmodel.cpp | 32 | ||||
-rw-r--r-- | src/imports/models/uiquickcompletionmodel_p.h | 4 | ||||
-rw-r--r-- | src/models/uiproxyqmlmodel.cpp | 6 | ||||
-rw-r--r-- | src/models/uiproxyqmlmodel.h | 2 |
5 files changed, 79 insertions, 35 deletions
diff --git a/examples/models/quickcompletionmodel/main.qml b/examples/models/quickcompletionmodel/main.qml index abf20e9..b90e3ea 100644 --- a/examples/models/quickcompletionmodel/main.qml +++ b/examples/models/quickcompletionmodel/main.qml @@ -45,7 +45,7 @@ import Playground.UiHelpers.Models 1.0 Rectangle { id: root - width: 200 + width: 420 height: 400 CompletionModel { @@ -61,22 +61,31 @@ Rectangle { CompletionModel { id: completionModel2 sourceModel: ListModel { - ListElement { name: "NEW ORLEANS" } - ListElement { name: "Hawaii" } - ListElement { name: "Andorra" } - ListElement { name: "Afghanistan" } - ListElement { name: "Recife" } + ListElement { name: "NEW ORLEANS"; zip: "00000" } + ListElement { name: "Hawaii"; zip: "12345" } + ListElement { name: "Andorra"; zip: "11258" } + ListElement { name: "Afghanistan"; zip: "99988" } + ListElement { name: "Recife"; zip: "25479" } } - completionPrefix: input.text + completionRoleName: "name" + completionPrefix: input2.text caseSensitivity: Qt.CaseInsensitive } Rectangle { + id: center + width: 20 + height: parent.height + anchors.horizontalCenter: parent.horizontalCenter + color: "black" + } + + Rectangle { id: rec anchors { top: parent.top left: parent.left - right: button1.left + right: center.left } color: "lightblue" height: 30 @@ -89,40 +98,27 @@ Rectangle { } Rectangle { - id: button1 - - width: 30 - height: 30 - anchors.right: button2.left - color: "blue" - - MouseArea { - anchors.fill: parent - onClicked: list.model = completionModel + id: rec2 + anchors { + top: parent.top + left: center.right + right: parent.right } - } - - Rectangle { - id: button2 - - width: 30 + color: "lightblue" height: 30 - anchors.right: parent.right - color: "black" - MouseArea { + TextInput { + id: input2 anchors.fill: parent - onClicked: list.model = completionModel2 } } ListView { - id: list anchors { top: rec.bottom bottom: parent.bottom left: parent.left - right: parent.right + right: center.right topMargin: 10 } model: completionModel @@ -130,4 +126,18 @@ Rectangle { text: modelData } } + + ListView { + anchors { + top: rec2.bottom + bottom: parent.bottom + left: center.right + right: parent.right + topMargin: 10 + } + model: completionModel2 + delegate: Text { + text: name + } + } } diff --git a/src/imports/models/uiquickcompletionmodel.cpp b/src/imports/models/uiquickcompletionmodel.cpp index 8f757ee..069da9c 100644 --- a/src/imports/models/uiquickcompletionmodel.cpp +++ b/src/imports/models/uiquickcompletionmodel.cpp @@ -49,6 +49,7 @@ public: : proxy(new UiProxyQmlModel(parent)) {} QVariant source; + QString roleName; UiProxyQmlModel *proxy; }; @@ -78,10 +79,39 @@ void UiQuickCompletionModel::setSource(const QVariant& source) return; setSourceModel(0); // Disconnect all signals from old model - if (d->proxy->setSource(source) == UiProxyQmlModel::ArrayList) + UiProxyQmlModel::ListType type = d->proxy->updateSource(source); + if (type == UiProxyQmlModel::ArrayList) setCompletionRole(Qt::DisplayRole); + else if (type == UiProxyQmlModel::QuickList) { + int role = d->proxy->roleNames().key(d->roleName.toAscii(), -1); + if (role != -1) + setCompletionRole(role); + } setSourceModel(d->proxy); d->source = source; emit sourceModelChanged(); } + + +QString UiQuickCompletionModel::completionRoleName() const +{ + Q_D(const UiQuickCompletionModel); + + return d->roleName; +} + +void UiQuickCompletionModel::setCompletionRoleName(const QString &roleName) +{ + Q_D(UiQuickCompletionModel); + + if (roleName == d->roleName) + return; + + int role = d->proxy->roleNames().key(roleName.toAscii(), -1); + if (role != -1) + setCompletionRole(role); + + d->roleName = roleName; + emit completionRoleNameChanged(); +} diff --git a/src/imports/models/uiquickcompletionmodel_p.h b/src/imports/models/uiquickcompletionmodel_p.h index f83b2a6..d667b2e 100644 --- a/src/imports/models/uiquickcompletionmodel_p.h +++ b/src/imports/models/uiquickcompletionmodel_p.h @@ -52,6 +52,7 @@ class UiQuickCompletionModel : public UiCompletionModel Q_OBJECT Q_PROPERTY(QVariant sourceModel READ source WRITE setSource NOTIFY sourceModelChanged) + Q_PROPERTY(QString completionRoleName READ completionRoleName WRITE setCompletionRoleName NOTIFY completionRoleNameChanged) public: UiQuickCompletionModel(QObject *parent = 0); @@ -59,9 +60,12 @@ public: QVariant source() const; void setSource(const QVariant &source); + QString completionRoleName() const; + void setCompletionRoleName(const QString &roleName); Q_SIGNALS: void sourceModelChanged(); + void completionRoleNameChanged(); private: Q_DISABLE_COPY(UiQuickCompletionModel) diff --git a/src/models/uiproxyqmlmodel.cpp b/src/models/uiproxyqmlmodel.cpp index 991c028..c8b8e9e 100644 --- a/src/models/uiproxyqmlmodel.cpp +++ b/src/models/uiproxyqmlmodel.cpp @@ -51,7 +51,7 @@ UiProxyQmlModel::UiProxyQmlModel(QObject *parent) { } -UiProxyQmlModel::ListType UiProxyQmlModel::setSource(const QVariant &sourceModel) +UiProxyQmlModel::ListType UiProxyQmlModel::updateSource(const QVariant &sourceModel) { clear(); @@ -86,14 +86,14 @@ void UiProxyQmlModel::createFromQuickList(QQuickListModel *list) QHash<int, QByteArray> roleNames; foreach (int role, list->roles()) - roleNames[role] = list->toString(role).toAscii(); + roleNames[Qt::UserRole + role] = list->toString(role).toAscii(); setRoleNames(roleNames); for (int i = 0; i < list->count(); i++) { UiStandardItem *item = new UiStandardItem(); foreach (int role, list->roles()) - item->setData(list->data(i, role), role); + item->setData(list->data(i, role), Qt::UserRole + role); item->setFlags(Qt::ItemIsSelectable); appendRow(item); } diff --git a/src/models/uiproxyqmlmodel.h b/src/models/uiproxyqmlmodel.h index 42f5159..e8a8ad4 100644 --- a/src/models/uiproxyqmlmodel.h +++ b/src/models/uiproxyqmlmodel.h @@ -65,7 +65,7 @@ public: UiProxyQmlModel(QObject *parent = 0); - ListType setSource(const QVariant &sourceModel); + ListType updateSource(const QVariant &sourceModel); protected: void createFromList(const QVariantList &list); |