diff --git a/qgcresources.qrc b/qgcresources.qrc index 36f728b9b0e779a8d633cf4da3bef136e48dd5b6..3dba5b6195ce657b3115e59a4c9e179bde94bd07 100644 --- a/qgcresources.qrc +++ b/qgcresources.qrc @@ -126,8 +126,6 @@ src/FlightMap/Images/MapSyncChanged.svg src/FlightMap/Images/MapType.svg src/FlightMap/Images/MapTypeBlack.svg - src/FlightMap/Images/TrashDelete.svg - src/FlightMap/Images/TrashDeleteBlack.svg src/ui/toolbar/Images/Armed.svg src/ui/toolbar/Images/Battery.svg src/ui/toolbar/Images/Connect.svg @@ -174,6 +172,7 @@ resources/QGroundControlConnect.svg resources/SplashScreen.png resources/Stop.svg + resources/TrashDelete.svg resources/XDelete.svg resources/XDeleteBlack.svg diff --git a/resources/TrashDelete.svg b/resources/TrashDelete.svg new file mode 100644 index 0000000000000000000000000000000000000000..cb4c5a3d7a24e8b7eb722bdd3730bfa4a5d70704 --- /dev/null +++ b/resources/TrashDelete.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/src/FlightMap/Images/TrashDelete.svg b/src/FlightMap/Images/TrashDelete.svg deleted file mode 100644 index 1b0826ba046132064adf73ab0793056024898f77..0000000000000000000000000000000000000000 --- a/src/FlightMap/Images/TrashDelete.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - diff --git a/src/FlightMap/Images/TrashDeleteBlack.svg b/src/FlightMap/Images/TrashDeleteBlack.svg deleted file mode 100644 index 17effa14549bd9623d9624dab30619399475345b..0000000000000000000000000000000000000000 --- a/src/FlightMap/Images/TrashDeleteBlack.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - diff --git a/src/Vehicle/Vehicle.cc b/src/Vehicle/Vehicle.cc index 30d5f74237044c3d6e0bb2b2eec4c8b0171c2836..858a140efad30c3aaeac245932a362beddc9e220 100644 --- a/src/Vehicle/Vehicle.cc +++ b/src/Vehicle/Vehicle.cc @@ -922,6 +922,11 @@ QString Vehicle::formatedMessages() return messages; } +void Vehicle::clearMessages() +{ + qgcApp()->toolbox()->uasMessageHandler()->clearMessages(); +} + void Vehicle::_handletextMessageReceived(UASMessage* message) { if(message) diff --git a/src/Vehicle/Vehicle.h b/src/Vehicle/Vehicle.h index 2f82e24985f6a266e3900322b80fb59c5c3c62b4..d35c69e63ca272c75ab93449b002999977660061 100644 --- a/src/Vehicle/Vehicle.h +++ b/src/Vehicle/Vehicle.h @@ -363,6 +363,9 @@ public: /// Reboot vehicle Q_INVOKABLE void rebootVehicle(); + /// Clear Messages + Q_INVOKABLE void clearMessages(); + bool guidedModeSupported(void) const; bool pauseVehicleSupported(void) const; diff --git a/src/uas/UASMessageHandler.cc b/src/uas/UASMessageHandler.cc index d6cb7b08c87c7401ac7097372f910fa6a2842158..4d6088f0fcd8296323a6f56b0c550eecd07e0f47 100644 --- a/src/uas/UASMessageHandler.cc +++ b/src/uas/UASMessageHandler.cc @@ -145,17 +145,17 @@ void UASMessageHandler::handleTextMessage(int, int compId, int severity, QString case MAV_SEVERITY_ALERT: case MAV_SEVERITY_CRITICAL: case MAV_SEVERITY_ERROR: - style = QString("color: #f95e5e; font-weight:bold"); + style = QString("<#E>"); _errorCount++; _errorCountTotal++; break; case MAV_SEVERITY_NOTICE: case MAV_SEVERITY_WARNING: - style = QString("color: #f9b55e; font-weight:bold"); + style = QString("<#I>"); _warningCount++; break; default: - style = QString("color: #ffffff; font-weight:bold"); + style = QString("<#N>"); _normalCount++; break; } @@ -200,7 +200,7 @@ void UASMessageHandler::handleTextMessage(int, int compId, int severity, QString if (_multiComp) { compString = QString(" COMP:%1").arg(compId); } - message->_setFormatedText(QString("

[%2%3]%4 %5

").arg(style).arg(dateString).arg(compString).arg(severityText).arg(text)); + message->_setFormatedText(QString("[%2%3]%4 %5
").arg(style).arg(dateString).arg(compString).arg(severityText).arg(text)); if (message->severityIsError()) { _latestError = severityText + " " + text; diff --git a/src/ui/MainWindowInner.qml b/src/ui/MainWindowInner.qml index 9d5754b42eee3b7be9482e0d86b49dcd8530616c..dd646c8fa39030825fd243e517bc58b97687c2de 100644 --- a/src/ui/MainWindowInner.qml +++ b/src/ui/MainWindowInner.qml @@ -229,9 +229,16 @@ Item { } } + function formatMessage(message) { + message = message.replace(new RegExp("<#E>", "g"), "color: #f95e5e; font: " + (ScreenTools.defaultFontPointSize.toFixed(0) - 1) + "pt monospace;"); + message = message.replace(new RegExp("<#I>", "g"), "color: #f9b55e; font: " + (ScreenTools.defaultFontPointSize.toFixed(0) - 1) + "pt monospace;"); + message = message.replace(new RegExp("<#N>", "g"), "color: #ffffff; font: " + (ScreenTools.defaultFontPointSize.toFixed(0) - 1) + "pt monospace;"); + return message; + } + onFormatedMessageChanged: { if(messageArea.visible) { - messageText.append(formatedMessage) + messageText.append(formatMessage(formatedMessage)) //-- Hack to scroll down messageFlick.flick(0,-500) } @@ -242,7 +249,7 @@ Item { currentPopUp.close() } if(QGroundControl.multiVehicleManager.activeVehicleAvailable) { - messageText.text = activeVehicle.formatedMessages + messageText.text = formatMessage(activeVehicle.formatedMessages) //-- Hack to scroll to last message for (var i = 0; i < activeVehicle.messageCount; i++) messageFlick.flick(0,-5000) @@ -342,13 +349,11 @@ Item { //-- System Message Area Rectangle { id: messageArea - function close() { currentPopUp = null messageText.text = "" messageArea.visible = false } - width: mainWindow.width * 0.5 height: mainWindow.height * 0.5 color: Qt.rgba(0,0,0,0.8) @@ -359,6 +364,13 @@ Item { anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.top anchors.topMargin: tbHeight + ScreenTools.defaultFontPixelHeight + MouseArea { + // This MouseArea prevents the Map below it from getting Mouse events. Without this + // things like mousewheel will scroll the Flickable and then scroll the map as well. + anchors.fill: parent + preventStealing: true + onWheel: wheel.accepted = true + } QGCFlickable { id: messageFlick anchors.margins: ScreenTools.defaultFontPixelHeight @@ -372,13 +384,11 @@ Item { readOnly: true textFormat: TextEdit.RichText color: "white" - font.family: ScreenTools.normalFontFamily - font.pointSize: ScreenTools.defaultFontPointSize } } //-- Dismiss System Message Image { - anchors.margins: ScreenTools.defaultFontPixelHeight + anchors.margins: ScreenTools.defaultFontPixelHeight * 0.5 anchors.top: parent.top anchors.right: parent.right width: ScreenTools.isTinyScreen ? ScreenTools.defaultFontPixelHeight * 1.5 : ScreenTools.defaultFontPixelHeight @@ -395,7 +405,30 @@ Item { } } } + //-- Clear Messages + Image { + anchors.bottom: parent.bottom + anchors.right: parent.right + anchors.margins: ScreenTools.defaultFontPixelHeight * 0.5 + height: ScreenTools.isTinyScreen ? ScreenTools.defaultFontPixelHeight * 1.5 : ScreenTools.defaultFontPixelHeight + width: height + sourceSize.height: height + source: "/res/TrashDelete.svg" + fillMode: Image.PreserveAspectFit + mipmap: true + smooth: true + MouseArea { + anchors.fill: parent + onClicked: { + if(QGroundControl.multiVehicleManager.activeVehicleAvailable) { + activeVehicle.clearMessages(); + messageArea.close() + } + } + } + } } + //------------------------------------------------------------------------- //-- Critical Message Area Rectangle { @@ -463,7 +496,7 @@ Item { //-- Dismiss Critical Message QGCColoredImage { id: criticalClose - anchors.margins: ScreenTools.defaultFontPixelHeight + anchors.margins: ScreenTools.defaultFontPixelHeight * 0.5 anchors.top: parent.top anchors.right: parent.right width: ScreenTools.isTinyScreen ? ScreenTools.defaultFontPixelHeight * 1.5 : ScreenTools.defaultFontPixelHeight @@ -482,7 +515,7 @@ Item { //-- More text below indicator QGCColoredImage { - anchors.margins: ScreenTools.defaultFontPixelHeight + anchors.margins: ScreenTools.defaultFontPixelHeight * 0.5 anchors.bottom: parent.bottom anchors.right: parent.right width: ScreenTools.isTinyScreen ? ScreenTools.defaultFontPixelHeight * 1.5 : ScreenTools.defaultFontPixelHeight diff --git a/src/ui/uas/UASMessageView.cc b/src/ui/uas/UASMessageView.cc index 763f6da90b86210618e6126eac065594327c6608..72c2fee1ab87433569d778d3a2b7a3022f2d95b6 100644 --- a/src/ui/uas/UASMessageView.cc +++ b/src/ui/uas/UASMessageView.cc @@ -87,7 +87,11 @@ void UASMessageViewWidget::handleTextMessage(UASMessage *message) // Turn off updates while we're appending content to avoid breaking the autoscroll behavior msgWidget->setUpdatesEnabled(false); QScrollBar *scroller = msgWidget->verticalScrollBar(); - msgWidget->appendHtml(message->getFormatedText()); + QString messages = message->getFormatedText(); + messages = messages.replace("<#E>", "color: #f95e5e; font: monospace;"); + messages = messages.replace("<#I>", "color: #f9b55e; font: monospace;"); + messages = messages.replace("<#N>", "color: #ffffff; font: monospace;"); + msgWidget->appendHtml(messages); // Ensure text area scrolls correctly scroller->setValue(scroller->maximum()); msgWidget->setUpdatesEnabled(true);