linphone-desktop/Linphone/view/Page/Form/Settings/AbstractSettingsMenu.qml
Alexandre Jörgensen d2413f33a9 Accessibility fixs :
* Fix focus on first relevant element after changing page with navbar #LINQT-2202
* Improve focus navigation on call history list #LINQT-2201
* Fix missing accessible button name in dialer #LINQT-2221
* Switch from ScrollView to Flickable in parameters
* Add auto scroll on keyboard navigation in settings #LINQT-2219
* Correct back button in settings #LINQT-2209
* Fix focus when open settings page #LINQT-2208
* Arrow in vertical tab bar now change button focus instead of changing page #LINQT-2194
* Fix focus and accessibility label in magic search bar #LINQT-2205
2026-03-09 10:11:53 +01:00

99 lines
3 KiB
QML

import QtQuick
import QtQuick.Effects
import QtQuick.Layouts
import QtQuick.Controls.Basic as Control
import Linphone
import UtilsCpp
import 'qrc:/qt/qml/Linphone/view/Control/Tool/Helper/utils.js' as Utils
import 'qrc:/qt/qml/Linphone/view/Style/buttonStyle.js' as ButtonStyle
AbstractMainPage {
id: mainItem
showDefaultItem: false
property var layoutsPath
property var titleText
signal goBack()
signal goBackRequested()
function layoutUrl(name) {
return layoutsPath+"/"+name+".qml"
}
property var families
property var defaultIndex: -1
leftPanelContent: ColumnLayout {
id: leftPanel
Layout.fillWidth: true
Layout.fillHeight: true
property real sideMargin: Utils.getSizeWithScreenRatio(45)
spacing: Utils.getSizeWithScreenRatio(5)
RowLayout {
Layout.fillWidth: true
Layout.leftMargin: leftPanel.sideMargin
Layout.rightMargin: leftPanel.sideMargin
spacing: Utils.getSizeWithScreenRatio(5)
Button {
id: backButton
icon.width: Utils.getSizeWithScreenRatio(24)
icon.height: Utils.getSizeWithScreenRatio(24)
Layout.preferredWidth: Utils.getSizeWithScreenRatio(30)
Layout.preferredHeight: Utils.getSizeWithScreenRatio(30)
icon.source: AppIcons.leftArrow
style: ButtonStyle.noBackground
focus: true
onClicked: {
mainItem.goBackRequested()
}
//: Back to previous menu
Accessible.name: qsTr("back_previous_menu_accessible_name")
}
Text {
text: titleText
color: DefaultStyle.main2_700
font: Typography.h3
}
Item {
Layout.fillWidth: true
}
}
ListView {
id: familiesList
Layout.fillWidth: true
Layout.fillHeight: true
model: mainItem.families
Layout.topMargin: Utils.getSizeWithScreenRatio(41)
Layout.leftMargin: leftPanel.sideMargin
property int selectedIndex: mainItem.defaultIndex != -1 ? mainItem.defaultIndex : 0
activeFocusOnTab: true
spacing: Utils.getSizeWithScreenRatio(5)
Accessible.role: Accessible.List
//: Settings page selection
Accessible.name: qsTr("settings_page_selection_accessible_name")
delegate: SettingsMenuItem {
titleText: modelData.title
visible: modelData.visible != undefined ? modelData.visible : true
isSelected: familiesList.selectedIndex == index
focus: index == 0
onSelected: {
familiesList.selectedIndex = index
rightPanelStackView.clear()
rightPanelStackView.push(layoutUrl(modelData.layout), { titleText: modelData.title, model: modelData.model, container: rightPanelStackView})
}
}
}
Component.onCompleted: {
let initialEntry = mainItem.families[familiesList.selectedIndex]
rightPanelStackView.push(layoutUrl(initialEntry.layout), { titleText: initialEntry.title, model: initialEntry.model, container: rightPanelStackView})
familiesList.currentIndex = familiesList.selectedIndex
}
}
Control.StackView.onActivated: {
familiesList.forceActiveFocus(FocusNavigator.doesLastFocusWasKeyboard() ? Qt.TabFocusReason : Qt.MouseFocusReason)
}
}