#ifndef DATA_MODEL_NODE_H #define DATA_MODEL_NODE_H #include #include #include #include "core_global.h" namespace gtl { class CORE_EXPORT data_model_node : public QObject { Q_OBJECT Q_PROPERTY(QString name READ name WRITE set_name NOTIFY name_changed) public: enum types { unknown, device, analog }; public: data_model_node(types type, data_model_node *parent = nullptr, bool is_hidden = false); ~data_model_node(); data_model_node* parent_node() const; QString name() const; int count(); int index_of(const data_model_node* child) const; int index_of() const; data_model_node* child(int idx); virtual bool is_checkable() const = 0; types type() const; QString path() const; virtual void save(QDomElement& root_element); virtual void save_childs(QDomElement& root_element); virtual void load(const QDomElement& root_element); virtual void load_childs(const QDomElement& root_element); virtual void get_state(QJsonObject& root); bool remove(data_model_node* child); void remove_children(); data_model_node* root(); bool is_child_name_exist(QString name); void set_enabled(bool value); bool is_enabled() const; protected: QString _name; std::vector _children; std::vector _hidden_children; bool _is_enabled; private: types _type; private: void add_child(data_model_node* child); void add_hidden_child(data_model_node* child); public slots: void set_name(QString name); void deleting_hidden_child(); private slots: void deleting_child(); signals: void name_changed(); void node_name_changed(data_model_node*); void deleting(); gtl::data_model_node* create_node(gtl::data_model_node* parent, QDomElement& node_element); void begin_insert_children(gtl::data_model_node* parent, int begin, int end); void end_insert_children(); void begin_remove_children(gtl::data_model_node* parent, int begin, int end); void end_remove_children(); }; } #endif // DATA_MODEL_NODE_H