diff --git a/src/ui/MainRootWindow.qml b/src/ui/MainRootWindow.qml index 8111f22..0468d92 100644 --- a/src/ui/MainRootWindow.qml +++ b/src/ui/MainRootWindow.qml @@ -196,47 +196,66 @@ ApplicationWindow { mainWindow.close() } + // On attempting an application close we check for: + // Unsaved missions - then + // Pending parameter writes - then + // Active connections + onClosing: { + if (!_forceClose) { + unsavedMissionCloseDialog.check() + close.accepted = false + } + } + MessageDialog { - id: activeConnectionsCloseDialog + id: unsavedMissionCloseDialog title: qsTr("%1 close").arg(QGroundControl.appName) - text: qsTr("There are still active connections to vehicles. Are you sure you want to exit?") - standardButtons: StandardButton.Yes | StandardButton.Cancel + text: qsTr("You have a mission edit in progress which has not been saved/sent. If you close you will lose changes. Are you sure you want to close?") + standardButtons: StandardButton.Yes | StandardButton.No modality: Qt.ApplicationModal visible: false - onYes: finishCloseProcess() + onYes: pendingParameterWritesCloseDialog.check() function check() { - if (QGroundControl.multiVehicleManager.activeVehicle) { - activeConnectionsCloseDialog.open() + if (planMasterControllerPlan && planMasterControllerPlan.dirty) { + unsavedMissionCloseDialog.open() } else { - finishCloseProcess() + pendingParameterWritesCloseDialog.check() } } } - //------------------------------------------------------------------------- - //-- Check for unsaved missions - - onClosing: { - // Check first for unsaved missions and active connections - if (!_forceClose) { - unsavedMissionCloseDialog.check() - close.accepted = false + MessageDialog { + id: pendingParameterWritesCloseDialog + title: qsTr("%1 close").arg(QGroundControl.appName) + text: qsTr("You have pending parameter updates to a vehicle. If you close you will lose changes. Are you sure you want to close?") + standardButtons: StandardButton.Yes | StandardButton.No + modality: Qt.ApplicationModal + visible: false + onYes: activeConnectionsCloseDialog.check() + function check() { + for (var index=0; index<QGroundControl.multiVehicleManager.vehicles.count; index++) { + if (QGroundControl.multiVehicleManager.vehicles.get(index).parameterManager.pendingWrites) { + pendingParameterWritesCloseDialog.open() + return + } + } + activeConnectionsCloseDialog.check() } } MessageDialog { - id: unsavedMissionCloseDialog + id: activeConnectionsCloseDialog title: qsTr("%1 close").arg(QGroundControl.appName) - text: qsTr("You have a mission edit in progress which has not been saved/sent. If you close you will lose changes. Are you sure you want to close?") - standardButtons: StandardButton.Yes | StandardButton.No + text: qsTr("There are still active connections to vehicles. Are you sure you want to exit?") + standardButtons: StandardButton.Yes | StandardButton.Cancel modality: Qt.ApplicationModal visible: false - onYes: activeConnectionsCloseDialog.check() + onYes: finishCloseProcess() function check() { - if (planMasterControllerPlan && planMasterControllerPlan.dirty) { - unsavedMissionCloseDialog.open() + if (QGroundControl.multiVehicleManager.activeVehicle) { + activeConnectionsCloseDialog.open() } else { - activeConnectionsCloseDialog.check() + finishCloseProcess() } } }