diff options
| author | Dennis Brentjes <d.brentjes@gmail.com> | 2014-04-18 18:30:52 +0200 |
|---|---|---|
| committer | Dennis Brentjes <d.brentjes@gmail.com> | 2014-04-18 18:30:52 +0200 |
| commit | d834eba65c2c65c1540d13c9c39ced51bd87cf83 (patch) | |
| tree | 68c0533b668545cbfb0b0d556ac7ebf9bf8d3e97 /qt_adapter.hpp | |
| parent | 0969e7a24c0ae2a0cc9c5bd4be0d18c29bfe7f30 (diff) | |
| download | generic-gui-d834eba65c2c65c1540d13c9c39ced51bd87cf83.tar.gz generic-gui-d834eba65c2c65c1540d13c9c39ced51bd87cf83.tar.bz2 generic-gui-d834eba65c2c65c1540d13c9c39ced51bd87cf83.zip | |
First working prototype
Diffstat (limited to 'qt_adapter.hpp')
| -rw-r--r-- | qt_adapter.hpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/qt_adapter.hpp b/qt_adapter.hpp new file mode 100644 index 0000000..2843667 --- /dev/null +++ b/qt_adapter.hpp @@ -0,0 +1,69 @@ +#pragma once + +#include "fusion_model.hpp" +#include "boost_any_to_qvariant.hpp" +#include "meta_types.hpp" + +#include <QAbstractTableModel> +#include <QTableView> +#include <QMetaType> + +#include <memory> + + + +template <typename T> +struct QtModelType +{ + typedef void type; +}; + +template <typename V> +struct QtModelType<std::vector<V>> +{ + typedef QAbstractTableModel type; +}; + +template <typename T, typename Q> +struct QtAdapter : public Q { + + typedef void view; + + QtAdapter(T) + {} +}; + +template <typename T> +struct QtAdapter<T, QAbstractTableModel> : public QAbstractTableModel +{ + typedef QTableView view; + + T model; + + QtAdapter(T model) + : model(model) + {} + + virtual int rowCount(QModelIndex const&) const override + { + return model.row_count(); + } + + virtual int columnCount(QModelIndex const&) const override + { + return model.column_count(); + } + + virtual QVariant data(QModelIndex const& index, int role) const + { + if(role != Qt::DisplayRole) return QVariant(); + + return to_qvariant<typename T::data_type::value_type>(model.get_cell(index.row(), index.column()), index.column()); + } +}; + + +template <typename T> +std::shared_ptr<QtAdapter<T, typename QtModelType<typename T::data_type>::type>> make_qt_adapter(T value) { + return std::make_shared<QtAdapter<T, typename QtModelType<typename T::data_type>::type>>(value); +} |
