smithchart data next to cursor

This commit is contained in:
Jan Käberich 2020-11-22 22:24:49 +01:00
parent 93bf7255c3
commit 4093578b62
4 changed files with 63 additions and 1 deletions

View File

@ -26,6 +26,13 @@ TracePlot::TracePlot(TraceModel &model, QWidget *parent)
connect(&model, &TraceModel::SpanChanged, this, qOverload<double, double>(&TracePlot::updateSpan)); connect(&model, &TraceModel::SpanChanged, this, qOverload<double, double>(&TracePlot::updateSpan));
plots.insert(this); 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); setAcceptDrops(true);
} }
@ -33,6 +40,7 @@ TracePlot::~TracePlot()
{ {
plots.erase(this); plots.erase(this);
delete contextmenu; delete contextmenu;
delete cursorLabel;
} }
void TracePlot::enableTrace(Trace *t, bool enabled) void TracePlot::enableTrace(Trace *t, bool enabled)
@ -161,13 +169,36 @@ void TracePlot::mousePressEvent(QMouseEvent *event)
} }
} }
void TracePlot::mouseReleaseEvent(QMouseEvent *event)
{
selectedMarker = nullptr;
}
void TracePlot::mouseMoveEvent(QMouseEvent *event) void TracePlot::mouseMoveEvent(QMouseEvent *event)
{ {
if(selectedMarker) {
auto clickPoint = event->pos() - QPoint(marginLeft, marginTop); auto clickPoint = event->pos() - QPoint(marginLeft, marginTop);
if(selectedMarker) {
auto trace = selectedMarker->getTrace(); auto trace = selectedMarker->getTrace();
selectedMarker->setPosition(nearestTracePoint(trace, clickPoint)); 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) void TracePlot::dragEnterEvent(QDragEnterEvent *event)

View File

@ -6,6 +6,7 @@
#include <QMenu> #include <QMenu>
#include <QContextMenuEvent> #include <QContextMenuEvent>
#include <QTime> #include <QTime>
#include <QLabel>
class TracePlot : public QWidget class TracePlot : public QWidget
{ {
@ -43,13 +44,16 @@ protected:
virtual QPoint markerToPixel(TraceMarker *m) = 0; virtual QPoint markerToPixel(TraceMarker *m) = 0;
virtual double nearestTracePoint(Trace *t, QPoint pixel) = 0; virtual double nearestTracePoint(Trace *t, QPoint pixel) = 0;
void mousePressEvent(QMouseEvent *event) override; void mousePressEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override;
void leaveEvent(QEvent *event) override;
// handle trace drops // handle trace drops
void dragEnterEvent(QDragEnterEvent *event) override; void dragEnterEvent(QDragEnterEvent *event) override;
void dropEvent(QDropEvent *event) override; void dropEvent(QDropEvent *event) override;
void dragLeaveEvent(QDragLeaveEvent *event) override; void dragLeaveEvent(QDragLeaveEvent *event) override;
virtual void traceDropped(Trace *t, QPoint position){ Q_UNUSED(t) Q_UNUSED(position)}; 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: protected slots:
void newTraceAvailable(Trace *t); void newTraceAvailable(Trace *t);
@ -70,6 +74,8 @@ protected:
QPoint dropPosition; QPoint dropPosition;
Trace *dropTrace; Trace *dropTrace;
QLabel *cursorLabel;
}; };
#endif // TRACEPLOT_H #endif // TRACEPLOT_H

View File

@ -6,6 +6,7 @@
#include <QDebug> #include <QDebug>
#include "preferences.h" #include "preferences.h"
#include "ui_smithchartdialog.h" #include "ui_smithchartdialog.h"
#include "unit.h"
using namespace std; 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)); return transform.map(QPoint(d.S.real() * smithCoordMax, -d.S.imag() * smithCoordMax));
} }
std::complex<double> TraceSmithChart::pixelToData(QPoint p)
{
auto data = transform.inverted().map(QPointF(p));
return complex<double>(data.x() / smithCoordMax, -data.y() / smithCoordMax);
}
QPoint TraceSmithChart::markerToPixel(TraceMarker *m) QPoint TraceSmithChart::markerToPixel(TraceMarker *m)
{ {
QPoint ret = QPoint(); 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 */) //void TraceSmithChart::paintEvent(QPaintEvent * /* the event */)
//{ //{
// auto pref = Preferences::getInstance(); // auto pref = Preferences::getInstance();

View File

@ -19,6 +19,7 @@ protected:
static constexpr double smithCoordMax = 4096; static constexpr double smithCoordMax = 4096;
QPoint dataToPixel(Trace::Data d); QPoint dataToPixel(Trace::Data d);
std::complex<double> pixelToData(QPoint p);
QPoint markerToPixel(TraceMarker *m) override; QPoint markerToPixel(TraceMarker *m) override;
double nearestTracePoint(Trace *t, QPoint pixel) override; double nearestTracePoint(Trace *t, QPoint pixel) override;
@ -27,6 +28,7 @@ protected:
bool supported(Trace *t) override; bool supported(Trace *t) override;
virtual void draw(QPainter& painter) override; virtual void draw(QPainter& painter) override;
virtual void traceDropped(Trace *t, QPoint position) override; virtual void traceDropped(Trace *t, QPoint position) override;
QString mouseText(QPoint pos) override;
QPen textPen; QPen textPen;
QPen chartLinesPen; QPen chartLinesPen;
QPen thinPen; QPen thinPen;