From 4093578b62a5ab8d6e78aeb9e86484b7c1631863 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20K=C3=A4berich?= Date: Sun, 22 Nov 2020 22:24:49 +0100 Subject: [PATCH] smithchart data next to cursor --- Software/PC_Application/Traces/traceplot.cpp | 33 ++++++++++++++++++- Software/PC_Application/Traces/traceplot.h | 6 ++++ .../PC_Application/Traces/tracesmithchart.cpp | 23 +++++++++++++ .../PC_Application/Traces/tracesmithchart.h | 2 ++ 4 files changed, 63 insertions(+), 1 deletion(-) diff --git a/Software/PC_Application/Traces/traceplot.cpp b/Software/PC_Application/Traces/traceplot.cpp index 618cf05..eb7e5c2 100644 --- a/Software/PC_Application/Traces/traceplot.cpp +++ b/Software/PC_Application/Traces/traceplot.cpp @@ -26,6 +26,13 @@ TracePlot::TracePlot(TraceModel &model, QWidget *parent) connect(&model, &TraceModel::SpanChanged, this, qOverload(&TracePlot::updateSpan)); plots.insert(this); + cursorLabel = new QLabel("Test", this); + cursorLabel->setStyleSheet("color: white;"); + auto font = cursorLabel->font(); + font.setPixelSize(12); + cursorLabel->setFont(font); + cursorLabel->hide(); + setMouseTracking(true); setAcceptDrops(true); } @@ -33,6 +40,7 @@ TracePlot::~TracePlot() { plots.erase(this); delete contextmenu; + delete cursorLabel; } void TracePlot::enableTrace(Trace *t, bool enabled) @@ -161,15 +169,38 @@ void TracePlot::mousePressEvent(QMouseEvent *event) } } +void TracePlot::mouseReleaseEvent(QMouseEvent *event) +{ + selectedMarker = nullptr; +} + void TracePlot::mouseMoveEvent(QMouseEvent *event) { + auto clickPoint = event->pos() - QPoint(marginLeft, marginTop); if(selectedMarker) { - auto clickPoint = event->pos() - QPoint(marginLeft, marginTop); auto trace = selectedMarker->getTrace(); selectedMarker->setPosition(nearestTracePoint(trace, clickPoint)); + cursorLabel->hide(); + } else { + auto text = mouseText(clickPoint); + if(!text.isEmpty()) { + cursorLabel->setText(text); + cursorLabel->adjustSize(); + cursorLabel->move(event->pos() + QPoint(15, 0)); + cursorLabel->show(); + } else { + cursorLabel->hide(); + } } } +void TracePlot::leaveEvent(QEvent *event) +{ + Q_UNUSED(event); + cursorLabel->hide(); + selectedMarker = nullptr; +} + void TracePlot::dragEnterEvent(QDragEnterEvent *event) { if (event->mimeData()->hasFormat("trace/pointer")) { diff --git a/Software/PC_Application/Traces/traceplot.h b/Software/PC_Application/Traces/traceplot.h index 0c1a779..e378b5d 100644 --- a/Software/PC_Application/Traces/traceplot.h +++ b/Software/PC_Application/Traces/traceplot.h @@ -6,6 +6,7 @@ #include #include #include +#include class TracePlot : public QWidget { @@ -43,13 +44,16 @@ protected: virtual QPoint markerToPixel(TraceMarker *m) = 0; virtual double nearestTracePoint(Trace *t, QPoint pixel) = 0; void mousePressEvent(QMouseEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; + void leaveEvent(QEvent *event) override; // handle trace drops void dragEnterEvent(QDragEnterEvent *event) override; void dropEvent(QDropEvent *event) override; void dragLeaveEvent(QDragLeaveEvent *event) override; virtual void traceDropped(Trace *t, QPoint position){ Q_UNUSED(t) Q_UNUSED(position)}; + virtual QString mouseText(QPoint pos) {Q_UNUSED(pos) return QString();}; protected slots: void newTraceAvailable(Trace *t); @@ -70,6 +74,8 @@ protected: QPoint dropPosition; Trace *dropTrace; + QLabel *cursorLabel; + }; #endif // TRACEPLOT_H diff --git a/Software/PC_Application/Traces/tracesmithchart.cpp b/Software/PC_Application/Traces/tracesmithchart.cpp index 2fc1c1f..09ab030 100644 --- a/Software/PC_Application/Traces/tracesmithchart.cpp +++ b/Software/PC_Application/Traces/tracesmithchart.cpp @@ -6,6 +6,7 @@ #include #include "preferences.h" #include "ui_smithchartdialog.h" +#include "unit.h" using namespace std; @@ -46,6 +47,12 @@ QPoint TraceSmithChart::dataToPixel(Trace::Data d) return transform.map(QPoint(d.S.real() * smithCoordMax, -d.S.imag() * smithCoordMax)); } +std::complex TraceSmithChart::pixelToData(QPoint p) +{ + auto data = transform.inverted().map(QPointF(p)); + return complex(data.x() / smithCoordMax, -data.y() / smithCoordMax); +} + QPoint TraceSmithChart::markerToPixel(TraceMarker *m) { QPoint ret = QPoint(); @@ -194,6 +201,22 @@ void TraceSmithChart::traceDropped(Trace *t, QPoint position) } } +QString TraceSmithChart::mouseText(QPoint pos) +{ + auto data = pixelToData(pos); + if(abs(data) <= 1.0) { + data = 50.0 * (1-.0 + data) / (1.0 - data); + auto ret = Unit::ToString(data.real(), "", " ", 3); + if(data.imag() >= 0) { + ret += "+"; + } + ret += Unit::ToString(data.imag(), "j", " ", 3); + return ret; + } else { + return QString(); + } +} + //void TraceSmithChart::paintEvent(QPaintEvent * /* the event */) //{ // auto pref = Preferences::getInstance(); diff --git a/Software/PC_Application/Traces/tracesmithchart.h b/Software/PC_Application/Traces/tracesmithchart.h index 70667be..5d96935 100644 --- a/Software/PC_Application/Traces/tracesmithchart.h +++ b/Software/PC_Application/Traces/tracesmithchart.h @@ -19,6 +19,7 @@ protected: static constexpr double smithCoordMax = 4096; QPoint dataToPixel(Trace::Data d); + std::complex pixelToData(QPoint p); QPoint markerToPixel(TraceMarker *m) override; double nearestTracePoint(Trace *t, QPoint pixel) override; @@ -27,6 +28,7 @@ protected: bool supported(Trace *t) override; virtual void draw(QPainter& painter) override; virtual void traceDropped(Trace *t, QPoint position) override; + QString mouseText(QPoint pos) override; QPen textPen; QPen chartLinesPen; QPen thinPen;