/* Copyright 2021 Peter Repukat - FlatspotSoftware Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ import QtQuick 6.2 import QtQuick.Layouts 6.2 import QtQuick.Controls.Material 6.2 import QtQuick.Dialogs Window { id: window visible: true width: 1280 height: 719 Material.theme: Material.Dark Material.accent: Material.color(Material.Blue, Material.Shade900) property bool itemSelected: false; title: qsTr("GlosSI - Config") color: colorAlpha(Material.background, 0.98) function toggleMaximized() { if (window.visibility === Window.Maximized || window.visibility === Window.FullScreen) { window.visibility = Window.Windowed } else { window.visibility = Window.Maximized } } function colorAlpha(color, alpha) { return Qt.rgba(color.r, color.g, color.b, alpha); } Rectangle { id: titleBar visible: uiModel.isWindows color: colorAlpha(Qt.darker(Material.background, 1.1), 0.90) height: visible ? 24 : 0 anchors.top: parent.top anchors.left: parent.left anchors.right: parent.right TapHandler { onTapped: if (tapCount === 2) toggleMaximized() gesturePolicy: TapHandler.DragThreshold } DragHandler { grabPermissions: TapHandler.CanTakeOverFromAnything onActiveChanged: if (active) { window.startSystemMove(); } } Label { text: window.title font.bold: true anchors.leftMargin: 16 anchors.left: parent.left anchors.verticalCenter: parent.verticalCenter } RowLayout { anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter spacing: 0 ToolButton { text: "🗕" onClicked: window.showMinimized(); } ToolButton { text: window.visibility === Window.Maximized || window.visibility === Window.FullScreen ? "🗗" : "🗖" onClicked: window.toggleMaximized() } ToolButton { id: closbtn text: "🗙" onClicked: window.close() background: Rectangle { implicitWidth: 32 implicitHeight: 32 radius: 16 color: Qt.darker("red", closbtn.enabled && (closbtn.checked || closbtn.highlighted) ? 1.6 : 1.2) opacity: closbtn.hovered ? 0.5 : 0 Behavior on opacity { NumberAnimation { duration: 350 easing.type: Easing.InOutQuad } } } } } } Item { anchors.left: parent.left anchors.right: parent.right anchors.top: titleBar.bottom anchors.bottom: parent.bottom RPane { id: existingTargetsPane anchors.left: parent.left width:window.width / 3.301 + 16 Component.onCompleted: console.log(width) anchors.top: parent.top anchors.bottom: parent.bottom Material.elevation: 6 anchors.leftMargin: -16 radius: 16 color: Qt.lighter(Material.background, 1.6) bgOpacity: 0.8 Item { anchors.top: parent.top anchors.bottom: parent.bottom anchors.left: parent.left anchors.right: parent.right anchors.leftMargin: 16 clip: true ListView { anchors.fill: parent spacing: 0 model: uiModel.getTargetList(); delegate: Item { width: parent.width height: lbl.height + lbl.anchors.topMargin + lbl.anchors.bottomMargin // TODO: Left size App icon Label { id: lbl anchors.left: parent.left anchors.right: parent.right anchors.rightMargin: 48 anchors.topMargin: 8 anchors.bottomMargin: 8 anchors.leftMargin: 4 anchors.verticalCenter: parent.verticalCenter text: modelData font.pixelSize: 16 } // TODO: Right side icon if in steam Rectangle { width: parent.width height: 1 anchors.bottom: parent.bottom color: Qt.rgba(1,1,1,0.3) } } } } } RoundButton { id: addBtn anchors.right: parent.right anchors.bottom: parent.bottom anchors.margins: 24 width: 64 height: 64 text: "+" contentItem: Label { anchors.centerIn: parent text: addBtn.text font.pixelSize: 32 horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter elide: Text.ElideRight } highlighted: true onClicked: fileDialog.open(); } FileDialog { id: fileDialog title: qsTr("Please choose a Program to Launch") nameFilters: uiModel.isWindows ? ["Executable files (*.exe *.bat *.ps1)"] : [] onAccepted: { console.log("You chose: " + fileDialog.selectedFile) } onRejected: { console.log("Canceled") } } } }