Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qgroundcontrol
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Valentin Platzgummer
qgroundcontrol
Commits
df1f3f59
Commit
df1f3f59
authored
Jan 01, 2020
by
Gus Grubba
Committed by
Lorenz Meier
Jan 03, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remember selected message
Limit chart to 6 series (arbitrary) UI tweaks
parent
a781d693
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
123 additions
and
62 deletions
+123
-62
MAVLinkInspectorController.cc
src/AnalyzeView/MAVLinkInspectorController.cc
+42
-6
MAVLinkInspectorController.h
src/AnalyzeView/MAVLinkInspectorController.h
+32
-23
MAVLinkInspectorPage.qml
src/AnalyzeView/MAVLinkInspectorPage.qml
+39
-23
MAVLinkChart.qml
src/QmlControls/MAVLinkChart.qml
+10
-10
No files found.
src/AnalyzeView/MAVLinkInspectorController.cc
View file @
df1f3f59
...
...
@@ -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
!=
_
s
elected
)
{
_
s
elected
=
sel
;
emit
s
electedChanged
();
if
(
sel
!=
_
fieldS
elected
)
{
_
fieldS
elected
=
sel
;
emit
fieldS
electedChanged
();
}
}
...
...
@@ -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
();
}
}
}
//-----------------------------------------------------------------------------
...
...
src/AnalyzeView/MAVLinkInspectorController.h
View file @
df1f3f59
...
...
@@ -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
s
electedChanged
)
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
fieldS
electedChanged
)
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
_s
elected
;
}
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
_fieldS
elected
;
}
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
_
s
elected
=
false
;
bool
_
fieldS
elected
=
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
)
...
...
src/AnalyzeView/MAVLinkInspectorPage.qml
View file @
df1f3f59
...
...
@@ -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
.
s
elected
?
"
*
"
:
""
)
text
:
object
.
name
+
(
object
.
fieldS
elected
?
"
*
"
:
""
)
compID
:
object
.
cid
checked
:
cur
MessageIndex
===
index
checked
:
cur
Vehicle
?
(
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
)
}
}
}
...
...
src/QmlControls/MAVLinkChart.qml
View file @
df1f3f59
...
...
@@ -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
=
c
hartView
.
seriesColors
[
chartView
.
count
]
serie
.
color
=
c
olor
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
}
Row
Layout
{
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
.
AlignV
Center
anchors.verticalCenter
:
parent
.
vertical
Center
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
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment