#ifndef DATA_MODEL_H #define DATA_MODEL_H #include #include #include "core_global.h" #include "core/gtl_device.h" namespace gtl { class CORE_EXPORT data_model : public QAbstractItemModel { Q_OBJECT public: explicit data_model(QObject *parent = nullptr); // Header: QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; // Basic functionality: QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; QModelIndex parent(const QModelIndex &index) const override; QModelIndex index(data_model_node* node); QModelIndex parent(data_model_node* node); 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; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; virtual Qt::ItemFlags flags(const QModelIndex &index) const override; void clear(); void add_device(device *d); gtl::data_model_node* node(QString path) const; int index_of(data_model_node* node) const; gtl::data_model_node* node(const QModelIndex& index) const; virtual void save(QDomElement& root_element); virtual void load(const QDomElement& root_element); private: std::vector _devices; public slots: void remove(gtl::data_model_node* node); private slots: void begin_add_children(gtl::data_model_node* parent, int begin, int end); void end_add_children(); void begin_remove_children(gtl::data_model_node* parent, int begin, int end); void end_remove_children(); void deleting_device(); void node_name_changed(data_model_node *node); signals: gtl::data_model_node* create_node(gtl::data_model_node* parent, QDomElement& node_element); }; } #endif // DATA_MODEL_H