Commit df1f3f59 authored by Gus Grubba's avatar Gus Grubba Committed by Lorenz Meier

Remember selected message

Limit chart to 6 series (arbitrary)
UI tweaks
parent a781d693
......@@ -39,7 +39,7 @@ QGCMAVLinkMessageField::addSeries(MAVLinkChartController* chart, QAbstractSeries
_pSeries = series;
emit seriesChanged();
_dataIndex = 0;
_msg->select();
_msg->updateFieldSelection();
}
}
......@@ -54,7 +54,7 @@ QGCMAVLinkMessageField::delSeries()
_pSeries = nullptr;
_chart = nullptr;
emit seriesChanged();
_msg->select();
_msg->updateFieldSelection();
}
}
......@@ -183,7 +183,7 @@ QGCMAVLinkMessage::QGCMAVLinkMessage(QObject *parent, mavlink_message_t* message
//-----------------------------------------------------------------------------
void
QGCMAVLinkMessage::select()
QGCMAVLinkMessage::updateFieldSelection()
{
bool sel = false;
for (int i = 0; i < _fields.count(); ++i) {
......@@ -195,9 +195,9 @@ QGCMAVLinkMessage::select()
}
}
}
if(sel != _selected) {
_selected = sel;
emit selectedChanged();
if(sel != _fieldSelected) {
_fieldSelected = sel;
emit fieldSelectedChanged();
}
}
......@@ -457,6 +457,29 @@ QGCMAVLinkVehicle::findMessage(uint32_t id, uint8_t cid)
return nullptr;
}
//-----------------------------------------------------------------------------
int
QGCMAVLinkVehicle::findMessage(QGCMAVLinkMessage* message)
{
for(int i = 0; i < _messages.count(); i++) {
QGCMAVLinkMessage* m = qobject_cast<QGCMAVLinkMessage*>(_messages.get(i));
if(m && m == message) {
return i;
}
}
return -1;
}
//-----------------------------------------------------------------------------
void
QGCMAVLinkVehicle::setSelected(int sel)
{
if(sel < _messages.count()) {
_selected = sel;
emit selectedChanged();
}
}
//-----------------------------------------------------------------------------
static bool
messages_sort(QObject* a, QObject* b)
......@@ -472,6 +495,11 @@ messages_sort(QObject* a, QObject* b)
void
QGCMAVLinkVehicle::append(QGCMAVLinkMessage* message)
{
//-- Save selected message
QGCMAVLinkMessage* selectedMsg = nullptr;
if(_messages.count()) {
selectedMsg = qobject_cast<QGCMAVLinkMessage*>(_messages.get(_selected));
}
_messages.append(message);
//-- Sort messages by id and then cid
if(_messages.count() > 0) {
......@@ -485,6 +513,14 @@ QGCMAVLinkVehicle::append(QGCMAVLinkMessage* message)
_checkCompID(message);
}
emit messagesChanged();
//-- Remember selected message
if(selectedMsg) {
int idx = findMessage(selectedMsg);
if(idx >= 0) {
_selected = idx;
emit selectedChanged();
}
}
}
//-----------------------------------------------------------------------------
......
......@@ -23,6 +23,7 @@ Q_DECLARE_LOGGING_CATEGORY(MAVLinkInspectorLog)
QT_CHARTS_USE_NAMESPACE
class QGCMAVLinkMessage;
class QGCMAVLinkVehicle;
class MAVLinkChartController;
class MAVLinkInspectorController;
......@@ -83,34 +84,34 @@ private:
class QGCMAVLinkMessage : public QObject {
Q_OBJECT
public:
Q_PROPERTY(quint32 id READ id NOTIFY indexChanged)
Q_PROPERTY(quint32 cid READ cid NOTIFY indexChanged)
Q_PROPERTY(QString name READ name NOTIFY indexChanged)
Q_PROPERTY(qreal messageHz READ messageHz NOTIFY freqChanged)
Q_PROPERTY(quint64 count READ count NOTIFY messageChanged)
Q_PROPERTY(QmlObjectListModel* fields READ fields NOTIFY indexChanged)
Q_PROPERTY(bool selected READ selected NOTIFY selectedChanged)
Q_PROPERTY(quint32 id READ id NOTIFY indexChanged)
Q_PROPERTY(quint32 cid READ cid NOTIFY indexChanged)
Q_PROPERTY(QString name READ name NOTIFY indexChanged)
Q_PROPERTY(qreal messageHz READ messageHz NOTIFY freqChanged)
Q_PROPERTY(quint64 count READ count NOTIFY messageChanged)
Q_PROPERTY(QmlObjectListModel* fields READ fields NOTIFY indexChanged)
Q_PROPERTY(bool fieldSelected READ fieldSelected NOTIFY fieldSelectedChanged)
QGCMAVLinkMessage(QObject* parent, mavlink_message_t* message);
quint32 id () { return _message.msgid; }
quint8 cid () { return _message.compid; }
QString name () { return _name; }
qreal messageHz () { return _messageHz; }
quint64 count () { return _count; }
quint64 lastCount () { return _lastCount; }
QmlObjectListModel* fields () { return &_fields; }
bool selected () { return _selected; }
quint32 id () { return _message.msgid; }
quint8 cid () { return _message.compid; }
QString name () { return _name; }
qreal messageHz () { return _messageHz; }
quint64 count () { return _count; }
quint64 lastCount () { return _lastCount; }
QmlObjectListModel* fields () { return &_fields; }
bool fieldSelected () { return _fieldSelected; }
void select ();
void update (mavlink_message_t* message);
void updateFreq ();
void updateFieldSelection();
void update (mavlink_message_t* message);
void updateFreq ();
signals:
void messageChanged ();
void freqChanged ();
void indexChanged ();
void selectedChanged ();
void messageChanged ();
void freqChanged ();
void indexChanged ();
void fieldSelectedChanged ();
private:
QmlObjectListModel _fields;
......@@ -119,7 +120,7 @@ private:
uint64_t _count = 0;
uint64_t _lastCount = 0;
mavlink_message_t _message; //-- List of QGCMAVLinkMessageField
bool _selected = false;
bool _fieldSelected = false;
};
//-----------------------------------------------------------------------------
......@@ -131,19 +132,25 @@ public:
Q_PROPERTY(QList<int> compIDs READ compIDs NOTIFY compIDsChanged)
Q_PROPERTY(QStringList compIDsStr READ compIDsStr NOTIFY compIDsChanged)
Q_PROPERTY(int selected READ selected WRITE setSelected NOTIFY selectedChanged)
QGCMAVLinkVehicle(QObject* parent, quint8 id);
quint8 id () { return _id; }
QmlObjectListModel* messages () { return &_messages; }
QList<int> compIDs () { return _compIDs; }
QStringList compIDsStr () { return _compIDsStr; }
int selected () { return _selected; }
void setSelected (int sel);
QGCMAVLinkMessage* findMessage (uint32_t id, uint8_t cid);
int findMessage (QGCMAVLinkMessage* message);
void append (QGCMAVLinkMessage* message);
signals:
void messagesChanged ();
void compIDsChanged ();
void selectedChanged ();
private:
void _checkCompID (QGCMAVLinkMessage *message);
......@@ -153,6 +160,7 @@ private:
QList<int> _compIDs;
QStringList _compIDsStr;
QmlObjectListModel _messages; //-- List of QGCMAVLinkMessage
int _selected = 0;
};
//-----------------------------------------------------------------------------
......@@ -166,6 +174,7 @@ public:
Q_PROPERTY(QDateTime rangeXMax READ rangeXMax NOTIFY rangeXMaxChanged)
Q_PROPERTY(qreal rangeYMin READ rangeYMin NOTIFY rangeYMinChanged)
Q_PROPERTY(qreal rangeYMax READ rangeYMax NOTIFY rangeYMaxChanged)
Q_PROPERTY(int chartIndex READ chartIndex CONSTANT)
Q_PROPERTY(quint32 rangeYIndex READ rangeYIndex WRITE setRangeYIndex NOTIFY rangeYIndexChanged)
Q_PROPERTY(quint32 rangeXIndex READ rangeXIndex WRITE setRangeXIndex NOTIFY rangeXIndexChanged)
......
......@@ -25,10 +25,8 @@ AnalyzePage {
pageComponent: pageComponent
property var curVehicle: controller ? controller.activeVehicle : null
property int curMessageIndex: 0
property var curMessage: curVehicle && curVehicle.messages.count ? curVehicle.messages.get(curMessageIndex) : null
property var curMessage: curVehicle && curVehicle.messages.count ? curVehicle.messages.get(curVehicle.selected) : null
property int curCompID: 0
property bool selectionValid: false
property real maxButtonWidth: 0
MAVLinkInspectorController {
......@@ -168,7 +166,6 @@ AnalyzePage {
currentIndex: 0
onActivated: {
if(curVehicle && curVehicle.compIDsStr.length > 1) {
selectionValid = false
if(index < 1)
curCompID = 0
else
......@@ -203,14 +200,13 @@ AnalyzePage {
Repeater {
model: curVehicle ? curVehicle.messages : []
delegate: MAVLinkMessageButton {
text: object.name + (object.selected ? " *" : "")
text: object.name + (object.fieldSelected ? " *" : "")
compID: object.cid
checked: curMessageIndex === index
checked: curVehicle ? (curVehicle.selected === index) : false
messageHz: object.messageHz
visible: curCompID === 0 || curCompID === compID
onClicked: {
selectionValid = true
curMessageIndex = index
curVehicle.selected = index
}
Layout.fillWidth: true
}
......@@ -220,7 +216,7 @@ AnalyzePage {
//-- Message Data
QGCFlickable {
id: messageGrid
visible: curMessage !== null && selectionValid
visible: curMessage !== null && (curCompID === 0 || curCompID === curMessage.cid)
Layout.fillHeight: true
Layout.fillWidth: true
contentWidth: messageCol.width
......@@ -302,15 +298,25 @@ AnalyzePage {
delegate: QGCCheckBox {
Layout.row: index
Layout.column: 3
enabled: checked || (object.selectable && object.series === null)
enabled: {
if(checked)
return true
if(!object.selectable)
return false
if(object.series !== null)
return false
if(chart1.chartController !== null) {
if(chart1.chartController.chartFields.length >= chart1.seriesColors.length)
return false
}
return true;
}
checked: object.series !== null && object.chartIndex === 0
onClicked: {
if(enabled) {
if(checked) {
chart1.addDimension(object)
} else {
chart1.delDimension(object)
}
if(checked) {
chart1.addDimension(object)
} else {
chart1.delDimension(object)
}
}
}
......@@ -320,15 +326,25 @@ AnalyzePage {
delegate: QGCCheckBox {
Layout.row: index
Layout.column: 4
enabled: checked || (object.selectable && object.series === null)
enabled: {
if(checked)
return true
if(!object.selectable)
return false
if(object.series !== null)
return false
if(chart2.chartController !== null) {
if(chart2.chartController.chartFields.length >= chart2.seriesColors.length)
return false
}
return true;
}
checked: object.series !== null && object.chartIndex === 1
onClicked: {
if(enabled) {
if(checked) {
chart2.addDimension(object)
} else {
chart2.delDimension(object)
}
if(checked) {
chart2.addDimension(object)
} else {
chart2.delDimension(object)
}
}
}
......
......@@ -22,19 +22,18 @@ ChartView {
property var chartController: null
property int maxSeriesCount: seriesColors.length
property var seriesColors: ["chartreuse", "chocolate", "yellowgreen", "thistle", "silver", "darkturquoise", "blue", "green"]
property var seriesColors: ["chartreuse", "darkturquoise", "chocolate", "thistle", "silver", "blue"]
function addDimension(field) {
if(!chartController) {
chartController = controller.createChart()
}
console.log(field.name + ' AxisY: ' + axisY)
console.log(chartView.count + ' ' + chartView.seriesColors[chartView.count])
var color = chartView.seriesColors[chartView.count]
var serie = createSeries(ChartView.SeriesTypeLine, field.label)
serie.axisX = axisX
serie.axisY = axisY
serie.useOpenGL = true
serie.color = chartView.seriesColors[chartView.count]
serie.color = color
serie.width = 1
chartController.addSeries(field, serie)
}
......@@ -43,7 +42,6 @@ ChartView {
if(chartController) {
chartView.removeSeries(field.series)
chartController.delSeries(field)
console.log('Remove: ' + chartView.count + ' ' + field.name)
if(chartView.count === 0) {
controller.deleteChart(chartController)
chartController = null
......@@ -55,7 +53,8 @@ ChartView {
id: axisX
min: chartController ? chartController.rangeXMin : new Date()
max: chartController ? chartController.rangeXMax : new Date()
format: "mm:ss.zzz"
visible: chartController !== null
format: "<br/>mm:ss.zzz"
tickCount: 5
gridVisible: true
labelsFont.family: "Fixed"
......@@ -66,12 +65,13 @@ ChartView {
id: axisY
min: chartController ? chartController.rangeYMin : 0
max: chartController ? chartController.rangeYMax : 0
visible: chartController !== null
lineVisible: false
labelsFont.family: "Fixed"
labelsFont.pixelSize: ScreenTools.smallFontPointSize
}
RowLayout {
Row {
id: chartHeader
anchors.left: parent.left
anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 4
......@@ -79,11 +79,12 @@ ChartView {
anchors.rightMargin: ScreenTools.defaultFontPixelWidth * 4
anchors.top: parent.top
anchors.topMargin: ScreenTools.defaultFontPixelHeight * 1.5
spacing: ScreenTools.defaultFontPixelWidth * 2
GridLayout {
columns: 2
columnSpacing: ScreenTools.defaultFontPixelWidth
rowSpacing: ScreenTools.defaultFontPixelHeight * 0.25
Layout.alignment: Qt.AlignVCenter
anchors.verticalCenter: parent.verticalCenter
QGCLabel {
text: qsTr("Scale:");
font.pixelSize: ScreenTools.smallFontPointSize
......@@ -116,8 +117,7 @@ ChartView {
}
}
ColumnLayout {
Layout.alignment: Qt.AlignVCenter
Layout.fillWidth: true
anchors.verticalCenter: parent.verticalCenter
Repeater {
model: chartController ? chartController.chartFields : []
QGCLabel {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment