#ifndef SPEC_HARMS_H #define SPEC_HARMS_H #include #include #include #include "gtl_scr_spec_harm.h" #include "script_global.h" namespace gtl { namespace scr { class SCRIPT_EXPORT spec_harms : public QObject, public QList { Q_OBJECT Q_PROPERTY(QVariant harms READ get_harms CONSTANT) Q_PROPERTY(QVariant modulating READ get_modulating CONSTANT) Q_PROPERTY(qreal tolerance READ tolerance WRITE set_tolerance NOTIFY tolerance_changed) Q_PROPERTY(QString name READ name WRITE set_name NOTIFY name_changed) Q_PROPERTY(bool is_visible READ is_visible WRITE set_visible NOTIFY visible_changed) Q_PROPERTY(qreal integral_index READ integral_index NOTIFY integral_index_changed) public: spec_harms(QObject *parent); spec_harms(QObject *parent, qreal freq, int k, int color, qreal weight); ~spec_harms(); QVariant get_harms() const; QVariant get_modulating() const; void get_harms(std::back_insert_iterator> harms); void update(); void save_state(QJsonObject &root); void restore_state(const QJsonObject &root); qreal tolerance() const; QString name() const; bool is_visible() const; void get_max_ampl(qreal& max_ampl); qreal integral_index() const; private: void add_harm(spec_harm* harm); int get_cnt_harms(int from, int step); private: QList _modulating_harms; qreal _tolerance; QString _name; bool _is_visible; public slots: void modulate(qreal freq, int k, int color = 0, qreal weight = 1); int get_count(uint from = 0, int fails = 1000, int cnt_mod = 0, bool both_sides = false) const; void clear(); void set_tolerance(qreal value); void set_name(QString value); void set_visible(bool value); private slots: void get_modulating_harms_integral_index(qreal &value); signals: void harms_changed(); void get_peak_freq(qreal freq, qreal tolerance, qreal &peak_freq); void get_harm_amplitude(qreal freq, qreal &value); void get_harm_base(qreal freq, qreal &value); void tolerance_changed(); void name_changed(); void visible_changed(); void integral_index_changed(); void get_max_harm_level(qreal &value) const; }; } } #endif // SPEC_HARMS_H