LibreVNA/Software/PC_Application/Traces/Math/tracemath.h

76 lines
1.8 KiB
C
Raw Normal View History

#ifndef TRACEMATH_H
#define TRACEMATH_H
#include <QObject>
#include <vector>
#include <complex>
class TraceMath : public QObject {
Q_OBJECT
public:
TraceMath();
class Data {
public:
double x;
std::complex<double> y;
};
enum class DataType {
Frequency,
Time,
Invalid,
};
enum class Status {
Ok,
Warning,
Error,
};
Data getSample(unsigned int index);
unsigned int numSamples();
// indicate whether this function produces time or frequency domain data
virtual DataType outputType(DataType inputType) = 0;
virtual QString description() = 0;
virtual void edit(){};
void removeInput();
void assignInput(TraceMath *input);
DataType getDataType() const;
std::vector<Data>& rData() { return data;};
Status getStatus() const;
QString getStatusDescription() const;
public slots:
// some values of the input data have changed, begin/end determine which sample(s) has changed
virtual void inputSamplesChanged(unsigned int begin, unsigned int end){Q_UNUSED(begin) Q_UNUSED(end)};
void inputTypeChanged(DataType type);
signals:
// emit this whenever a sample changed (alternatively, if all samples are about to change, emit outputDataChanged after they have changed)
void outputSamplesChanged(unsigned int begin, unsigned int end);
// emit when the output type changed
void outputTypeChanged(DataType type);
protected:
// call one of these functions in the derived classes after output data has been updated
void warning(QString warn);
void error(QString err);
void success();
std::vector<Data> data;
TraceMath *input;
DataType dataType;
private:
Status status;
QString statusString;
signals:
void statusChanged();
};
#endif // TRACEMATH_H