Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
75 changes: 39 additions & 36 deletions resources/LogPanel.qml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,45 @@ Item {

LogPanelData {
id: logPanelData
onData_updated: update()
}

LogPanelModel {
id: logPanelModel
}

onVisibleChanged: if (visible)
update()

function update() {
logPanelModel.fill_data(logPanelData);
if (!tableView.model.rows.length) {
tableView.model.clear();
tableView.model.rows = [{
[Constants.logPanel.timestampHeader]: "",
[Constants.logPanel.levelHeader]: "",
[Constants.logPanel.msgHeader]: ""
}];
}
if (!logPanelData.entries.length)
return;
if (forceLayoutLock)
return;
if (!logLevelLabels.length)
logLevelLabels = logPanelData.log_level_labels;
logLevelIndex = logLevelLabels.indexOf(logPanelData.log_level);
if (consolePaused)
return;
for (var idx in logPanelData.entries) {
var new_row = {};
new_row[Constants.logPanel.timestampHeader] = logPanelData.entries[idx].timestamp;
new_row[Constants.logPanel.levelHeader] = logPanelData.entries[idx].level;
new_row[Constants.logPanel.msgHeader] = logPanelData.entries[idx].msg;
var rows = tableView.model.rows;
rows.unshift(new_row);
tableView.model.rows = rows.slice(0, Constants.logPanel.maxRows);
}
logPanelData.entries = [];
}

Item {
Expand Down Expand Up @@ -247,40 +286,4 @@ Item {
}
}
}

Timer {
interval: Utils.hzToMilliseconds(Globals.currentRefreshRate)
running: parent.visible
repeat: true
onTriggered: {
log_panel_model.fill_data(logPanelData);
if (!tableView.model.rows.length) {
tableView.model.clear();
tableView.model.rows = [{
[Constants.logPanel.timestampHeader]: "",
[Constants.logPanel.levelHeader]: "",
[Constants.logPanel.msgHeader]: ""
}];
}
if (!logPanelData.entries.length)
return;
if (forceLayoutLock)
return;
if (!logLevelLabels.length)
logLevelLabels = logPanelData.log_level_labels;
logLevelIndex = logLevelLabels.indexOf(logPanelData.log_level);
if (consolePaused)
return;
for (var idx in logPanelData.entries) {
var new_row = {};
new_row[Constants.logPanel.timestampHeader] = logPanelData.entries[idx].timestamp;
new_row[Constants.logPanel.levelHeader] = logPanelData.entries[idx].level;
new_row[Constants.logPanel.msgHeader] = logPanelData.entries[idx].msg;
var rows = tableView.model.rows;
rows.unshift(new_row);
tableView.model.rows = rows.slice(0, Constants.logPanel.maxRows);
}
logPanelData.entries = [];
}
}
}
58 changes: 23 additions & 35 deletions resources/TrackingTabComponents/TrackingSignalsTab.qml
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,32 @@ Item {
property alias check_labels: trackingSignalsPoints.check_labels
property alias num_labels: trackingSignalsPoints.num_labels
property variant check_visibility: []
property var emptySeries: null

TrackingSignalsPoints {
id: trackingSignalsPoints

onData_updated: if (visible)
update()
}

onVisibleChanged: if (visible)
update()

function update() {
if (all_series.length < num_labels) {
for (var i = all_series.length; i < num_labels; i++) {
var series = trackingSignalsChart.createSeries(ChartView.SeriesTypeLine, trackingSignalsPoints.getLabel(i), trackingSignalsXAxis);
series.axisYRight = trackingSignalsYAxis;
series.width = Constants.commonChart.lineWidth;
series.useOpenGL = Globals.useOpenGL;
// Color will be set in Python with fill_all_series call.
trackingSignalsPoints.addSeries(series);
}
}
trackingSignalsPoints.fill_all_series();
trackingSignalsChart.visible = true;
trackingSignalsXAxis.min = trackingSignalsPoints.xaxis_min;
trackingSignalsXAxis.max = trackingSignalsPoints.xaxis_max;
}

ColumnLayout {
Expand Down Expand Up @@ -77,40 +99,6 @@ Item {
labelFormat: "%d"
titleFont: Constants.trackingSignals.yAxisTitleFont
}

Timer {
id: trackingSignalsTimer

interval: Utils.hzToMilliseconds(Globals.currentRefreshRate)
running: true
repeat: true
triggeredOnStart: true
onTriggered: {
if (!trackingSignalsTab.visible)
return;
if (emptySeries == null) {
emptySeries = trackingSignalsChart.createSeries(ChartView.SeriesTypeLine, "", trackingSignalsXAxis);
emptySeries.axisYRight = trackingSignalsYAxis;
emptySeries.width = Constants.commonChart.lineWidth;
emptySeries.useOpenGL = Globals.useOpenGL;
trackingSignalsPoints.addEmptySeries(emptySeries);
}
if (all_series.length < num_labels) {
for (var i = all_series.length; i < num_labels; i++) {
var series = trackingSignalsChart.createSeries(ChartView.SeriesTypeLine, trackingSignalsPoints.getLabel(i), trackingSignalsXAxis);
series.axisYRight = trackingSignalsYAxis;
series.width = Constants.commonChart.lineWidth;
series.useOpenGL = Globals.useOpenGL;
// Color will be set in Python with fill_all_series call.
trackingSignalsPoints.addSeries(series);
}
}
trackingSignalsPoints.fill_all_series();
trackingSignalsChart.visible = true;
trackingSignalsXAxis.min = trackingSignalsPoints.xaxis_min;
trackingSignalsXAxis.max = trackingSignalsPoints.xaxis_max;
}
}
}

GridLayout {
Expand Down
12 changes: 9 additions & 3 deletions swiftnav_console/log_panel.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,13 @@
from typing import Dict, List, Any

from PySide6.QtCore import Property, QObject, Signal, Slot
from PySide6.QtQml import QmlElement

from .constants import Keys, LogLevel, QTKeys

QML_IMPORT_NAME = "SwiftConsole"
QML_IMPORT_MAJOR_VERSION = 1


def log_panel_update() -> Dict[str, Any]:
return {
Expand All @@ -21,25 +25,26 @@ def log_panel_update() -> Dict[str, Any]:
LOG_PANEL: List[Dict[str, Any]] = [log_panel_update()]


@QmlElement
class LogPanelData(QObject):
_instance: "LogPanelData"
_entries: List[Dict[str, str]] = []
_log_level_labels: List[str] = []
_log_level: str
_data_updated = Signal()
data_updated = Signal()
log_panel: Dict[str, Any] = {}

def __init__(self):
super().__init__()
assert getattr(self.__class__, "_instance", None) is None
self.__class__._instance = self
self.log_panel = LOG_PANEL[0]
self._data_updated.connect(self.handle_data_updated)
self.data_updated.connect(self.handle_data_updated)

@classmethod
def post_data_update(cls, update_data: Dict[str, Any]) -> None:
LOG_PANEL[0] = update_data
cls._instance._data_updated.emit() # pylint: disable=protected-access
cls._instance.data_updated.emit() # pylint: disable=protected-access

@Slot() # type: ignore
def handle_data_updated(self) -> None:
Expand Down Expand Up @@ -75,6 +80,7 @@ def append_entries(self, entries: List[Dict[str, str]]) -> None:
self._entries += entries


@QmlElement
class LogPanelModel(QObject): # pylint: disable=too-few-public-methods
@Slot(LogPanelData) # type: ignore
def fill_data(self, cp: LogPanelData) -> LogPanelData: # pylint:disable=no-self-use
Expand Down
4 changes: 0 additions & 4 deletions swiftnav_console/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@
from .log_panel import (
log_panel_update,
LogPanelData,
LogPanelModel,
)

from .connection import (
Expand Down Expand Up @@ -738,7 +737,6 @@ def main(passed_args: Optional[Tuple[str, ...]] = None) -> int:
QQuickStyle.setFallbackStyle("Material")
# We specifically *don't* want the RobotoCondensed-Bold.ttf font so we get the right look when bolded.

qmlRegisterType(LogPanelData, "SwiftConsole", 1, 0, "LogPanelData") # type: ignore
qmlRegisterType(ConnectionData, "SwiftConsole", 1, 0, "ConnectionData") # type: ignore
qmlRegisterType(AdvancedImuPoints, "SwiftConsole", 1, 0, "AdvancedImuPoints") # type: ignore
qmlRegisterType(AdvancedMagnetometerPoints, "SwiftConsole", 1, 0, "AdvancedMagnetometerPoints") # type: ignore
Expand Down Expand Up @@ -797,7 +795,6 @@ def handle_qml_load_errors(obj, _url):
return 1
messages_main = capnp.load(capnp_path) # pylint: disable=no-member
backend_request_broker = BackendRequestBroker(endpoint_main, messages_main)
log_panel_model = LogPanelModel()
connection_model = ConnectionModel()
advanced_imu_model = AdvancedImuModel()
advanced_magnetometer_model = AdvancedMagnetometerModel()
Expand All @@ -816,7 +813,6 @@ def handle_qml_load_errors(obj, _url):
logging_bar_model = LoggingBarModel()
update_tab_model = UpdateTabModel()
root_context = engine.rootContext()
root_context.setContextProperty("log_panel_model", log_panel_model)
root_context.setContextProperty("connection_model", connection_model)
root_context.setContextProperty("advanced_imu_model", advanced_imu_model)
root_context.setContextProperty("advanced_magnetometer_model", advanced_magnetometer_model)
Expand Down
18 changes: 8 additions & 10 deletions swiftnav_console/tracking_signals_tab.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,13 @@

from PySide6.QtCore import Property, QObject, Signal, Slot
from PySide6 import QtCharts
from PySide6.QtQml import QmlElement

from .constants import Keys, QTKeys

QML_IMPORT_NAME = "SwiftConsole"
QML_IMPORT_MAJOR_VERSION = 1


def tracking_signals_tab_update() -> Dict[str, Any]:
return {
Expand All @@ -22,6 +26,7 @@ def tracking_signals_tab_update() -> Dict[str, Any]:
TRACKING_SIGNALS_TAB: List[Dict[str, Any]] = [tracking_signals_tab_update()]

# pylint:disable=too-many-instance-attributes
@QmlElement
class TrackingSignalsPoints(QObject):
_instance: "TrackingSignalsPoints"
_num_labels: int = 0
Expand All @@ -37,20 +42,20 @@ class TrackingSignalsPoints(QObject):
check_labels_changed = Signal()
all_series_changed = Signal()
enabled_series_changed = Signal()
_data_updated = Signal()
data_updated = Signal()
_tracking_signals_tab: Dict[str, Any] = {}

def __init__(self):
super().__init__()
assert getattr(self.__class__, "_instance", None) is None
self.__class__._instance = self
self._tracking_signals_tab = TRACKING_SIGNALS_TAB[0]
self._data_updated.connect(self.handle_data_updated)
self.data_updated.connect(self.handle_data_updated)

@classmethod
def post_data_update(cls, update_data: Dict[str, Any]) -> None:
TRACKING_SIGNALS_TAB[0] = update_data
cls._instance._data_updated.emit() # pylint: disable=protected-access
cls._instance.data_updated.emit() # pylint: disable=protected-access

@Slot() # type: ignore
def handle_data_updated(self) -> None:
Expand Down Expand Up @@ -99,11 +104,6 @@ def addSeries(self, series) -> None:
self._all_series.append(series)
self.all_series_changed.emit() # type: ignore

@Slot(QtCharts.QAbstractSeries) # type: ignore
def addEmptySeries(self, series) -> None:
"""Store a QML created series in empty_series"""
self._empty_series = series

@Slot() # type: ignore
def fill_all_series(self) -> None:
cur_num_labels = len(self._tracking_signals_tab[Keys.LABELS])
Expand All @@ -112,8 +112,6 @@ def fill_all_series(self) -> None:
self.num_labels_changed.emit(cur_num_labels) # type: ignore
all_points = self._tracking_signals_tab[Keys.POINTS]
points_for_all_series = all_points[:-1]
if self._empty_series is not None and len(all_points) > 0:
self._empty_series.replace(all_points[-1])

labels = self._tracking_signals_tab[Keys.LABELS]
colors = self._tracking_signals_tab[Keys.COLORS]
Expand Down