1 /****************************************************************************
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
7 ** This file is part of the Qt Components project.
9 ** $QT_BEGIN_LICENSE:BSD$
10 ** You may use this file under the terms of the BSD license as follows:
12 ** "Redistribution and use in source and binary forms, with or without
13 ** modification, are permitted provided that the following conditions are
15 ** * Redistributions of source code must retain the above copyright
16 ** notice, this list of conditions and the following disclaimer.
17 ** * Redistributions in binary form must reproduce the above copyright
18 ** notice, this list of conditions and the following disclaimer in
19 ** the documentation and/or other materials provided with the
21 ** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
22 ** the names of its contributors may be used to endorse or promote
23 ** products derived from this software without specific prior written
26 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
27 ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
28 ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
29 ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
30 ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
31 ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
32 ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
33 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
34 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
35 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
36 ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
39 ****************************************************************************/
48 property alias model: listView.model
49 property int selectedIndex: -1
50 property Component delegate: defaultDelegate
52 privateCloseIcon: true
58 platformInverted: root.platformInverted
66 if (event.key == Qt.Key_Up || event.key == Qt.Key_Down)
75 function preferredHeight() {
76 // Need to create artifical binding to listView.delegate because of QTBUG-19037
77 var dummy = listView.delegate
78 var multiplier = screen.height > screen.width ? 0.45 : 0.6
79 var maxHeight = Math.floor(multiplier * screen.height / privateStyle.menuItemHeight)
80 * privateStyle.menuItemHeight
81 return Math.min(maxHeight, listView.count * privateStyle.menuItemHeight)
84 height: preferredHeight()
85 width: root.platformContentMaximumWidth
88 // Clipping item with bottom margin added to align content with rounded background graphics
91 anchors.bottomMargin: platformStyle.paddingSmall
97 width: contentItem.width
98 height: contentItem.height
99 delegate: root.delegate
103 if (event.key == Qt.Key_Up || event.key == Qt.Key_Down
104 || event.key == Qt.Key_Left || event.key == Qt.Key_Right
105 || event.key == Qt.Key_Select || event.key == Qt.Key_Enter
106 || event.key == Qt.Key_Return) {
107 android.listInteractionMode = Android.KeyNavigation
108 listView.currentIndex = 0
109 event.accepted = true
116 flickableItem: listView
118 visible: listView.contentHeight > contentItem.height
119 platformInverted: root.platformInverted
120 anchors { top: clipItem.top; right: clipItem.right }
125 privateStyle.play(Android.PopupClose)
130 if (status == DialogStatus.Opening) {
131 if (listView.currentItem != null) {
132 listView.currentItem.focus = false
134 listView.currentIndex = -1
135 listView.positionViewAtIndex(0, ListView.Beginning)
137 else if (status == DialogStatus.Open) {
138 listView.focus = true
139 if (listView.contentHeight > contentItem.height)
140 scrollBar.flash(Android.FadeInFadeOut)