refactor PageSetupWizardProtocols

This commit is contained in:
Cyril Anisimov 2024-12-29 20:26:22 +01:00
parent 867ad8ee3c
commit 2c1f3eaf3a

View file

@ -34,109 +34,53 @@ PageType {
} }
} }
ColumnLayout { BackButtonType {
id: backButtonLayout id: backButton
anchors.top: parent.top anchors.top: parent.top
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
anchors.topMargin: 20 anchors.topMargin: 20
BackButtonType {
id: backButton
}
} }
FlickableType { ListView {
id: fl id: listView
anchors.top: backButtonLayout.bottom anchors.top: backButton.bottom
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
contentHeight: content.implicitHeight + content.anchors.topMargin + content.anchors.bottomMargin
Column {
id: content
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
anchors.bottomMargin: 20 anchors.left: parent.left
Item { property bool isFocusable: true
width: parent.width
height: header.implicitHeight ScrollBar.vertical: ScrollBarType {}
header: ColumnLayout {
width: listView.width
HeaderType { HeaderType {
id: header id: header
anchors.fill: parent Layout.fillWidth: true
Layout.leftMargin: 16
anchors.leftMargin: 16 Layout.rightMargin: 16
anchors.rightMargin: 16 Layout.bottomMargin: 16
width: parent.width
headerText: qsTr("VPN protocol") headerText: qsTr("VPN protocol")
descriptionText: qsTr("Choose the one with the highest priority for you. Later, you can install other protocols and additional services, such as DNS proxy and SFTP.") descriptionText: qsTr("Choose the one with the highest priority for you. Later, you can install other protocols and additional services, such as DNS proxy and SFTP.")
} }
} }
ListView {
id: containers
width: parent.width
height: containers.contentItem.height
// currentIndex: -1
clip: true
interactive: false
model: proxyContainersModel model: proxyContainersModel
clip: true
spacing: 0
reuseItems: true
snapMode: ListView.SnapToItem
function ensureCurrentItemVisible() { delegate: ColumnLayout {
if (currentIndex >= 0) { width: listView.width
if (currentItem.y < fl.contentY) {
fl.contentY = currentItem.y
} else if (currentItem.y + currentItem.height + header.height > fl.contentY + fl.height) {
fl.contentY = currentItem.y + currentItem.height + header.height - fl.height + 40 // 40 is a bottom margin
}
}
}
activeFocusOnTab: true
Keys.onTabPressed: {
if (currentIndex < this.count - 1) {
this.incrementCurrentIndex()
} else {
this.currentIndex = 0
focusItem.forceActiveFocus()
}
ensureCurrentItemVisible()
}
onVisibleChanged: {
if (visible) {
currentIndex = 0
}
}
delegate: Item {
implicitWidth: containers.width
implicitHeight: delegateContent.implicitHeight
onActiveFocusChanged: {
if (activeFocus) {
container.rightButton.forceActiveFocus()
}
}
ColumnLayout {
id: delegateContent
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
LabelWithButtonType { LabelWithButtonType {
id: container
Layout.fillWidth: true Layout.fillWidth: true
text: name text: name
@ -153,6 +97,3 @@ PageType {
} }
} }
} }
}
}
}