125 lines
3.3 KiB
C++
125 lines
3.3 KiB
C++
#ifndef TRACEXYPLOT_H
|
|
#define TRACEXYPLOT_H
|
|
|
|
#include "traceplot.h"
|
|
#include "traceaxis.h"
|
|
|
|
#include <set>
|
|
|
|
class XYPlotConstantLine : public QObject, public Savable
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
enum class Axis {
|
|
Primary,
|
|
Secondary,
|
|
Last,
|
|
};
|
|
enum class PassFail {
|
|
DontCare,
|
|
HighLimit,
|
|
LowLimit,
|
|
Last,
|
|
};
|
|
|
|
XYPlotConstantLine();
|
|
QColor getColor() const;
|
|
void setColor(const QColor &value);
|
|
|
|
void fromJSON(nlohmann::json j) override;
|
|
nlohmann::json toJSON() override;
|
|
|
|
bool pass(QPointF testPoint);
|
|
|
|
static QString AxisToString(Axis axis);
|
|
static Axis AxisFromString(QString s);
|
|
|
|
static QString PassFailToString(PassFail pf);
|
|
static PassFail PassFailFromString(QString s);
|
|
|
|
void editDialog(QString xUnit, QString yUnitPrimary, QString yUnitSecondary);
|
|
QString getDescription();
|
|
Axis getAxis() const;
|
|
|
|
const std::vector<QPointF> &getPoints() const;
|
|
|
|
signals:
|
|
void editingFinished();
|
|
private:
|
|
QString name;
|
|
QColor color;
|
|
Axis axis;
|
|
PassFail passFail;
|
|
std::vector<QPointF> points;
|
|
};
|
|
|
|
class TraceXYPlot : public TracePlot
|
|
{
|
|
friend class XYplotAxisDialog;
|
|
Q_OBJECT
|
|
public:
|
|
TraceXYPlot(TraceModel &model, QWidget *parent = nullptr);
|
|
~TraceXYPlot();
|
|
|
|
enum class XAxisMode {
|
|
UseSpan,
|
|
FitTraces,
|
|
Manual,
|
|
Last,
|
|
};
|
|
|
|
void setYAxis(int axis, YAxis::Type type, bool log, bool autorange, double min, double max, double div);
|
|
void setXAxis(XAxis::Type type, XAxisMode mode, bool log, double min, double max, double div);
|
|
void enableTrace(Trace *t, bool enabled) override;
|
|
void updateSpan(double min, double max) override;
|
|
void replot() override;
|
|
|
|
virtual Type getType() override { return Type::XYPlot;};
|
|
virtual nlohmann::json toJSON() override;
|
|
virtual void fromJSON(nlohmann::json j) override;
|
|
|
|
bool isTDRtype(YAxis::Type type);
|
|
|
|
static int sideMargin(bool YAxisEnabled);
|
|
|
|
public slots:
|
|
void axisSetupDialog();
|
|
|
|
protected:
|
|
virtual bool configureForTrace(Trace *t) override;
|
|
virtual void updateContextMenu() override;
|
|
virtual bool dropSupported(Trace *t) override;
|
|
virtual void draw(QPainter &p) override;
|
|
|
|
private slots:
|
|
void updateAxisTicks();
|
|
private:
|
|
static constexpr int yAxisDisabledSpace = 10;
|
|
static QString AxisModeToName(XAxisMode mode);
|
|
static XAxisMode AxisModeFromName(QString name);
|
|
void enableTraceAxis(Trace *t, int axis, bool enabled);
|
|
bool domainMatch(Trace *t);
|
|
bool supported(Trace *t) override;
|
|
bool supported(Trace *t, YAxis::Type type);
|
|
QPointF traceToCoordinate(Trace *t, unsigned int sample, YAxis &yaxis);
|
|
QPoint plotValueToPixel(QPointF plotValue, int Yaxis);
|
|
QPointF pixelToPlotValue(QPoint pixel, int YAxis);
|
|
QPoint markerToPixel(Marker *m) override;
|
|
double nearestTracePoint(Trace *t, QPoint pixel, double *distance = nullptr) override;
|
|
virtual bool markerVisible(double x) override;
|
|
void traceDropped(Trace *t, QPoint position) override;
|
|
QString mouseText(QPoint pos) override;
|
|
|
|
std::set<Trace*> tracesAxis[2];
|
|
|
|
YAxis yAxis[2];
|
|
XAxis xAxis;
|
|
XAxisMode xAxisMode;
|
|
|
|
int plotAreaLeft, plotAreaWidth, plotAreaBottom, plotAreaTop;
|
|
|
|
std::vector<XYPlotConstantLine*> constantLines;
|
|
};
|
|
|
|
#endif // TRACEXYPLOT_H
|