From 17882c9d514e8adaf4f0e82c01676c6da58f21ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20K=C3=A4berich?= Date: Sat, 9 Jul 2022 15:02:36 +0200 Subject: [PATCH] Sort markers on graph display --- .../PC_Application/Traces/Marker/marker.cpp | 9 +++ .../PC_Application/Traces/Marker/marker.h | 3 + Software/PC_Application/Traces/traceplot.cpp | 14 +++- Software/PC_Application/preferences.cpp | 2 + Software/PC_Application/preferences.h | 10 +++ Software/PC_Application/preferencesdialog.ui | 64 +++++++++---------- 6 files changed, 69 insertions(+), 33 deletions(-) diff --git a/Software/PC_Application/Traces/Marker/marker.cpp b/Software/PC_Application/Traces/Marker/marker.cpp index e5f266b..98587d3 100644 --- a/Software/PC_Application/Traces/Marker/marker.cpp +++ b/Software/PC_Application/Traces/Marker/marker.cpp @@ -15,6 +15,7 @@ #include #include #include +#include using namespace std; @@ -37,6 +38,7 @@ Marker::Marker(MarkerModel *model, int number, Marker *parent, QString descr) formatTable(Format::dBAngle), group(nullptr) { + creationTimestamp = QDateTime::currentSecsSinceEpoch(); connect(this, &Marker::traceChanged, this, &Marker::updateContextmenu); connect(this, &Marker::typeChanged, this, &Marker::updateContextmenu); updateContextmenu(); @@ -1120,6 +1122,7 @@ nlohmann::json Marker::toJSON() { nlohmann::json j; j["trace"] = parentTrace->toHash(); + j["creationTimestamp"] = creationTimestamp; j["visible"] = visible; j["type"] = typeToString(type).toStdString(); j["number"] = number; @@ -1160,6 +1163,7 @@ void Marker::fromJSON(nlohmann::json j) if(!j.contains("trace")) { throw runtime_error("Marker has no trace assigned"); } + creationTimestamp = j.value("creationTimestamp", QDateTime::currentSecsSinceEpoch()); number = j.value("number", 1); position = j.value("position", 0.0); visible = j.value("visible", true); @@ -1702,6 +1706,11 @@ QPixmap &Marker::getSymbol() return symbol; } +unsigned long Marker::getCreationTimestamp() const +{ + return creationTimestamp; +} + double Marker::getPosition() const { return position; diff --git a/Software/PC_Application/Traces/Marker/marker.h b/Software/PC_Application/Traces/Marker/marker.h index 17c71d1..8c22b2f 100644 --- a/Software/PC_Application/Traces/Marker/marker.h +++ b/Software/PC_Application/Traces/Marker/marker.h @@ -69,6 +69,8 @@ public: QPixmap& getSymbol(); + unsigned long getCreationTimestamp() const; + int getNumber() const; void setNumber(int value); @@ -179,6 +181,7 @@ private: MarkerModel *model; Trace *parentTrace; + unsigned long creationTimestamp; double position; int number; bool visible; diff --git a/Software/PC_Application/Traces/traceplot.cpp b/Software/PC_Application/Traces/traceplot.cpp index 34a157f..1caf87f 100644 --- a/Software/PC_Application/Traces/traceplot.cpp +++ b/Software/PC_Application/Traces/traceplot.cpp @@ -196,7 +196,19 @@ void TracePlot::paintEvent(QPaintEvent *event) x += usedLabelArea.width()+labelMarginRight; auto tmarkers = t.first->getMarkers(); - for(auto m : tmarkers) { + std::vector vmarkers(tmarkers.begin(), tmarkers.end()); + sort(vmarkers.begin(), vmarkers.end(), [](Marker *l, Marker *r) -> bool { + switch(Preferences::getInstance().Marker.sortOrder) { + case PrefMarkerSortXCoord: + return l->getPosition() < r->getPosition(); + case PrefMarkerSortNumber: + return l->getNumber() < r->getNumber(); + case PrefMarkerSortTimestamp: + return l->getCreationTimestamp() < r->getCreationTimestamp(); + } + return false; + }); + for(auto m : vmarkers) { if(!m->isVisible()) { continue; } diff --git a/Software/PC_Application/preferences.cpp b/Software/PC_Application/preferences.cpp index 741ec12..54e89c7 100644 --- a/Software/PC_Application/preferences.cpp +++ b/Software/PC_Application/preferences.cpp @@ -258,6 +258,7 @@ void PreferencesDialog::setInitialGUIState() ui->MarkerShowMarkerData->setChecked(p->Marker.defaultBehavior.showDataOnGraphs); ui->MarkerShowAllMarkerData->setChecked(p->Marker.defaultBehavior.showAllData); ui->MarkerInterpolate->setCurrentIndex(p->Marker.interpolatePoints ? 1 : 0); + ui->MarkerSortOrder->setCurrentIndex((int) p->Marker.sortOrder); ui->SCPIServerEnabled->setChecked(p->SCPIServer.enabled); ui->SCPIServerPort->setValue(p->SCPIServer.port); @@ -323,6 +324,7 @@ void PreferencesDialog::updateFromGUI() p->Marker.defaultBehavior.showDataOnGraphs = ui->MarkerShowMarkerData->isChecked(); p->Marker.defaultBehavior.showAllData = ui->MarkerShowAllMarkerData->isChecked(); p->Marker.interpolatePoints = ui->MarkerInterpolate->currentIndex() == 1; + p->Marker.sortOrder = (MarkerSortOrder) ui->MarkerSortOrder->currentIndex(); p->SCPIServer.enabled = ui->SCPIServerEnabled->isChecked(); p->SCPIServer.port = ui->SCPIServerPort->value(); diff --git a/Software/PC_Application/preferences.h b/Software/PC_Application/preferences.h index 2d5696b..440c182 100644 --- a/Software/PC_Application/preferences.h +++ b/Software/PC_Application/preferences.h @@ -24,6 +24,14 @@ enum GraphLimitIndication { Q_DECLARE_METATYPE(GraphLimitIndication); +enum MarkerSortOrder { + PrefMarkerSortXCoord = 0, + PrefMarkerSortNumber = 1, + PrefMarkerSortTimestamp = 2, +}; + +Q_DECLARE_METATYPE(MarkerSortOrder); + class Preferences : public Savable { public: @@ -115,6 +123,7 @@ public: bool showAllData; } defaultBehavior; bool interpolatePoints; + MarkerSortOrder sortOrder; } Marker; struct { bool enabled; @@ -184,6 +193,7 @@ private: {&Marker.defaultBehavior.showDataOnGraphs, "Marker.defaultBehavior.ShowDataOnGraphs", true}, {&Marker.defaultBehavior.showAllData, "Marker.defaultBehavior.ShowAllData", false}, {&Marker.interpolatePoints, "Marker.interpolatePoints", false}, + {&Marker.sortOrder, "Marker.sortOrder", MarkerSortOrder::PrefMarkerSortXCoord}, {&SCPIServer.enabled, "SCPIServer.enabled", true}, {&SCPIServer.port, "SCPIServer.port", 19542}, }}; diff --git a/Software/PC_Application/preferencesdialog.ui b/Software/PC_Application/preferencesdialog.ui index 0965dc9..eab56a9 100644 --- a/Software/PC_Application/preferencesdialog.ui +++ b/Software/PC_Application/preferencesdialog.ui @@ -6,8 +6,8 @@ 0 0 - 876 - 587 + 909 + 657 @@ -77,9 +77,9 @@ 0 - -319 - 651 - 854 + 0 + 687 + 938 @@ -98,7 +98,7 @@ - 2 + 0 @@ -1200,19 +1200,6 @@ - - - - Qt::Horizontal - - - - 80 - 20 - - - - @@ -1268,6 +1255,32 @@ + + + + Sort order on graphs: + + + + + + + + X-Coordinate (Frequency/Time/Power) + + + + + Number + + + + + Creation timestamp + + + + @@ -1285,19 +1298,6 @@ - - - - Qt::Horizontal - - - - 300 - 20 - - - -