diff options
author | ꦌꦫꦶꦏ꧀ꦦꦿꦧꦮꦑꦩꦭ꧀ <erik@darapsa.co.id> | 2023-07-14 18:36:16 +0800 |
---|---|---|
committer | ꦌꦫꦶꦏ꧀ꦦꦿꦧꦮꦑꦩꦭ꧀ <erik@darapsa.co.id> | 2023-07-14 18:36:16 +0800 |
commit | e2e9581f380ed908fef7c7dff65c65cd103c43dc (patch) | |
tree | 2c7e47392fe8cab6bfc13bacc6e793898096b307 /ComboBox.qml | |
parent | 9b6964c5db2ff46fb9f604dcb0ecd5ec86942c11 (diff) |
Diffstat (limited to 'ComboBox.qml')
-rw-r--r-- | ComboBox.qml | 133 |
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 + } + } +} |