mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-04-29 18:27:23 +02:00
[ui] SearchBar: Search bar can now be toggled to become visible with the search button.
SearchBar gets the clear text feature allowing text to be cleared with a single click. Added accepted signal for the Searchbar with Return and Enter key Press
This commit is contained in:
parent
2a27f4c6fe
commit
f78ee9bb67
1 changed files with 59 additions and 1 deletions
|
@ -9,9 +9,24 @@ import MaterialIcons 2.2
|
||||||
*/
|
*/
|
||||||
|
|
||||||
FocusScope {
|
FocusScope {
|
||||||
|
id: root
|
||||||
property alias textField: field
|
property alias textField: field
|
||||||
property alias text: field.text
|
property alias text: field.text
|
||||||
|
|
||||||
|
// Enables hiding and showing of the text field on Search button click
|
||||||
|
property bool toggle: false
|
||||||
|
property bool isVisible: false
|
||||||
|
|
||||||
|
// Size properties
|
||||||
|
property int maxWidth: 150
|
||||||
|
property int minWidth: 30
|
||||||
|
|
||||||
|
// The default width is computed based on whether toggling is enabled and if the visibility is true
|
||||||
|
width: toggle && isVisible ? maxWidth : minWidth
|
||||||
|
|
||||||
|
// Keyboard interaction related signals
|
||||||
|
signal accepted()
|
||||||
|
|
||||||
implicitHeight: childrenRect.height
|
implicitHeight: childrenRect.height
|
||||||
Keys.forwardTo: [field]
|
Keys.forwardTo: [field]
|
||||||
|
|
||||||
|
@ -24,10 +39,17 @@ FocusScope {
|
||||||
}
|
}
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
|
spacing: 0
|
||||||
width: parent.width
|
width: parent.width
|
||||||
|
|
||||||
MaterialLabel {
|
MaterialToolButton {
|
||||||
text: MaterialIcons.search
|
text: MaterialIcons.search
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
isVisible = !root.isVisible
|
||||||
|
// Set Focus on the Text Field
|
||||||
|
field.focus = field.visible
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TextField {
|
TextField {
|
||||||
|
@ -36,10 +58,46 @@ FocusScope {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
selectByMouse: true
|
selectByMouse: true
|
||||||
|
|
||||||
|
rightPadding: clear.width
|
||||||
|
|
||||||
|
// The text field is visible either when toggle is not activated or the visible property is set
|
||||||
|
visible: root.toggle ? root.isVisible : true
|
||||||
|
|
||||||
// Ensure the field has focus when the text is modified
|
// Ensure the field has focus when the text is modified
|
||||||
onTextChanged: {
|
onTextChanged: {
|
||||||
forceActiveFocus()
|
forceActiveFocus()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle enter Key press and forward it to the parent
|
||||||
|
Keys.onPressed: (event)=> {
|
||||||
|
if ((event.key == Qt.Key_Return || event.key == Qt.Key_Enter)) {
|
||||||
|
event.accepted = true
|
||||||
|
root.accepted()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MaterialToolButton {
|
||||||
|
id: clear
|
||||||
|
|
||||||
|
// Anchors
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.rightMargin: 2 // Leave a tiny bit of space so that its highlight does not overlap with the boundary of the parent
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
|
||||||
|
// Style
|
||||||
|
font.pointSize: 8
|
||||||
|
text: MaterialIcons.close
|
||||||
|
ToolTip.text: "Clears text."
|
||||||
|
|
||||||
|
// States
|
||||||
|
visible: field.text
|
||||||
|
|
||||||
|
// Signals -> Slots
|
||||||
|
onClicked: {
|
||||||
|
field.text = ""
|
||||||
|
parent.focus = true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue