test_sdk/script/gtl_scr_spec_harms.h

85 lines
2.7 KiB
C++

#ifndef SPEC_HARMS_H
#define SPEC_HARMS_H
#include <QList>
#include <QVariant>
#include <QJsonArray>
#include "gtl_scr_spec_harm.h"
#include "script_global.h"
namespace gtl
{
namespace scr
{
class SCRIPT_EXPORT spec_harms : public QObject, public QList<spec_harm*>
{
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<std::vector<spec_harm*>> 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<spec_harms*> _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