Share pages refactoring

This commit is contained in:
pokamest 2021-11-13 16:09:08 +03:00
parent 396af917b5
commit 836075de10
15 changed files with 222 additions and 622 deletions

View file

@ -44,13 +44,6 @@ PageBase {
topPadding: 20
spacing: 10
// Caption {
// id: cap1
// text: qsTr("Installed Protocols and Services")
// font.pixelSize: 20
// }
SortFilterProxyModel {
id: proxyProtocolsModel
sourceModel: UiLogic.protocolsModel
@ -92,323 +85,8 @@ PageBase {
onClicked: UiLogic.onGotoShareProtocolPage(proxyProtocolsModel.mapToSource(index))
}
// Rectangle {
// id: c_item
// x: 0
// y: 0
// width: parent.width
// height: 40
// color: "transparent"
// clip: true
// radius: 2
// LinearGradient {
// anchors.fill: parent
// start: Qt.point(0, 0)
// end: Qt.point(0, height)
// gradient: Gradient {
// GradientStop { position: 0.0; color: "#E1E1E1" }
// GradientStop { position: 0.4; color: "#DDDDDD" }
// GradientStop { position: 0.5; color: "#D8D8D8" }
// GradientStop { position: 1.0; color: "#D3D3D3" }
// }
// }
// Image {
// anchors.verticalCenter: parent.verticalCenter
// anchors.left: parent.left
// anchors.leftMargin: 10
// source: "qrc:/images/share.png"
// }
// Rectangle {
// anchors.left: parent.left
// anchors.right: parent.right
// anchors.bottom: parent.bottom
// height: 2
// color: "#148CD2"
// visible: ms.containsMouse ? true : false
// }
// Text {
// x: 40
// anchors.verticalCenter: parent.verticalCenter
// font.family: "Lato"
// font.styleName: "normal"
// font.pixelSize: 18
// color: "#100A44"
// font.bold: true
// text: name_role
// horizontalAlignment: Text.AlignLeft
// verticalAlignment: Text.AlignVCenter
// wrapMode: Text.Wrap
// }
// MouseArea {
// id: ms
// anchors.fill: parent
// hoverEnabled: true
// onClicked: UiLogic.onGotoShareProtocolPage(proxyProtocolsModel.mapToSource(index))
// }
// }
// Item {
// id: c_item
// width: parent.width
// height: row_container.height
// anchors.left: parent.left
// Rectangle {
// anchors.top: parent.top
// width: parent.width
// height: 1
// color: "lightgray"
// visible: index !== tb_c.currentIndex
// }
// Rectangle {
// anchors.top: row_container.top
// anchors.bottom: row_container.bottom
// anchors.left: parent.left
// anchors.right: parent.right
// color: "#63B4FB"
// visible: index === tb_c.currentIndex
// }
// RowLayout {
// id: row_container
// //width: parent.width
// anchors.left: parent.left
// anchors.right: parent.right
//// anchors.top: lb_container_name.top
//// anchors.bottom: lb_container_name.bottom
// Text {
// id: lb_container_name
// text: name_role
// font.pixelSize: 17
// //font.bold: true
// color: "#100A44"
// topPadding: 5
// bottomPadding: 5
// leftPadding: 10
// verticalAlignment: Text.AlignVCenter
// wrapMode: Text.WordWrap
// Layout.fillWidth: true
// MouseArea {
// enabled: col.visible
// anchors.top: lb_container_name.top
// anchors.bottom: lb_container_name.bottom
// anchors.left: parent.left
// anchors.right: parent.right
// propagateComposedEvents: true
// onClicked: {
// if (tb_c.currentIndex === index) tb_c.currentIndex = -1
// else tb_c.currentIndex = index
// UiLogic.protocolsModel.setSelectedDockerContainer(proxyContainersModel.mapToSource(index))
// }
// }
// }
// }
// }
}
}
}
}
// ScrollView {
// x: 10
// y: 40
// width: 360
// height: 580
// Item {
// id: ct
// width: parent.width
// height: childrenRect.height + 10
// property var contentList: [
// full_access,
// share_amezia,
// share_openvpn,
// share_shadowshock,
// share_cloak
// ]
// property int currentIndex: ShareConnectionLogic.toolBoxShareConnectionCurrentIndex
// onCurrentIndexChanged: {
// ShareConnectionLogic.toolBoxShareConnectionCurrentIndex = currentIndex
// for (let i = 0; i < contentList.length; ++i) {
// if (i == currentIndex) {
// contentList[i].active = true
// } else {
// contentList[i].active = false
// }
// }
// }
// function clearActive() {
// for (let i = 0; i < contentList.length; ++i) {
// contentList[i].active = false
// }
// currentIndex = -1;
// }
// Column {
// spacing: 5
// ShareConnectionContent {
// id: full_access
// x: 0
// text: qsTr("Full access")
// visible: ShareConnectionLogic.pageShareFullAccessVisible
// content: Component {
// Item {
// width: 360
// height: 380
// Text {
// x: 10
// y: 250
// width: 341
// height: 111
// font.family: "Lato"
// font.styleName: "normal"
// font.pixelSize: 16
// color: "#181922"
// horizontalAlignment: Text.AlignLeft
// verticalAlignment: Text.AlignVCenter
// wrapMode: Text.Wrap
// text: qsTr("Anyone who logs in with this code will have the same permissions to use VPN and your server as you. \nThis code includes your server credentials!\nProvide this code only to TRUSTED users.")
// }
// ShareConnectionButtonType {
// x: 10
// y: 130
// width: 341
// height: 40
// text: ShareConnectionLogic.pushButtonShareFullCopyText
// onClicked: {
// ShareConnectionLogic.onPushButtonShareFullCopyClicked()
// }
// }
// ShareConnectionButtonType {
// x: 10
// y: 180
// width: 341
// height: 40
// text: qsTr("Save file")
// onClicked: {
// ShareConnectionLogic.onPushButtonShareFullSaveClicked()
// }
// }
// TextFieldType {
// x: 10
// y: 10
// width: 341
// height: 100
// verticalAlignment: Text.AlignTop
// text: ShareConnectionLogic.textEditShareFullCodeText
// onEditingFinished: {
// ShareConnectionLogic.textEditShareFullCodeText = text
// }
// }
// }
// }
// onClicked: {
// if (active) {
// ct.currentIndex = -1
// } else {
// ct.clearActive()
// ct.currentIndex = 0
// }
// }
// }
// ShareConnectionContent {
// id: share_amezia
// x: 0
// text: qsTr("Share for Amnezia client")
// visible: ShareConnectionLogic.pageShareAmneziaVisible
// content: Component {
// Item {
// width: 360
// height: 380
// }
// }
// onClicked: {
// if (active) {
// ct.currentIndex = -1
// } else {
// ct.clearActive()
// ct.currentIndex = 1
// }
// }
// }
// ShareConnectionContent {
// id: share_shadowshock
// x: 0
// text: qsTr("Share for ShadowSocks client")
// visible: ShareConnectionLogic.pageShareShadowSocksVisible
// content: Component {
// Item {
// width: 360
// height: 380
// }
// }
// onClicked: {
// if (active) {
// ct.currentIndex = -1
// } else {
// ct.clearActive()
// ct.currentIndex = 3
// }
// }
// }
// ShareConnectionContent {
// id: share_cloak
// x: 0
// text: qsTr("Share for Cloak client")
// visible: ShareConnectionLogic.pageShareCloakVisible
// content: Component {
// Item {
// width: 360
// height: 380
// }
// }
// onClicked: {
// if (active) {
// ct.currentIndex = -1
// } else {
// ct.clearActive()
// ct.currentIndex = 4
// }
// }
// }
// }
// }
// }
}

View file

@ -11,6 +11,11 @@ PageShareProtocolBase {
protocol: ProtocolEnum.Any
logic: ShareConnectionLogic
readonly property string generateConfigText: qsTr("Generate config")
readonly property string generatingConfigText: qsTr("Generating config...")
readonly property string showConfigText: qsTr("Show config")
property bool genConfigProcess: false
BackButton {
id: back
}
@ -19,72 +24,113 @@ PageShareProtocolBase {
text: qsTr("Share for Amnezia")
}
Text {
id: lb_desc
Flickable {
id: fl
width: root.width
anchors.top: caption.bottom
anchors.topMargin: 20
width: parent.width - 60
anchors.horizontalCenter: root.horizontalCenter
font.family: "Lato"
font.styleName: "normal"
font.pixelSize: 16
color: "#181922"
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
wrapMode: Text.Wrap
text: qsTr("Anyone who logs in with this code will be able to connect to this VPN server. \nThis code does not include server credentials.")
}
TextAreaType {
anchors.top: lb_desc.bottom
anchors.topMargin: 20
anchors.bottom: pb_gen.top
anchors.bottomMargin: 20
anchors.horizontalCenter: root.horizontalCenter
width: parent.width - 60
textArea.readOnly: true
textArea.wrapMode: TextEdit.WrapAnywhere
textArea.verticalAlignment: Text.AlignTop
textArea.text: ShareConnectionLogic.textEditShareAmneziaCodeText
}
ShareConnectionButtonType {
id: pb_gen
anchors.bottom: pb_copy.top
anchors.bottomMargin: 10
anchors.horizontalCenter: root.horizontalCenter
width: parent.width - 60
text: ShareConnectionLogic.pushButtonShareAmneziaGenerateText
enabled: ShareConnectionLogic.pushButtonShareAmneziaGenerateEnabled
onClicked: {
ShareConnectionLogic.onPushButtonShareAmneziaGenerateClicked()
}
}
ShareConnectionButtonType {
id: pb_copy
anchors.bottom: pb_save.top
anchors.bottomMargin: 10
anchors.horizontalCenter: root.horizontalCenter
width: parent.width - 60
text: ShareConnectionLogic.pushButtonShareAmneziaCopyText
onClicked: {
ShareConnectionLogic.onPushButtonShareAmneziaCopyClicked()
}
enabled: ShareConnectionLogic.pushButtonShareAmneziaCopyEnabled
}
ShareConnectionButtonType {
id: pb_save
anchors.bottom: root.bottom
anchors.bottomMargin: 10
anchors.horizontalCenter: root.horizontalCenter
width: parent.width - 60
text: qsTr("Save file")
onClicked: {
ShareConnectionLogic.onPushButtonShareAmneziaSaveClicked()
anchors.bottomMargin: 20
anchors.left: root.left
anchors.leftMargin: 30
anchors.right: root.right
anchors.rightMargin: 30
contentHeight: content.height + 20
clip: true
ColumnLayout {
id: content
enabled: logic.pageEnabled
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
Text {
id: lb_desc
Layout.fillWidth: true
font.family: "Lato"
font.styleName: "normal"
font.pixelSize: 16
color: "#181922"
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
wrapMode: Text.Wrap
text: ShareConnectionLogic.shareFullAccess
? qsTr("Anyone who logs in with this code will have the same permissions to use VPN and YOUR SERVER as you. \n
This code includes your server credentials!\n
Provide this code only to TRUSTED users.")
: qsTr("Anyone who logs in with this code will be able to connect to this VPN server. \n
This code does not include server credentials.")
}
ShareConnectionButtonType {
id: pb_gen
Layout.topMargin: 20
Layout.fillWidth: true
Layout.preferredHeight: 40
text: ShareConnectionLogic.shareFullAccess
? showConfigText
: (genConfigProcess ? generatingConfigText : generateConfigText)
onClicked: {
enabled = false
genConfigProcess = true
ShareConnectionLogic.onPushButtonShareAmneziaGenerateClicked()
enabled = true
genConfigProcess = false
}
}
TextAreaType {
id: tfShareCode
Layout.topMargin: 20
Layout.bottomMargin: 20
Layout.preferredHeight: 200
Layout.fillWidth: true
textArea.readOnly: true
textArea.wrapMode: TextEdit.WrapAnywhere
textArea.verticalAlignment: Text.AlignTop
textArea.text: ShareConnectionLogic.textEditShareAmneziaCodeText
visible: tfShareCode.textArea.length > 0
}
ShareConnectionButtonCopyType {
id: pb_copy
Layout.bottomMargin: 10
Layout.fillWidth: true
Layout.preferredHeight: 40
enabled: tfShareCode.textArea.length > 0
visible: tfShareCode.textArea.length > 0
}
ShareConnectionButtonType {
id: pb_save
Layout.bottomMargin: 10
Layout.fillWidth: true
Layout.preferredHeight: 40
text: qsTr("Save to file")
enabled: tfShareCode.textArea.length > 0
visible: tfShareCode.textArea.length > 0
onClicked: {
UiLogic.saveTextFile(qsTr("Save AmneziaVPN config"), "*.vpn", tfShareCode.textArea.text)
}
}
Image {
id: label_share_code
Layout.topMargin: 20
Layout.fillWidth: true
Layout.preferredHeight: width
smooth: false
source: ShareConnectionLogic.shareAmneziaQrCodeText
}
}
}
}

View file

@ -29,22 +29,15 @@ PageShareProtocolBase {
width: parent.width - 60
textArea.readOnly: true
textArea.text: ShareConnectionLogic.plainTextEditShareCloakText
textArea.text: ShareConnectionLogic.textEditShareCloakText
}
ShareConnectionButtonType {
ShareConnectionButtonCopyType {
id: pb_save
anchors.bottom: root.bottom
anchors.bottomMargin: 10
anchors.horizontalCenter: root.horizontalCenter
width: parent.width - 60
text: ShareConnectionLogic.pushButtonShareCloakCopyText
//enabled: ShareConnectionLogic.pushButtonShareCloakCopyEnabled
onClicked: {
ShareConnectionLogic.onPushButtonShareCloakCopyClicked()
}
}
}

View file

@ -20,6 +20,7 @@ PageShareProtocolBase {
}
TextAreaType {
id: tfShareCode
anchors.top: caption.bottom
anchors.topMargin: 20
anchors.bottom: pb_gen.top
@ -44,22 +45,19 @@ PageShareProtocolBase {
text: ShareConnectionLogic.pushButtonShareOpenVpnGenerateText
onClicked: {
enabled = false
ShareConnectionLogic.onPushButtonShareOpenVpnGenerateClicked()
enabled = true
}
enabled: ShareConnectionLogic.pushButtonShareOpenVpnGenerateEnabled
}
ShareConnectionButtonType {
ShareConnectionButtonCopyType {
id: pb_copy
anchors.bottom: pb_save.top
anchors.bottomMargin: 10
anchors.horizontalCenter: root.horizontalCenter
width: parent.width - 60
text: ShareConnectionLogic.pushButtonShareOpenVpnCopyText
enabled: ShareConnectionLogic.pushButtonShareOpenVpnCopyEnabled
onClicked: {
ShareConnectionLogic.onPushButtonShareOpenVpnCopyClicked()
}
enabled: tfShareCode.textArea.length > 0
}
ShareConnectionButtonType {
id: pb_save
@ -68,10 +66,11 @@ PageShareProtocolBase {
anchors.horizontalCenter: root.horizontalCenter
width: parent.width - 60
text: qsTr("Save file")
enabled: ShareConnectionLogic.pushButtonShareOpenVpnSaveEnabled
text: qsTr("Save to file")
enabled: tfShareCode.textArea.length > 0
onClicked: {
ShareConnectionLogic.onPushButtonShareOpenVpnSaveClicked()
UiLogic.saveTextFile(qsTr("Save OpenVPN config"), "*.ovpn", tfShareCode.textArea.text)
}
}
}

View file

@ -24,7 +24,7 @@ PageShareProtocolBase {
width: root.width
anchors.top: caption.bottom
anchors.topMargin: 20
anchors.bottom: parent.bottom
anchors.bottom: root.bottom
anchors.bottomMargin: 20
anchors.left: root.left
anchors.leftMargin: 30
@ -108,14 +108,10 @@ PageShareProtocolBase {
text: ShareConnectionLogic.lineEditShareShadowSocksStringText
readOnly: true
}
ShareConnectionButtonType {
height: 40
ShareConnectionButtonCopyType {
Layout.preferredHeight: 40
Layout.fillWidth: true
text: ShareConnectionLogic.pushButtonShareShadowSocksCopyText
enabled: tfConnString.length > 0
onClicked: {
ShareConnectionLogic.onPushButtonShareShadowSocksCopyClicked()
}
}
Image {
@ -124,7 +120,7 @@ PageShareProtocolBase {
Layout.fillWidth: true
Layout.preferredHeight: width
smooth: false
source: ShareConnectionLogic.labelShareShadowSocksQrCodeText
source: ShareConnectionLogic.shareShadowSocksQrCodeText
}
}
}