summaryrefslogtreecommitdiffstats
path: root/src/desktop/qml/ItemSelector.qml
diff options
context:
space:
mode:
Diffstat (limited to 'src/desktop/qml/ItemSelector.qml')
-rw-r--r--src/desktop/qml/ItemSelector.qml88
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
+ }
+ }
+}