aboutsummaryrefslogtreecommitdiffstats
path: root/src/imports/controls
diff options
context:
space:
mode:
authorJan Arve Sæther <jan-arve.saether@qt.io>2020-10-26 13:34:26 +0100
committerJan Arve Sæther <jan-arve.saether@qt.io>2020-10-27 12:21:10 +0100
commit1569a601f265390502ea492a0bc68fd4ff88dd20 (patch)
treef8a7e9d12fa78e242822a47e094d375000cf710b /src/imports/controls
parentebdb7b1ceb40c65917e9f78680c5380dce9cf5d6 (diff)
Native style: Add ComboBox for Windows
Change-Id: I59f64b3941bd0744bba6f6079b9ab3fc30063447 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Diffstat (limited to 'src/imports/controls')
-rw-r--r--src/imports/controls/windows/ComboBox.qml91
1 files changed, 90 insertions, 1 deletions
diff --git a/src/imports/controls/windows/ComboBox.qml b/src/imports/controls/windows/ComboBox.qml
index 3891594b..237d90b5 100644
--- a/src/imports/controls/windows/ComboBox.qml
+++ b/src/imports/controls/windows/ComboBox.qml
@@ -35,7 +35,96 @@
****************************************************************************/
import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
import QtQuick.NativeStyle as NativeStyle
-NativeStyle.DefaultComboBox {
+T.ComboBox {
+ id: control
+
+ readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding,
+ 90 /* minimum */ )
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined
+
+ leftPadding: __nativeBackground ? background.contentPadding.left : 5
+ rightPadding: __nativeBackground ? background.contentPadding.right : 5
+ topPadding: __nativeBackground ? background.contentPadding.top : 5
+ bottomPadding: __nativeBackground ? background.contentPadding.bottom : 5
+
+ contentItem: T.TextField {
+ implicitWidth: contentWidth
+ implicitHeight: contentHeight
+ text: control.editable ? control.editText : control.displayText
+
+ enabled: control.editable
+ autoScroll: control.editable
+ readOnly: control.down
+ inputMethodHints: control.inputMethodHints
+ validator: control.validator
+ selectByMouse: control.selectTextByMouse
+
+ font: control.font
+ color: control.editable ? control.palette.text : control.palette.buttonText
+ selectionColor: control.palette.highlight
+ selectedTextColor: control.palette.highlightedText
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ background: NativeStyle.ComboBox {
+ control: control
+ contentWidth: contentItem.implicitWidth
+ contentHeight: contentItem.implicitHeight
+ useNinePatchImage: false
+ }
+
+ delegate: ItemDelegate {
+ width: ListView.view.width
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData
+ palette.text: control.palette.text
+ palette.highlightedText: control.palette.highlightedText
+ font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal
+ highlighted: control.highlightedIndex === index
+ hoverEnabled: control.hoverEnabled
+ }
+
+ popup: T.Popup {
+ readonly property var layoutMargins: control.__nativeBackground ? control.background.layoutMargins : null
+ x: layoutMargins ? layoutMargins.left : 0
+ y: control.height - (layoutMargins ? layoutMargins.bottom : 0)
+ width: control.width - (layoutMargins ? layoutMargins.left + layoutMargins.right : 0)
+ height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin)
+ topMargin: 6
+ bottomMargin: 6
+
+ contentItem: ListView {
+ clip: true
+ implicitHeight: contentHeight
+ model: control.delegateModel
+ currentIndex: control.highlightedIndex
+ highlightMoveDuration: 0
+
+ Rectangle {
+ z: 10
+ width: parent.width
+ height: parent.height
+ color: "transparent"
+ border.color: control.palette.mid
+ }
+
+ T.ScrollIndicator.vertical: ScrollIndicator { }
+ }
+
+ background: Rectangle {
+ color: control.palette.window
+ }
+ }
}