import QtQuick 2.0
import QtQuick.Controls 2.4
import QtQuick.Dialogs 1.2
import QtQuick.Controls.Material 2.1
import QtQuick.Layouts 1.14
import "../themes/themes.js" as Theme
Page {
StackView {
id: stackView
anchors.fill: parent
initialItem: Home {}
}
Drawer {
id: settingsDrawer
width: Math.min(root.width, root.height) / 3 * 2
height: root.height
ListView {
focus: true
currentIndex: -1
anchors.fill: parent
delegate: ItemDelegate {
width: parent.width
text: model.text
visible: {
if (isDonationService) {return true}
return model.text != qsTr("Donate")
}
highlighted: ListView.isCurrentItem
icon.color: "transparent"
icon.source: model.icon
onClicked: {
settingsDrawer.close()
model.triggered()
}
}
model: ListModel {
ListElement {
text: qsTr("Preferences")
icon: "../resources/tools.svg"
triggered: function () {
stackView.push("Preferences.qml")
}
}
ListElement {
text: qsTr("Donate")
icon: "../resources/donate.svg"
triggered: function () {
donateDialog.open()
}
}
ListElement {
text: qsTr("Help")
icon: "../resources/help.svg"
triggered: function () {
stackView.push("Help.qml")
settingsDrawer.close()
}
} // -> can link to another dialog with report bug / support / contribute / FAQ
ListElement {
text: qsTr("About")
icon: "../resources/about.svg"
triggered: function () {
stackView.push("About.qml")
settingsDrawer.close()
}
}
ListElement {
text: qsTr("Quit")
icon: "../resources/quit.svg"
triggered: function () {
Qt.callLater(backend.quit)
}
}
}
ScrollIndicator.vertical: ScrollIndicator {}
}
}
header: Header {
id: header
}
footer: Footer {
id: footer
}
Keys.onPressed: {
// shortcuts for avid users :)
// bug: doesnt work until the stack is pushed once
if (event.key == Qt.Key_G && stackView.depth == 1) {
console.debug("Open Locations")
stackView.push("Locations.qml")
}
}
Dialog {
id: donateDialog
width: root.appWidth
title: qsTr("Please donate!")
standardButtons: Dialog.Yes | Dialog.No
Text {
id: donateText
width: 300
wrapMode: Text.Wrap
horizontalAlignment: Text.AlignHCenter
anchors {
topMargin: 20
bottomMargin: 40
horizontalCenter: parent.horizontalCenter
}
font.pixelSize: 12
text: qsTr("This service is paid for entirely by donations from users like you. The cost of running the VPN is approximately 5 USD per person every month, but every little bit counts. Do you want to donate now?")
}
Label {
id: donateURL
anchors {
top: donateText.bottom
topMargin: 20
horizontalCenter: parent.horizontalCenter
}
font.pixelSize: 14
textFormat: Text.RichText
text: getLink(ctx)
onLinkActivated: Qt.openUrlExternally(ctx.donateURL)
}
Image {
height: 40
source: "../resources/donate.svg"
fillMode: Image.PreserveAspectFit
anchors {
topMargin: 20
top: donateURL.bottom
bottomMargin: 50
horizontalCenter: parent.horizontalCenter
}
}
onYes: Qt.openUrlExternally(ctx.donateURL)
}
function getLink(ctx) {
if (!ctx) {
return ""
}
let url = ctx.donateURL
return "" + url + ""
}
Component.onCompleted: {
root.openDonateDialog.connect(donateDialog.open)
}
}