You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
5.1 KiB
156 lines
5.1 KiB
/*===================================================================== |
|
|
|
QGroundControl Open Source Ground Control Station |
|
|
|
(c) 2009 - 2011 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org> |
|
|
|
This file is part of the QGROUNDCONTROL project |
|
|
|
QGROUNDCONTROL is free software: you can redistribute it and/or modify |
|
it under the terms of the GNU General Public License as published by |
|
the Free Software Foundation, either version 3 of the License, or |
|
(at your option) any later version. |
|
|
|
QGROUNDCONTROL is distributed in the hope that it will be useful, |
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
GNU General Public License for more details. |
|
|
|
You should have received a copy of the GNU General Public License |
|
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>. |
|
|
|
======================================================================*/ |
|
|
|
/*! |
|
* @file |
|
* @brief Message Handler |
|
* @author Gus Grubba <mavlink@grubba.com> |
|
*/ |
|
|
|
#include "QGCApplication.h" |
|
#include "QGCMessageHandler.h" |
|
#include "UASManager.h" |
|
|
|
QGCUasMessage::QGCUasMessage(int componentid, int severity, QString text) |
|
{ |
|
_compId = componentid; |
|
_severity = severity; |
|
_text = text; |
|
} |
|
|
|
IMPLEMENT_QGC_SINGLETON(QGCMessageHandler, QGCMessageHandler) |
|
|
|
QGCMessageHandler::QGCMessageHandler(QObject *parent) |
|
: QGCSingleton(parent) |
|
, _activeUAS(NULL) |
|
{ |
|
connect(UASManager::instance(), SIGNAL(activeUASSet(UASInterface*)), this, SLOT(setActiveUAS(UASInterface*))); |
|
emit textMessageReceived(NULL); |
|
} |
|
|
|
QGCMessageHandler::~QGCMessageHandler() |
|
{ |
|
_clearMessages(); |
|
} |
|
|
|
void QGCMessageHandler::_clearMessages() |
|
{ |
|
_mutex.lock(); |
|
while(_messages.count()) { |
|
delete _messages.last(); |
|
_messages.pop_back(); |
|
} |
|
_mutex.unlock(); |
|
} |
|
|
|
void QGCMessageHandler::setActiveUAS(UASInterface* uas) |
|
{ |
|
// If we were already attached to an autopilot, disconnect it. |
|
if (_activeUAS && _activeUAS != uas) |
|
{ |
|
disconnect(_activeUAS, SIGNAL(textMessageReceived(int,int,int,QString)), this, SLOT(handleTextMessage(int,int,int,QString))); |
|
_activeUAS = NULL; |
|
_clearMessages(); |
|
emit textMessageReceived(NULL); |
|
} |
|
// And now if there's an autopilot to follow, set up the UI. |
|
if (uas) |
|
{ |
|
// Connect to the new UAS. |
|
_clearMessages(); |
|
_activeUAS = uas; |
|
connect(uas, SIGNAL(textMessageReceived(int,int,int,QString)), this, SLOT(handleTextMessage(int,int,int,QString))); |
|
} |
|
} |
|
|
|
void QGCMessageHandler::handleTextMessage(int uasid, int compId, int severity, QString text) |
|
{ |
|
Q_UNUSED(uasid); |
|
|
|
// Color the output depending on the message severity. We have 3 distinct cases: |
|
// 1: If we have an ERROR or worse, make it bigger, bolder, and highlight it red. |
|
// 2: If we have a warning or notice, just make it bold and color it orange. |
|
// 3: Otherwise color it the standard color, white. |
|
|
|
// So first determine the styling based on the severity. |
|
QString style; |
|
switch (severity) |
|
{ |
|
case MAV_SEVERITY_EMERGENCY: |
|
case MAV_SEVERITY_ALERT: |
|
case MAV_SEVERITY_CRITICAL: |
|
case MAV_SEVERITY_ERROR: |
|
//Use set RGB values from given color from QGC |
|
style = QString("color: rgb(%1, %2, %3); font-weight:bold").arg(QGC::colorRed.red()).arg(QGC::colorRed.green()).arg(QGC::colorRed.blue()); |
|
break; |
|
case MAV_SEVERITY_NOTICE: |
|
case MAV_SEVERITY_WARNING: |
|
style = QString("color: rgb(%1, %2, %3); font-weight:bold").arg(QGC::colorOrange.red()).arg(QGC::colorOrange.green()).arg(QGC::colorOrange.blue()); |
|
break; |
|
default: |
|
style = QString("color:white; font-weight:bold"); |
|
break; |
|
} |
|
|
|
// And determine the text for the severitie |
|
QString severityText(""); |
|
switch (severity) |
|
{ |
|
case MAV_SEVERITY_EMERGENCY: |
|
severityText = QString(tr(" EMERGENCY:")); |
|
break; |
|
case MAV_SEVERITY_ALERT: |
|
severityText = QString(tr(" ALERT:")); |
|
break; |
|
case MAV_SEVERITY_CRITICAL: |
|
severityText = QString(tr(" Critical:")); |
|
break; |
|
case MAV_SEVERITY_ERROR: |
|
severityText = QString(tr(" Error:")); |
|
break; |
|
case MAV_SEVERITY_WARNING: |
|
severityText = QString(tr(" Warning:")); |
|
break; |
|
case MAV_SEVERITY_NOTICE: |
|
severityText = QString(tr(" Notice:")); |
|
break; |
|
case MAV_SEVERITY_INFO: |
|
severityText = QString(tr(" Info:")); |
|
break; |
|
case MAV_SEVERITY_DEBUG: |
|
severityText = QString(tr(" Debug:")); |
|
break; |
|
default: |
|
severityText = QString(tr("")); |
|
break; |
|
} |
|
|
|
// Finally preppend the properly-styled text with a timestamp. |
|
QString dateString = QDateTime::currentDateTime().toString("hh:mm:ss.zzz"); |
|
QGCUasMessage* message = new QGCUasMessage(compId, severity, text); |
|
message->_setFormatedText(QString("<p style=\"color:#CCCCCC\">[%2 - COMP:%3]<font style=\"%1\">%4 %5</font></p>").arg(style).arg(dateString).arg(compId).arg(severityText).arg(text)); |
|
_mutex.lock(); |
|
_messages.append(message); |
|
_mutex.unlock(); |
|
emit textMessageReceived(message); |
|
}
|
|
|