diff options
| author | Dennis Brentjes <d.brentjes@gmail.com> | 2014-05-03 10:57:11 +0200 |
|---|---|---|
| committer | Dennis Brentjes <d.brentjes@gmail.com> | 2014-05-03 10:57:11 +0200 |
| commit | 5bf919190e90b017ff00ab074bce68e90958fa3c (patch) | |
| tree | 4dfa89be670c4b7ea8ca0054751fe7da8451134a /qt_adapter.hpp | |
| parent | 42442fd5025b69c4b7800c71d6f568ae255e7b00 (diff) | |
| download | generic-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.hpp | 28 |
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); } |
