summaryrefslogtreecommitdiff
path: root/ComboBox.qml
diff options
context:
space:
mode:
Diffstat (limited to 'ComboBox.qml')
-rw-r--r--ComboBox.qml133
1 files changed, 133 insertions, 0 deletions
diff --git a/ComboBox.qml b/ComboBox.qml
new file mode 100644
index 0000000..0699241
--- /dev/null
+++ b/ComboBox.qml
@@ -0,0 +1,133 @@
+import QtQuick 2.15
+import QtQuick.Window 2.15
+import QtQuick.Controls 2.15
+import QtQuick.Controls.impl 2.15
+import QtQuick.Templates 2.15 as T
+import Bootstrap 5.3
+
+T.ComboBox {
+ id: control
+ font: Bootstrap.bodyFont
+
+ implicitWidth: Math.max(implicitBackgroundWidth
+ + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight
+ + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ leftPadding: padding
+ + (!control.mirrored || !indicator || !indicator.visible
+ ? 0 : indicator.width + spacing)
+ rightPadding: padding
+ + (control.mirrored || !indicator || !indicator.visible
+ ? 0 : indicator.width + spacing)
+
+ delegate: ItemDelegate {
+ width: ListView.view.width
+ 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
+ contentItem: Text {
+ text: control.textRole ? (Array.isArray(control.model)
+ ? modelData[control.textRole]
+ : model[control.textRole]) : modelData
+ font: control.font
+ color: Bootstrap.bodyColor
+ verticalAlignment: Text.AlignVCenter
+ }
+ background: Rectangle {
+ color: Bootstrap.bodyBg
+ }
+ }
+
+ indicator: ColorImage {
+ x: control.mirrored ? control.padding
+ : control.width - width - control.padding
+ y: control.topPadding + (control.availableHeight - height) / 2
+ color: control.palette.dark
+ defaultColor: "#353637"
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/images/double-arrow.png"
+ opacity: enabled ? 1 : 0.3
+ }
+
+ contentItem: T.TextField {
+ leftPadding: !control.mirrored
+ ? 12 : control.editable && activeFocus ? 3 : 1
+ rightPadding: control.mirrored
+ ? 12 : control.editable && activeFocus ? 3 : 1
+ topPadding: 6 - control.padding
+ bottomPadding: 6 - control.padding
+
+ 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: Bootstrap.bodyColor
+ selectionColor: control.palette.highlight
+ selectedTextColor: control.palette.highlightedText
+ verticalAlignment: Text.AlignVCenter
+
+ background: Rectangle {
+ visible: control.enabled && control.editable
+ && !control.flat
+ border.width: parent && parent.activeFocus ? 2 : 1
+ border.color: parent && parent.activeFocus
+ ? control.palette.highlight
+ : control.palette.button
+ color: Bootstrap.bodyBg
+ }
+ }
+
+ background: Rectangle {
+ implicitWidth: 140
+ implicitHeight: 40
+
+ color: Bootstrap.bodyBg
+ border.color: control.palette.highlight
+ border.width: !control.editable && control.visualFocus ? 2 : 0
+ visible: !control.flat || control.down
+ radius: 8
+ }
+
+ popup: T.Popup {
+ y: control.height
+ width: control.width
+ 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: Bootstrap.bodyBg
+ }
+ }
+}