aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Teichmann <daniel.teichmann@das-netzwerkteam.de>2021-06-29 15:21:09 +0200
committerDaniel Teichmann <daniel.teichmann@das-netzwerkteam.de>2021-06-29 15:21:09 +0200
commit76212577cb3fd60d41aab175270ede0b2dcdb038 (patch)
tree61265cac9d6a3f5cb25849337dced30942be645b
parent8f4d0f9d34b3676e6f64fd7b4effab582aabc006 (diff)
downloadRWA.Support.DesktopApp-76212577cb3fd60d41aab175270ede0b2dcdb038.tar.gz
RWA.Support.DesktopApp-76212577cb3fd60d41aab175270ede0b2dcdb038.tar.bz2
RWA.Support.DesktopApp-76212577cb3fd60d41aab175270ede0b2dcdb038.zip
Add feature: Multiple Scenes; Relocate files
-rw-r--r--main.qml711
-rw-r--r--qml.qrc13
-rw-r--r--rwa-support-desktopapp.pro14
-rw-r--r--src/ListItem.qml20
-rw-r--r--src/Toast.qml (renamed from Toast.qml)0
-rw-r--r--src/ToastManager.qml (renamed from ToastManager.qml)0
-rw-r--r--src/main.cpp17
-rw-r--r--src/main.qml386
-rw-r--r--src/scenes/Scene_placeholder.qml57
-rw-r--r--src/scenes/Scene_remote_control.qml368
-rw-r--r--src/scenes/Scene_remote_view.qml366
-rw-r--r--src/scenes/Scene_settings.qml29
12 files changed, 1254 insertions, 727 deletions
diff --git a/main.qml b/main.qml
deleted file mode 100644
index d76021a..0000000
--- a/main.qml
+++ /dev/null
@@ -1,711 +0,0 @@
-/*
- * This file is part of Remote Support Desktop
- * https://gitlab.das-netzwerkteam.de/RemoteWebApp/remote-support-desktop
- * Copyright 2020-2021 Daniel Teichmann <daniel.teichmann@das-netzwerkteam.de>
- * Copyright 2020-2021 Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
- * SPDX-License-Identifier: GPL-2.0-or-later
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the
- * Free Software Foundation, Inc.,
- * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
-
-import QtQuick 2.9
-import QtQuick.Window 2.2
-import QtQuick.Extras 1.4
-import QtQuick.Controls 2.2
-import QtQuick.Dialogs 1.2
-import QtQuick.Controls.Material 2.3
-
-ApplicationWindow {
- readonly property int normal_width: 650
- readonly property int normal_height: 500
- readonly property bool inPortrait: window.width < window.height
-
- /*
- // Make window not resizeable
- maximumWidth: normal_width * 1.25
- maximumHeight: normal_height * 1.25*/
-
- // Make window not resizeable
- minimumWidth: 400
- minimumHeight: 460
-
- width: normal_width
- height: normal_height
-
- id: window
- visible: true
- title: qsTr("Remote Support for your Desktop")
-
- onClosing: {
- mainqmladaptor.onCloseHandler();
- }
-
- function minimizeWindow() {
- showMinimized();
- console.log("Miniming window now...");
- }
-
- function showWindow() {
- showNormal();
- console.log("Opening window now...");
- }
-
- MessageDialog {
- id: message_dialog
- objectName: "message_dialog"
- title: qsTr("Remote Support for your Desktop")
- text: qsTr("You are not supposed to see this message.\nThis is a bug.")
- icon: StandardIcon.Critical
- }
-
- Connections {
- target: mainqmladaptor
- onShowToastSignal: {
- toast.show(text, durationMs)
- }
- }
-
- Connections {
- target: mainqmladaptor
- onShowMessageDialogChanged: {
- message_dialog.visible = show
- }
- }
-
-
- Item {
- id: main_content
- anchors.leftMargin: 0
- anchors.top: top_menu_bar_frame.bottom
- anchors.right: parent.right
- anchors.bottom: parent.bottom
- anchors.left: parent.left
- anchors.topMargin: 0
-
- StackView {
- id: main_content_view
-
- anchors.right: parent.right
- anchors.rightMargin: 0
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 0
- anchors.leftMargin: !inPortrait ? (window.width * 0.25) : 0
- anchors.left: parent.left
- anchors.top: parent.top
- anchors.topMargin: 0
-
- Label {
- id: dbus_api_status_text
- text: "Unknown state of Service"
- anchors.leftMargin: 10 + 5 + dbus_api_status_indicator.width
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 10
- wrapMode: Text.WrapAtWordBoundaryOrAnywhere
- verticalAlignment: Text.AlignVCenter
- font.pointSize: 11
- fontSizeMode: Text.Fit
- objectName: "dbus_api_status_text"
- anchors.left: parent.left
-
- StatusIndicator {
- id: dbus_api_status_indicator
- width: height
- height: parent.height
- objectName: "dbus_api_status_indicator"
- color: "#73d216"
- anchors.verticalCenter: parent.verticalCenter
- anchors.right: parent.left
- anchors.rightMargin: 5
- active: false
- }
- }
-
- Label {
- id: explain_function_label
- text: qsTr("Please tell your remote support partner your access address and your access-PIN to let your partner connect to this computer.")
- font.pixelSize: 18
- fontSizeMode: Text.VerticalFit
- wrapMode: Text.WordWrap
- anchors.left: parent.left
- anchors.leftMargin: 10
- anchors.top: parent.top
- anchors.topMargin: 10
- anchors.right: parent.right
- anchors.rightMargin: 10
- horizontalAlignment: Text.AlignLeft
- enabled: false
-
- color: Material.theme == Material.Light ? "#000000" : "#FFFFFF"
- }
-
- Rectangle {
- id: dbus_api_status_line
- y: 379
- height: 1
- radius: 1
- anchors.right: parent.right
- anchors.rightMargin: 10
- anchors.bottom: dbus_api_status_text.top
- anchors.bottomMargin: 10
- opacity: 0.3
- gradient: Gradient {
- GradientStop {
- position: 0.391
- color: "#ffffff"
- }
-
- GradientStop {
- position: 0.975
- color: "#8b8b8b"
- }
- }
- border.width: 1
- border.color: "#00000000"
- anchors.left: parent.left
- anchors.leftMargin: 10
- }
-
- Column {
- id: column
- spacing: 5
- anchors.right: parent.right
- anchors.rightMargin: 10
- anchors.left: parent.left
- anchors.leftMargin: 10
- anchors.bottom: dbus_api_status_line.top
- anchors.bottomMargin: 10
- anchors.top: explain_function_label.bottom
- anchors.topMargin: 10
-
- Column {
- id: url_group
- width: parent.width
- height: parent.height * 0.25
- spacing: 5
-
- Label {
- id: your_url_text
- height: parent.height/2
- text: qsTr("Remote Support Address")
- font.weight: Font.Bold
- font.bold: true
- verticalAlignment: Text.AlignBottom
- horizontalAlignment: Text.AlignLeft
- font.pointSize: 14
- fontSizeMode: Text.Fit
- }
-
- TextEdit {
- id: url_text
- height: parent.height/2
- text: mainqmladaptor.url
- anchors.rightMargin: 10 + copy_url_to_clipboard_button.width
- anchors.right: parent.right
- wrapMode: Text.WrapAtWordBoundaryOrAnywhere
- anchors.leftMargin: 10
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignLeft
- font.pointSize: 15
-
- readOnly: true
- color: Material.foreground
- selectByMouse: true
- anchors.left: parent.left
-
- leftPadding: 5
- Rectangle {
- radius: 5
- color: Material.theme == Material.Light ? "#F0F0F0" : "#383838"
- height: url_text.height
- // whole line + copy-into-clipboard button + some margin
- width: url_text.width + copy_url_to_clipboard_button.width + 5 + 5
- x: 0; y: 0
- z: -1
- }
-
- Button {
- id: copy_url_to_clipboard_button
- width: copy_url_to_clipboard_image.width + 6
- height: copy_url_to_clipboard_image.height + 6 + 10
- anchors.verticalCenter: parent.verticalCenter
- display: AbstractButton.IconOnly
- anchors.leftMargin: 5
- anchors.left: url_text.right
- highlighted: false
- flat: true
-
- Image {
- id: copy_url_to_clipboard_image
- x: 0
- y: -26
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.verticalCenter: parent.verticalCenter
- source: "images/into-clipboard.svg"
- opacity: 0.65
- }
-
- onClicked: {
- mainqmladaptor.handleCopyToClipboardButtonClick(url_text.text);
- toast.show(qsTr("Copied access address into clipboard!"), "1000");
- }
-
- ToolTip.text: qsTr("Copy the access address into the clipboard")
- hoverEnabled: true
-
- ToolTip.delay: 1000
- ToolTip.timeout: 5000
- ToolTip.visible: hovered
- }
- }
- }
-
- Column {
- id: pin_group
- width: parent.width
- height: parent.height * 0.25
- spacing: 5
-
- Label {
- id: your_pin_text
- height: parent.height/2
- text: qsTr("Access-PIN")
- font.weight: Font.Bold
- font.bold: true
- anchors.right: parent.right
- anchors.rightMargin: 0
- anchors.left: parent.left
- anchors.leftMargin: 0
- font.pointSize: 14
- verticalAlignment: Text.AlignBottom
- horizontalAlignment: Text.AlignLeft
- }
-
- TextEdit {
- objectName: "pin_text"
- id: pin_text
- height: parent.height/2
- text: mainqmladaptor.pin
- anchors.rightMargin: 10 + copy_pin_to_clipboard_button.width
- anchors.right: parent.right
- font.pointSize: 15
- anchors.left: parent.left
- anchors.leftMargin: 10
- font.letterSpacing: 10
- horizontalAlignment: Text.AlignLeft
- verticalAlignment: Text.AlignVCenter
-
- leftPadding: 5
- Rectangle {
- radius: 5
- color: Material.theme == Material.Light ? "#F0F0F0" : "#383838"
- height: url_text.height
- // whole line + copy-into-clipboard button + some margin
- width: url_text.width + copy_url_to_clipboard_button.width + 5 + 5
- x: 0; y: 0
- z: -1
- }
-
- readOnly: true
- color: Material.foreground
- wrapMode: Text.WordWrap
- selectByMouse: true
-
- Button {
- id: copy_pin_to_clipboard_button
- width: copy_pin_to_clipboard_image.width + 6
- height: copy_pin_to_clipboard_image.height + 6 + 10
- anchors.verticalCenter: parent.verticalCenter
- flat: true
- display: AbstractButton.IconOnly
- anchors.left: pin_text.right
- anchors.leftMargin: 5
-
- Image {
- id: copy_pin_to_clipboard_image
- anchors.verticalCenter: parent.verticalCenter
- opacity: 0.65
- anchors.horizontalCenter: parent.horizontalCenter
- source: "images/into-clipboard.svg"
- fillMode: Image.PreserveAspectFit
- }
-
- onClicked: {
- mainqmladaptor.handleCopyToClipboardButtonClick(pin_text.text);
- toast.show(qsTr("Copied PIN into clipboard!"), "1000");
- }
-
- ToolTip.text: qsTr("Copy the pin into the clipboard")
- hoverEnabled: true
-
- ToolTip.delay: 1000
- ToolTip.timeout: 5000
- ToolTip.visible: hovered
- }
- }
- }
-
- Column {
- id: session_id_group
- width: parent.width
- height: parent.height * 0.25
- spacing: 5
-
- Label {
- id: your_session_id_text
- height: parent.height/2
- text: qsTr("Session-ID")
- font.weight: Font.Bold
- font.bold: true
- anchors.right: parent.right
- anchors.rightMargin: 0
- anchors.left: parent.left
- anchors.leftMargin: 0
- font.pointSize: 14
- verticalAlignment: Text.AlignBottom
- horizontalAlignment: Text.AlignLeft
- fontSizeMode: Text.Fit
- }
-
- TextEdit {
- objectName: "session_id_text"
- id: session_id_text
- height: parent.height/2
- text: mainqmladaptor.session_id
- font.letterSpacing: 10
- anchors.rightMargin: 10 + copy_session_id_to_clipboard_button.width
- anchors.right: parent.right
- font.pointSize: 15
- anchors.left: parent.left
- anchors.leftMargin: 10
- horizontalAlignment: Text.AlignLeft
- verticalAlignment: Text.AlignVCenter
-
- leftPadding: 5
- Rectangle {
- radius: 5
- color: Material.theme == Material.Light ? "#F0F0F0" : "#383838"
- height: url_text.height
- // whole line + copy-into-clipboard button + some margin
- width: url_text.width + copy_url_to_clipboard_button.width + 5 + 5
- x: 0; y: 0
- z: -1
- }
-
- readOnly: true
- color: Material.foreground
- wrapMode: Text.WordWrap
- selectByMouse: true
-
- Button {
- id: copy_session_id_to_clipboard_button
- width: copy_session_id_to_clipboard_image.width + 6
- height: copy_session_id_to_clipboard_image.height + 6 + 10
- anchors.verticalCenter: parent.verticalCenter
- flat: true
- display: AbstractButton.IconOnly
- anchors.left: session_id_text.right
- anchors.leftMargin: 5
-
- Image {
- id: copy_session_id_to_clipboard_image
- opacity: 0.65
- anchors.verticalCenter: parent.verticalCenter
- source: "images/into-clipboard.svg"
- fillMode: Image.PreserveAspectFit
- }
-
- onClicked: {
- mainqmladaptor.handleCopyToClipboardButtonClick(pin_text.text);
- toast.show(qsTr("Copied session-ID into clipboard!"), "1000");
- }
-
- ToolTip.text: qsTr("Copy the session-ID into the clipboard")
- hoverEnabled: true
-
- ToolTip.delay: 1000
- ToolTip.timeout: 5000
- ToolTip.visible: hovered
- }
- }
- }
-
- Button {
- id: start_support_button
- height: Math.min(70, parent.height * 0.222)
- objectName: "start_support_button"
- text: qsTr("Start remote support session")
- anchors.right: parent.right
- anchors.rightMargin: 0
- checkable: true
-
- onClicked: mainqmladaptor.handleConnectButtonClick(checked);
- }
- }
- }
- }
-
- ToastManager {
- id: toast
- anchors.leftMargin: inPortrait ? 0 : parent.width * 0.25
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.bottom: parent.bottom
- anchors.top: parent.top
- }
-
- Connections {
- target: mainqmladaptor
- onMessageDialogTextChanged: {
- message_dialog.text = text
- }
- }
-
-
- Connections {
- target: mainqmladaptor
- onMessageDialogTitleChanged: {
- message_dialog.title = title
- }
- }
-
- Connections {
- target: mainqmladaptor
- onMessageDialogIconChanged: {
- message_dialog.icon = iconindex
- }
- }
-
- Drawer {
- id: sidebar_drawer
- y: top_menu_bar_frame.height
-
- width: !inPortrait ? (window.width * 0.25) : (window.width * 0.5)
- height: window.height - top_menu_bar_frame.height
-
- modal: inPortrait
- interactive: inPortrait
- position: inPortrait ? 0 : 1
- dragMargin: 1
- margins: -2
- visible: !inPortrait
-
- ListView {
- id: sidebar_listview
- boundsBehavior: Flickable.StopAtBounds
- interactive: true
- clip: true
- anchors.fill: parent
-
- footer: ItemDelegate {
- id: footer
- text: " " + qsTr("Settings")
- width: parent.width
-
- onClicked: {
- if (inPortrait) {
- sidebar_drawer.close()
- }
- }
-
- MenuSeparator {
- parent: footer
- width: parent.width
- anchors.verticalCenter: parent.top
- }
- }
-
- model: 5
- delegate: ItemDelegate {
- text: qsTr("Title %1").arg(index + 1)
- width: parent.width
- onClicked: {
- if (inPortrait) {
- sidebar_drawer.close()
- }
- }
- }
-
- ScrollIndicator.vertical: ScrollIndicator { }
- }
- }
-
- /*Rectangle {
- id: side_menu
- width: parent.width * 0.333
- color: "#ffffff"
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 0
- anchors.left: parent.left
- anchors.leftMargin: 0
- anchors.top: top_menu_bar_frame.bottom
- anchors.topMargin: 0
-
- visible: !inPortrait
-
- Drawer {
- x: side_menu.x
- y: side_menu.y
- width: side_menu.width
- height: side_menu.height
- modal: inPortrait
- interactive: inPortrait
- position: inPortrait ? 0 : 1
- //visible: true
- visible: !inPortrait
- }
- }*/
-
-
- Material.theme: theme.position < 1 ? Material.Light : Material.Dark
-
- ToolBar {
- id: top_menu_bar_frame
- width: parent.width
- height: parent.height * 0.10
-
- background: Rectangle {
- color: parent.Material.background
- border.color: parent.Material.background
- }
- Material.background: "#0d5eaf"
- Material.foreground: "#ffffff"
-
- anchors.left: parent.left
- anchors.leftMargin: 0
- anchors.top: parent.top
- anchors.topMargin: 0
-
- Switch {
- id: theme
- width: 150
- implicitWidth: 100
- visible: !inPortrait
-
- height: parent.height
- anchors.margins: 10
- text: qsTr("Dark theme")
- anchors.left: parent.left
- anchors.verticalCenterOffset: 0
- anchors.leftMargin: 0
- anchors.verticalCenter: parent.verticalCenter
- checked: true
- }
-
- Label {
- id: header_text
- width: 1
- height: parent.height
- color: "#ffffff"
- text: qsTr("Allow Remote Control")
- anchors.left: theme.right
- anchors.leftMargin: 5
- horizontalAlignment: Text.AlignRight
- padding: 5
- font.family: "Verdana"
- font.pointSize: 20
- fontSizeMode: Text.Fit
- verticalAlignment: Text.AlignVCenter
- anchors.right: parent.right
- anchors.rightMargin: 5
- anchors.verticalCenter: parent.verticalCenter
- }
-
- Button {
- id: burger_button
- width: 50
- height: parent.height + 10
- visible: inPortrait
-
-
- text: "≡"
- checkable: false
- font.pointSize: 24
- flat: true
- anchors.left: parent.left
- anchors.leftMargin: 0
- anchors.verticalCenter: parent.verticalCenter
- enabled: !sidebar_drawer.opened
-
- onClicked: {
- sidebar_drawer.open()
- enabled: false
- }
- }
-
- }
-
-
-
- /* TabBar {
- id: side_menu
- width: parent.width * 0.3333
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 0
- anchors.left: parent.left
- anchors.leftMargin: 0
- anchors.top: top_menu_bar_frame.bottom
- anchors.topMargin: 0
-
- TabButton {
- id: firstBtn
- text: "Erster Knopf"
-
- width: side_menu.width
- anchors.left: parent.left
- anchors.leftMargin: 0
- anchors.top: parent.top
- anchors.topMargin: 0
-
- onClicked: {
-
- }
- }
-
- TabButton {
- id: secondBtn
- text: "Zweiter Knopf"
-
- width: side_menu.width
- anchors.left: parent.left
- anchors.leftMargin: 0
- anchors.top: firstBtn.bottom
- anchors.topMargin: 0
- }
-
- TabButton {
- id: thirdBtn
- text: "Dritter Knopf"
-
- width: side_menu.width
- anchors.left: parent.left
- anchors.leftMargin: 0
- anchors.top: secondBtn.bottom
- anchors.topMargin: 0
- }
-
- visible: true
-
- background: Rectangle {
- color: Material.theme == Material.Light ? "#e5f1fd" : "#0b4a8a"
- anchors.fill: parent
- }
- }
-*/
-
-}
diff --git a/qml.qrc b/qml.qrc
index cf0ef28..a9f28a1 100644
--- a/qml.qrc
+++ b/qml.qrc
@@ -1,14 +1,14 @@
<RCC>
<qresource prefix="/">
- <file>main.qml</file>
<file>locales/bin/de_DE.qm</file>
<file>locales/bin/main_en.qm</file>
<file>locales/de_DE.ts</file>
<file>locales/main_en.ts</file>
<file>locales/bin/es_ES.qm</file>
<file>locales/es_ES.ts</file>
- <file>images/logo.png</file>
+ <file>images/RWA-logo.png</file>
<file>images/into-clipboard.svg</file>
+ <file>src/main.qml</file>
<file>src/main.cpp</file>
<file>src/main_qmladaptor.cpp</file>
<file>src/main_qmladaptor.h</file>
@@ -16,8 +16,13 @@
<file>src/RWADBusAdaptor.h</file>
<file>src/session.cpp</file>
<file>src/session.h</file>
- <file>ToastManager.qml</file>
- <file>Toast.qml</file>
+ <file>src/scenes/Scene_remote_control.qml</file>
+ <file>src/scenes/Scene_remote_view.qml</file>
+ <file>src/scenes/Scene_settings.qml</file>
+ <file>src/scenes/Scene_placeholder.qml</file>
+ <file>src/ListItem.qml</file>
+ <file>src/ToastManager.qml</file>
+ <file>src/Toast.qml</file>
<file>qtquickcontrols2.conf</file>
</qresource>
</RCC>
diff --git a/rwa-support-desktopapp.pro b/rwa-support-desktopapp.pro
index 2216370..cfea48f 100644
--- a/rwa-support-desktopapp.pro
+++ b/rwa-support-desktopapp.pro
@@ -43,14 +43,20 @@ DEFINES += QT_DEPRECATED_WARNINGS
# You can also select to disable deprecated APIs only up to a certain version of Qt.
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
-SOURCES += src/main.cpp src/session.cpp src/main_qmladaptor.cpp
+SOURCES += src/main.cpp \
+ src/main_qmladaptor.cpp \
+ src/RWADBusAdaptor.cpp \
+ src/session.cpp
-HEADERS += src/RWADBusAdaptor.h src/session.h src/main_qmladaptor.h
+HEADERS += src/RWADBusAdaptor.h \
+ src/main_qmladaptor.h \
+ src/RWADBusAdaptor.h \
+ src/session.h
RESOURCES += qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model
-QML_IMPORT_PATH =
+QML_IMPORT_PATH = src/scenes
# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH =
@@ -59,3 +65,5 @@ QML_DESIGNER_IMPORT_PATH =
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
+
+DISTFILES +=
diff --git a/src/ListItem.qml b/src/ListItem.qml
new file mode 100644
index 0000000..c69af4b
--- /dev/null
+++ b/src/ListItem.qml
@@ -0,0 +1,20 @@
+import QtQuick 2.0
+import QtQuick.Controls.Material 2.3
+import QtQuick.Controls 2.2
+
+ItemDelegate {
+ id: root
+ width: parent.width
+ height: 50
+
+ property string scene_url
+
+ signal listItemClick()
+
+ text: ""
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: listItemClick();
+ }
+}
diff --git a/Toast.qml b/src/Toast.qml
index eb65b20..eb65b20 100644
--- a/Toast.qml
+++ b/src/Toast.qml
diff --git a/ToastManager.qml b/src/ToastManager.qml
index b448905..b448905 100644
--- a/ToastManager.qml
+++ b/src/ToastManager.qml
diff --git a/src/main.cpp b/src/main.cpp
index 381bc9c..2b1837a 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -61,27 +61,26 @@ int main(int argc, char *argv[]) {
QQmlApplicationEngine engine(&app);
QScopedPointer<MainQMLAdaptor> main_gui (new MainQMLAdaptor(&app, &engine));
- //MainQMLAdaptor *main_gui = new MainQMLAdaptor(&app, &engine);
+
// Make mainqmladaptor available to QML
engine.rootContext()->setContextProperty("mainqmladaptor", main_gui.data());
qDebug() << "'mainqmladaptor' is now available in QML context.";
- engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
+ engine.load(QUrl(QStringLiteral("qrc:/src/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
QScopedPointer<Session> session (new Session(&app, main_gui.data()));
- //Session *session = new Session(&app, &engine, main_gui);
QObject::connect(main_gui.data(),
- SIGNAL(minimizeWindow()),
- engine.rootObjects().takeFirst(),
- SLOT(minimizeWindow()));
+ SIGNAL(minimizeWindow()),
+ engine.rootObjects().takeFirst(),
+ SLOT(minimizeWindow()));
QObject::connect(main_gui.data(),
- SIGNAL(showWindow()),
- engine.rootObjects().takeFirst(),
- SLOT(showWindow()));
+ SIGNAL(showWindow()),
+ engine.rootObjects().takeFirst(),
+ SLOT(showWindow()));
// We don't want users to have multiple instances of this app running
QString tmpDirPath = QDir::tempPath() + "/rwa.support.desktopapp";
diff --git a/src/main.qml b/src/main.qml
new file mode 100644
index 0000000..ac4b503
--- /dev/null
+++ b/src/main.qml
@@ -0,0 +1,386 @@
+/*
+ * This file is part of Remote Support Desktop
+ * https://gitlab.das-netzwerkteam.de/RemoteWebApp/remote-support-desktop
+ * Copyright 2020-2021 Daniel Teichmann <daniel.teichmann@das-netzwerkteam.de>
+ * Copyright 2020-2021 Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the
+ * Free Software Foundation, Inc.,
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.9
+import QtQuick.Window 2.2
+import QtQuick.Extras 1.4
+import QtQuick.Controls 2.2
+import QtQuick.Controls.Styles 1.4
+import QtQuick.Dialogs 1.2
+import QtQuick.Controls.Material 2.3
+import "scenes" as Scenes
+//import "ListItem.qml"
+
+ApplicationWindow {
+ readonly property int normal_width: 650
+ readonly property int normal_height: 500
+ readonly property bool inPortrait: window.width < window.height
+
+ minimumWidth: 400
+ minimumHeight: 460
+
+ width: normal_width
+ height: normal_height
+
+ id: window
+ visible: true
+ title: qsTr("Remote Support for your Desktop")
+
+ onClosing: {
+ mainqmladaptor.onCloseHandler();
+ }
+
+ function minimizeWindow() {
+ showMinimized();
+ console.log("Miniming window now...");
+ }
+
+ function showWindow() {
+ showNormal();
+ console.log("Opening window now...");
+ }
+
+ MessageDialog {
+ id: message_dialog
+ objectName: "message_dialog"
+ title: qsTr("Remote Support for your Desktop")
+ text: qsTr("You are not supposed to see this message.\nThis is a bug.")
+ icon: StandardIcon.Critical
+ }
+
+ Connections {
+ target: mainqmladaptor
+ onShowToastSignal: {
+ toast.show(text, durationMs)
+ }
+ }
+
+ Connections {
+ target: mainqmladaptor
+ onShowMessageDialogChanged: {
+ message_dialog.visible = show
+ }
+ }
+
+
+ StackView {
+ id: main_content
+ anchors.top: top_menu_bar_frame.bottom
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ anchors.leftMargin: !inPortrait ? sidebar_drawer.width : 0
+ anchors.topMargin: 0
+ initialItem: "scenes/Scene_placeholder.qml"
+
+// Scenes.Scene_remote_control {
+// id: scene_remote_control
+// anchors.bottom: parent.bottom
+// anchors.bottomMargin: 0
+// anchors.left: parent.left
+// anchors.right: parent.right
+// anchors.rightMargin: 0
+// anchors.top: parent.top
+// anchors.topMargin: 0
+// visible: false
+// }
+
+// Scenes.Scene_remote_view {
+// id: scene_remote_view
+// anchors.bottom: parent.bottom
+// anchors.bottomMargin: 0
+// anchors.left: parent.left
+// anchors.right: parent.right
+// anchors.rightMargin: 0
+// anchors.top: parent.top
+// anchors.topMargin: 0
+// visible: false
+// }
+
+// Scenes.Scene_settings {
+// id: scene_settings
+// anchors.bottom: parent.bottom
+// anchors.bottomMargin: 0
+// anchors.left: parent.left
+// anchors.right: parent.right
+// anchors.rightMargin: 0
+// anchors.top: parent.top
+// anchors.topMargin: 0
+// visible: false
+// }
+ }
+
+ ToastManager {
+ id: toast
+ anchors.leftMargin: inPortrait ? 0 : sidebar_drawer.width
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ anchors.top: parent.top
+ }
+
+ Connections {
+ target: mainqmladaptor
+ onMessageDialogTextChanged: {
+ message_dialog.text = text
+ }
+ }
+
+ Connections {
+ target: mainqmladaptor
+ onMessageDialogTitleChanged: {
+ message_dialog.title = title
+ }
+ }
+
+ Connections {
+ target: mainqmladaptor
+ onMessageDialogIconChanged: {
+ message_dialog.icon = iconindex
+ }
+ }
+
+ Drawer {
+ id: sidebar_drawer
+ y: top_menu_bar_frame.height
+
+ width: !inPortrait ? Math.min(300, (window.width * 0.333)) : (window.width * 0.5)
+ height: window.height - top_menu_bar_frame.height
+
+ modal: inPortrait
+ interactive: inPortrait
+ position: inPortrait ? 0 : 1
+ dragMargin: 1
+ margins: -2
+ visible: !inPortrait
+
+ ListView {
+ id: sidebar_listview
+ boundsBehavior: Flickable.StopAtBounds
+ interactive: true
+ clip: true
+ anchors.fill: parent
+ model: mainModel
+
+ /*header: ItemDelegate {
+ id: header
+ width: parent.width
+ height: server_chooser.height + server_chooser_label.height
+
+ Text {
+ id: server_chooser_label
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.margins: 0
+ padding: 15
+ height: 35
+ color: Material.foreground
+ text: qsTr("RWA-Server:")
+ font.bold: true
+ }
+
+ ComboBox {
+ id: server_chooser
+ width: parent.width
+ parent: header
+ height: 50
+ anchors.left: parent.left
+ anchors.leftMargin: 15
+ anchors.right: parent.right
+ anchors.rightMargin: 15
+ anchors.bottom: header_seperator.top
+ model: [ "example.com/rwa", "rwa-server.example.org:1000", "rwa.example.com:1337" ]
+
+ popup.width: Math.min(500, server_chooser.contentItem.childrenRect.width)
+ }
+
+// Image {
+// id: rwa_logo
+// anchors.left: parent.left
+// anchors.leftMargin: 15
+// anchors.verticalCenter: parent.verticalCenter
+// source: "../images/RWA-logo.png"
+// height: parent.height
+// fillMode: Image.PreserveAspectFit
+// }
+
+// onClicked: {
+// main_content.replace("scenes/Scene_settings.qml")
+// if (inPortrait) {
+// sidebar_drawer.close()
+// }
+// }
+
+ MenuSeparator {
+ id: header_seperator
+ parent: header
+ width: parent.width
+ anchors.verticalCenter: parent.bottom
+ }
+ }*/
+
+ footer: ItemDelegate {
+ id: footer
+ text: " " + qsTr("Settings")
+ width: parent.width
+
+ onClicked: {
+ var scene_url = "scenes/Scene_placeholder.qml"
+ header_text.text = qsTr("Settings")
+ if(inPortrait) sidebar_drawer.close()
+
+ if(scene_url.search(main_content.currentItem.objectName) <= 0) {
+ main_content.replace(scene_url)
+ }
+ }
+
+ MenuSeparator {
+ parent: footer
+ width: parent.width
+ anchors.verticalCenter: parent.top
+ }
+ }
+
+ VisualItemModel {
+ id: mainModel
+ ListItem {
+ text: " " + qsTr("Remote Control")
+ scene_url: "scenes/Scene_remote_control.qml"
+ onListItemClick: {
+ header_text.text = qsTr("Allow remote control")
+ if(inPortrait) sidebar_drawer.close()
+
+ if(scene_url.search(main_content.currentItem.objectName) <= 0) {
+ main_content.replace(scene_url)
+ }
+ }
+ }
+ ListItem {
+ text: " " + qsTr("Remote View")
+ scene_url: "scenes/Scene_remote_view.qml"
+ onListItemClick: {
+ header_text.text = qsTr("Allow remote view")
+ if(inPortrait) sidebar_drawer.close()
+
+ if(scene_url.search(main_content.currentItem.objectName) <= 0) {
+ main_content.replace(scene_url)
+ }
+ }
+ }
+ ListItem {
+ text: " " + qsTr("Add RWA-Server")
+ scene_url: "scenes/Scene_placeholder.qml"
+ onListItemClick: {
+ header_text.text = qsTr("Server addition wizard")
+ if(inPortrait) sidebar_drawer.close()
+
+ if(scene_url.search(main_content.currentItem.objectName) <= 0) {
+ main_content.replace(scene_url)
+ }
+ }
+ }
+ }
+
+ ScrollIndicator.vertical: ScrollIndicator { }
+ }
+ }
+
+ // Set dark/light theme based on the slider setting
+ Material.theme: theme.position < 1 ? Material.Light : Material.Dark
+
+ ToolBar {
+ id: top_menu_bar_frame
+ width: parent.width
+ height: parent.height * 0.10
+
+ background: Rectangle {
+ color: parent.Material.background
+ border.color: parent.Material.background
+ }
+ Material.background: "#0d5eaf"
+ Material.foreground: "#ffffff"
+
+ anchors.left: parent.left
+ anchors.leftMargin: 0
+ anchors.top: parent.top
+ anchors.topMargin: 0
+
+ Switch {
+ id: theme
+ width: 150
+ implicitWidth: 100
+ visible: !inPortrait
+
+ height: parent.height
+ anchors.margins: 10
+ text: qsTr("Dark theme")
+ anchors.left: parent.left
+ anchors.verticalCenterOffset: 0
+ anchors.leftMargin: 0
+ anchors.verticalCenter: parent.verticalCenter
+ checked: true
+ }
+
+ Label {
+ id: header_text
+ height: parent.height
+ color: "#ffffff"
+ text: qsTr("Allow Remote Control")
+ anchors.left: theme.right
+ anchors.leftMargin: 5
+ horizontalAlignment: Text.AlignRight
+ padding: 5
+ font.family: "Verdana"
+ font.pointSize: 20
+ fontSizeMode: Text.Fit
+ verticalAlignment: Text.AlignVCenter
+ anchors.right: parent.right
+ anchors.rightMargin: 5
+ anchors.verticalCenter: parent.verticalCenter
+ }
+
+ Button {
+ id: burger_button
+ width: 50
+ height: parent.height + 10
+ visible: inPortrait
+
+ text: "≡"
+ checkable: false
+ font.pointSize: 24
+ flat: true
+ anchors.left: parent.left
+ anchors.leftMargin: 0
+ anchors.verticalCenter: parent.verticalCenter
+ enabled: !sidebar_drawer.opened
+
+ onClicked: {
+ sidebar_drawer.open()
+ enabled: false
+ }
+ }
+ }
+}
diff --git a/src/scenes/Scene_placeholder.qml b/src/scenes/Scene_placeholder.qml
new file mode 100644
index 0000000..fcb6134
--- /dev/null
+++ b/src/scenes/Scene_placeholder.qml
@@ -0,0 +1,57 @@
+import QtQuick 2.9
+import QtQuick.Window 2.2
+import QtQuick.Extras 1.4
+import QtQuick.Controls 2.2
+import QtQuick.Dialogs 1.2
+import QtQuick.Controls.Material 2.3
+
+Item {
+ id: scene_placeholder
+ objectName: "Scene_placeholder"
+
+ Rectangle {
+ id: rectangle
+ anchors.fill: parent
+ color: Material.background
+
+ Text {
+ color: Material.foreground
+ id: title
+
+ text: qsTr("This is the placeholder scene!")
+ font.pointSize: 18
+ wrapMode: Text.WordWrap
+
+ font.bold: true
+ horizontalAlignment: Text.AlignHCenter
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.margins: 5
+ }
+
+ Text {
+ color: Material.foreground
+ anchors.top: title.bottom
+ anchors.margins: 5
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ wrapMode: Text.WordWrap
+ text: qsTr("The feature you expected here are not yet implemented.")
+ horizontalAlignment: Text.AlignHCenter
+ }
+ }
+}
+
+
+
+
+
+
+
+/*##^## Designer {
+ D{i:0;autoSize:true;height:480;width:640}
+}
+ ##^##*/
diff --git a/src/scenes/Scene_remote_control.qml b/src/scenes/Scene_remote_control.qml
new file mode 100644
index 0000000..ea59ea7
--- /dev/null
+++ b/src/scenes/Scene_remote_control.qml
@@ -0,0 +1,368 @@
+import QtQuick 2.9
+import QtQuick.Window 2.2
+import QtQuick.Extras 1.4
+import QtQuick.Controls 2.2
+import QtQuick.Dialogs 1.2
+import QtQuick.Controls.Material 2.3
+
+Item {
+ id: scene_remote_control
+ objectName: "Scene_remote_control"
+
+ Label {
+ id: dbus_api_status_text
+ text: "Unknown state of Service"
+ anchors.leftMargin: 10 + 5 + dbus_api_status_indicator.width
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 10
+ wrapMode: Text.WrapAtWordBoundaryOrAnywhere
+ verticalAlignment: Text.AlignVCenter
+ font.pointSize: 11
+ fontSizeMode: Text.Fit
+ objectName: "dbus_api_status_text"
+ anchors.left: parent.left
+
+ StatusIndicator {
+ id: dbus_api_status_indicator
+ width: height
+ height: parent.height
+ objectName: "dbus_api_status_indicator"
+ color: "#73d216"
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.left
+ anchors.rightMargin: 5
+ active: false
+ }
+ }
+
+ Label {
+ id: explain_function_label
+ text: qsTr("Please tell your remote support partner your access address and your access-PIN to let your partner connect to this computer.")
+ font.pixelSize: 18
+ fontSizeMode: Text.VerticalFit
+ wrapMode: Text.WordWrap
+ anchors.left: parent.left
+ anchors.leftMargin: 10
+ anchors.top: parent.top
+ anchors.topMargin: 10
+ anchors.right: parent.right
+ anchors.rightMargin: 10
+ horizontalAlignment: Text.AlignLeft
+ enabled: false
+
+ color: Material.theme == Material.Light ? "#000000" : "#FFFFFF"
+ }
+
+ Rectangle {
+ id: dbus_api_status_line
+ y: 379
+ height: 1
+ radius: 1
+ anchors.right: parent.right
+ anchors.rightMargin: 10
+ anchors.bottom: dbus_api_status_text.top
+ anchors.bottomMargin: 10
+ opacity: 0.3
+ gradient: Gradient {
+ GradientStop {
+ position: 0.391
+ color: "#ffffff"
+ }
+
+ GradientStop {
+ position: 0.975
+ color: "#8b8b8b"
+ }
+ }
+ border.width: 1
+ border.color: "#00000000"
+ anchors.left: parent.left
+ anchors.leftMargin: 10
+ }
+
+ Column {
+ id: column
+ spacing: 6
+ anchors.right: parent.right
+ anchors.rightMargin: 10
+ anchors.left: parent.left
+ anchors.leftMargin: 10
+ anchors.bottom: dbus_api_status_line.top
+ anchors.bottomMargin: 10
+ anchors.top: explain_function_label.bottom
+ anchors.topMargin: 10
+
+ Column {
+ id: url_group
+ width: parent.width
+ height: parent.height * 0.25
+ spacing: 5
+
+ Label {
+ id: your_url_text
+ height: parent.height/2
+ text: qsTr("Remote Support Address")
+ font.weight: Font.Bold
+ font.bold: true
+ verticalAlignment: Text.AlignBottom
+ horizontalAlignment: Text.AlignLeft
+ font.pointSize: 14
+ fontSizeMode: Text.Fit
+ }
+
+ TextEdit {
+ id: url_text
+ height: parent.height/2
+ text: mainqmladaptor.url
+ anchors.rightMargin: 10 + copy_url_to_clipboard_button.width
+ anchors.right: parent.right
+ wrapMode: Text.WrapAtWordBoundaryOrAnywhere
+ anchors.leftMargin: 10
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignLeft
+ font.pointSize: 15
+
+ readOnly: true
+ color: Material.foreground
+ selectByMouse: true
+ anchors.left: parent.left
+
+ leftPadding: 5
+ Rectangle {
+ radius: 5
+ color: Material.theme == Material.Light ? "#F0F0F0" : "#383838"
+ height: url_text.height
+ // whole line + copy-into-clipboard button + some margin
+ width: url_text.width + copy_url_to_clipboard_button.width + 5 + 5
+ x: 0; y: 0
+ z: -1
+ }
+
+ Button {
+ id: copy_url_to_clipboard_button
+ width: copy_url_to_clipboard_image.width + 6
+ height: copy_url_to_clipboard_image.height + 6 + 10
+ anchors.verticalCenter: parent.verticalCenter
+ display: AbstractButton.IconOnly
+ anchors.leftMargin: 5
+ anchors.left: url_text.right
+ highlighted: false
+ flat: true
+
+ Image {
+ id: copy_url_to_clipboard_image
+ x: 0
+ y: -26
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ source: "../../images/into-clipboard.svg"
+ opacity: 0.65
+ }
+
+ onClicked: {
+ mainqmladaptor.handleCopyToClipboardButtonClick(url_text.text);
+ toast.show(qsTr("Copied access address into clipboard!"), "1000");
+ }
+
+ ToolTip.text: qsTr("Copy the access address into the clipboard")
+ hoverEnabled: true
+
+ ToolTip.delay: 1000
+ ToolTip.timeout: 5000
+ ToolTip.visible: hovered
+ }
+ }
+ }
+
+ Column {
+ id: session_id_group
+ width: parent.width
+ height: parent.height * 0.25
+ spacing: 5
+
+ Label {
+ id: your_session_id_text
+ height: parent.height/2
+ text: qsTr("Session-ID")
+ font.weight: Font.Bold
+ font.bold: true
+ anchors.right: parent.right
+ anchors.rightMargin: 0
+ anchors.left: parent.left
+ anchors.leftMargin: 0
+ font.pointSize: 14
+ verticalAlignment: Text.AlignBottom
+ horizontalAlignment: Text.AlignLeft
+ fontSizeMode: Text.Fit
+ }
+
+ TextEdit {
+ objectName: "session_id_text"
+ id: session_id_text
+ height: parent.height/2
+ text: mainqmladaptor.session_id
+ font.letterSpacing: 10
+ anchors.rightMargin: 10 + copy_session_id_to_clipboard_button.width
+ anchors.right: parent.right
+ font.pointSize: 15
+ anchors.left: parent.left
+ anchors.leftMargin: 10
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+
+ leftPadding: 5
+ Rectangle {
+ radius: 5
+ color: Material.theme == Material.Light ? "#F0F0F0" : "#383838"
+ height: url_text.height
+ // whole line + copy-into-clipboard button + some margin
+ width: url_text.width + copy_url_to_clipboard_button.width + 5 + 5
+ x: 0; y: 0
+ z: -1
+ }
+
+ readOnly: true
+ color: Material.foreground
+ wrapMode: Text.WordWrap
+ selectByMouse: true
+
+ Button {
+ id: copy_session_id_to_clipboard_button
+ width: copy_session_id_to_clipboard_image.width + 6
+ height: copy_session_id_to_clipboard_image.height + 6 + 10
+ anchors.verticalCenter: parent.verticalCenter
+ flat: true
+ display: AbstractButton.IconOnly
+ anchors.left: session_id_text.right
+ anchors.leftMargin: 5
+
+ Image {
+ id: copy_session_id_to_clipboard_image
+ anchors.horizontalCenter: parent.horizontalCenter
+ opacity: 0.65
+ anchors.verticalCenter: parent.verticalCenter
+ source: "../../images/into-clipboard.svg"
+ fillMode: Image.PreserveAspectFit
+ }
+
+ onClicked: {
+ mainqmladaptor.handleCopyToClipboardButtonClick(pin_text.text);
+ toast.show(qsTr("Copied session-ID into clipboard!"), "1000");
+ }
+
+ ToolTip.text: qsTr("Copy the session-ID into the clipboard")
+ hoverEnabled: true
+
+ ToolTip.delay: 1000
+ ToolTip.timeout: 5000
+ ToolTip.visible: hovered
+ }
+ }
+ }
+
+ Column {
+ id: pin_group
+ width: parent.width
+ height: parent.height * 0.25
+ spacing: 5
+
+ Label {
+ id: your_pin_text
+ height: parent.height/2
+ text: qsTr("Access-PIN")
+ font.weight: Font.Bold
+ font.bold: true
+ anchors.right: parent.right
+ anchors.rightMargin: 0
+ anchors.left: parent.left
+ anchors.leftMargin: 0
+ font.pointSize: 14
+ verticalAlignment: Text.AlignBottom
+ horizontalAlignment: Text.AlignLeft
+ }
+
+ TextEdit {
+ objectName: "pin_text"
+ id: pin_text
+ height: parent.height/2
+ text: mainqmladaptor.pin
+ anchors.rightMargin: 10 + copy_pin_to_clipboard_button.width
+ anchors.right: parent.right
+ font.pointSize: 15
+ anchors.left: parent.left
+ anchors.leftMargin: 10
+ font.letterSpacing: 10
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+
+ leftPadding: 5
+ Rectangle {
+ radius: 5
+ color: Material.theme == Material.Light ? "#F0F0F0" : "#383838"
+ height: url_text.height
+ // whole line + copy-into-clipboard button + some margin
+ width: url_text.width + copy_url_to_clipboard_button.width + 5 + 5
+ x: 0; y: 0
+ z: -1
+ }
+
+ readOnly: true
+ color: Material.foreground
+ wrapMode: Text.WordWrap
+ selectByMouse: true
+
+ Button {
+ id: copy_pin_to_clipboard_button
+ width: copy_pin_to_clipboard_image.width + 6
+ height: copy_pin_to_clipboard_image.height + 6 + 10
+ anchors.verticalCenter: parent.verticalCenter
+ flat: true
+ display: AbstractButton.IconOnly
+ anchors.left: pin_text.right
+ anchors.leftMargin: 5
+
+ Image {
+ id: copy_pin_to_clipboard_image
+ anchors.verticalCenter: parent.verticalCenter
+ opacity: 0.65
+ anchors.horizontalCenter: parent.horizontalCenter
+ source: "../../images/into-clipboard.svg"
+ fillMode: Image.PreserveAspectFit
+ }
+
+ onClicked: {
+ mainqmladaptor.handleCopyToClipboardButtonClick(pin_text.text);
+ toast.show(qsTr("Copied PIN into clipboard!"), "1000");
+ }
+
+ ToolTip.text: qsTr("Copy the pin into the clipboard")
+ hoverEnabled: true
+
+ ToolTip.delay: 1000
+ ToolTip.timeout: 5000
+ ToolTip.visible: hovered
+ }
+ }
+ }
+
+ }
+
+ Button {
+ id: start_support_button
+ height: Math.min(50)
+ objectName: "start_support_button"
+ text: qsTr("Start remote support session")
+ anchors.rightMargin: column.anchors.leftMargin
+ anchors.bottom: dbus_api_status_line.top
+ anchors.bottomMargin: 10
+ anchors.right: parent.right
+ checkable: true
+
+ onClicked: mainqmladaptor.handleConnectButtonClick(checked);
+ }
+}
+
+/*##^## Designer {
+ D{i:0;autoSize:true;height:480;width:640}
+}
+ ##^##*/
diff --git a/src/scenes/Scene_remote_view.qml b/src/scenes/Scene_remote_view.qml
new file mode 100644
index 0000000..cea5ccf
--- /dev/null
+++ b/src/scenes/Scene_remote_view.qml
@@ -0,0 +1,366 @@
+import QtQuick 2.9
+import QtQuick.Window 2.2
+import QtQuick.Extras 1.4
+import QtQuick.Controls 2.2
+import QtQuick.Dialogs 1.2
+import QtQuick.Controls.Material 2.3
+
+Item {
+ id: scene_remote_view
+ objectName: "Scene_remote_view"
+
+ Label {
+ id: dbus_api_status_text
+ text: "Unknown state of Service"
+ anchors.leftMargin: 10 + 5 + dbus_api_status_indicator.width
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 10
+ wrapMode: Text.WrapAtWordBoundaryOrAnywhere
+ verticalAlignment: Text.AlignVCenter
+ font.pointSize: 11
+ fontSizeMode: Text.Fit
+ objectName: "dbus_api_status_text"
+ anchors.left: parent.left
+
+ StatusIndicator {
+ id: dbus_api_status_indicator
+ width: height
+ height: parent.height
+ objectName: "dbus_api_status_indicator"
+ color: "#73d216"
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.left
+ anchors.rightMargin: 5
+ active: false
+ }
+ }
+
+ Label {
+ id: explain_function_label
+ text: qsTr("Please tell your remote support partner your access address and your access-PIN to let your partner connect to this computer.")
+ font.pixelSize: 18
+ fontSizeMode: Text.VerticalFit
+ wrapMode: Text.WordWrap
+ anchors.left: parent.left
+ anchors.leftMargin: 10
+ anchors.top: parent.top
+ anchors.topMargin: 10
+ anchors.right: parent.right
+ anchors.rightMargin: 10
+ horizontalAlignment: Text.AlignLeft
+ enabled: false
+
+ color: Material.theme == Material.Light ? "#000000" : "#FFFFFF"
+ }
+
+ Rectangle {
+ id: dbus_api_status_line
+ y: 379
+ height: 1
+ radius: 1
+ anchors.right: parent.right
+ anchors.rightMargin: 10
+ anchors.bottom: dbus_api_status_text.top
+ anchors.bottomMargin: 10
+ opacity: 0.3
+ gradient: Gradient {
+ GradientStop {
+ position: 0.391
+ color: "#ffffff"
+ }
+
+ GradientStop {
+ position: 0.975
+ color: "#8b8b8b"
+ }
+ }
+ border.width: 1
+ border.color: "#00000000"
+ anchors.left: parent.left
+ anchors.leftMargin: 10
+ }
+
+ Column {
+ id: column
+ spacing: 6
+ anchors.right: parent.right
+ anchors.rightMargin: 10
+ anchors.left: parent.left
+ anchors.leftMargin: 10
+ anchors.bottom: dbus_api_status_line.top
+ anchors.bottomMargin: 10
+ anchors.top: explain_function_label.bottom
+ anchors.topMargin: 10
+
+ Column {
+ id: url_group
+ width: parent.width
+ height: parent.height * 0.25
+ spacing: 5
+
+ Label {
+ id: your_url_text
+ height: parent.height/2
+ text: qsTr("Remote viewing Address")
+ font.weight: Font.Bold
+ font.bold: true
+ verticalAlignment: Text.AlignBottom
+ horizontalAlignment: Text.AlignLeft
+ font.pointSize: 14
+ fontSizeMode: Text.Fit
+ }
+
+ TextEdit {
+ id: url_text
+ height: parent.height/2
+ text: mainqmladaptor.url
+ anchors.rightMargin: 10 + copy_url_to_clipboard_button.width
+ anchors.right: parent.right
+ wrapMode: Text.WrapAtWordBoundaryOrAnywhere
+ anchors.leftMargin: 10
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignLeft
+ font.pointSize: 15
+
+ readOnly: true
+ color: Material.foreground
+ selectByMouse: true
+ anchors.left: parent.left
+
+ leftPadding: 5
+ Rectangle {
+ radius: 5
+ color: Material.theme == Material.Light ? "#F0F0F0" : "#383838"
+ height: url_text.height
+ // whole line + copy-into-clipboard button + some margin
+ width: url_text.width + copy_url_to_clipboard_button.width + 5 + 5
+ x: 0; y: 0
+ z: -1
+ }
+
+ Button {
+ id: copy_url_to_clipboard_button
+ width: copy_url_to_clipboard_image.width + 6
+ height: copy_url_to_clipboard_image.height + 6 + 10
+ anchors.verticalCenter: parent.verticalCenter
+ display: AbstractButton.IconOnly
+ anchors.leftMargin: 5
+ anchors.left: url_text.right
+ highlighted: false
+ flat: true
+
+ Image {
+ id: copy_url_to_clipboard_image
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ source: "../../images/into-clipboard.svg"
+ opacity: 0.65
+ }
+
+ onClicked: {
+ mainqmladaptor.handleCopyToClipboardButtonClick(url_text.text);
+ toast.show(qsTr("Copied access address into clipboard!"), "1000");
+ }
+
+ ToolTip.text: qsTr("Copy the access address into the clipboard")
+ hoverEnabled: true
+
+ ToolTip.delay: 1000
+ ToolTip.timeout: 5000
+ ToolTip.visible: hovered
+ }
+ }
+ }
+
+ Column {
+ id: session_id_group
+ width: parent.width
+ height: parent.height * 0.25
+ spacing: 5
+
+ Label {
+ id: your_session_id_text
+ height: parent.height/2
+ text: qsTr("Session-ID")
+ font.weight: Font.Bold
+ font.bold: true
+ anchors.right: parent.right
+ anchors.rightMargin: 0
+ anchors.left: parent.left
+ anchors.leftMargin: 0
+ font.pointSize: 14
+ verticalAlignment: Text.AlignBottom
+ horizontalAlignment: Text.AlignLeft
+ fontSizeMode: Text.Fit
+ }
+
+ TextEdit {
+ objectName: "session_id_text"
+ id: session_id_text
+ height: parent.height/2
+ text: mainqmladaptor.session_id
+ font.letterSpacing: 10
+ anchors.rightMargin: 10 + copy_session_id_to_clipboard_button.width
+ anchors.right: parent.right
+ font.pointSize: 15
+ anchors.left: parent.left
+ anchors.leftMargin: 10
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+
+ leftPadding: 5
+ Rectangle {
+ radius: 5
+ color: Material.theme == Material.Light ? "#F0F0F0" : "#383838"
+ height: url_text.height
+ // whole line + copy-into-clipboard button + some margin
+ width: url_text.width + copy_url_to_clipboard_button.width + 5 + 5
+ x: 0; y: 0
+ z: -1
+ }
+
+ readOnly: true
+ color: Material.foreground
+ wrapMode: Text.WordWrap
+ selectByMouse: true
+
+ Button {
+ id: copy_session_id_to_clipboard_button
+ width: copy_session_id_to_clipboard_image.width + 6
+ height: copy_session_id_to_clipboard_image.height + 6 + 10
+ anchors.verticalCenter: parent.verticalCenter
+ flat: true
+ display: AbstractButton.IconOnly
+ anchors.left: session_id_text.right
+ anchors.leftMargin: 5
+
+ Image {
+ id: copy_session_id_to_clipboard_image
+ anchors.horizontalCenter: parent.horizontalCenter
+ opacity: 0.65
+ anchors.verticalCenter: parent.verticalCenter
+ source: "../../images/into-clipboard.svg"
+ fillMode: Image.PreserveAspectFit
+ }
+
+ onClicked: {
+ mainqmladaptor.handleCopyToClipboardButtonClick(pin_text.text);
+ toast.show(qsTr("Copied session-ID into clipboard!"), "1000");
+ }
+
+ ToolTip.text: qsTr("Copy the session-ID into the clipboard")
+ hoverEnabled: true
+
+ ToolTip.delay: 1000
+ ToolTip.timeout: 5000
+ ToolTip.visible: hovered
+ }
+ }
+ }
+
+ Column {
+ id: pin_group
+ width: parent.width
+ height: parent.height * 0.25
+ spacing: 5
+
+ Label {
+ id: your_pin_text
+ height: parent.height/2
+ text: qsTr("Access-PIN")
+ font.weight: Font.Bold
+ font.bold: true
+ anchors.right: parent.right
+ anchors.rightMargin: 0
+ anchors.left: parent.left
+ anchors.leftMargin: 0
+ font.pointSize: 14
+ verticalAlignment: Text.AlignBottom
+ horizontalAlignment: Text.AlignLeft
+ }
+
+ TextEdit {
+ objectName: "pin_text"
+ id: pin_text
+ height: parent.height/2
+ text: mainqmladaptor.pin
+ anchors.rightMargin: 10 + copy_pin_to_clipboard_button.width
+ anchors.right: parent.right
+ font.pointSize: 15
+ anchors.left: parent.left
+ anchors.leftMargin: 10
+ font.letterSpacing: 10
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+
+ leftPadding: 5
+ Rectangle {
+ radius: 5
+ color: Material.theme == Material.Light ? "#F0F0F0" : "#383838"
+ height: url_text.height
+ // whole line + copy-into-clipboard button + some margin
+ width: url_text.width + copy_url_to_clipboard_button.width + 5 + 5
+ x: 0; y: 0
+ z: -1
+ }
+
+ readOnly: true
+ color: Material.foreground
+ wrapMode: Text.WordWrap
+ selectByMouse: true
+
+ Button {
+ id: copy_pin_to_clipboard_button
+ width: copy_pin_to_clipboard_image.width + 6
+ height: copy_pin_to_clipboard_image.height + 6 + 10
+ anchors.verticalCenter: parent.verticalCenter
+ flat: true
+ display: AbstractButton.IconOnly
+ anchors.left: pin_text.right
+ anchors.leftMargin: 5
+
+ Image {
+ id: copy_pin_to_clipboard_image
+ anchors.verticalCenter: parent.verticalCenter
+ opacity: 0.65
+ anchors.horizontalCenter: parent.horizontalCenter
+ source: "../../images/into-clipboard.svg"
+ fillMode: Image.PreserveAspectFit
+ }
+
+ onClicked: {
+ mainqmladaptor.handleCopyToClipboardButtonClick(pin_text.text);
+ toast.show(qsTr("Copied PIN into clipboard!"), "1000");
+ }
+
+ ToolTip.text: qsTr("Copy the pin into the clipboard")
+ hoverEnabled: true
+
+ ToolTip.delay: 1000
+ ToolTip.timeout: 5000
+ ToolTip.visible: hovered
+ }
+ }
+ }
+
+ }
+
+ Button {
+ id: start_support_button
+ height: Math.min(50)
+ objectName: "start_support_button"
+ text: qsTr("Start remote viewing session")
+ anchors.rightMargin: column.anchors.leftMargin
+ anchors.bottom: dbus_api_status_line.top
+ anchors.bottomMargin: 10
+ anchors.right: parent.right
+ checkable: true
+
+ onClicked: mainqmladaptor.handleConnectButtonClick(checked);
+ }
+}
+
+/*##^## Designer {
+ D{i:0;autoSize:true;height:480;width:640}
+}
+ ##^##*/
diff --git a/src/scenes/Scene_settings.qml b/src/scenes/Scene_settings.qml
new file mode 100644
index 0000000..5a29071
--- /dev/null
+++ b/src/scenes/Scene_settings.qml
@@ -0,0 +1,29 @@
+import QtQuick 2.9
+import QtQuick.Window 2.2
+import QtQuick.Extras 1.4
+import QtQuick.Controls 2.2
+import QtQuick.Dialogs 1.2
+import QtQuick.Controls.Material 2.3
+
+Item {
+ id: scene_settings
+ objectName: "Scene_settings"
+
+ Rectangle {
+ id: rectangle
+ anchors.fill: parent
+ color: Material.background
+
+ Text {
+ color: Material.foreground
+ text: "Settings tab!"
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ }
+ }
+}
+
+/*##^## Designer {
+ D{i:0;autoSize:true;height:480;width:640}
+}
+ ##^##*/