diff options
Diffstat (limited to 'src/desktop/qml/ItemSelector.qml')
-rw-r--r-- | src/desktop/qml/ItemSelector.qml | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/desktop/qml/ItemSelector.qml b/src/desktop/qml/ItemSelector.qml new file mode 100644 index 0000000..e8fc691 --- /dev/null +++ b/src/desktop/qml/ItemSelector.qml @@ -0,0 +1,88 @@ +/**************************************************************************** + * Copyright (C) 2012 Instituto Nokia de Tecnologia (INdT) * + * * + * This file may be used under the terms of the GNU Lesser * + * General Public License version 2.1 as published by the Free Software * + * Foundation and appearing in the file LICENSE.LGPL included in the * + * packaging of this file. Please review the following information to * + * ensure the GNU Lesser General Public License version 2.1 requirements * + * will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Lesser General Public License for more details. * + ****************************************************************************/ + +import QtQuick 2.0 +import Snowshoe 1.0 + +Item { + id: root + property var selectorModel: model + property var contentArea + property int maxHeight + property int margins: 8 + + PopupWindow { + id : popup + + width: listView.width + bg.border.right + bg.border.left + height: listView.height + bg.border.top + bg.border.bottom + (root.margins * 2) + + Component.onCompleted: { + var globalPos = BrowserWindow.mapToGlobal(selectorModel.elementRect.x - bg.border.left, contentArea.y + selectorModel.elementRect.y + selectorModel.elementRect.height); + globalPos = BrowserWindow.ensureInsideScreen(globalPos.x, globalPos.y, popup.width, popup.height); + popup.x = globalPos.x; + popup.y = globalPos.y; + popup.show(); + } + + onVisibleChanged : { if (!visible) selectorModel.reject(); } + + BorderImage { + id: bg + anchors.fill: parent + source: "qrc:///combobox/base_bg" + border { left: 12; top: 6; right: 12; bottom: 16 } + } + + ListView { + id: listView + property int elementHeight: 24 + + x: bg.x + bg.border.left + y: bg.y + bg.border.top + root.margins + width: selectorModel.elementRect.width + clip: true + orientation: ListView.Vertical + model: selectorModel.items + spacing: 2 + + interactive: Boolean(height == root.maxHeight) + height: Math.min(contentItem.height, root.maxHeight); + + delegate: ItemSelectorDelegate { + onClicked: selectorModel.accept(index) + } + + section.property: "group" + section.delegate: Rectangle { + width: parent.width + height: listView.elementHeight + color: "silver" + Text { + anchors.centerIn: parent + text: section + font.pixelSize: 11 + elide: Text.ElideRight + font.bold: true + } + } + } + + ScrollIndicator { + flickableItem : listView + } + } +} |