summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMorten Johan Sorvig <morten.sorvig@nokia.com>2012-05-22 10:45:48 +0200
committerMorten Johan Sørvig <morten.sorvig@nokia.com>2012-05-23 10:02:27 +0200
commit791112e0e2ed51dcb6217042037a909f147dfde6 (patch)
tree44e8aec3e0d51fff1b1f4b13558df5d8fec91c05
parent9ce5ab9387af577c8314d7f0a76af09cdf0da9fc (diff)
downloadqtquickcontrols-791112e0e2ed51dcb6217042037a909f147dfde6.tar.gz
Copy ContextMenu.qml changes from the master branch.
Change-Id: I115db8505eff673b7dae65fbe9f1689661df76ab Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
-rw-r--r--components/ContextMenu.qml60
1 files changed, 44 insertions, 16 deletions
diff --git a/components/ContextMenu.qml b/components/ContextMenu.qml
index a1c8572d..af19f5cd 100644
--- a/components/ContextMenu.qml
+++ b/components/ContextMenu.qml
@@ -39,31 +39,25 @@
****************************************************************************/
import QtQuick 2.0
-import "custom" as Components
import QtDesktop 0.2
-Item {
+Menu {
id: root
- property ListModel model
property string selectedText: itemTextAt(selectedIndex)
property string hoveredText: itemTextAt(hoveredIndex)
- property list<Item> menuItems
+ property string textRole
-
- property int selectedIndex
- property int hoveredIndex
// 'centerSelectedText' means that the menu will be positioned
// so that the selected text' top left corner will be at x, y.
property bool centerSelectedText: true
visible: false
-/*
- property int x
- property int y
- property bool visible
onMenuClosed: visible = false
onModelChanged: if (Component.status === Component.Ready && model != undefined) rebuildMenu()
- Component.onCompleted: if (model != undefined) rebuildMenu()
+
+ Component.onCompleted: if (model !== undefined) rebuildMenu()
+
+ onRebuildMenu: rebuildMenu()
onHoveredIndexChanged: {
if (hoveredIndex < menuItems.length)
@@ -87,12 +81,46 @@ Item {
function rebuildMenu()
{
clearMenuItems();
+
for (var i=0; i<menuItems.length; ++i)
addMenuItem(menuItems[i].text)
- if (model != undefined) {
- for (var j=0; j<model.count; ++j)
- addMenuItem(model.get(j).text)
+
+ var nativeModel = root.hasNativeModel()
+
+ if (model !== undefined) {
+ var modelCount = nativeModel ? root.modelCount() : model.count;
+ for (var j = 0 ; j < modelCount; ++j) {
+ var textValue
+ if (nativeModel) {
+ textValue = root.modelTextAt(j);
+ } else {
+ if (textRole !== "")
+ textValue = model.get(j)[textRole]
+ else if (model.count > 0 && root.model.get && root.model.get(0)) {
+ // ListModel with one role
+ var listElement = root.model.get(0)
+ var oneRole = true
+ var roleName = ""
+ var roleCount = 0
+ for (var role in listElement) {
+ if (!roleName || role === "text")
+ roleName = role
+ ++roleCount
+ }
+ if (roleCount > 1 && roleName !== "text") {
+ oneRole = false
+ console.log("Warning: No textRole set for ComboBox.")
+ break
+ }
+
+ if (oneRole) {
+ root.textRole = roleName
+ textValue = root.model.get(j)[textRole]
+ }
+ }
+ }
+ addMenuItem(textValue)
+ }
}
}
-*/
}