From a8378ab262bba1ab3c5cb673434f69f750d2d4d8 Mon Sep 17 00:00:00 2001 From: Ming Rui Zhang <mingrui.zhang@savoirfairelinux.com> Date: Fri, 2 Apr 2021 09:41:55 -0400 Subject: [PATCH] contactsearch: add convenient button for clearing search result - Changed radius - Added preferred width for side panel to fully show contact search bar placeholder text by default (English) Gitlab: #321 Change-Id: I2c26ebc34812db41f5d50408e2e092bf0a99f76d --- src/constant/JamiStrings.qml | 5 +- src/constant/JamiTheme.qml | 5 +- src/mainview/MainView.qml | 31 ++++++------ src/mainview/components/ContactSearchBar.qml | 53 ++++++++++++++------ 4 files changed, 62 insertions(+), 32 deletions(-) diff --git a/src/constant/JamiStrings.qml b/src/constant/JamiStrings.qml index 00ae1aa97..11943dbd3 100644 --- a/src/constant/JamiStrings.qml +++ b/src/constant/JamiStrings.qml @@ -395,7 +395,10 @@ Item { property string createNewJA: qsTr("Create a Jami account") property string aboutJami: qsTr("About Jami") - // Smart list context menu + // SmartList + property string clearText: qsTr("Clear Text") + + // SmartList context menu property string declineContactRequest: qsTr("Decline contact request") property string acceptContactRequest: qsTr("Accept contact request") diff --git a/src/constant/JamiTheme.qml b/src/constant/JamiTheme.qml index 11ec57391..1c0863b0c 100644 --- a/src/constant/JamiTheme.qml +++ b/src/constant/JamiTheme.qml @@ -166,6 +166,7 @@ Item { property int menuFontSize: 12 property int headerFontSize: 13 property int titleFontSize: 16 + property int lineEditRadius: 4 property int maximumWidthSettingsView: 600 property int settingsHeaderpreferredHeight: 64 @@ -179,13 +180,13 @@ Item { property int pluginHandlersPopupViewDelegateHeight: 50 // main application spec - property int mainViewMinWidth: 460 + property int mainViewMinWidth: 300 property int mainViewMinHeight: 400 property int wizardViewMinWidth: 500 property int wizardViewMinHeight: 600 - property int mainViewPreferredWidth: 650 + property int mainViewPreferredWidth: 725 property int mainViewPreferredHeight: 600 function setTheme(dark) { diff --git a/src/mainview/MainView.qml b/src/mainview/MainView.qml index 73c71374f..4e678e5a9 100644 --- a/src/mainview/MainView.qml +++ b/src/mainview/MainView.qml @@ -41,12 +41,13 @@ Rectangle { property var containerWindow: "" - property int sidePanelViewStackPreferredWidth: 250 - property int mainViewStackPreferredWidth: 250 + property int sidePanelViewStackMinimumWidth: 300 + property int mainViewStackPreferredWidth: 425 property int settingsViewPreferredWidth: 460 property int onWidthChangedTriggerDistance: 5 property bool sidePanelOnly: (!mainViewStack.visible) && sidePanelViewStack.visible + property int previousWidth: width // To calculate tab bar bottom border hidden rect left margin. property int tabBarLeftMargin: 8 @@ -161,7 +162,7 @@ Rectangle { sidePanelViewStack.push(settingsMenu, StackView.Immediate) var windowCurrentMinimizedSize = settingsViewPreferredWidth - + sidePanelViewStackPreferredWidth + onWidthChangedTriggerDistance + + sidePanelViewStackMinimumWidth + onWidthChangedTriggerDistance if (containerWindow.width < windowCurrentMinimizedSize) containerWindow.width = windowCurrentMinimizedSize } @@ -289,9 +290,10 @@ Rectangle { Rectangle { id: mainViewSidePanelRect - SplitView.minimumWidth: sidePanelViewStackPreferredWidth - SplitView.maximumWidth: (sidePanelOnly ? splitView.width : - splitView.width - sidePanelViewStackPreferredWidth) + SplitView.minimumWidth: sidePanelViewStackMinimumWidth + SplitView.maximumWidth: (sidePanelOnly ? + splitView.width : + splitView.width - sidePanelViewStackMinimumWidth) SplitView.fillHeight: true color: JamiTheme.backgroundColor @@ -352,8 +354,9 @@ Rectangle { SplitView.maximumWidth: sidePanelOnly ? splitView.width : - splitView.width - sidePanelViewStackPreferredWidth - SplitView.minimumWidth: sidePanelViewStackPreferredWidth + splitView.width - sidePanelViewStackMinimumWidth + SplitView.preferredWidth: mainViewStackPreferredWidth + SplitView.minimumWidth: sidePanelViewStackMinimumWidth SplitView.fillHeight: true clip: true @@ -493,8 +496,10 @@ Rectangle { onWidthChanged: { // Hide unnecessary stackview when width is changed. - var widthToCompare = sidePanelViewStackPreferredWidth + - (inSettingsView ? settingsViewPreferredWidth : mainViewStackPreferredWidth) + var widthToCompare = previousWidth < mainView.width ? + sidePanelViewStackMinimumWidth : + (sidePanelViewStackMinimumWidth + + (inSettingsView ? settingsViewPreferredWidth : mainViewStackPreferredWidth)) if (mainView.width < widthToCompare - onWidthChangedTriggerDistance && mainViewStack.visible) { @@ -512,8 +517,6 @@ Rectangle { } else if (inWelcomeViewStack) recursionStackViewItemMove(mainViewStack, sidePanelViewStack) - - mainView.update() } else if (mainView.width >= widthToCompare + onWidthChangedTriggerDistance && !mainViewStack.visible) { mainViewStack.visible = true @@ -532,9 +535,9 @@ Rectangle { if (currentAccountIsCalling()) pushCallStackView() } - - mainView.update() } + + previousWidth = mainView.width } AboutPopUp { diff --git a/src/mainview/components/ContactSearchBar.qml b/src/mainview/components/ContactSearchBar.qml index 96aba4723..5e05c0421 100644 --- a/src/mainview/components/ContactSearchBar.qml +++ b/src/mainview/components/ContactSearchBar.qml @@ -24,8 +24,12 @@ import QtGraphicalEffects 1.14 import net.jami.Models 1.0 import net.jami.Constants 1.0 +import "../../commoncomponents" + Rectangle { - id: contactSearchBarRect + id: root + + property int itemMargin: 8 signal contactSearchBarTextChanged(string text) signal returnPressedWhileSearching @@ -35,7 +39,7 @@ Rectangle { fakeFocus.forceActiveFocus() } - radius: height / 2 + radius: JamiTheme.lineEditRadius color: JamiTheme.secondaryBackgroundColor FocusScope { @@ -45,12 +49,12 @@ Rectangle { Image { id: searchIconImage - anchors.verticalCenter: contactSearchBarRect.verticalCenter - anchors.left: contactSearchBarRect.left - anchors.leftMargin: 8 + anchors.verticalCenter: root.verticalCenter + anchors.left: root.left + anchors.leftMargin: itemMargin - width: 20 - height: 20 + width: 16 + height: 16 fillMode: Image.PreserveAspectFit mipmap: true @@ -65,15 +69,18 @@ Rectangle { TextField { id: contactSearchBar - color: JamiTheme.textColor - anchors.verticalCenter: contactSearchBarRect.verticalCenter + anchors.verticalCenter: root.verticalCenter anchors.left: searchIconImage.right - width: contactSearchBarRect.width - searchIconImage.width - 10 - height: contactSearchBarRect.height - 5 + width: root.width - searchIconImage.width - clearTextButton.width - itemMargin * 2 + height: root.height - 5 + + color: JamiTheme.textColor font.pointSize: JamiTheme.textFontSize + font.kerning: true + selectByMouse: true selectionColor: JamiTheme.contactSearchBarPlaceHolderTextFontColor @@ -86,10 +93,26 @@ Rectangle { color: "transparent" } - onTextChanged: { - contactSearchBarRect.contactSearchBarTextChanged( - contactSearchBar.text) - } + onTextChanged: root.contactSearchBarTextChanged(contactSearchBar.text) + } + + PushButton { + id: clearTextButton + + anchors.verticalCenter: root.verticalCenter + anchors.left: contactSearchBar.right + + preferredSize: 16 + + visible: contactSearchBar.text.length + + normalColor: root.color + imageColor: JamiTheme.primaryForegroundColor + + source: "qrc:/images/icons/ic_clear_24px.svg" + toolTipText: JamiStrings.clearText + + onClicked: contactSearchBar.clear() } Shortcut { -- GitLab