mirror of
https://git.jami.net/savoirfairelinux/jami-client-qt.git
synced 2025-09-10 12:03:18 +02:00
wizardview: add key navigations
Gitlab: #470 Change-Id: I2ec5c4a4b490895ea32fef64baf1e7c5b85cf9d5
This commit is contained in:
parent
b6a566d13f
commit
576da3e087
16 changed files with 479 additions and 16 deletions
1
qml.qrc
1
qml.qrc
|
@ -159,5 +159,6 @@
|
|||
<file>src/constant/JamiResources.qml</file>
|
||||
<file>src/commoncomponents/BubbleLabel.qml</file>
|
||||
<file>src/commoncomponents/BackButton.qml</file>
|
||||
<file>src/commoncomponents/JamiSwitch.qml</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
|
|
@ -29,4 +29,11 @@ PushButton {
|
|||
|
||||
source: JamiResources.ic_arrow_back_24dp_svg
|
||||
toolTipText: JamiStrings.back
|
||||
|
||||
Keys.onPressed: function (keyEvent) {
|
||||
if (keyEvent.matches(StandardKey.InsertParagraphSeparator)) {
|
||||
clicked()
|
||||
keyEvent.accepted = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
62
src/commoncomponents/JamiSwitch.qml
Normal file
62
src/commoncomponents/JamiSwitch.qml
Normal file
|
@ -0,0 +1,62 @@
|
|||
/*
|
||||
* Copyright (C) 2021 by Savoir-faire Linux
|
||||
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import QtQuick 2.14
|
||||
import QtQuick.Controls 2.14
|
||||
|
||||
import net.jami.Constants 1.0
|
||||
|
||||
Switch {
|
||||
id: root
|
||||
|
||||
indicator: Rectangle {
|
||||
implicitWidth: JamiTheme.switchPreferredWidth
|
||||
implicitHeight: JamiTheme.switchPreferredHeight
|
||||
|
||||
x: root.leftPadding
|
||||
y: parent.height / 2 - height / 2
|
||||
|
||||
radius: JamiTheme.switchIndicatorRadius
|
||||
|
||||
color: root.checked ? JamiTheme.switchBackgroundCheckedColor : JamiTheme.whiteColor
|
||||
border.color: root.checked ? JamiTheme.switchBackgroundCheckedColor :
|
||||
JamiTheme.switchBackgroundBorderColor
|
||||
|
||||
Rectangle {
|
||||
x: root.checked ? parent.width - width : 0
|
||||
y: parent.height / 2 - height / 2
|
||||
|
||||
width: JamiTheme.switchIndicatorPreferredWidth
|
||||
height: JamiTheme.switchIndicatorPreferredHeight
|
||||
|
||||
radius: JamiTheme.switchIndicatorRadius
|
||||
|
||||
color: (root.down || root.focus) ? Qt.darker(JamiTheme.switchBackgroundBorderColor, 1.2) :
|
||||
JamiTheme.whiteColor
|
||||
border.color: root.checked ? JamiTheme.switchBackgroundCheckedColor :
|
||||
JamiTheme.switchIndicatorBorderColor
|
||||
}
|
||||
}
|
||||
|
||||
Keys.onPressed: function (keyEvent) {
|
||||
if (keyEvent.matches(StandardKey.InsertParagraphSeparator)) {
|
||||
checked = !checked
|
||||
keyEvent.accepted = true
|
||||
}
|
||||
}
|
||||
}
|
|
@ -32,6 +32,7 @@ Button {
|
|||
property var color: "transparent"
|
||||
property var hoveredColor: undefined
|
||||
property var pressedColor: undefined
|
||||
property var keysNavigationFocusColor: Qt.darker(hoveredColor, 2)
|
||||
property var outlined: false
|
||||
property string animatedImageSource: ""
|
||||
|
||||
|
@ -149,7 +150,7 @@ Button {
|
|||
return root.hoveredColor
|
||||
if (checked && root.pressedColor)
|
||||
return root.pressedColor
|
||||
return root.color
|
||||
return root.focus ? root.keysNavigationFocusColor : root.color
|
||||
}
|
||||
border.color: {
|
||||
if (!outlined)
|
||||
|
@ -158,8 +159,15 @@ Button {
|
|||
return root.hoveredColor
|
||||
if (checked && root.pressedColor)
|
||||
return root.pressedColor
|
||||
return root.color
|
||||
return root.focus ? root.keysNavigationFocusColor : root.color
|
||||
}
|
||||
radius: 4
|
||||
}
|
||||
|
||||
Keys.onPressed: function (keyEvent) {
|
||||
if (keyEvent.matches(StandardKey.InsertParagraphSeparator)) {
|
||||
clicked()
|
||||
keyEvent.accepted = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,6 +33,9 @@ Item {
|
|||
property alias imageId: avatar.imageId
|
||||
required property real avatarSize
|
||||
|
||||
signal focusOnPreviousItem
|
||||
signal focusOnNextItem
|
||||
|
||||
width: avatarSize
|
||||
height: boothLayout.height
|
||||
|
||||
|
@ -48,6 +51,14 @@ Item {
|
|||
isPreviewing = false
|
||||
}
|
||||
|
||||
function focusOnNextPhotoBoothItem () {
|
||||
takePhotoButton.forceActiveFocus()
|
||||
}
|
||||
|
||||
function focusOnPreviousPhotoBoothItem () {
|
||||
importButton.forceActiveFocus()
|
||||
}
|
||||
|
||||
onVisibleChanged: {
|
||||
if (!visible) {
|
||||
stopBooth()
|
||||
|
@ -66,10 +77,28 @@ Item {
|
|||
qsTr("All files") + " (*)"
|
||||
]
|
||||
|
||||
onVisibleChanged: {
|
||||
if (!visible) {
|
||||
rejected()
|
||||
}
|
||||
}
|
||||
|
||||
onAccepted: {
|
||||
if (importButton.focusAfterFileDialogClosed) {
|
||||
importButton.focusAfterFileDialogClosed = false
|
||||
importButton.forceActiveFocus()
|
||||
}
|
||||
|
||||
var filePath = UtilsAdapter.getAbsPath(file)
|
||||
AccountAdapter.setCurrentAccountAvatarFile(filePath)
|
||||
}
|
||||
|
||||
onRejected: {
|
||||
if (importButton.focusAfterFileDialogClosed) {
|
||||
importButton.focusAfterFileDialogClosed = false
|
||||
importButton.forceActiveFocus()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
|
@ -153,6 +182,7 @@ Item {
|
|||
id: takePhotoButton
|
||||
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
radius: JamiTheme.primaryRadius
|
||||
imageColor: JamiTheme.textColor
|
||||
toolTipText: JamiStrings.takePhoto
|
||||
|
@ -160,6 +190,23 @@ Item {
|
|||
JamiResources.round_add_a_photo_24dp_svg :
|
||||
JamiResources.baseline_camera_alt_24dp_svg
|
||||
|
||||
Keys.onPressed: function (keyEvent) {
|
||||
if (keyEvent.matches(StandardKey.InsertParagraphSeparator)) {
|
||||
clicked()
|
||||
keyEvent.accepted = true
|
||||
} else if (keyEvent.matches(StandardKey.MoveToPreviousLine)) {
|
||||
root.focusOnPreviousItem()
|
||||
keyEvent.accepted = true
|
||||
}
|
||||
}
|
||||
|
||||
KeyNavigation.tab: {
|
||||
if (clearButton.visible)
|
||||
return clearButton
|
||||
return importButton
|
||||
}
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: {
|
||||
if (isPreviewing) {
|
||||
flashAnimation.start()
|
||||
|
@ -176,13 +223,27 @@ Item {
|
|||
PushButton {
|
||||
id: clearButton
|
||||
|
||||
visible: LRCInstance.currentAccountAvatarSet
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
visible: LRCInstance.currentAccountAvatarSet
|
||||
|
||||
radius: JamiTheme.primaryRadius
|
||||
source: JamiResources.round_close_24dp_svg
|
||||
toolTipText: JamiStrings.clearAvatar
|
||||
imageColor: JamiTheme.textColor
|
||||
|
||||
KeyNavigation.tab: importButton
|
||||
KeyNavigation.up: takePhotoButton
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
Keys.onPressed: function (keyEvent) {
|
||||
if (keyEvent.matches(StandardKey.InsertParagraphSeparator)) {
|
||||
clicked()
|
||||
takePhotoButton.forceActiveFocus()
|
||||
keyEvent.accepted = true
|
||||
}
|
||||
}
|
||||
|
||||
onClicked: {
|
||||
stopBooth()
|
||||
AccountAdapter.setCurrentAccountAvatarBase64()
|
||||
|
@ -192,12 +253,33 @@ Item {
|
|||
PushButton {
|
||||
id: importButton
|
||||
|
||||
property bool focusAfterFileDialogClosed: false
|
||||
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
radius: JamiTheme.primaryRadius
|
||||
source: JamiResources.round_folder_24dp_svg
|
||||
toolTipText: JamiStrings.importFromFile
|
||||
imageColor: JamiTheme.textColor
|
||||
|
||||
Keys.onPressed: function (keyEvent) {
|
||||
if (keyEvent.matches(StandardKey.InsertParagraphSeparator)) {
|
||||
focusAfterFileDialogClosed = true
|
||||
clicked()
|
||||
keyEvent.accepted = true
|
||||
} else if (keyEvent.matches(StandardKey.MoveToNextLine) ||
|
||||
keyEvent.key === Qt.Key_Tab) {
|
||||
root.focusOnNextItem()
|
||||
keyEvent.accepted = true
|
||||
}
|
||||
}
|
||||
|
||||
KeyNavigation.up: {
|
||||
if (clearButton.visible)
|
||||
return clearButton
|
||||
return takePhotoButton
|
||||
}
|
||||
|
||||
onClicked: {
|
||||
stopBooth()
|
||||
importFromFileDialog.open()
|
||||
|
|
|
@ -153,7 +153,7 @@ AbstractButton {
|
|||
PropertyChanges { target: background; color: pressedColor }
|
||||
},
|
||||
State {
|
||||
name: "hovered"; when: hovered
|
||||
name: "hovered"; when: hovered || root.focus
|
||||
PropertyChanges { target: background; color: hoveredColor }
|
||||
},
|
||||
State {
|
||||
|
|
|
@ -97,6 +97,11 @@ Item {
|
|||
|
||||
property color closeButtonLighterBlack: "#4c4c4c"
|
||||
|
||||
// Jami switch
|
||||
property color switchBackgroundBorderColor: "#cccccc"
|
||||
property color switchBackgroundCheckedColor: primaryBackgroundColor
|
||||
property color switchIndicatorBorderColor: "#999999"
|
||||
|
||||
// Call buttons
|
||||
property color acceptButtonGreen: "#4caf50"
|
||||
property color acceptButtonHoverGreen: "#5db761"
|
||||
|
@ -254,6 +259,13 @@ Item {
|
|||
property real lineEditContextMenuItemsWidth: 100
|
||||
property real lineEditContextMenuSeparatorsHeight: 2
|
||||
|
||||
// Jami switch
|
||||
property real switchIndicatorRadius: 13
|
||||
property real switchPreferredHeight: 18
|
||||
property real switchPreferredWidth: 48
|
||||
property real switchIndicatorPreferredHeight: 26
|
||||
property real switchIndicatorPreferredWidth: 26
|
||||
|
||||
// Modal Popup
|
||||
property real modalPopupRadius: 4
|
||||
property real modalPopupDropShadowSamples: 16
|
||||
|
|
|
@ -133,12 +133,11 @@ Rectangle {
|
|||
onActivated: contactSearchBar.forceActiveFocus()
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: "Return"
|
||||
context: Qt.ApplicationShortcut
|
||||
onActivated: {
|
||||
Keys.onPressed: function (keyEvent) {
|
||||
if (keyEvent.matches(StandardKey.InsertParagraphSeparator)) {
|
||||
if (contactSearchBar.text !== "") {
|
||||
returnPressedWhileSearching()
|
||||
keyEvent.accepted = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -95,6 +95,10 @@ Rectangle {
|
|||
rejected()
|
||||
}
|
||||
}
|
||||
|
||||
onRejected: {
|
||||
backupBtn.forceActiveFocus()
|
||||
}
|
||||
}
|
||||
|
||||
color: JamiTheme.backgroundColor
|
||||
|
@ -157,10 +161,17 @@ Rectangle {
|
|||
font.pointSize: JamiTheme.textFontSize
|
||||
}
|
||||
|
||||
Switch {
|
||||
JamiSwitch {
|
||||
id: passwordSwitch
|
||||
|
||||
Layout.alignment: Qt.AlignRight
|
||||
|
||||
focus: visible
|
||||
|
||||
KeyNavigation.tab: backupBtn
|
||||
KeyNavigation.up: skipBackupBtn
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onToggled: AppSettingsManager.setValue(Settings.NeverShowMeAgain, checked)
|
||||
}
|
||||
}
|
||||
|
@ -177,10 +188,16 @@ Rectangle {
|
|||
hoveredColor: JamiTheme.buttonTintedGreyHovered
|
||||
pressedColor: JamiTheme.buttonTintedGreyPressed
|
||||
|
||||
KeyNavigation.tab: skipBackupBtn
|
||||
KeyNavigation.up: passwordSwitch
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: exportDialog.open()
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: skipBackupBtn
|
||||
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
Layout.bottomMargin: JamiTheme.wizardViewPageBackButtonMargins
|
||||
Layout.preferredWidth: preferredWidth
|
||||
|
@ -192,6 +209,10 @@ Rectangle {
|
|||
pressedColor: JamiTheme.buttonTintedGreyPressed
|
||||
outlined: true
|
||||
|
||||
KeyNavigation.tab: passwordSwitch
|
||||
KeyNavigation.up: backupBtn
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: WizardViewStepModel.nextStep()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -62,11 +62,6 @@ Rectangle {
|
|||
|
||||
color: JamiTheme.backgroundColor
|
||||
|
||||
onVisibleChanged: {
|
||||
if (visible)
|
||||
accountManagerEdit.focus = true
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: connectToAccountManagerPageColumnLayout
|
||||
|
||||
|
@ -104,6 +99,8 @@ Rectangle {
|
|||
Layout.preferredWidth: connectBtn.width
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
|
||||
focus: visible
|
||||
|
||||
selectByMouse: true
|
||||
placeholderText: JamiStrings.jamiManagementServerURL
|
||||
font.pointSize: JamiTheme.textFontSize
|
||||
|
@ -111,6 +108,16 @@ Rectangle {
|
|||
|
||||
borderColorMode: MaterialLineEdit.NORMAL
|
||||
|
||||
KeyNavigation.tab: usernameManagerEdit
|
||||
KeyNavigation.up: {
|
||||
if (backButton.visible)
|
||||
return backButton
|
||||
else if (connectBtn.enabled)
|
||||
return connectBtn
|
||||
return passwordManagerEdit
|
||||
}
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onTextChanged: errorText = ""
|
||||
}
|
||||
|
||||
|
@ -140,6 +147,10 @@ Rectangle {
|
|||
|
||||
borderColorMode: MaterialLineEdit.NORMAL
|
||||
|
||||
KeyNavigation.tab: passwordManagerEdit
|
||||
KeyNavigation.up: accountManagerEdit
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onTextChanged: errorText = ""
|
||||
}
|
||||
|
||||
|
@ -158,6 +169,16 @@ Rectangle {
|
|||
echoMode: TextInput.Password
|
||||
borderColorMode: MaterialLineEdit.NORMAL
|
||||
|
||||
KeyNavigation.tab: {
|
||||
if (connectBtn.enabled)
|
||||
return connectBtn
|
||||
else if (backButton.visible)
|
||||
return backButton
|
||||
return accountManagerEdit
|
||||
}
|
||||
KeyNavigation.up: usernameManagerEdit
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onTextChanged: errorText = ""
|
||||
}
|
||||
|
||||
|
@ -177,7 +198,17 @@ Rectangle {
|
|||
&& passwordManagerEdit.text.length !== 0
|
||||
&& !spinnerTriggered
|
||||
|
||||
KeyNavigation.tab: {
|
||||
if (backButton.visible)
|
||||
return backButton
|
||||
return accountManagerEdit
|
||||
}
|
||||
KeyNavigation.up: passwordManagerEdit
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: {
|
||||
if (connectBtn.focus)
|
||||
accountManagerEdit.forceActiveFocus()
|
||||
spinnerTriggered = true
|
||||
|
||||
WizardViewStepModel.accountCreationInfo =
|
||||
|
@ -216,6 +247,14 @@ Rectangle {
|
|||
|
||||
preferredSize: JamiTheme.wizardViewPageBackButtonSize
|
||||
|
||||
KeyNavigation.tab: accountManagerEdit
|
||||
KeyNavigation.up: {
|
||||
if (connectBtn.enabled)
|
||||
return connectBtn
|
||||
return passwordManagerEdit
|
||||
}
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: WizardViewStepModel.previousStep()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -131,6 +131,11 @@ Rectangle {
|
|||
|
||||
focus: visible
|
||||
|
||||
KeyNavigation.tab: chooseUsernameButton.enabled ? chooseUsernameButton :
|
||||
skipButton
|
||||
KeyNavigation.up: backButton
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
placeholderText: isRendezVous ? JamiStrings.chooseAName :
|
||||
JamiStrings.chooseYourUserName
|
||||
}
|
||||
|
@ -174,6 +179,10 @@ Rectangle {
|
|||
hoveredColor: JamiTheme.buttonTintedBlueHovered
|
||||
pressedColor: JamiTheme.buttonTintedBluePressed
|
||||
|
||||
KeyNavigation.tab: skipButton
|
||||
KeyNavigation.up: usernameEdit
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: WizardViewStepModel.nextStep()
|
||||
}
|
||||
|
||||
|
@ -190,6 +199,11 @@ Rectangle {
|
|||
pressedColor: JamiTheme.buttonTintedGreyPressed
|
||||
outlined: true
|
||||
|
||||
KeyNavigation.tab: backButton
|
||||
KeyNavigation.up: chooseUsernameButton.enabled ? chooseUsernameButton :
|
||||
usernameEdit
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: {
|
||||
usernameEdit.clear()
|
||||
WizardViewStepModel.nextStep()
|
||||
|
@ -215,8 +229,14 @@ Rectangle {
|
|||
|
||||
property int stackIndex: 1
|
||||
|
||||
focus: visible
|
||||
|
||||
color: JamiTheme.backgroundColor
|
||||
|
||||
KeyNavigation.tab: passwordSwitch
|
||||
KeyNavigation.up: passwordSwitch
|
||||
KeyNavigation.down: passwordSwitch
|
||||
|
||||
ColumnLayout {
|
||||
id: passwordColumnLayout
|
||||
|
||||
|
@ -239,7 +259,7 @@ Rectangle {
|
|||
font.pointSize: JamiTheme.textFontSize + 3
|
||||
}
|
||||
|
||||
Switch {
|
||||
JamiSwitch {
|
||||
id: passwordSwitch
|
||||
|
||||
objectName: "passwordSwitch"
|
||||
|
@ -247,6 +267,10 @@ Rectangle {
|
|||
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
|
||||
Layout.leftMargin: -JamiTheme.wizardViewPageLayoutSpacing
|
||||
Layout.topMargin: 5
|
||||
|
||||
KeyNavigation.tab: checked ? passwordEdit : createAccountButton
|
||||
KeyNavigation.up: backButton
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
}
|
||||
|
||||
BubbleLabel {
|
||||
|
@ -274,6 +298,10 @@ Rectangle {
|
|||
placeholderText: JamiStrings.password
|
||||
font.pointSize: JamiTheme.textFontSize
|
||||
font.kerning: true
|
||||
|
||||
KeyNavigation.tab: passwordConfirmEdit
|
||||
KeyNavigation.up: passwordSwitch
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
}
|
||||
|
||||
MaterialLineEdit {
|
||||
|
@ -292,6 +320,11 @@ Rectangle {
|
|||
placeholderText: JamiStrings.confirmPassword
|
||||
font.pointSize: JamiTheme.textFontSize
|
||||
font.kerning: true
|
||||
|
||||
KeyNavigation.tab: createAccountButton.enabled ? createAccountButton :
|
||||
backButton
|
||||
KeyNavigation.up: passwordEdit
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
}
|
||||
|
||||
Label {
|
||||
|
@ -328,6 +361,10 @@ Rectangle {
|
|||
hoveredColor: JamiTheme.buttonTintedBlueHovered
|
||||
pressedColor: JamiTheme.buttonTintedBluePressed
|
||||
|
||||
KeyNavigation.tab: backButton
|
||||
KeyNavigation.up: passwordSwitch.checked ? passwordConfirmEdit : passwordSwitch
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: {
|
||||
WizardViewStepModel.accountCreationInfo =
|
||||
JamiQmlUtils.setUpAccountCreationInputPara(
|
||||
|
@ -361,6 +398,20 @@ Rectangle {
|
|||
|
||||
preferredSize: JamiTheme.wizardViewPageBackButtonSize
|
||||
|
||||
KeyNavigation.tab: {
|
||||
if (createAccountStack.currentIndex === nameRegistrationPage.stackIndex)
|
||||
return usernameEdit
|
||||
else
|
||||
return passwordSwitch
|
||||
}
|
||||
KeyNavigation.up: {
|
||||
if (createAccountStack.currentIndex === nameRegistrationPage.stackIndex)
|
||||
return skipButton
|
||||
else
|
||||
return createAccountButton.enabled ? createAccountButton : passwordConfirmEdit
|
||||
}
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: WizardViewStepModel.previousStep()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -98,6 +98,10 @@ Rectangle {
|
|||
placeholderText: JamiStrings.server
|
||||
font.pointSize: JamiTheme.textFontSize
|
||||
font.kerning: true
|
||||
|
||||
KeyNavigation.tab: sipProxyEdit
|
||||
KeyNavigation.up: backButton
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
}
|
||||
|
||||
MaterialLineEdit {
|
||||
|
@ -113,6 +117,10 @@ Rectangle {
|
|||
placeholderText: JamiStrings.proxy
|
||||
font.pointSize: JamiTheme.textFontSize
|
||||
font.kerning: true
|
||||
|
||||
KeyNavigation.tab: sipUsernameEdit
|
||||
KeyNavigation.up: sipServernameEdit
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
}
|
||||
|
||||
MaterialLineEdit {
|
||||
|
@ -128,6 +136,10 @@ Rectangle {
|
|||
placeholderText: JamiStrings.username
|
||||
font.pointSize: JamiTheme.textFontSize
|
||||
font.kerning: true
|
||||
|
||||
KeyNavigation.tab: sipPasswordEdit
|
||||
KeyNavigation.up: sipProxyEdit
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
}
|
||||
|
||||
MaterialLineEdit {
|
||||
|
@ -144,6 +156,10 @@ Rectangle {
|
|||
placeholderText: JamiStrings.password
|
||||
font.pointSize: JamiTheme.textFontSize
|
||||
font.kerning: true
|
||||
|
||||
KeyNavigation.tab: createAccountButton
|
||||
KeyNavigation.up: sipUsernameEdit
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
|
@ -161,6 +177,10 @@ Rectangle {
|
|||
hoveredColor: JamiTheme.buttonTintedBlueHovered
|
||||
pressedColor: JamiTheme.buttonTintedBluePressed
|
||||
|
||||
KeyNavigation.tab: backButton
|
||||
KeyNavigation.up: sipPasswordEdit
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: {
|
||||
WizardViewStepModel.accountCreationInfo =
|
||||
JamiQmlUtils.setUpAccountCreationInputPara(
|
||||
|
@ -182,6 +202,10 @@ Rectangle {
|
|||
|
||||
preferredSize: JamiTheme.wizardViewPageBackButtonSize
|
||||
|
||||
KeyNavigation.tab: sipServernameEdit
|
||||
KeyNavigation.up: createAccountButton
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: WizardViewStepModel.previousStep()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,6 +42,7 @@ Rectangle {
|
|||
function clearAllTextFields() {
|
||||
connectBtn.spinnerTriggered = false
|
||||
passwordFromBackupEdit.clear()
|
||||
filePath = ""
|
||||
errorText = ""
|
||||
fileImportBtnText = JamiStrings.archive
|
||||
}
|
||||
|
@ -75,6 +76,16 @@ Rectangle {
|
|||
|
||||
nameFilters: [JamiStrings.jamiArchiveFiles + " (*.gz)", JamiStrings.allFiles + " (*)"]
|
||||
|
||||
onVisibleChanged: {
|
||||
if (!visible) {
|
||||
rejected()
|
||||
}
|
||||
}
|
||||
|
||||
onRejected: {
|
||||
fileImportBtn.forceActiveFocus()
|
||||
}
|
||||
|
||||
onAccepted: {
|
||||
filePath = file
|
||||
if (file.length !== "") {
|
||||
|
@ -116,6 +127,16 @@ Rectangle {
|
|||
hoveredColor: JamiTheme.buttonTintedGreyHovered
|
||||
pressedColor: JamiTheme.buttonTintedGreyPressed
|
||||
|
||||
KeyNavigation.tab: passwordFromBackupEdit
|
||||
KeyNavigation.up: {
|
||||
if (backButton.visible)
|
||||
return backButton
|
||||
else if (connectBtn.enabled)
|
||||
return connectBtn
|
||||
return passwordFromBackupEdit
|
||||
}
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: {
|
||||
errorText = ""
|
||||
importFromFileDialog.open()
|
||||
|
@ -161,6 +182,16 @@ Rectangle {
|
|||
echoMode: TextInput.Password
|
||||
borderColorMode: MaterialLineEdit.NORMAL
|
||||
|
||||
KeyNavigation.tab: {
|
||||
if (connectBtn.enabled)
|
||||
return connectBtn
|
||||
else if (backButton.visible)
|
||||
return backButton
|
||||
return fileImportBtn
|
||||
}
|
||||
KeyNavigation.up: fileImportBtn
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onTextChanged: errorText = ""
|
||||
}
|
||||
|
||||
|
@ -185,7 +216,17 @@ Rectangle {
|
|||
return false
|
||||
}
|
||||
|
||||
KeyNavigation.tab: {
|
||||
if (backButton.visible)
|
||||
return backButton
|
||||
return fileImportBtn
|
||||
}
|
||||
KeyNavigation.up: passwordFromBackupEdit
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: {
|
||||
if (connectBtn.focus)
|
||||
fileImportBtn.forceActiveFocus()
|
||||
spinnerTriggered = true
|
||||
|
||||
WizardViewStepModel.accountCreationInfo =
|
||||
|
@ -225,6 +266,14 @@ Rectangle {
|
|||
|
||||
preferredSize: JamiTheme.wizardViewPageBackButtonSize
|
||||
|
||||
KeyNavigation.tab: fileImportBtn
|
||||
KeyNavigation.up: {
|
||||
if (connectBtn.enabled)
|
||||
return connectBtn
|
||||
return passwordFromBackupEdit
|
||||
}
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: WizardViewStepModel.previousStep()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -95,6 +95,14 @@ Rectangle {
|
|||
echoMode: TextInput.Password
|
||||
borderColorMode: MaterialLineEdit.NORMAL
|
||||
|
||||
KeyNavigation.tab: pinFromDevice
|
||||
KeyNavigation.up: {
|
||||
if (backButton.visible)
|
||||
return backButton
|
||||
return pinFromDevice
|
||||
}
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onTextChanged: errorText = ""
|
||||
}
|
||||
|
||||
|
@ -133,6 +141,16 @@ Rectangle {
|
|||
|
||||
borderColorMode: MaterialLineEdit.NORMAL
|
||||
|
||||
KeyNavigation.tab: {
|
||||
if (connectBtn.enabled)
|
||||
return connectBtn
|
||||
else if (connectBtn.spinnerTriggered)
|
||||
return passwordFromDevice
|
||||
return backButton
|
||||
}
|
||||
KeyNavigation.up: passwordFromDevice
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onTextChanged: errorText = ""
|
||||
}
|
||||
|
||||
|
@ -149,6 +167,10 @@ Rectangle {
|
|||
|
||||
enabled: pinFromDevice.text.length !== 0 && !spinnerTriggered
|
||||
|
||||
KeyNavigation.tab: backButton
|
||||
KeyNavigation.up: pinFromDevice
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: {
|
||||
spinnerTriggered = true
|
||||
|
||||
|
@ -186,6 +208,10 @@ Rectangle {
|
|||
|
||||
visible: !connectBtn.spinnerTriggered
|
||||
|
||||
KeyNavigation.tab: passwordFromDevice
|
||||
KeyNavigation.up: connectBtn
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
preferredSize: JamiTheme.wizardViewPageBackButtonSize
|
||||
|
||||
onClicked: WizardViewStepModel.previousStep()
|
||||
|
|
|
@ -104,6 +104,14 @@ Rectangle {
|
|||
imageId: createdAccountId
|
||||
avatarSize: 200
|
||||
|
||||
onFocusOnPreviousItem: {
|
||||
skipProfileSavingButton.forceActiveFocus()
|
||||
}
|
||||
|
||||
onFocusOnNextItem: {
|
||||
aliasEdit.forceActiveFocus()
|
||||
}
|
||||
|
||||
onVisibleChanged: {
|
||||
if (visible)
|
||||
LRCInstance.currentAccountAvatarSet = false
|
||||
|
@ -138,6 +146,16 @@ Rectangle {
|
|||
|
||||
fieldLayoutWidth: saveProfileBtn.width
|
||||
|
||||
KeyNavigation.tab: saveProfileBtn
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
Keys.onPressed: function (keyEvent) {
|
||||
if (keyEvent.matches(StandardKey.MoveToPreviousLine)) {
|
||||
setAvatarWidget.focusOnPreviousPhotoBoothItem()
|
||||
keyEvent.accepted = true
|
||||
}
|
||||
}
|
||||
|
||||
onTextEdited: {
|
||||
if (LRCInstance.currentAccountAvatarSet)
|
||||
return
|
||||
|
@ -170,6 +188,10 @@ Rectangle {
|
|||
return JamiStrings.creatingAccount
|
||||
}
|
||||
|
||||
KeyNavigation.tab: skipProfileSavingButton
|
||||
KeyNavigation.up: aliasEdit
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: {
|
||||
AccountAdapter.setCurrAccDisplayName(aliasEdit.text)
|
||||
WizardViewStepModel.nextStep()
|
||||
|
@ -177,6 +199,10 @@ Rectangle {
|
|||
}
|
||||
|
||||
MaterialButton {
|
||||
id: skipProfileSavingButton
|
||||
|
||||
objectName: "skipProfileSavingButton"
|
||||
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
Layout.preferredWidth: preferredWidth
|
||||
Layout.preferredHeight: preferredHeight
|
||||
|
@ -188,6 +214,16 @@ Rectangle {
|
|||
pressedColor: JamiTheme.buttonTintedGreyPressed
|
||||
outlined: true
|
||||
|
||||
KeyNavigation.up: saveProfileBtn
|
||||
|
||||
Keys.onPressed: function (keyEvent) {
|
||||
if (keyEvent.matches(StandardKey.MoveToNextLine) ||
|
||||
keyEvent.key === Qt.Key_Tab) {
|
||||
setAvatarWidget.focusOnNextPhotoBoothItem()
|
||||
keyEvent.accepted = true
|
||||
}
|
||||
}
|
||||
|
||||
onClicked: {
|
||||
AccountAdapter.setCurrentAccountAvatarBase64()
|
||||
aliasEdit.clear()
|
||||
|
|
|
@ -48,6 +48,16 @@ Rectangle {
|
|||
}
|
||||
}
|
||||
|
||||
// Make sure that welcomePage grab activeFocus initially (when there is no account)
|
||||
onVisibleChanged: {
|
||||
if (visible)
|
||||
forceActiveFocus()
|
||||
}
|
||||
|
||||
KeyNavigation.tab: newAccountButton
|
||||
KeyNavigation.up: newAccountButton
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
ColumnLayout {
|
||||
id: welcomePageColumnLayout
|
||||
|
||||
|
@ -98,6 +108,13 @@ Rectangle {
|
|||
hoveredColor: JamiTheme.buttonTintedBlueHovered
|
||||
pressedColor: JamiTheme.buttonTintedBluePressed
|
||||
|
||||
KeyNavigation.tab: newRdvButton
|
||||
KeyNavigation.up: backButton.visible ? backButton :
|
||||
(showAdvancedButton.showAdvanced ?
|
||||
newSIPAccountButton :
|
||||
showAdvancedButton)
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: WizardViewStepModel.startAccountCreationFlow(
|
||||
WizardViewStepModel.AccountCreationOption.CreateJamiAccount)
|
||||
}
|
||||
|
@ -117,6 +134,10 @@ Rectangle {
|
|||
hoveredColor: JamiTheme.buttonTintedBlueHovered
|
||||
pressedColor: JamiTheme.buttonTintedBluePressed
|
||||
|
||||
KeyNavigation.tab: fromDeviceButton
|
||||
KeyNavigation.up: newAccountButton
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: WizardViewStepModel.startAccountCreationFlow(
|
||||
WizardViewStepModel.AccountCreationOption.CreateRendezVous)
|
||||
}
|
||||
|
@ -136,6 +157,10 @@ Rectangle {
|
|||
hoveredColor: JamiTheme.buttonTintedBlueHovered
|
||||
pressedColor: JamiTheme.buttonTintedBluePressed
|
||||
|
||||
KeyNavigation.tab: fromBackupButton
|
||||
KeyNavigation.up: newRdvButton
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: WizardViewStepModel.startAccountCreationFlow(
|
||||
WizardViewStepModel.AccountCreationOption.ImportFromDevice)
|
||||
}
|
||||
|
@ -155,6 +180,10 @@ Rectangle {
|
|||
hoveredColor: JamiTheme.buttonTintedBlueHovered
|
||||
pressedColor: JamiTheme.buttonTintedBluePressed
|
||||
|
||||
KeyNavigation.tab: showAdvancedButton
|
||||
KeyNavigation.up: fromDeviceButton
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: WizardViewStepModel.startAccountCreationFlow(
|
||||
WizardViewStepModel.AccountCreationOption.ImportFromBackup)
|
||||
}
|
||||
|
@ -181,8 +210,13 @@ Rectangle {
|
|||
|
||||
hoverEnabled: true
|
||||
|
||||
KeyNavigation.tab: showAdvanced ? connectAccountManagerButton :
|
||||
(backButton.visible ? backButton : newAccountButton)
|
||||
KeyNavigation.up: fromBackupButton
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: {
|
||||
showAdvanced = !showAdvanced
|
||||
showAdvanced = !showAdvanced
|
||||
connectAccountManagerButton.visible = showAdvanced
|
||||
newSIPAccountButton.visible = showAdvanced
|
||||
}
|
||||
|
@ -205,6 +239,10 @@ Rectangle {
|
|||
hoveredColor: JamiTheme.buttonTintedBlueHovered
|
||||
pressedColor: JamiTheme.buttonTintedBluePressed
|
||||
|
||||
KeyNavigation.tab: newSIPAccountButton
|
||||
KeyNavigation.up: showAdvancedButton
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: WizardViewStepModel.startAccountCreationFlow(
|
||||
WizardViewStepModel.AccountCreationOption.ConnectToAccountManager)
|
||||
}
|
||||
|
@ -227,6 +265,10 @@ Rectangle {
|
|||
hoveredColor: JamiTheme.buttonTintedBlueHovered
|
||||
pressedColor: JamiTheme.buttonTintedBluePressed
|
||||
|
||||
KeyNavigation.tab: backButton.visible ? backButton : newAccountButton
|
||||
KeyNavigation.up: connectAccountManagerButton
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: WizardViewStepModel.startAccountCreationFlow(
|
||||
WizardViewStepModel.AccountCreationOption.CreateSipAccount)
|
||||
}
|
||||
|
@ -253,6 +295,10 @@ Rectangle {
|
|||
|
||||
visible: UtilsAdapter.getAccountListSize()
|
||||
|
||||
KeyNavigation.tab: newAccountButton
|
||||
KeyNavigation.up: newSIPAccountButton
|
||||
KeyNavigation.down: KeyNavigation.tab
|
||||
|
||||
onClicked: WizardViewStepModel.previousStep()
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue