test_sdk/core/gtl_data_model.h

75 lines
2.1 KiB
C++

#ifndef DATA_MODEL_H
#define DATA_MODEL_H
#include <QAbstractItemModel>
#include <QDomElement>
#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<gtl::device*> _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