From 0bfb4de8199599ed261ee96001f1aa0b411cb1e4 Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Tue, 1 Oct 2019 19:19:19 -0700 Subject: [PATCH] Save/load main window state --- qgroundcontrol.qrc | 1 + src/QmlControls/MainWindowSavedState.qml | 74 +++++++++++++++++++ .../QGroundControl/Controls/qmldir | 1 + src/ui/MainRootWindow.qml | 4 + 4 files changed, 80 insertions(+) create mode 100644 src/QmlControls/MainWindowSavedState.qml diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc index fa345bdca..566974b77 100644 --- a/qgroundcontrol.qrc +++ b/qgroundcontrol.qrc @@ -86,6 +86,7 @@ src/QmlControls/IndicatorButton.qml src/QmlControls/JoystickThumbPad.qml src/QmlControls/LogReplayStatusBar.qml + src/QmlControls/MainWindowSavedState.qml src/QmlControls/MAVLinkMessageButton.qml src/QmlControls/MissionCommandDialog.qml src/PlanView/MissionItemEditor.qml diff --git a/src/QmlControls/MainWindowSavedState.qml b/src/QmlControls/MainWindowSavedState.qml new file mode 100644 index 000000000..9515a193d --- /dev/null +++ b/src/QmlControls/MainWindowSavedState.qml @@ -0,0 +1,74 @@ +/**************************************************************************** + * + * (c) 2009-2016 QGROUNDCONTROL PROJECT + * + * QGroundControl is licensed according to the terms in the file + * COPYING.md in the root of the source code directory. + * + ****************************************************************************/ + +import QtQuick 2.11 +import QtQuick.Window 2.11 +import QtQuick.Controls 2.4 +import Qt.labs.settings 1.0 + +import QGroundControl.ScreenTools 1.0 + +Item { + property Window window + + Settings { + id: s + category: "MainWindowState" + + property int x + property int y + property int width + property int height + property int visibility + } + + Component.onCompleted: { + if (!ScreenTools.isMobile && s.width && s.height) { + window.x = s.x; + window.y = s.y; + window.width = s.width; + window.height = s.height; + window.visibility = s.visibility; + } + } + + Connections { + target: ScreenTools.isMobile ? null : window + onXChanged: saveSettingsTimer.restart() + onYChanged: saveSettingsTimer.restart() + onWidthChanged: saveSettingsTimer.restart() + onHeightChanged: saveSettingsTimer.restart() + onVisibilityChanged: saveSettingsTimer.restart() + } + + Timer { + id: saveSettingsTimer + interval: 1000 + repeat: false + onTriggered: saveSettings() + } + + function saveSettings() { + switch(window.visibility) { + case ApplicationWindow.Windowed: + s.x = window.x; + s.y = window.y; + s.width = window.width; + s.height = window.height; + s.visibility = window.visibility; + break; + case ApplicationWindow.FullScreen: + s.visibility = window.visibility; + break; + case ApplicationWindow.Maximized: + s.visibility = window.visibility; + break; + } + } +} diff --git a/src/QmlControls/QGroundControl/Controls/qmldir b/src/QmlControls/QGroundControl/Controls/qmldir index 8373c3079..5d2fb829e 100644 --- a/src/QmlControls/QGroundControl/Controls/qmldir +++ b/src/QmlControls/QGroundControl/Controls/qmldir @@ -24,6 +24,7 @@ HeightIndicator 1.0 HeightIndicator.qml IndicatorButton 1.0 IndicatorButton.qml JoystickThumbPad 1.0 JoystickThumbPad.qml LogReplayStatusBar 1.0 LogReplayStatusBar.qml +MainWindowSavedState 1.0 MainWindowSavedState.qml MAVLinkMessageButton 1.0 MAVLinkMessageButton.qml MissionCommandDialog 1.0 MissionCommandDialog.qml MissionItemEditor 1.0 MissionItemEditor.qml diff --git a/src/ui/MainRootWindow.qml b/src/ui/MainRootWindow.qml index 34f38cdb7..e37fc8352 100644 --- a/src/ui/MainRootWindow.qml +++ b/src/ui/MainRootWindow.qml @@ -122,6 +122,10 @@ ApplicationWindow { simpleMessageDialog.open() } + MainWindowSavedState { + window: mainWindow + } + MessageDialog { id: simpleMessageDialog standardButtons: StandardButton.Ok -- 2.22.0