4import QtQuick.Templates as T
7import QGroundControl.Controls
10 property bool sizeToContents: false
11 property string alternateText: ""
14 padding: ScreenTools.comboBoxPadding
15 spacing: ScreenTools.defaultFontPixelWidth
16 font.pointSize: ScreenTools.defaultFontPointSize
17 font.family: ScreenTools.normalFontFamily
18 implicitWidth: Math.max(background.implicitWidth,
19 (control.sizeToContents ? _largestTextWidth : contentItem.implicitWidth) + leftPadding + rightPadding + padding)
20 implicitHeight: Math.max(background.implicitHeight,
21 Math.max(contentItem.implicitHeight, indicator ? indicator.implicitHeight : 0) + topPadding + bottomPadding)
22 baselineOffset: contentItem.y + text.baselineOffset
23 leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing)
24 rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width)
26 property real _popupWidth: width
27 property real _largestTextWidth: 0
28 property bool _onCompleted: false
29 property bool _showBorder: qgcPal.globalTheme === QGCPalette.Light
30 property bool _showHighlight: enabled && pressed
32 QGCPalette { id: qgcPal; colorGroupEnabled: enabled }
36 font.family: control.font.family
37 font.pointSize: control.font.pointSize
41 id: itemDelegateMetrics
43 font.family: control.font.family
44 font.pointSize: control.font.pointSize
47 function _calcPopupWidth() {
48 if (_onCompleted && sizeToContents && model) {
50 for (var i = 0; i < model.length; i++){
51 textMetrics.text = control.textRole ? model[i][control.textRole] : model[i]
52 _largestTextWidth = Math.max(textMetrics.width, _largestTextWidth)
54 _popupWidth = _largestTextWidth + itemDelegateMetrics.leftPadding + itemDelegateMetrics.rightPadding
58 onModelChanged: _calcPopupWidth()
60 Component.onCompleted: {
65 // The items in the popup
66 delegate: ItemDelegate {
68 height: Math.round(popupItemMetrics.height * 1.75)
70 property string _text: control.textRole ?
71 (model.hasOwnProperty(control.textRole) ? model[control.textRole] : modelData[control.textRole]) :
83 color: control.currentIndex === index ? qgcPal.buttonHighlightText : qgcPal.buttonText
84 verticalAlignment: Text.AlignVCenter
87 background: Rectangle {
88 color: control.currentIndex === index ? qgcPal.buttonHighlight : qgcPal.button
91 highlighted: control.highlightedIndex === index
94 indicator: QGCColoredImage {
95 anchors.rightMargin: control.padding
96 anchors.right: parent.right
97 anchors.verticalCenter: parent.verticalCenter
98 height: ScreenTools.defaultFontPixelWidth
100 source: "/qmlimages/arrow-down.png"
101 color: qgcPal.buttonText
104 // The label of the button
105 contentItem: QGCLabel {
107 text: control.alternateText === "" ? control.currentText : control.alternateText
109 color: qgcPal.buttonText
112 background: Rectangle {
114 border.color: qgcPal.buttonBorder
115 border.width: _showBorder ? 1 : 0
116 radius: ScreenTools.defaultBorderRadius
120 color: qgcPal.buttonHighlight
121 opacity: _showHighlight ? 1 : control.enabled && control.hovered ? .2 : 0
122 radius: parent.radius
127 x: control.width - _popupWidth
130 height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin)
134 contentItem: ListView {
136 implicitHeight: contentHeight
137 model: control.delegateModel
138 currentIndex: control.highlightedIndex
139 highlightMoveDuration: 0
144 height: parent.height
146 border.color: qgcPal.text
149 T.ScrollIndicator.vertical: ScrollIndicator { }
152 background: Rectangle {