diff --git a/example/qml/page/T_TableView.qml b/example/qml/page/T_TableView.qml index fefe4ff9..87a3139f 100644 --- a/example/qml/page/T_TableView.qml +++ b/example/qml/page/T_TableView.qml @@ -64,8 +64,8 @@ FluContentPage{ address: getRandomAddresses(), nickname: getRandomNickname(), longstring:"你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好", - height:46, - minimumHeight:46, + height:44, + minimumHeight:44, maximumHeight:300, action:com_action }) diff --git a/example/qml/page/T_TextBox.qml b/example/qml/page/T_TextBox.qml index 9e129a30..c5ee3141 100644 --- a/example/qml/page/T_TextBox.qml +++ b/example/qml/page/T_TextBox.qml @@ -174,7 +174,7 @@ FluScrollablePage{ FluSpinBox{ Layout.topMargin: 20 - disabled: spin_box_switch.checked +// disabled: spin_box_switch.checked anchors{ verticalCenter: parent.verticalCenter left: parent.left diff --git a/src/imports/FluentUI/Controls/FluComboBox.qml b/src/imports/FluentUI/Controls/FluComboBox.qml index cae479e9..4eb89adf 100644 --- a/src/imports/FluentUI/Controls/FluComboBox.qml +++ b/src/imports/FluentUI/Controls/FluComboBox.qml @@ -76,7 +76,7 @@ ComboBox { background: Rectangle { implicitWidth: 140 - implicitHeight: 28 + implicitHeight: 32 border.color: FluTheme.dark ? "#505050" : "#DFDFDF" border.width: 1 visible: !control.flat || control.down diff --git a/src/imports/FluentUI/Controls/FluMultilineTextBox.qml b/src/imports/FluentUI/Controls/FluMultilineTextBox.qml index ee2c3a85..faafb157 100644 --- a/src/imports/FluentUI/Controls/FluMultilineTextBox.qml +++ b/src/imports/FluentUI/Controls/FluMultilineTextBox.qml @@ -22,6 +22,8 @@ TextArea{ } font:FluTextStyle.Body wrapMode: Text.WrapAnywhere + padding: 8 + leftPadding: 8 renderType: FluTheme.nativeText ? Text.NativeRendering : Text.QtRendering selectedTextColor: color selectionColor: Qt.alpha(FluTheme.primaryColor.lightest,0.6) diff --git a/src/imports/FluentUI/Controls/FluPasswordBox.qml b/src/imports/FluentUI/Controls/FluPasswordBox.qml index 8dfc0d3e..8d0da5cf 100644 --- a/src/imports/FluentUI/Controls/FluPasswordBox.qml +++ b/src/imports/FluentUI/Controls/FluPasswordBox.qml @@ -22,6 +22,8 @@ TextField{ return normalColor } font:FluTextStyle.Body + padding: 8 + leftPadding: 8 echoMode:btn_reveal.pressed ? TextField.Normal : TextField.Password renderType: FluTheme.nativeText ? Text.NativeRendering : Text.QtRendering selectionColor: Qt.alpha(FluTheme.primaryColor.lightest,0.6) diff --git a/src/imports/FluentUI/Controls/FluSpinBox.qml b/src/imports/FluentUI/Controls/FluSpinBox.qml index db831e1e..31a21710 100644 --- a/src/imports/FluentUI/Controls/FluSpinBox.qml +++ b/src/imports/FluentUI/Controls/FluSpinBox.qml @@ -3,40 +3,145 @@ import QtQuick.Layouts import QtQuick.Controls import FluentUI -FluTextBox { +Rectangle{ + readonly property string displayText : d._displayText + property int from: 0 + property int to: 99 + property var validator: IntValidator { + bottom: Math.min(control.from, control.to) + top: Math.max(control.from, control.to) + } id:control - width: 200 - closeRightMargin:55 - rightPadding: 80 - text:"0" - validator: IntValidator {} - inputMethodHints: Qt.ImhDigitsOnly + implicitWidth: 200 + implicitHeight: 34 + radius: 4 + color: FluTheme.dark ? Qt.rgba(62/255,62/255,62/255,1) : Qt.rgba(1,1,1,1) + border.width: 1 + border.color: FluTheme.dark ? Qt.rgba(76/255,76/255,76/255,1) : Qt.rgba(240/255,240/255,240/255,1) + QtObject{ + id:d + property string _displayText: "0" + } + Component{ + id:com_edit + FluTextBox{ + rightPadding: 80 + closeRightMargin: 55 + validator: control.validator + text: d._displayText + Component.onCompleted: { + forceActiveFocus() + } + onCommit: { + var number = Number(text) + if(number>=control.from && number<=control.to){ + d._displayText = String(number) + } + edit_loader.sourceComponent = null + } + onActiveFocusChanged: { + if(!activeFocus){ + edit_loader.sourceComponent = null + } + } + } + } + FluTextBox{ + id:text_number + anchors.fill: parent + readOnly: true + rightPadding: 80 + text: control.displayText + MouseArea{ + anchors.fill: parent + onClicked: { + edit_loader.sourceComponent = com_edit + } + } + } + Loader{ + id:edit_loader + anchors.fill: parent + } FluIconButton{ + id:btn_up width: 20 height: 20 iconSize: 16 iconSource: FluentIcons.ChevronUp + enabled: Number(control.displayText) !== control.to anchors{ verticalCenter: parent.verticalCenter right: parent.right rightMargin: 30 } onClicked: { - control.text = Number(control.text) + 1 + d._displayText = String(Math.min(Number(d._displayText)+1,control.to)) + } + MouseArea{ + anchors.fill: parent + onReleased: { + timer.stop() + } + TapHandler{ + onTapped: { + btn_up.clicked() + } + onCanceled: { + timer.stop() + } + onLongPressed: { + timer.isUp = true + timer.start() + } + } } } FluIconButton{ + id:btn_down iconSource: FluentIcons.ChevronDown width: 20 height: 20 iconSize: 16 + enabled: Number(control.displayText) !== control.from anchors{ verticalCenter: parent.verticalCenter right: parent.right rightMargin: 5 } onClicked: { - control.text = Number(control.text) - 1 + d._displayText = String(Math.max(Number(d._displayText)-1,control.from)) + } + MouseArea{ + anchors.fill: parent + onReleased: { + timer.stop() + } + TapHandler{ + onTapped: { + btn_down.clicked() + } + onCanceled: { + timer.stop() + } + onLongPressed: { + timer.isUp = false + timer.start() + } + } + } + } + Timer{ + id:timer + property bool isUp : true + interval: 50 + repeat: true + onTriggered: { + if(isUp){ + btn_up.clicked() + }else{ + btn_down.clicked() + } } } } diff --git a/src/imports/FluentUI/Controls/FluTableView.qml b/src/imports/FluentUI/Controls/FluTableView.qml index 3d358bf6..86a65e83 100644 --- a/src/imports/FluentUI/Controls/FluTableView.qml +++ b/src/imports/FluentUI/Controls/FluTableView.qml @@ -154,6 +154,11 @@ Rectangle { selectionModel: ItemSelectionModel { id:selection_model model: table_model + onSelectionChanged: { + if(selection_rect.dragging){ + d.selectionFlag = !d.selectionFlag + } + } } columnWidthProvider: function(column) { var w = columnSource[column].width @@ -194,7 +199,7 @@ Rectangle { implicitWidth: columnSource[column].width Rectangle{ anchors.fill: parent - visible: item_loader.sourceComponent == null + visible: item_loader.sourceComponent === null color: selected ? control.selectionColor : "#00000000" } MouseArea{ @@ -258,16 +263,10 @@ Rectangle { } Component{ id:com_handle - Item { - onYChanged: { - d.selectionFlag = !d.selectionFlag - } - onXChanged: { - d.selectionFlag = !d.selectionFlag - } - } + Item {} } SelectionRectangle { + id:selection_rect target: { if(item_loader.sourceComponent){ return null @@ -453,7 +452,7 @@ Rectangle { var minimumHeight = obj.minimumHeight var maximumHeight = obj.maximumHeight if(!minimumHeight){ - minimumHeight = 46 + minimumHeight = 44 } if(!maximumHeight){ maximumHeight = 65535 diff --git a/src/imports/FluentUI/Controls/FluTextBox.qml b/src/imports/FluentUI/Controls/FluTextBox.qml index e8c377c5..9eab2904 100644 --- a/src/imports/FluentUI/Controls/FluTextBox.qml +++ b/src/imports/FluentUI/Controls/FluTextBox.qml @@ -15,6 +15,8 @@ TextField{ property int closeRightMargin: icon_end.visible ? 25 : 5 id:control width: 300 + padding: 8 + leftPadding: 8 enabled: !disabled color: { if(!enabled){