2021-09-05 02:41:48 -05:00
|
|
|
/*
|
2023-01-22 23:51:35 -06:00
|
|
|
* Copyright (c) 2020-2023 Alex Spataru <https://github.com/alex-spataru>
|
2021-09-05 02:41:48 -05:00
|
|
|
*
|
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
|
|
* in the Software without restriction, including without limitation the rights
|
|
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
|
|
* furnished to do so, subject to the following conditions:
|
|
|
|
*
|
|
|
|
* The above copyright notice and this permission notice shall be included in
|
|
|
|
* all copies or substantial portions of the Software.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
|
* THE SOFTWARE.
|
|
|
|
*/
|
|
|
|
|
2024-04-01 02:42:21 -05:00
|
|
|
import QtCore
|
2022-05-02 04:31:32 -05:00
|
|
|
import QtQuick
|
|
|
|
import QtQuick.Window
|
|
|
|
import QtQuick.Layouts
|
|
|
|
import QtQuick.Controls
|
2021-09-05 02:41:48 -05:00
|
|
|
|
2024-08-10 12:58:21 -05:00
|
|
|
import "Panes" as Panes
|
|
|
|
import "../Widgets" as Widgets
|
2024-05-05 00:20:10 -05:00
|
|
|
|
2024-08-10 12:58:21 -05:00
|
|
|
Window {
|
|
|
|
id: root
|
2024-05-05 00:20:10 -05:00
|
|
|
|
|
|
|
//
|
|
|
|
// Global properties
|
|
|
|
//
|
|
|
|
readonly property bool setupVisible: setup.visible
|
|
|
|
readonly property bool consoleVisible: terminal.visible
|
|
|
|
readonly property bool dashboardVisible: dashboard.visible
|
|
|
|
|
|
|
|
//
|
|
|
|
// Custom properties
|
|
|
|
//
|
|
|
|
property int appLaunchCount: 0
|
|
|
|
property bool firstValidFrame: false
|
|
|
|
property bool automaticUpdates: false
|
|
|
|
property alias vt100emulation: terminal.vt100emulation
|
|
|
|
|
|
|
|
//
|
|
|
|
// Toolbar functions aliases
|
|
|
|
//
|
|
|
|
function showSetup() { toolbar.setupClicked() }
|
|
|
|
function showConsole() { toolbar.consoleClicked() }
|
|
|
|
function showDashboard() { dbTimer.start() }
|
|
|
|
|
|
|
|
//
|
|
|
|
// Wait a little before showing the dashboard to avoid UI glitches and/or overloading
|
|
|
|
// the rendering engine
|
|
|
|
//
|
|
|
|
Timer {
|
|
|
|
id: dbTimer
|
|
|
|
interval: 500
|
|
|
|
onTriggered: toolbar.dashboardClicked()
|
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Console-related functions
|
|
|
|
//
|
|
|
|
function consoleCopy() { terminal.copy() }
|
|
|
|
function consoleClear() { terminal.clear() }
|
|
|
|
function consoleSelectAll() { terminal.selectAll() }
|
|
|
|
|
|
|
|
//
|
|
|
|
// Window geometry
|
|
|
|
//
|
|
|
|
visible: false
|
|
|
|
title: Cpp_AppName
|
|
|
|
width: minimumWidth
|
|
|
|
height: minimumHeight
|
|
|
|
minimumWidth: 1120 + 2 * root.shadowMargin
|
|
|
|
minimumHeight: 650 + 2 * root.shadowMargin + root.titlebar.height
|
|
|
|
|
|
|
|
//
|
|
|
|
// Startup code
|
|
|
|
//
|
|
|
|
Component.onCompleted: {
|
|
|
|
// Load welcome text
|
|
|
|
terminal.showWelcomeGuide()
|
|
|
|
|
|
|
|
// Increment app launch count
|
|
|
|
++appLaunchCount
|
|
|
|
|
|
|
|
// Show app window
|
|
|
|
if (root.isFullscreen)
|
|
|
|
root.showFullScreen()
|
|
|
|
else if (root.isMaximized)
|
|
|
|
root.showMaximized()
|
|
|
|
else {
|
|
|
|
// Fix maximize not working on first try on macOS & Windows
|
|
|
|
root.opacity = 0
|
|
|
|
var x = root.x
|
|
|
|
var y = root.y
|
|
|
|
var w = root.width
|
|
|
|
var h = root.height
|
|
|
|
root.showMaximized()
|
|
|
|
root.showNormal()
|
|
|
|
root.setGeometry(x, y, w,h)
|
|
|
|
root.opacity = 1
|
2021-12-03 23:26:20 -06:00
|
|
|
}
|
2021-09-05 02:41:48 -05:00
|
|
|
|
2024-05-05 00:20:10 -05:00
|
|
|
// Force active focus
|
|
|
|
root.requestActivate()
|
|
|
|
root.requestUpdate()
|
2021-09-05 02:41:48 -05:00
|
|
|
|
2024-05-05 00:20:10 -05:00
|
|
|
// Show donations dialog every 15 launches
|
|
|
|
if (root.appLaunchCount % 15 == 0 && !app.donateDialog.doNotShowAgain)
|
|
|
|
app.donateDialog.showAutomatically()
|
2021-09-05 02:41:48 -05:00
|
|
|
|
2024-05-05 00:20:10 -05:00
|
|
|
// Ask user if he/she wants to enable automatic updates
|
|
|
|
if (root.appLaunchCount == 2 && Cpp_UpdaterEnabled) {
|
|
|
|
if (Cpp_Misc_Utilities.askAutomaticUpdates()) {
|
|
|
|
root.automaticUpdates = true
|
|
|
|
Cpp_Updater.checkForUpdates(Cpp_AppUpdaterUrl)
|
|
|
|
}
|
2021-09-05 02:41:48 -05:00
|
|
|
|
2024-05-05 00:20:10 -05:00
|
|
|
else
|
|
|
|
root.automaticUpdates = false
|
2021-09-05 02:41:48 -05:00
|
|
|
}
|
|
|
|
|
2024-05-05 00:20:10 -05:00
|
|
|
// Check for updates (if we are allowed)
|
|
|
|
if (root.automaticUpdates && Cpp_UpdaterEnabled)
|
|
|
|
Cpp_Updater.checkForUpdates(Cpp_AppUpdaterUrl)
|
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Hide console & device manager when we receive first valid frame
|
|
|
|
//
|
|
|
|
Connections {
|
|
|
|
target: Cpp_UI_Dashboard
|
|
|
|
|
|
|
|
function onUpdated() {
|
|
|
|
if (root.firstValidFrame)
|
|
|
|
return
|
|
|
|
|
|
|
|
if ((Cpp_IO_Manager.connected || Cpp_CSV_Player.isOpen) && Cpp_UI_Dashboard.frameValid()) {
|
|
|
|
setup.hide()
|
|
|
|
root.showDashboard()
|
|
|
|
root.firstValidFrame = true
|
|
|
|
}
|
|
|
|
|
|
|
|
else {
|
|
|
|
setup.show()
|
|
|
|
root.showConsole()
|
|
|
|
root.firstValidFrame = false
|
|
|
|
}
|
2021-09-05 02:41:48 -05:00
|
|
|
}
|
2024-05-05 00:20:10 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Show console tab on serial disconnect
|
|
|
|
//
|
|
|
|
Connections {
|
|
|
|
target: Cpp_UI_Dashboard
|
|
|
|
function onDataReset() {
|
|
|
|
setup.show()
|
|
|
|
root.showConsole()
|
|
|
|
root.firstValidFrame = false
|
2021-09-05 02:41:48 -05:00
|
|
|
}
|
2024-05-05 00:20:10 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Save window size & position
|
|
|
|
//
|
|
|
|
Settings {
|
|
|
|
property alias wx: root.x
|
|
|
|
property alias wy: root.y
|
|
|
|
property alias ww: root.width
|
|
|
|
property alias wh: root.height
|
|
|
|
property alias wm: root.isMaximized
|
|
|
|
property alias wf: root.isFullscreen
|
|
|
|
property alias appStatus: root.appLaunchCount
|
|
|
|
property alias autoUpdater: root.automaticUpdates
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Rectangle for the menubar (only used if custom window flags are disabled)
|
|
|
|
//
|
|
|
|
Rectangle {
|
|
|
|
color: root.titlebarColor
|
|
|
|
anchors.fill: menubarLayout
|
|
|
|
visible: !Cpp_ThemeManager.customWindowDecorations
|
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Main layout
|
|
|
|
//
|
|
|
|
Page {
|
|
|
|
clip: true
|
|
|
|
anchors.fill: parent
|
|
|
|
|
|
|
|
palette.alternateBase: Cpp_ThemeManager.base
|
|
|
|
palette.base: Cpp_ThemeManager.base
|
|
|
|
palette.brightText: Cpp_ThemeManager.brightText
|
|
|
|
palette.button: Cpp_ThemeManager.button
|
|
|
|
palette.buttonText: Cpp_ThemeManager.buttonText
|
|
|
|
palette.highlight: Cpp_ThemeManager.highlight
|
|
|
|
palette.highlightedText: Cpp_ThemeManager.highlightedText
|
|
|
|
palette.link: Cpp_ThemeManager.link
|
|
|
|
palette.placeholderText: Cpp_ThemeManager.placeholderText
|
|
|
|
palette.text: Cpp_ThemeManager.text
|
|
|
|
palette.toolTipBase: Cpp_ThemeManager.tooltipBase
|
|
|
|
palette.toolTipText: Cpp_ThemeManager.tooltipText
|
|
|
|
palette.window: Cpp_ThemeManager.window
|
|
|
|
palette.windowText: Cpp_ThemeManager.windowText
|
|
|
|
|
|
|
|
background: Rectangle {
|
|
|
|
radius: root.radius
|
|
|
|
color: Cpp_ThemeManager.windowBackground
|
2021-12-21 23:34:58 -05:00
|
|
|
}
|
|
|
|
|
2024-05-05 00:20:10 -05:00
|
|
|
ColumnLayout {
|
|
|
|
spacing: 0
|
|
|
|
anchors.fill: parent
|
2021-11-09 20:18:51 -06:00
|
|
|
|
2024-05-05 00:20:10 -05:00
|
|
|
//
|
|
|
|
// Application toolbar
|
|
|
|
//
|
2024-08-10 12:58:21 -05:00
|
|
|
Panes.Toolbar {
|
2024-05-05 00:20:10 -05:00
|
|
|
id: toolbar
|
|
|
|
window: root
|
|
|
|
z: titlebar.z
|
|
|
|
Layout.fillWidth: true
|
|
|
|
setupChecked: root.setupVisible
|
|
|
|
consoleChecked: root.consoleVisible
|
2024-08-10 12:58:21 -05:00
|
|
|
Layout.minimumHeight: implicitHeight
|
|
|
|
Layout.maximumHeight: implicitHeight
|
2024-05-05 00:20:10 -05:00
|
|
|
dashboardChecked: root.dashboardVisible
|
|
|
|
onProjectEditorClicked: app.projectEditorWindow.show()
|
|
|
|
onSetupClicked: setup.visible ? setup.hide() : setup.show()
|
|
|
|
|
|
|
|
onDashboardClicked: {
|
|
|
|
if (Cpp_UI_Dashboard.available) {
|
|
|
|
consoleChecked = 0
|
|
|
|
dashboardChecked = 1
|
|
|
|
if (stack.currentItem != dashboard)
|
|
|
|
stack.push(dashboard)
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
root.showConsole()
|
2021-11-07 03:49:50 -06:00
|
|
|
}
|
|
|
|
|
2024-05-05 00:20:10 -05:00
|
|
|
onConsoleClicked: {
|
|
|
|
consoleChecked = 1
|
|
|
|
dashboardChecked = 0
|
|
|
|
stack.pop()
|
2021-11-06 13:00:11 -06:00
|
|
|
}
|
2024-05-05 00:20:10 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Console, dashboard & setup panel
|
|
|
|
//
|
|
|
|
RowLayout {
|
|
|
|
spacing: 0
|
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.fillHeight: true
|
|
|
|
|
|
|
|
StackView {
|
|
|
|
id: stack
|
|
|
|
clip: true
|
|
|
|
initialItem: terminal
|
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.fillHeight: true
|
|
|
|
data: [
|
2024-08-10 12:58:21 -05:00
|
|
|
Panes.Console {
|
2024-05-05 00:20:10 -05:00
|
|
|
id: terminal
|
|
|
|
visible: false
|
|
|
|
width: parent.width
|
|
|
|
height: parent.height
|
|
|
|
},
|
|
|
|
|
2024-08-10 12:58:21 -05:00
|
|
|
Panes.Dashboard {
|
2024-05-05 00:20:10 -05:00
|
|
|
id: dashboard
|
|
|
|
visible: false
|
|
|
|
width: parent.width
|
|
|
|
height: parent.height
|
2021-09-05 02:41:48 -05:00
|
|
|
}
|
2024-05-05 00:20:10 -05:00
|
|
|
]
|
2021-09-05 02:41:48 -05:00
|
|
|
}
|
|
|
|
|
2024-08-10 12:58:21 -05:00
|
|
|
Panes.Setup {
|
2024-05-05 00:20:10 -05:00
|
|
|
id: setup
|
|
|
|
Layout.fillHeight: true
|
|
|
|
Layout.rightMargin: setupMargin
|
|
|
|
Layout.minimumWidth: displayedWidth
|
|
|
|
Layout.maximumWidth: displayedWidth
|
|
|
|
}
|
|
|
|
}
|
2021-11-25 02:36:52 -06:00
|
|
|
}
|
2024-05-05 00:20:10 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// JSON project drop area
|
|
|
|
//
|
2024-08-10 12:58:21 -05:00
|
|
|
Widgets.JSONDropArea {
|
2024-05-05 00:20:10 -05:00
|
|
|
anchors.fill: parent
|
|
|
|
enabled: !Cpp_IO_Manager.connected
|
|
|
|
}
|
2021-09-05 02:41:48 -05:00
|
|
|
}
|