LibreVNA/Software/PC_Application/Traces/tracemarker.h

102 lines
2.4 KiB
C
Raw Normal View History

#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;
class TraceMarker : public QObject
{
Q_OBJECT;
public:
2020-10-20 23:03:49 +08:00
TraceMarker(TraceMarkerModel *model, int number = 1);
~TraceMarker();
void assignTrace(Trace *t);
Trace* trace();
QString readableData();
QString readableSettings();
double getFrequency() const;
std::complex<double> getData() const;
QPixmap& getSymbol();
int getNumber() const;
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();
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();
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);
private slots:
void parentTraceDeleted(Trace *t);
void traceDataChanged();
void updateSymbol();
2020-10-20 23:03:49 +08:00
signals:
void rawDataChanged();
private:
2020-10-20 23:03:49 +08:00
enum class Type {
Manual,
Maximum,
Minimum,
Delta,
Lowpass,
Highpass,
Bandpass,
2020-10-20 23:03:49 +08:00
};
static std::vector<Type> getTypes() {
return {Type::Manual, Type::Maximum, Type::Minimum, Type::Delta, Type::Lowpass, Type::Highpass, Type::Bandpass};
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";
case Type::Lowpass: return "Lowpass";
case Type::Highpass: return "Highpass";
case Type::Bandpass: return "Bandpass";
2020-10-20 23:03:49 +08:00
default: return QString();
}
}
void constrainFrequency();
2020-10-20 23:03:49 +08:00
void assignDeltaMarker(TraceMarker *m);
void deleteHelperMarkers();
2020-10-20 23:03:49 +08:00
TraceMarkerModel *model;
Trace *parentTrace;
double frequency;
int number;
std::complex<double> data;
QPixmap symbol;
2020-10-20 23:03:49 +08:00
Type type;
QString suffix;
2020-10-20 23:03:49 +08:00
TraceMarker *delta;
std::vector<TraceMarker*> helperMarkers;
double cutoffAmplitude;
};
#endif // TRACEMARKER_H