#ifndef GTL_SELELCTION_DATA_MODEL_H #define GTL_SELELCTION_DATA_MODEL_H #include #include #include #include "core/core_global.h" #include "core/gtl_analog_data.h" namespace gtl { class selection_list : public QAbstractListModel, public std::deque { 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> 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