#ifndef ENGINE_TABLE_MODEL_H #define ENGINE_TABLE_MODEL_H #include #include #include "math/gtl_math_analog_value.h" namespace gtl { namespace scr { class engine_table_model_header : public QObject { Q_OBJECT private: QHash _text; public: engine_table_model_header(QObject* parent); QString text(int idx) const; void clear(); public slots: void set_text(int idx, QString text); }; class engine_table_model : public QAbstractTableModel { Q_OBJECT public: explicit engine_table_model(QObject *parent = nullptr); // Header: QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; // Basic functionality: int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; void clear(); engine_table_model_header* vert_header(); engine_table_model_header* horz_header(); private: int _rows; int _cols; engine_table_model_header* _horz_header; engine_table_model_header* _vert_header; QHash _values; private: bool is_gtl_math_analog_value(QObject* obj) const; public slots: void init(int rows, int cols); void set_cell_value(int row, int col, QJSValue parent); private slots: void value_changed(); }; } } #endif // ENGINE_TABLE_MODEL_H