From 50d02ed7035f36bd2d65d5605d25f13a6830e0bf Mon Sep 17 00:00:00 2001 From: DonLakeFlyer Date: Mon, 24 Aug 2020 12:17:37 -0700 Subject: [PATCH] Move/rework popup into indicator source --- src/ui/toolbar/MessageIndicator.qml | 103 +++++++++++++++++++++++++--- 1 file changed, 94 insertions(+), 9 deletions(-) diff --git a/src/ui/toolbar/MessageIndicator.qml b/src/ui/toolbar/MessageIndicator.qml index c6ea34ae3..668506b2b 100644 --- a/src/ui/toolbar/MessageIndicator.qml +++ b/src/ui/toolbar/MessageIndicator.qml @@ -21,26 +21,28 @@ import QGroundControl.Palette 1.0 //------------------------------------------------------------------------- //-- Message Indicator Item { + id: _root width: height anchors.top: parent.top anchors.bottom: parent.bottom property bool showIndicator: true - property bool _isMessageImportant: activeVehicle ? !activeVehicle.messageTypeNormal && !activeVehicle.messageTypeNone : false + property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle + property bool _isMessageImportant: _activeVehicle ? !_activeVehicle.messageTypeNormal && !_activeVehicle.messageTypeNone : false function getMessageColor() { - if (activeVehicle) { - if (activeVehicle.messageTypeNone) + if (_activeVehicle) { + if (_activeVehicle.messageTypeNone) return qgcPal.colorGrey - if (activeVehicle.messageTypeNormal) + if (_activeVehicle.messageTypeNormal) return qgcPal.colorBlue; - if (activeVehicle.messageTypeWarning) + if (_activeVehicle.messageTypeWarning) return qgcPal.colorOrange; - if (activeVehicle.messageTypeError) + if (_activeVehicle.messageTypeError) return qgcPal.colorRed; // Cannot be so make make it obnoxious to show error - console.log("Invalid vehicle message type") + console.warn("MessageIndicator.qml:getMessageColor Invalid vehicle message type", _activeVehicle.messageTypeNone) return "purple"; } //-- It can only get here when closing (vehicle gone while window active) @@ -54,7 +56,7 @@ Item { sourceSize.height: height fillMode: Image.PreserveAspectFit cache: false - visible: activeVehicle && activeVehicle.messageCount > 0 && _isMessageImportant + visible: _activeVehicle && _activeVehicle.messageCount > 0 && _isMessageImportant } QGCColoredImage { @@ -68,6 +70,89 @@ Item { MouseArea { anchors.fill: parent - onClicked: mainWindow.showVehicleMessages() + onClicked: mainWindow.showIndicatorPopup(_root, vehicleMessagesPopup) + } + + Component { + id: vehicleMessagesPopup + + Rectangle { + width: mainWindow.width * 0.666 + height: mainWindow.height * 0.666 + radius: ScreenTools.defaultFontPixelHeight / 2 + color: qgcPal.window + border.color: qgcPal.text + + function formatMessage(message) { + message = message.replace(new RegExp("<#E>", "g"), "color: " + qgcPal.warningText + "; font: " + (ScreenTools.defaultFontPointSize.toFixed(0) - 1) + "pt monospace;"); + message = message.replace(new RegExp("<#I>", "g"), "color: " + qgcPal.warningText + "; font: " + (ScreenTools.defaultFontPointSize.toFixed(0) - 1) + "pt monospace;"); + message = message.replace(new RegExp("<#N>", "g"), "color: " + qgcPal.text + "; font: " + (ScreenTools.defaultFontPointSize.toFixed(0) - 1) + "pt monospace;"); + return message; + } + + Component.onCompleted: { + messageText.text = formatMessage(_activeVehicle.formattedMessages) + //-- Hack to scroll to last message + for (var i = 0; i < _activeVehicle.messageCount; i++) + messageFlick.flick(0,-5000) + _activeVehicle.resetMessages() + } + + Connections { + target: _activeVehicle + onNewFormattedMessage :{ + messageText.append(formatMessage(formattedMessage)) + //-- Hack to scroll down + messageFlick.flick(0,-500) + } + } + + QGCLabel { + anchors.centerIn: parent + text: qsTr("No Messages") + visible: messageText.length === 0 + } + + //-- Clear Messages + QGCColoredImage { + anchors.bottom: parent.bottom + anchors.right: parent.right + anchors.margins: ScreenTools.defaultFontPixelHeight * 0.5 + height: ScreenTools.isMobile ? ScreenTools.defaultFontPixelHeight * 1.5 : ScreenTools.defaultFontPixelHeight + width: height + sourceSize.height: height + source: "/res/TrashDelete.svg" + fillMode: Image.PreserveAspectFit + mipmap: true + smooth: true + color: qgcPal.text + visible: messageText.length !== 0 + MouseArea { + anchors.fill: parent + onClicked: { + if (_activeVehicle) { + _activeVehicle.clearMessages() + mainWindow.hideIndicatorPopup() + } + } + } + } + + QGCFlickable { + id: messageFlick + anchors.margins: ScreenTools.defaultFontPixelHeight + anchors.fill: parent + contentHeight: messageText.height + contentWidth: messageText.width + pixelAligned: true + + TextEdit { + id: messageText + readOnly: true + textFormat: TextEdit.RichText + color: qgcPal.text + } + } + } } } -- 2.22.0