summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCidorvan Leite <cidorvan.leite@openbossa.org>2012-05-22 11:14:49 -0300
committerAnselmo L. S. Melo <anselmo.melo@openbossa.org>2012-05-24 20:19:12 +0200
commitdde17d96fe30256e9332745a428d5f4f22fc5d72 (patch)
tree18b753f6a0e1063c4a41b205c9d16a8eba2be0c0
parent10284f6d0f8137c7f27da99f1596ad1dc5390024 (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.qml70
-rw-r--r--src/imports/models/uiquickcompletionmodel.cpp32
-rw-r--r--src/imports/models/uiquickcompletionmodel_p.h4
-rw-r--r--src/models/uiproxyqmlmodel.cpp6
-rw-r--r--src/models/uiproxyqmlmodel.h2
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);