2020-08-31 04:03:41 +08:00
|
|
|
#ifndef TRACEMARKER_H
|
|
|
|
#define TRACEMARKER_H
|
|
|
|
|
|
|
|
#include <QPixmap>
|
|
|
|
#include <QObject>
|
|
|
|
#include "trace.h"
|
2020-10-20 23:03:49 +08:00
|
|
|
#include <QComboBox>
|
|
|
|
#include "CustomWidgets/siunitedit.h"
|
|
|
|
|
|
|
|
class TraceMarkerModel;
|
2020-08-31 04:03:41 +08:00
|
|
|
|
|
|
|
class TraceMarker : public QObject
|
|
|
|
{
|
|
|
|
Q_OBJECT;
|
|
|
|
public:
|
2020-10-20 23:03:49 +08:00
|
|
|
TraceMarker(TraceMarkerModel *model, int number = 1);
|
2020-08-31 04:03:41 +08:00
|
|
|
~TraceMarker();
|
|
|
|
void assignTrace(Trace *t);
|
|
|
|
Trace* trace();
|
|
|
|
QString readableData();
|
2020-10-21 01:15:06 +08:00
|
|
|
QString readableSettings();
|
2020-08-31 04:03:41 +08:00
|
|
|
|
|
|
|
double getFrequency() const;
|
|
|
|
std::complex<double> getData() const;
|
|
|
|
|
|
|
|
QPixmap& getSymbol();
|
|
|
|
|
|
|
|
int getNumber() const;
|
2020-09-21 20:06:20 +08:00
|
|
|
bool editingFrequeny;
|
2020-10-20 03:21:04 +08:00
|
|
|
Trace *getTrace() const;
|
|
|
|
|
2020-10-20 23:03:49 +08:00
|
|
|
void setNumber(int value);
|
|
|
|
|
|
|
|
QWidget *getTypeEditor(QAbstractItemDelegate *delegate = nullptr);
|
|
|
|
void updateTypeFromEditor(QWidget *c);
|
|
|
|
|
|
|
|
SIUnitEdit* getSettingsEditor();
|
2020-10-21 01:15:06 +08:00
|
|
|
void adjustSettings(double value);
|
2020-10-20 23:03:49 +08:00
|
|
|
|
|
|
|
// Updates marker position and data on automatic markers. Should be called whenever the tracedata is complete
|
|
|
|
void update();
|
|
|
|
|
2020-08-31 04:03:41 +08:00
|
|
|
public slots:
|
|
|
|
void setFrequency(double freq);
|
|
|
|
signals:
|
|
|
|
void deleted(TraceMarker *m);
|
|
|
|
void dataChanged(TraceMarker *m);
|
2020-10-20 23:03:49 +08:00
|
|
|
void symbolChanged(TraceMarker *m);
|
|
|
|
void typeChanged(TraceMarker *m);
|
2020-08-31 04:03:41 +08:00
|
|
|
|
|
|
|
private slots:
|
|
|
|
void parentTraceDeleted(Trace *t);
|
|
|
|
void traceDataChanged();
|
|
|
|
void updateSymbol();
|
2020-10-20 23:03:49 +08:00
|
|
|
signals:
|
|
|
|
void rawDataChanged();
|
2020-08-31 04:03:41 +08:00
|
|
|
private:
|
2020-10-20 23:03:49 +08:00
|
|
|
|
|
|
|
enum class Type {
|
|
|
|
Manual,
|
|
|
|
Maximum,
|
|
|
|
Minimum,
|
|
|
|
Delta,
|
2020-10-21 01:15:06 +08:00
|
|
|
Lowpass,
|
|
|
|
Highpass,
|
|
|
|
Bandpass,
|
2020-10-23 20:12:45 +08:00
|
|
|
TOI,
|
2020-10-20 23:03:49 +08:00
|
|
|
};
|
2020-10-23 20:12:45 +08:00
|
|
|
std::set<Type> getSupportedTypes();
|
2020-10-20 23:03:49 +08:00
|
|
|
static QString typeToString(Type t) {
|
|
|
|
switch(t) {
|
|
|
|
case Type::Manual: return "Manual";
|
|
|
|
case Type::Maximum: return "Maximum";
|
|
|
|
case Type::Minimum: return "Minimum";
|
|
|
|
case Type::Delta: return "Delta";
|
2020-10-21 01:15:06 +08:00
|
|
|
case Type::Lowpass: return "Lowpass";
|
|
|
|
case Type::Highpass: return "Highpass";
|
|
|
|
case Type::Bandpass: return "Bandpass";
|
2020-10-23 20:12:45 +08:00
|
|
|
case Type::TOI: return "TOI/IP3";
|
2020-10-20 23:03:49 +08:00
|
|
|
default: return QString();
|
|
|
|
}
|
|
|
|
}
|
2020-08-31 04:03:41 +08:00
|
|
|
void constrainFrequency();
|
2020-10-20 23:03:49 +08:00
|
|
|
void assignDeltaMarker(TraceMarker *m);
|
2020-10-21 01:15:06 +08:00
|
|
|
void deleteHelperMarkers();
|
2020-10-23 20:12:45 +08:00
|
|
|
void setType(Type t);
|
|
|
|
double toDecibel();
|
2020-10-20 23:03:49 +08:00
|
|
|
|
|
|
|
TraceMarkerModel *model;
|
2020-08-31 04:03:41 +08:00
|
|
|
Trace *parentTrace;
|
|
|
|
double frequency;
|
|
|
|
int number;
|
|
|
|
std::complex<double> data;
|
|
|
|
QPixmap symbol;
|
2020-10-20 23:03:49 +08:00
|
|
|
Type type;
|
2020-10-21 01:15:06 +08:00
|
|
|
QString suffix;
|
2020-10-20 23:03:49 +08:00
|
|
|
|
|
|
|
TraceMarker *delta;
|
2020-10-21 01:15:06 +08:00
|
|
|
std::vector<TraceMarker*> helperMarkers;
|
|
|
|
double cutoffAmplitude;
|
2020-08-31 04:03:41 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif // TRACEMARKER_H
|