summaryrefslogtreecommitdiff
path: root/gui/main.qml
diff options
context:
space:
mode:
Diffstat (limited to 'gui/main.qml')
-rw-r--r--gui/main.qml116
1 files changed, 116 insertions, 0 deletions
diff --git a/gui/main.qml b/gui/main.qml
new file mode 100644
index 0000000..16677a2
--- /dev/null
+++ b/gui/main.qml
@@ -0,0 +1,116 @@
+/*
+ TODO (ui rewrite)
+ - [x] add systray
+ - [x] systray status
+ - [x] splash screen
+ - [ ] splash delay/transitions
+ - [ ] nested states
+ - [ ] splash init errors
+ - [ ] font: monserrat
+ - [ ] donation dialog
+ - [ ] add gateway to systray
+ - [ ] control actions from systray
+ - [ ] minimize/hide from systray
+ - [ ] parse ctx flags (need dialog, etc)
+ - [ ] gateway selector
+ - [ ] bridges
+*/
+
+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 "./components"
+
+ApplicationWindow {
+
+ id: root
+
+ visible: true
+ width: 360
+ height: 520
+ minimumWidth: 300
+ maximumWidth: 300
+ minimumHeight: 500
+ maximumHeight: 500
+
+ title: ctx ? ctx.appName : "VPN"
+ Material.accent: Material.Green
+
+ property var ctx
+
+ property var icons: {
+ "off": "qrc:/assets/icon/png/white/vpn_off.png",
+ "on": "qrc:/assets/icon/png/white/vpn_on.png",
+ "wait": "qrc:/assets/icon/png/white/vpn_wait_0.png",
+ "blocked": "qrc:/assets/icon/png/white/vpn_blocked.png"
+ }
+
+ Loader {
+ id: loader
+ asynchronous: true
+ anchors.fill: parent
+ }
+
+ Systray {
+ id: systray
+ }
+
+ Connections {
+ target: jsonModel
+ function onDataChanged() {
+ ctx = JSON.parse(jsonModel.getJson())
+ if (qmlDebug) {
+ console.debug(jsonModel.getJson())
+ }
+
+ // FIXME -- use nested state machines for all these cases.
+
+ //gwSelector.model = Object.keys(ctx.locations)
+
+ /*
+ if (ctx.donateDialog == 'true') {
+ Logic.setNeedsDonate(true);
+ }
+ if (ctx.loginDialog == 'true') {
+ console.debug(jsonModel.getJson())
+ console.debug("DEBUG: should display login")
+ login.visible = true
+ }
+ if (ctx.loginOk == 'true') {
+ loginOk.visible = true
+ }
+ if (ctx.errors) {
+ login.visible = false
+ if (ctx.errors == "nohelpers") {
+ showInitFailure(
+ qsTr("Could not find helpers. Please check your installation"))
+ } else if (ctx.errors == "nopolkit") {
+ showInitFailure(qsTr("Could not find polkit agent."))
+ } else {
+ showInitFailure()
+ }
+ }
+ if (ctx.donateURL) {
+ donateItem.visible = true
+ }
+
+ if (ctx.status == "on") {
+ gwNextConnectionText.visible = false
+ gwReconnectText.visible = false
+ }
+ */
+ }
+ }
+
+ onSceneGraphError: function(error, msg) {
+ console.debug("ERROR while initializing scene")
+ console.debug(msg)
+ }
+
+ Component.onCompleted: {
+ loader.source = "components/Splash.qml"
+ }
+}