summaryrefslogtreecommitdiff
path: root/qt_adapter.hpp
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2014-05-03 10:57:11 +0200
committerDennis Brentjes <d.brentjes@gmail.com>2014-05-03 10:57:11 +0200
commit5bf919190e90b017ff00ab074bce68e90958fa3c (patch)
tree4dfa89be670c4b7ea8ca0054751fe7da8451134a /qt_adapter.hpp
parent42442fd5025b69c4b7800c71d6f568ae255e7b00 (diff)
downloadgeneric-gui-5bf919190e90b017ff00ab074bce68e90958fa3c.tar.gz
generic-gui-5bf919190e90b017ff00ab074bce68e90958fa3c.tar.bz2
generic-gui-5bf919190e90b017ff00ab074bce68e90958fa3c.zip
Adds a mapping variant to the generic gui.
Diffstat (limited to 'qt_adapter.hpp')
-rw-r--r--qt_adapter.hpp28
1 files changed, 22 insertions, 6 deletions
diff --git a/qt_adapter.hpp b/qt_adapter.hpp
index 6e0de17..d19a35c 100644
--- a/qt_adapter.hpp
+++ b/qt_adapter.hpp
@@ -34,22 +34,38 @@ struct QtModelType<std::map<std::string, V>>
template <typename T>
struct widget_type {
- typedef void type;
+// typedef void type;
+};
+
+template <typename T>
+struct widget_type<std::shared_ptr<T>> {
+ typedef typename T::widget type;
};
template <typename T>
-struct widget_type<std::unique_ptr<T>> {
+struct widget_type<std::shared_ptr<T>&&>
+{
typedef typename T::widget type;
};
template <typename T>
+struct widget_type<std::shared_ptr<T>&>
+{
+ typedef typename T::widget type;
+};
+
+template <typename T, typename U>
struct QtWidget : public T {
GuiItemDelegate delegate;
+ std::shared_ptr<U> model;
- QtWidget(QWidget* parent = nullptr)
+ QtWidget(std::shared_ptr<U> model, QWidget* parent = nullptr)
: T(parent)
+ , delegate()
+ , model(model)
{
+ T::setModel(this->model.get());
T::setItemDelegate(&delegate);
}
};
@@ -67,7 +83,7 @@ template <typename T>
struct QtAdapter<T, QAbstractTableModel> : public QAbstractTableModel
{
typedef QTableView view;
- typedef QtWidget<view> widget;
+ typedef QtWidget<view, QtAdapter<T, QAbstractTableModel>> widget;
T model;
@@ -111,7 +127,7 @@ struct QtAdapter<T, QAbstractTableModel> : public QAbstractTableModel
};
template <typename T>
-std::unique_ptr<QtAdapter<T, typename QtModelType<typename T::data_type>::type>> make_qt_adapter(T value) {
+std::shared_ptr<QtAdapter<T, typename QtModelType<typename T::data_type>::type>> make_qt_adapter(T value) {
typedef QtAdapter<T, typename QtModelType<typename T::data_type>::type> type;
- return std::unique_ptr<type>(new type(value));
+ return std::make_shared<type>(value);
}