72 lines
1.9 KiB
C++
72 lines
1.9 KiB
C++
#ifndef GTL_SELELCTION_DATA_MODEL_H
|
|
#define GTL_SELELCTION_DATA_MODEL_H
|
|
|
|
#include <deque>
|
|
|
|
#include <QIdentityProxyModel>
|
|
#include <QDomElement>
|
|
|
|
#include "core/core_global.h"
|
|
|
|
#include "core/gtl_analog_data.h"
|
|
|
|
namespace gtl
|
|
{
|
|
class selection_list : public QAbstractListModel, public std::deque<gtl::analog_data*>
|
|
{
|
|
private:
|
|
|
|
public:
|
|
selection_list(QObject* parent = NULL);
|
|
|
|
virtual int rowCount(const QModelIndex& parent = QModelIndex()) const override;
|
|
virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
|
|
|
|
void add(data_model_node* node);
|
|
void remove(data_model_node* node);
|
|
|
|
void remove_all();
|
|
|
|
};
|
|
|
|
|
|
class CORE_EXPORT selection_data_model : public QIdentityProxyModel
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit selection_data_model(QObject *source, int count = 0);
|
|
|
|
virtual void save(QDomElement& root_element);
|
|
virtual void load(const QDomElement& root_element);
|
|
|
|
void clear();
|
|
|
|
QAbstractListModel* selection();
|
|
|
|
void get_selections(std::back_insert_iterator<std::vector<gtl::analog_data*>> ad);
|
|
|
|
void select(gtl::analog_data* node);
|
|
void deselect(gtl::analog_data* node);
|
|
|
|
protected:
|
|
virtual Qt::ItemFlags flags(const QModelIndex &index) const override;
|
|
virtual QVariant data(const QModelIndex &index, int role/* = Qt::DisplayRole*/) const override;
|
|
virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
|
|
|
|
private:
|
|
selection_list* _selection;
|
|
int _count;
|
|
|
|
private:
|
|
void add_selection(gtl::data_model_node* node);
|
|
|
|
private slots:
|
|
void deleting_node();
|
|
|
|
signals:
|
|
void selected(gtl::analog_data*);
|
|
void deselected(gtl::analog_data*);
|
|
};
|
|
}
|
|
#endif // GTL_SELELCTION_DATA_MODEL_H
|