diff --git a/client/resources.qrc b/client/resources.qrc
index ff03a6e7..c5563618 100644
--- a/client/resources.qrc
+++ b/client/resources.qrc
@@ -192,7 +192,7 @@
ui/qml/Pages2/PageServiceTorWebsiteSettings.qml
ui/qml/Pages2/PageSettings.qml
ui/qml/Pages2/PageSettingsAbout.qml
- ui/qml/Pages2/PageSettingsApiLanguageList.qml
+ ui/qml/Pages2/PageSettingsApiAvailableCountries.qml
ui/qml/Pages2/PageSettingsApiServerInfo.qml
ui/qml/Pages2/PageSettingsApplication.qml
ui/qml/Pages2/PageSettingsAppSplitTunneling.qml
@@ -224,6 +224,7 @@
ui/qml/Pages2/PageShare.qml
ui/qml/Pages2/PageShareFullAccess.qml
ui/qml/Pages2/PageStart.qml
+ ui/qml/Components/RenameServerDrawer.qml
images/flagKit/ZW.svg
diff --git a/client/ui/controllers/pageController.h b/client/ui/controllers/pageController.h
index ffbdd3a1..428cf4f8 100644
--- a/client/ui/controllers/pageController.h
+++ b/client/ui/controllers/pageController.h
@@ -31,6 +31,8 @@ namespace PageLoader
PageSettingsLogging,
PageSettingsSplitTunneling,
PageSettingsAppSplitTunneling,
+ PageSettingsApiServerInfo,
+ PageSettingsApiAvailableCountries,
PageServiceSftpSettings,
PageServiceTorWebsiteSettings,
diff --git a/client/ui/qml/Components/RenameServerDrawer.qml b/client/ui/qml/Components/RenameServerDrawer.qml
new file mode 100644
index 00000000..d65b9bba
--- /dev/null
+++ b/client/ui/qml/Components/RenameServerDrawer.qml
@@ -0,0 +1,55 @@
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+import Style 1.0
+
+import "../Controls2"
+import "../Controls2/TextTypes"
+
+import "../Config"
+
+DrawerType2 {
+ property string serverNameText
+
+ id: root
+ objectName: "serverNameEditDrawer"
+
+ expandedStateContent: ColumnLayout {
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.topMargin: 32
+ anchors.leftMargin: 16
+ anchors.rightMargin: 16
+
+ TextFieldWithHeaderType {
+ id: serverName
+
+ Layout.fillWidth: true
+ headerText: qsTr("Server name")
+ textField.text: root.serverNameText
+ textField.maximumLength: 30
+ checkEmptyText: true
+ }
+
+ BasicButtonType {
+ id: saveButton
+
+ Layout.fillWidth: true
+
+ text: qsTr("Save")
+
+ clickedFunc: function() {
+ if (serverName.textField.text === "") {
+ return
+ }
+
+ if (serverName.textField.text !== root.serverNameText) {
+ ServersModel.setProcessedServerData("name", serverName.textField.text);
+ }
+ root.closeTriggered()
+ }
+ }
+ }
+}
diff --git a/client/ui/qml/Components/ServersListView.qml b/client/ui/qml/Components/ServersListView.qml
index dc5c5a33..8d591d86 100644
--- a/client/ui/qml/Components/ServersListView.qml
+++ b/client/ui/qml/Components/ServersListView.qml
@@ -110,7 +110,18 @@ ListView {
onClicked: function() {
ServersModel.processedIndex = index
- PageController.goToPage(PageEnum.PageSettingsServerInfo)
+
+ if (ServersModel.getProcessedServerData("isServerFromGatewayApi")) {
+ if (ServersModel.getProcessedServerData("isCountrySelectionAvailable")) {
+ PageController.goToPage(PageEnum.PageSettingsApiAvailableCountries)
+
+ } else {
+ PageController.goToPage(PageEnum.PageSettingsApiServerInfo)
+ }
+ } else {
+ PageController.goToPage(PageEnum.PageSettingsServerInfo)
+ }
+
drawer.closeTriggered()
}
}
diff --git a/client/ui/qml/Pages2/PageHome.qml b/client/ui/qml/Pages2/PageHome.qml
index ae29b80c..fc5f5326 100644
--- a/client/ui/qml/Pages2/PageHome.qml
+++ b/client/ui/qml/Pages2/PageHome.qml
@@ -297,7 +297,17 @@ PageType {
onClicked: {
ServersModel.processedIndex = ServersModel.defaultIndex
- PageController.goToPage(PageEnum.PageSettingsServerInfo)
+
+ if (ServersModel.getProcessedServerData("isServerFromGatewayApi")) {
+ if (ServersModel.getProcessedServerData("isCountrySelectionAvailable")) {
+ PageController.goToPage(PageEnum.PageSettingsApiAvailableCountries)
+
+ } else {
+ PageController.goToPage(PageEnum.PageSettingsApiServerInfo)
+ }
+ } else {
+ PageController.goToPage(PageEnum.PageSettingsServerInfo)
+ }
}
}
}
diff --git a/client/ui/qml/Pages2/PageSettingsApiLanguageList.qml b/client/ui/qml/Pages2/PageSettingsApiAvailableCountries.qml
similarity index 63%
rename from client/ui/qml/Pages2/PageSettingsApiLanguageList.qml
rename to client/ui/qml/Pages2/PageSettingsApiAvailableCountries.qml
index 30968b38..853a44a3 100644
--- a/client/ui/qml/Pages2/PageSettingsApiLanguageList.qml
+++ b/client/ui/qml/Pages2/PageSettingsApiAvailableCountries.qml
@@ -3,6 +3,8 @@ import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Dialogs
+import SortFilterProxyModel 0.2
+
import PageEnum 1.0
import Style 1.0
@@ -15,22 +17,86 @@ import "../Components"
PageType {
id: root
+ property var processedServer
+
+ Connections {
+ target: ServersModel
+
+ function onProcessedServerChanged() {
+ root.processedServer = proxyServersModel.get(0)
+ }
+ }
+
+ SortFilterProxyModel {
+ id: proxyServersModel
+ objectName: "proxyServersModel"
+
+ sourceModel: ServersModel
+ filters: [
+ ValueFilter {
+ roleName: "isCurrentlyProcessed"
+ value: true
+ }
+ ]
+
+ Component.onCompleted: {
+ root.processedServer = proxyServersModel.get(0)
+ }
+ }
+
ListView {
id: menuContent
property bool isFocusable: true
- width: parent.width
- height: parent.height
+ anchors.fill: parent
+
+ ScrollBar.vertical: ScrollBarType {}
clip: true
- interactive: true
+ reuseItems: true
+ snapMode: ListView.SnapToItem
+
model: ApiCountryModel
+ currentIndex: 0
+
ButtonGroup {
id: containersRadioButtonGroup
}
+ header: ColumnLayout {
+ width: menuContent.width
+
+ spacing: 4
+
+ BackButtonType {
+ id: backButton
+ objectName: "backButton"
+
+ Layout.topMargin: 20
+ }
+
+ HeaderType {
+ id: headerContent
+ objectName: "headerContent"
+
+ Layout.fillWidth: true
+ Layout.leftMargin: 16
+ Layout.rightMargin: 16
+ Layout.bottomMargin: 10
+
+ actionButtonImage: "qrc:/images/controls/settings.svg"
+
+ headerText: root.processedServer.name
+ descriptionText: ApiServicesModel.getSelectedServiceData("serviceDescription")
+
+ actionButtonFunction: function() {
+ PageController.goToPage(PageEnum.PageSettingsApiServerInfo)
+ }
+ }
+ }
+
delegate: ColumnLayout {
id: content
diff --git a/client/ui/qml/Pages2/PageSettingsApiServerInfo.qml b/client/ui/qml/Pages2/PageSettingsApiServerInfo.qml
index 1fc17218..4346e617 100644
--- a/client/ui/qml/Pages2/PageSettingsApiServerInfo.qml
+++ b/client/ui/qml/Pages2/PageSettingsApiServerInfo.qml
@@ -3,6 +3,8 @@ import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Dialogs
+import SortFilterProxyModel 0.2
+
import PageEnum 1.0
import Style 1.0
@@ -54,12 +56,40 @@ PageType {
readonly property string objectImageSource: "qrc:/images/controls/gauge.svg"
}
+ property var processedServer
+
+ Connections {
+ target: ServersModel
+
+ function onProcessedServerChanged() {
+ root.processedServer = proxyServersModel.get(0)
+ }
+ }
+
+ SortFilterProxyModel {
+ id: proxyServersModel
+ objectName: "proxyServersModel"
+
+ sourceModel: ServersModel
+ filters: [
+ ValueFilter {
+ roleName: "isCurrentlyProcessed"
+ value: true
+ }
+ ]
+
+ Component.onCompleted: {
+ root.processedServer = proxyServersModel.get(0)
+ }
+ }
+
ListView {
id: listView
- anchors.fill: parent
property bool isFocusable: true
+ anchors.fill: parent
+
Keys.onTabPressed: {
FocusController.nextKeyTabItem()
}
@@ -86,9 +116,54 @@ PageType {
ScrollBar.vertical: ScrollBarType {}
- model: labelsModel
clip: true
reuseItems: true
+ snapMode: ListView.SnapToItem
+
+ model: labelsModel
+
+ header: ColumnLayout {
+ width: listView.width
+
+ spacing: 4
+
+ BackButtonType {
+ id: backButton
+ objectName: "backButton"
+
+ Layout.topMargin: 20
+ }
+
+ HeaderType {
+ id: headerContent
+ objectName: "headerContent"
+
+ Layout.fillWidth: true
+ Layout.leftMargin: 16
+ Layout.rightMargin: 16
+ Layout.bottomMargin: 10
+
+ actionButtonImage: "qrc:/images/controls/edit-3.svg"
+
+ headerText: root.processedServer.name
+ descriptionText: ApiServicesModel.getSelectedServiceData("serviceDescription")
+
+ actionButtonFunction: function() {
+ serverNameEditDrawer.openTriggered()
+ }
+ }
+
+ RenameServerDrawer {
+ id: serverNameEditDrawer
+
+ parent: root
+
+ anchors.fill: parent
+ expandedHeight: root.height * 0.35
+
+ serverNameText: root.processedServer.name
+ }
+ }
delegate: ColumnLayout {
width: listView.width
diff --git a/client/ui/qml/Pages2/PageSettingsServerInfo.qml b/client/ui/qml/Pages2/PageSettingsServerInfo.qml
index 9abb6ae2..d350ebef 100644
--- a/client/ui/qml/Pages2/PageSettingsServerInfo.qml
+++ b/client/ui/qml/Pages2/PageSettingsServerInfo.qml
@@ -22,8 +22,6 @@ PageType {
readonly property int pageSettingsServerProtocols: 0
readonly property int pageSettingsServerServices: 1
readonly property int pageSettingsServerData: 2
- readonly property int pageSettingsApiServerInfo: 3
- readonly property int pageSettingsApiLanguageList: 4
property var processedServer
@@ -71,15 +69,6 @@ PageType {
BackButtonType {
id: backButton
objectName: "backButton"
-
- backButtonFunction: function() {
- if (nestedStackView.currentIndex === root.pageSettingsApiServerInfo &&
- root.processedServer.isCountrySelectionAvailable) {
- nestedStackView.currentIndex = root.pageSettingsApiLanguageList
- } else {
- PageController.closePage()
- }
- }
}
HeaderType {
@@ -91,18 +80,11 @@ PageType {
Layout.rightMargin: 16
Layout.bottomMargin: 10
- actionButtonImage: nestedStackView.currentIndex === root.pageSettingsApiLanguageList ? "qrc:/images/controls/settings.svg"
- : "qrc:/images/controls/edit-3.svg"
+ actionButtonImage: "qrc:/images/controls/edit-3.svg"
headerText: root.processedServer.name
descriptionText: {
- if (root.processedServer.isServerFromGatewayApi) {
- if (nestedStackView.currentIndex === root.pageSettingsApiLanguageList) {
- return qsTr("Subscription is valid until ") + ApiServicesModel.getSelectedServiceData("endDate")
- } else {
- return ApiServicesModel.getSelectedServiceData("serviceDescription")
- }
- } else if (root.processedServer.isServerFromTelegramApi) {
+ if (root.processedServer.isServerFromTelegramApi) {
return root.processedServer.serverDescription
} else if (root.processedServer.hasWriteAccess) {
return root.processedServer.credentialsLogin + " ยท " + root.processedServer.hostName
@@ -112,60 +94,19 @@ PageType {
}
actionButtonFunction: function() {
- if (nestedStackView.currentIndex === root.pageSettingsApiLanguageList) {
- nestedStackView.currentIndex = root.pageSettingsApiServerInfo
- } else {
- serverNameEditDrawer.openTriggered()
- }
+ serverNameEditDrawer.openTriggered()
}
}
- DrawerType2 {
+ RenameServerDrawer {
id: serverNameEditDrawer
- objectName: "serverNameEditDrawer"
parent: root
anchors.fill: parent
expandedHeight: root.height * 0.35
- expandedStateContent: ColumnLayout {
- anchors.top: parent.top
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.topMargin: 32
- anchors.leftMargin: 16
- anchors.rightMargin: 16
-
- TextFieldWithHeaderType {
- id: serverName
-
- Layout.fillWidth: true
- headerText: qsTr("Server name")
- textField.text: root.processedServer.name
- textField.maximumLength: 30
- checkEmptyText: true
- }
-
- BasicButtonType {
- id: saveButton
-
- Layout.fillWidth: true
-
- text: qsTr("Save")
-
- clickedFunc: function() {
- if (serverName.textField.text === "") {
- return
- }
-
- if (serverName.textField.text !== root.processedServer.name) {
- ServersModel.setProcessedServerData("name", serverName.textField.text);
- }
- serverNameEditDrawer.closeTriggered()
- }
- }
- }
+ serverNameText: root.processedServer.name
}
TabBar {
@@ -181,8 +122,6 @@ PageType {
color: AmneziaStyle.color.transparent
}
- visible: !ServersModel.getProcessedServerData("isServerFromGatewayApi")
-
TabButtonType {
id: protocolsTab
@@ -221,9 +160,7 @@ PageType {
Layout.fillWidth: true
- currentIndex: ServersModel.getProcessedServerData("isServerFromGatewayApi") ?
- (ServersModel.getProcessedServerData("isCountrySelectionAvailable") ?
- root.pageSettingsApiLanguageList : root.pageSettingsApiServerInfo) : tabBar.currentIndex
+ currentIndex: tabBar.currentIndex
PageSettingsServerProtocols {
id: protocolsPage
@@ -239,16 +176,6 @@ PageType {
id: dataPage
stackView: root.stackView
}
-
- PageSettingsApiServerInfo {
- id: apiInfoPage
- stackView: root.stackView
- }
-
- PageSettingsApiLanguageList {
- id: apiLanguageListPage
- stackView: root.stackView
- }
}
}
}
diff --git a/client/ui/qml/Pages2/PageSettingsServersList.qml b/client/ui/qml/Pages2/PageSettingsServersList.qml
index 17337a48..b13f4947 100644
--- a/client/ui/qml/Pages2/PageSettingsServersList.qml
+++ b/client/ui/qml/Pages2/PageSettingsServersList.qml
@@ -93,7 +93,17 @@ PageType {
clickedFunction: function() {
ServersModel.processedIndex = index
- PageController.goToPage(PageEnum.PageSettingsServerInfo)
+
+ if (ServersModel.getProcessedServerData("isServerFromGatewayApi")) {
+ if (ServersModel.getProcessedServerData("isCountrySelectionAvailable")) {
+ PageController.goToPage(PageEnum.PageSettingsApiAvailableCountries)
+
+ } else {
+ PageController.goToPage(PageEnum.PageSettingsApiServerInfo)
+ }
+ } else {
+ PageController.goToPage(PageEnum.PageSettingsServerInfo)
+ }
}
}