diff options
Diffstat (limited to 'components/ContextMenu.qml')
-rw-r--r-- | components/ContextMenu.qml | 47 |
1 files changed, 42 insertions, 5 deletions
diff --git a/components/ContextMenu.qml b/components/ContextMenu.qml index a439d4a8f..08d779588 100644 --- a/components/ContextMenu.qml +++ b/components/ContextMenu.qml @@ -2,12 +2,12 @@ import QtQuick 1.1 Menu { id: root - property ListModel model property string selectedText: itemTextAt(selectedIndex) property string hoveredText: itemTextAt(hoveredIndex) property int x property int y property bool visible + property string textRole // 'centerSelectedText' means that the menu will be positioned // so that the selected text' top left corner will be at x, y. @@ -16,7 +16,10 @@ Menu { visible: false 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) @@ -40,11 +43,45 @@ Menu { 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.modelCount() !== -1 + + 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 i in listElement) { + roleName = i + ++roleCount + if (roleCount > 1) { + oneRole = false + root.enabled = false + console.log("When multiple roles used, provide textRole for the ComboBox.") + break + } + } + if (oneRole) { + root.textRole = roleName + textValue = root.model.get(j)[textRole] + } + } + } + addMenuItem(textValue) + } } } } |