Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
168 commits
Select commit Hold shift + click to select a range
208a62c
Filtred charts template added.
SokolovskyYury Mar 27, 2026
289ba22
App pligins missing description fix.
SokolovskyYury Mar 27, 2026
0a6113d
FilteredCharts refactoring.
SokolovskyYury Mar 29, 2026
4659b95
Add charts settings template.
SokolovskyYury Mar 29, 2026
5827619
Add filters menu.
SokolovskyYury Mar 29, 2026
7487126
Setting up chart speed.
SokolovskyYury Mar 30, 2026
5569e06
Chart item addition implemented.
SokolovskyYury Mar 30, 2026
bec85af
Charts description logic added.
SokolovskyYury Mar 30, 2026
7b512e9
Set new chart color.
SokolovskyYury Mar 30, 2026
21b5e7a
Charts values forwarding.
SokolovskyYury Mar 30, 2026
f8b3927
Displaying live charts first iteration (not testing).
SokolovskyYury Mar 30, 2026
1c8c6b3
Filter saving added.
SokolovskyYury Apr 1, 2026
0d5eeb2
Chart addition updated. Fast chart creation added.
SokolovskyYury Apr 1, 2026
71dfe0c
Saving chart settings to json.
SokolovskyYury Apr 1, 2026
cb6b48e
Read settings from json implemented.
SokolovskyYury Apr 1, 2026
9b700a8
Charts menu saving.
SokolovskyYury Apr 2, 2026
d9264e0
Sets saving updated.
SokolovskyYury Apr 2, 2026
5cf415b
Charts menu set save fix.
SokolovskyYury Apr 2, 2026
c27f921
Description update and refactoring.
SokolovskyYury Apr 2, 2026
a9b48a4
Charts speed for good looking was fixed.
SokolovskyYury Apr 3, 2026
5ccac8c
Сolorization for chart tooltips added.
SokolovskyYury Apr 3, 2026
5769182
Expression parsing errors processing added.
SokolovskyYury Apr 3, 2026
30607af
Color chooser implemented.
SokolovskyYury Apr 3, 2026
4480726
Color chooser color replaced.
SokolovskyYury Apr 4, 2026
603cffb
Color chooser scale added.
SokolovskyYury Apr 4, 2026
6fb94c5
Update vahrts data only when save.
SokolovskyYury Apr 5, 2026
68cfad1
Color chooser color preview added and styles updated.
SokolovskyYury Apr 6, 2026
292a0b2
Chart fact style updated. New chart color value fixed.
SokolovskyYury Apr 6, 2026
da3f9fc
Kalman filter added.
SokolovskyYury Apr 6, 2026
d38bbd3
First value init for filters added.
SokolovskyYury Apr 6, 2026
d5a1c9e
Charts value saving added.
SokolovskyYury Apr 7, 2026
b6e1ef5
Check vars for saving added.
SokolovskyYury Apr 8, 2026
a689078
Filtred charts refactoring.
SokolovskyYury Apr 8, 2026
0cf8c9f
Fact to save update description implemented.
SokolovskyYury Apr 8, 2026
2f7e8f9
Menu set refactoring.
SokolovskyYury Apr 8, 2026
7ecae37
Color menu added.
SokolovskyYury Apr 9, 2026
4c5290d
Write values without sending implemented.
SokolovskyYury Apr 9, 2026
d1a3f5a
Coefs range and precision changed.
SokolovskyYury Apr 10, 2026
fda3b2e
Values update not reset chart. Speed change updated.
SokolovskyYury Apr 10, 2026
d69f514
Chart color change updated.
SokolovskyYury Apr 11, 2026
983341d
Small fix for chart reset.
SokolovskyYury Apr 11, 2026
ee6c6c5
Deleted item color update fix.
SokolovskyYury Apr 12, 2026
b31ed47
Apply new scr after confirm and save.
SokolovskyYury Apr 12, 2026
2c43553
Small fix.
SokolovskyYury Apr 12, 2026
9c0abb6
Black color for chart replace.
SokolovskyYury Apr 12, 2026
f22252f
Fix colors uppercase names.
SokolovskyYury Apr 12, 2026
f0c4930
Add chart color into description.
SokolovskyYury Apr 12, 2026
ef1a685
Chart colored icon added.
SokolovskyYury Apr 12, 2026
32a3f06
Fix newItem icon color.
SokolovskyYury Apr 13, 2026
8fc0746
Hide pinned menu when plugin closed.
SokolovskyYury Apr 13, 2026
8a414c6
Used scripts var check added.
SokolovskyYury Apr 14, 2026
c2e496c
Merge branch 'main' into FiltredCharts
SokolovskyYury Apr 14, 2026
d90d99a
Similar names fix.
SokolovskyYury Apr 16, 2026
ef2f9ce
Kalman filter coefs default value defined.
SokolovskyYury Apr 17, 2026
16bc4b3
Plugin title and description corrected.
SokolovskyYury Apr 17, 2026
28733ef
Signals view refactored.
SokolovskyYury Apr 17, 2026
32e10d1
ButtonGroup overflow check added.
SokolovskyYury Apr 17, 2026
bf8b423
Warning messages function updated.
SokolovskyYury Apr 17, 2026
e931330
The incorrect message correction.
SokolovskyYury Apr 17, 2026
f9a0015
VS settings restore.
SokolovskyYury Apr 17, 2026
681a715
Set running avg defaults coef.
SokolovskyYury Apr 17, 2026
737db79
Small chart menu fix.
SokolovskyYury Apr 17, 2026
3904baa
Update series color fix.
SokolovskyYury Apr 17, 2026
fa708d7
Color menu button refactored.
SokolovskyYury Apr 17, 2026
f66ca99
Button minor fix.
SokolovskyYury Apr 19, 2026
3c41e3f
Charts view refactoring.
SokolovskyYury Apr 19, 2026
c72cdab
Change speed with a button click.
SokolovskyYury Apr 23, 2026
08125c4
MenuPage refactoring.
SokolovskyYury Apr 24, 2026
838a648
PageButton refactoring.
SokolovskyYury Apr 24, 2026
239fe20
Refactoring and preparing chart for transfer to signals.
SokolovskyYury Apr 24, 2026
3fa1e58
Signals menu and menu set added.
SokolovskyYury Apr 25, 2026
243adaa
Merge branch 'main' into FiltredCharts
SokolovskyYury Apr 25, 2026
2c0ed2a
Merge branch 'main' into SignalsAndFiltredCharts
SokolovskyYury Apr 25, 2026
c28ff1c
Addition and delition sets to SignalsMenu.
SokolovskyYury Apr 25, 2026
2aecb5c
Add menu set not finished.
SokolovskyYury Apr 25, 2026
70e61bd
Set menu and charts warning field added.
SokolovskyYury Apr 25, 2026
3f71424
Signals menu, sets and pages updated.
SokolovskyYury Apr 26, 2026
3e5b662
Add set and page description.
SokolovskyYury Apr 26, 2026
2fe6e1d
Set selection added.
SokolovskyYury Apr 26, 2026
15af020
Save signals settings implemented.
SokolovskyYury Apr 26, 2026
ce82b6c
Setting loading.
SokolovskyYury Apr 26, 2026
38a85d7
Sets and pages refactoring.
SokolovskyYury Apr 26, 2026
eb1f406
Add default settings.
SokolovskyYury Apr 26, 2026
4d5e6ce
Reset default set added.
SokolovskyYury Apr 26, 2026
568aa00
Settings button fix.
SokolovskyYury Apr 26, 2026
c64b51f
Update default charts.
SokolovskyYury Apr 27, 2026
6a7c388
Forvard facts from active set to signals.
SokolovskyYury Apr 28, 2026
f1bdc96
Select button corr.ection.
SokolovskyYury Apr 28, 2026
126b78d
SignalsButton toolTip refactores.
SokolovskyYury Apr 28, 2026
722fc98
ToolTip color rect add.
SokolovskyYury Apr 28, 2026
7c1a600
Settings save updated.
SokolovskyYury Apr 28, 2026
75baf2d
Chart menu title removed.
SokolovskyYury Apr 28, 2026
b2ad5be
Pinned tab added.
SokolovskyYury Apr 28, 2026
e0e87a0
Signals view and speed updated.
SokolovskyYury Apr 29, 2026
4f3ddbb
Fix charts scale.
SokolovskyYury Apr 29, 2026
1442e69
Filters template created.
SokolovskyYury Apr 29, 2026
e0c1a50
Filter saving and loading added.
SokolovskyYury Apr 30, 2026
4b94fb2
New filter cteation defaults value fix.
SokolovskyYury Apr 30, 2026
77ee886
Using filters implementation.
SokolovskyYury Apr 30, 2026
9654ad0
ChartView font style changed.
SokolovskyYury Apr 30, 2026
36dbe2c
Button tooltip refactoring.
SokolovskyYury May 1, 2026
dd3d357
Warnings implementation added.
SokolovskyYury May 2, 2026
117b876
Pinned charts added.
SokolovskyYury May 2, 2026
acfd73a
Signals chart refactoring.
SokolovskyYury May 3, 2026
2eb6ecf
Fix icon button size.
SokolovskyYury May 3, 2026
0b62b03
Add active page saving.
SokolovskyYury May 3, 2026
76bff89
Script warnings refactoring.
SokolovskyYury May 3, 2026
e3c06d5
Filters save button logic update.
SokolovskyYury May 4, 2026
d99145e
Set and page saving button updated.
SokolovskyYury May 4, 2026
28a95d5
Filters small refactoring.
SokolovskyYury May 4, 2026
4ba6f49
Default signals fix.
SokolovskyYury May 4, 2026
e97e328
Default set reset updated.
SokolovskyYury May 4, 2026
575f844
Set remove updated.
SokolovskyYury May 4, 2026
a3e59c0
Default active page creating.
SokolovskyYury May 4, 2026
57dfde3
Filter drag action for saving.
SokolovskyYury May 4, 2026
4a39882
New chart for new page fix.
SokolovskyYury May 4, 2026
5787864
Reset to defaults update.
SokolovskyYury May 4, 2026
4105979
Menu color first implementation (not finished).
SokolovskyYury May 5, 2026
66ac7b5
Use color chooser with facts.
SokolovskyYury May 5, 2026
b6c95db
Checked page saving refactored.
SokolovskyYury May 5, 2026
6dc6c82
Menu page small fix.
SokolovskyYury May 5, 2026
a6330f2
Colors default settings simplified.
SokolovskyYury May 5, 2026
bea7e0d
Color menu refactoring.
SokolovskyYury May 5, 2026
0cd2462
Charts icon color changing added.
SokolovskyYury May 5, 2026
cf5e203
Pinned pages first init update.
SokolovskyYury May 6, 2026
907417c
Max page limit added.
SokolovskyYury May 6, 2026
5495239
Filters description update.
SokolovskyYury May 6, 2026
8ca4749
Merge filtred charts and signals.
SokolovskyYury May 6, 2026
a53ee1a
Merge branch 'SignalsAndFiltredCharts' into FiltredCharts
SokolovskyYury May 6, 2026
8a60792
Pinned pages refactored. Signals with charts realization (not finished).
SokolovskyYury May 6, 2026
fa4b1d2
Fonts size fix.
SokolovskyYury May 7, 2026
1885b45
Colors facts updated.
SokolovskyYury May 7, 2026
9398abc
Warning small fix.
SokolovskyYury May 7, 2026
04824d2
Charts when all pages deleted fix.
SokolovskyYury May 8, 2026
547e021
Filters fact updated. Page updated.
SokolovskyYury May 8, 2026
cbeb192
Update chart color refactoring.
SokolovskyYury May 8, 2026
ef07e69
Warning fix.
SokolovskyYury May 8, 2026
4d8fec5
Empty signals menu when plugin closed fix.
SokolovskyYury May 11, 2026
2bbdbdb
Scripts to save check refactoring.
SokolovskyYury May 11, 2026
3644e43
Readme refactoring.
SokolovskyYury May 11, 2026
d098233
Remove active set fixed.
SokolovskyYury May 11, 2026
6ab53e7
Default pages values fixed.
SokolovskyYury May 11, 2026
961592e
Update page refactoring.
SokolovskyYury May 11, 2026
a5c70d7
Signals menu fixed.
SokolovskyYury May 11, 2026
60f0b5b
Filters menu fixed.
SokolovskyYury May 11, 2026
46c2fdf
Color menu updated and fixed.
SokolovskyYury May 11, 2026
05ab77f
MainChart reset update. Chart color warning fix.
SokolovskyYury May 11, 2026
f00faf3
Pinned charts reset updated.
SokolovskyYury May 11, 2026
3f62753
Chart view rescale time bug fix.
SokolovskyYury May 12, 2026
f859f9b
Small menu set fix.
SokolovskyYury May 12, 2026
06193d3
Signals charts refactoring.
SokolovskyYury May 12, 2026
f07ff32
Set and page descr update improved.
SokolovskyYury May 12, 2026
1bd6b00
Pinned charts without reset when update.
SokolovskyYury May 13, 2026
e4d2d1d
A similar lightblue color has been replaced
SokolovskyYury May 13, 2026
81477b8
Chart label style updated.
SokolovskyYury May 13, 2026
167a617
Color choser refactoring.
SokolovskyYury May 14, 2026
75725b3
Buttons model has been added.
SokolovskyYury May 14, 2026
bf9a83c
Buttons model check buttons fix.
SokolovskyYury May 14, 2026
27f4583
Reset to default for buttons model updated.
SokolovskyYury May 14, 2026
24cda00
Default set reset smal fix.
SokolovskyYury May 14, 2026
f4d79d5
Signals button fix.
SokolovskyYury May 14, 2026
a220ca8
Load settings fix.
SokolovskyYury May 14, 2026
eaf9517
Axis values jerking fix.
SokolovskyYury May 19, 2026
6fadd96
Reset active defaults pinned fix.
SokolovskyYury May 20, 2026
90734c6
Set menu first set deletion fix.
SokolovskyYury May 20, 2026
b1472c8
Chart axis labels truncate after applyNiceNumbers fix.
SokolovskyYury May 21, 2026
7d2a6ad
Initialization of the pinned chart with uncgangeable zero value fix.
SokolovskyYury May 21, 2026
7cf30fd
Merge branch 'main' into FiltredCharts
SokolovskyYury May 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/Plugins/Tools/Signals/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ page: plugins

# Signals

QML widget to show live chart of defined UAV physical values for easy tuning.
QML widget to show live chart of selected UAV physical values with the ability to use filters for easy tuning and analysis.
250 changes: 117 additions & 133 deletions src/Plugins/Tools/Signals/Signals.qml
Original file line number Diff line number Diff line change
Expand Up @@ -27,177 +27,161 @@ import QtCore

import Apx.Common


Rectangle {
id: control
id: sgControl

implicitHeight: layout.implicitHeight
implicitWidth: layout.implicitWidth

implicitWidth: Style.buttonSize * 15
border.width: 0
color: "#000"

ColumnLayout {
id: layout
anchors.fill: parent
spacing: 0
readonly property var pages: sgMenu.getActivePages()
readonly property var activeSet: sgMenu.getActiveSet()

onActiveSetChanged: updateModels()
Component.onCompleted: {
if (buttonGroup.buttons.length <= 0)
return;
if (buttonGroup.checkedButton == null)
buttonGroup.checkedButton = buttonGroup.buttons[0]; // check button #1
}

SignalsView {
id: signals
facts: []
Layout.fillWidth: true
Layout.fillHeight: true
Layout.minimumHeight: 20
Layout.preferredHeight: 130*ui.scale
Connections {
target: apx.fleet.current.mandala
function onTelemetryDecoded() {
if (pages.length <= 0)
return;
for (var i = 0; i < pages.length; ++i)
pages[i].updateChartsValues();
}
}

TextInput {
id: textInput
function updateModels() {
pinnedModel.updateModel(sgMenu.getPinnedPages())
buttonsModel.updateModel(sgMenu.getActivePages())
}

Layout.fillWidth: true
Layout.minimumHeight: Style.fontSize
function checkScrMatches(val) {
var matches = false;
for (var i = 0; i < buttonGroup.buttons.length; ++i)
if (buttonGroup.buttons[i].getScrMatches(val))
matches = true;
return matches;
}

// clip: true
// focus: true
visible: false
function allowResetChart(num) {
for(var i = 0; i < pinnedRepeater.count; ++i) {
if(num === pinnedRepeater.itemAt(i).num)
pinnedRepeater.itemAt(i).allowReset()
}
}

horizontalAlignment: Text.AlignRight
verticalAlignment: Text.AlignVCenter
function clearButtonGroup() {
buttonGroup.buttons = [];
buttonGroup.checkedButton = null;
}

font: apx.font_narrow(Style.fontSize)
ColumnLayout {
id: layout
anchors.fill: parent

color: activeFocus?Material.color(Material.Yellow):Material.primaryTextColor
text: "est.air.airspeed"
SignalsPinnedModel {
id: pinnedModel
}

activeFocusOnTab: true
selectByMouse: true
Repeater {
id: pinnedRepeater
model: pinnedModel
}

onEditingFinished: {
updateFacts()
}
onActiveFocusChanged: {
if(activeFocus)selectAll();
}
onVisibleChanged: if(visible)forceActiveFocus()
Component.onCompleted: updateFacts()

property var facts: []
function updateFacts()
{
var flist=[]
var list=textInput.text.split(',')
for(var i=0;i<list.length;++i){
var f=list[i]
var fact={}
if(eval(f)==undefined) continue
fact.title=f
fact.name=f
fact.descr=f
fact.opts={}
fact.opts.color=Material.color(Material.Blue+i*2)
flist.push(fact)
SignalsChartItem {
id: mainChartArea

Layout.fillWidth: true
Layout.fillHeight: true
Layout.minimumHeight: 20
Layout.preferredHeight: 110 * ui.scale // 130 * ui.scale
clip: true

Rectangle {
anchors.right: parent.right
anchors.bottom: parent.bottom
anchors.rightMargin: 4 * ui.scale
visible: lblMainSet.text !== ""
radius: ui.scale
color: "#30ffffff"
opacity: 0.7

implicitWidth: lblMainSet.implicitWidth + 10 * ui.scale
implicitHeight: lblMainSet.implicitHeight + 4 * ui.scale

Label {
id: lblMainSet
anchors.centerIn: parent
text: sgControl.activeSet ? sgControl.activeSet.title : ""
font: mainChartArea.labelFont
}
if(JSON.stringify(textInput.facts)==JSON.stringify(flist))
return
textInput.facts=flist
}

if(plusButton.checked)
signals.facts=flist
Label {
anchors.centerIn: parent
visible: btnRepeater.count <= 0
text: qsTr("No pages in the active set")
font: mainChartArea.labelFont
color: Material.secondaryTextColor
background: Rectangle {
color: sgControl.color
}
}
}

ButtonGroup {
id: buttonGroup
//buttons: bottomArea.buttons

onCheckedButtonChanged: {
if (checkedButton)
return;
mainChartArea.allowReset();
mainChartArea.ciPageFact = null;
}
}

RowLayout {
id: bottomArea
Layout.fillWidth: true
Layout.margins: Style.spacing
Layout.maximumHeight: 24 * ui.scale
spacing: 3
Layout.maximumHeight: 24*ui.scale
SignalButton {
text: "R"
values: [ mandala.cmd.att.roll, mandala.est.att.roll ]
}
SignalButton {
text: "P"
values: [ mandala.cmd.att.pitch, mandala.est.att.pitch ]
}
SignalButton {
text: "Y"
values: [ mandala.cmd.pos.bearing, mandala.cmd.att.yaw, mandala.est.att.yaw ]
}
SignalButton {
text: "Axy"
values: [ mandala.est.acc.x, mandala.est.acc.y ]
}
SignalButton {
text: "Az"
values: [ mandala.est.acc.z ]
}
SignalButton {
text: "G"
values: [ mandala.est.gyro.x, mandala.est.gyro.y, mandala.est.gyro.z ]
}
SignalButton {
text: "Pt"
values: [ mandala.est.pos.altitude, mandala.est.pos.vspeed, mandala.est.air.airspeed ]
}
SignalButton {
text: "Ctr"
values: [ mandala.ctr.att.ail, mandala.ctr.att.elv, mandala.ctr.att.rud, mandala.ctr.eng.thr, mandala.ctr.eng.prop, mandala.ctr.str.rud ]

SignalsButtonsModel {
id: buttonsModel
}
SignalButton {
text: "RC"
values: [ mandala.cmd.rc.roll, mandala.cmd.rc.pitch, mandala.cmd.rc.thr, mandala.cmd.rc.yaw ]
Repeater {
id: btnRepeater
model: buttonsModel
}
SignalButton {
text: "Usr"
values: [ mandala.est.usr.u1, mandala.est.usr.u2, mandala.est.usr.u3, mandala.est.usr.u4, mandala.est.usr.u5, mandala.est.usr.u6 ]
}

SignalButton {
id: plusButton
text: "+"
values: textInput.facts
onCheckedChanged: {
if(!checked)
textInput.visible=false
}
onPressed: {
if(checked)
textInput.visible=!textInput.visible
}
}

TextButton {
text: signals.speedFactorValue+"x"
onClicked: signals.changeSpeed()
IconButton {
iconName: "plus"
toolTip: qsTr("Edit chart configuration")
Layout.fillHeight: true
Layout.minimumWidth: height*3
Layout.minimumWidth: height
onClicked: sgMenu.trigger()
}
}
}

property string currentPage: buttonGroup.checkedButton.text

Settings {
category: "signals"
property alias page: control.currentPage
property alias custom: textInput.text
SignalsMenu {
id: sgMenu
}
Component.onCompleted: {
for(var i=0;i<buttonGroup.buttons.length;++i){
var b=buttonGroup.buttons[i]
if(b.text!==control.currentPage)continue
buttonGroup.checkedButton=b
break
}
if(buttonGroup.checkedButton==null){
buttonGroup.checkedButton=buttonGroup.buttons[0] //showPage("R")
}

Timer {
id: autosaveTimer
interval: 1000
onTriggered: sgMenu.saveSettings()
}

Timer {
id: warnTimer
interval: 10000
}
}
78 changes: 78 additions & 0 deletions src/Plugins/Tools/Signals/SignalsButton.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/*
* APX Autopilot project <http://docs.uavos.com>
*
* Copyright (c) 2003-2020, Aliaksei Stratsilatau <sa@uavos.com>
* All rights reserved
*
* This file is part of APX Ground Control.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Controls.Material

import Apx.Common

TextButton {
id: sgBtn

property var pageFact: null
property string pageToolTip: pageFact ? pageFact.pageToolTip : ""
property bool pageWarning: pageFact ? pageFact.warnings : false
property var num: pageFact ? pageFact.num : -1

Layout.fillHeight: true
checkable: true
ButtonGroup.group: buttonGroup
text: pageFact ? pageFact.title.slice(0, 3) : getDefaultText()
textColor: checked ? Material.color(Material.Yellow) : Material.primaryTextColor
toolTip: pageFact ? pageFact.pageToolTip : ""
Material.background: pageWarning ? Material.color(Material.Orange) : sgBtn.color

Component.onCompleted: {
if(!pageFact)
return;
checked = pageFact.active
}
onCheckedChanged: {
if (!pageFact)
return;
if (checked)
mainChartArea.ciPageFact = pageFact;
// Check if set changed and model reset
if(buttonsModel.count === 0)
return;
pageFact.active = checked;
}

onPressed: {
if (!pageFact)
return;
if (checked)
pageFact.trigger();
}

onActivated: {
mainChartArea.allowReset()
mainChartArea.ciPageFact = Qt.binding(function () {
return pageFact;
});
}

function getDefaultText() {
return "#" + buttonGroup.buttons.indexOf(this);
}
}
Loading