/* * This file is part of Remote Support Desktop * https://gitlab.das-netzwerkteam.de/RemoteWebApp/remote-support-desktop * Copyright 2020-2021 Daniel Teichmann * Copyright 2020-2021 Mike Gabriel * 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 . */ 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 } } } }