[Qt] [WK2] Support customizing popup menus with QML
[WebKit-https.git] / Tools / MiniBrowser / qt / qml / ItemSelector.qml
1 /*
2  * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies)
3  *
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
16  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
19  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27
28 import QtQuick 2.0
29
30 MouseArea {
31     // To avoid conflicting with ListView.model when inside ListView context.
32     property QtObject selectorModel: model
33     anchors.fill: parent
34     onClicked: selectorModel.reject()
35
36     Rectangle {
37         clip: true
38         x: selectorModel.elementRect.x
39         y: selectorModel.elementRect.y + selectorModel.elementRect.height
40         height: Math.min(400, parent.height - y)
41         width: 200
42         radius: 5
43         color: "gainsboro"
44         opacity: 0.8
45
46         ListView {
47             anchors.fill: parent
48             anchors.margins: 10
49             spacing: 5
50             model: selectorModel.items
51
52             delegate: Rectangle {
53                 color: model.selected ? "gold" : "silver"
54                 height: 50
55                 width: parent.width
56
57                 Text {
58                     anchors.centerIn: parent
59                     text: model.text
60                     color: model.enabled ? "black" : "gainsboro"
61                 }
62
63                 MouseArea {
64                     anchors.fill: parent
65                     enabled: model.enabled
66                     onClicked: selectorModel.accept(model.index)
67                 }
68             }
69
70             section.property: "group"
71             section.delegate: Rectangle {
72                 height: 30
73                 width: parent.width
74                 color: "silver"
75                 Text {
76                     anchors.centerIn: parent
77                     text: section
78                     font.bold: true
79                 }
80             }
81         }
82     }
83 }