Files
pyqcrm/TeroStyle/ComboBox.qml

122 lines
3.4 KiB
QML

import QtQuick
import QtQuick.Templates as T
import QtQuick.Controls
import QtQuick.Controls.impl
T.ComboBox {
id: control
font: Typography.body
implicitHeight: implicitContentHeight + topInset + bottomInset
contentItem: T.TextField {
id: test
autoScroll: control.editable
color: Colors.foreground
enabled: control.editable
font: Typography.body
implicitHeight: Typography.body.pixelSize + topPadding + bottomPadding + 2
inputMethodHints: control.inputMethodHints
padding: Dimensions.m
readOnly: control.down
selectByMouse: control.selectTextByMouse
text: control.editable ? control.editText : control.displayText
validator: control.validator
width: control.width - indicator.width
verticalAlignment: TextInput.AlignVCenter
}
background: Rectangle {
border.color: Colors.interactive
border.width: 1
color: Colors.mantle
// height: parent.height
radius: Dimensions.radius
width: parent.width
}
delegate: MenuItem {
id: menuItem
required property int index
required property var model
highlighted: control.highlightedIndex === index
hoverEnabled: control.hoverEnabled
text: model[control.textRole]
width: control.width
background: Rectangle {
color: menuItem.down || menuItem.highlighted ? Colors.primary : "transparent"
height: menuItem.height
width: menuItem.width
}
}
indicator: Rectangle {
id: indicator
border.color: Colors.interactive
bottomRightRadius: Dimensions.radius
color: Colors.primary
height: control.height
topRightRadius: Dimensions.radius
width: 20 + Dimensions.s * 2
x: control.width - width
y: 0
z: 2
IconLabel {
anchors.fill: parent
bottomPadding: Dimensions.s
icon.color: Colors.foreground
icon.source: "qrc:/images/ChevronDown.svg"
leftPadding: Dimensions.s
rightPadding: Dimensions.s
topPadding: Dimensions.s
}
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onPressed: () => {
control.popup.visible = true;
control.popup.forceActiveFocus()
}
}
}
popup: T.Popup {
bottomMargin: 6
height: Math.min(contentItem.implicitHeight + 2, control.Window.height - topMargin - bottomMargin)
padding: 1
topMargin: 6
width: control.width
y: control.height
background: Rectangle {
border.color: Colors.interactive
color: Colors.mantle
radius: Dimensions.radius
}
contentItem: ListView {
clip: true
currentIndex: control.highlightedIndex
implicitHeight: contentHeight
model: control.popup.visible ? control.delegateModel : null
T.ScrollBar.vertical: ScrollBar {
}
highlight: Rectangle {
color: Colors.primary
opacity: Colors.highlightOpacity
}
}
}
Component.onCompleted:
{
console.log(test.height)
console.log(control.height)
console.log(test.font.pointSize)
console.log(test.font.pixelSize)
}
}