#pragma once #include "HoverInfo.h" #include "Spectrum.h" namespace YSG { class FrequentAxis; struct SpectrumPrivate; class LIB_DECL Spectrum : public RenderAble, public HoverInfoRenderAble { public: Q_Ptr2(Spectrum) PROP(FrequentAxis*, frequentAxis) PROP(Axis*, powerAxis); PROP(int, frequentPointSize); PROP(Range, frequentRange); PROP(double, middleSweepFrequent); PROP(Range, sweepFrequentRange); PROP(bool, useMaxLine); PROP(bool, useMinLine); PROP(bool, useMaxMarker); PROP(bool, useMinMarker); PROP(bool, useSweepFrequentRect); PROP(QBrush, maxBrush); PROP(QBrush, curBrush); PROP(QBrush, minBrush); PROP(QPen, maxPen); PROP(QPen, curPen); PROP(QPen, minPen); PROP(QPen, selectMarkerPen); PROP(QPen, markerPen); PROP(QPen, middleFrequentPen); PROP(QBrush, sweepRectBrush); void giveData(const QVector &lineData); double getPower(double frequent, bool& ok, SRC=SRC::Cache); void addCustomMarker(double frequent); void addCustomLineMarker(double frequent); void removeCustomMarker(double frequent); void removeCurrentMarker(SRC=SRC::Auto); void clearAllCustomMarker(SRC=SRC::Auto); int selectLineMarkerSize(SRC=SRC::Auto); int curSelectMarkerIndex(SRC=SRC::Auto); void setSelectedLineMarker(int markerIndex); void selectNext(SRC=SRC::Auto); void unSelectMarker(SRC=SRC::Auto); void selectPrevious(SRC=SRC::Auto); double getMarkFrequent(int markIndex, SRC=SRC::Auto); void setMarkerFrequent(int markerIndex, double frequent); void setCurrentMarkerFrequent(double frequent); struct Builder; }; struct Spectrum_PROP { FrequentAxis *frequentAxis{}; Axis *powerAxis{}; int frequentPointSize{}; Range frequentRange{}; double middleSweepFrequent = 50; Range sweepFrequentRange{40, 60}; bool useMaxLine = false; bool useMinLine = false; bool useMaxMarker = false; bool useMinMarker = false; bool useSweepFrequentRect = false; QBrush maxBrush; QBrush curBrush; QBrush minBrush; QPen maxPen = QPen(Qt::red); QPen curPen = QPen(Qt::green); QPen minPen = QPen(Qt::white); QPen selectMarkerPen = QPen(Qt::darkBlue, 2); QPen markerPen = QPen(Qt::red); QPen middleFrequentPen = QPen(Qt::red); QBrush sweepRectBrush = QBrush(QColor(255, 255, 0, 100)); Spectrum_PROP() { maxBrush = QBrush(QColor(), Qt::NoBrush); curBrush = QBrush(QColor(), Qt::NoBrush); minBrush = QBrush(QColor(), Qt::NoBrush); } }; struct LIB_DECL Spectrum::Builder : Spectrum_PROP { PROP_B(FrequentAxis*, frequentAxis) PROP_B(Axis*, powerAxis); PROP_B(int, frequentPointSize); PROP_B(Range, frequentRange); PROP_B(double, middleSweepFrequent); PROP_B(Range, sweepFrequentRange); PROP_B(bool, useMaxLine); PROP_B(bool, useMinLine); PROP_B(bool, useMaxMarker); PROP_B(bool, useMinMarker); PROP_B(bool, useSweepFrequentRect); PROP_B(QBrush, maxBrush); PROP_B(QBrush, curBrush); PROP_B(QBrush, minBrush); PROP_B(QPen, maxPen); PROP_B(QPen, curPen); PROP_B(QPen, minPen); PROP_B(QPen, selectMarkerPen); PROP_B(QPen, markerPen); PROP_B(QPen, middleFrequentPen); PROP_B(QBrush, sweepRectBrush); SETTER(QString, layerName, "plottable") Builder(FrequentAxis* frequentAxis, Axis* axis); Spectrum* build(); protected: Plot *plot{}; }; }