diff options
author | Morten Johan Sorvig <morten.sorvig@nokia.com> | 2012-05-22 10:45:48 +0200 |
---|---|---|
committer | Morten Johan Sørvig <morten.sorvig@nokia.com> | 2012-05-23 10:02:27 +0200 |
commit | 791112e0e2ed51dcb6217042037a909f147dfde6 (patch) | |
tree | 44e8aec3e0d51fff1b1f4b13558df5d8fec91c05 | |
parent | 9ce5ab9387af577c8314d7f0a76af09cdf0da9fc (diff) | |
download | qtquickcontrols-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.qml | 60 |
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) + } } } -*/ } |