75 lines
2.1 KiB
C
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
|