summaryrefslogtreecommitdiff
path: root/qt_adapter.hpp
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2014-04-18 18:30:52 +0200
committerDennis Brentjes <d.brentjes@gmail.com>2014-04-18 18:30:52 +0200
commitd834eba65c2c65c1540d13c9c39ced51bd87cf83 (patch)
tree68c0533b668545cbfb0b0d556ac7ebf9bf8d3e97 /qt_adapter.hpp
parent0969e7a24c0ae2a0cc9c5bd4be0d18c29bfe7f30 (diff)
downloadgeneric-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.hpp69
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);
+}