diff options
Diffstat (limited to 'components/ContextMenu.qml')
-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) + } } } -*/ } |