diff options
| author | Dennis Brentjes <d.brentjes@gmail.com> | 2014-05-06 12:35:50 +0200 |
|---|---|---|
| committer | Dennis Brentjes <d.brentjes@gmail.com> | 2014-05-06 12:35:50 +0200 |
| commit | a8d753c769fb98dc27066aed0f4df8fe101ad842 (patch) | |
| tree | c38bc3c6a2ee513a565364a6686f5b3f2c2d899e /qt_adapter.hpp | |
| parent | dfefe42d0fe40dd97260d3ec0b3e1cb7690cf669 (diff) | |
| download | generic-gui-a8d753c769fb98dc27066aed0f4df8fe101ad842.tar.gz generic-gui-a8d753c769fb98dc27066aed0f4df8fe101ad842.tar.bz2 generic-gui-a8d753c769fb98dc27066aed0f4df8fe101ad842.zip | |
Cleaned up the interface a bit more.
Diffstat (limited to 'qt_adapter.hpp')
| -rw-r--r-- | qt_adapter.hpp | 44 |
1 files changed, 24 insertions, 20 deletions
diff --git a/qt_adapter.hpp b/qt_adapter.hpp index 6ce5ca1..2e6548a 100644 --- a/qt_adapter.hpp +++ b/qt_adapter.hpp @@ -32,11 +32,6 @@ struct QtModelType<std::map<std::string, V>> typedef QAbstractTableModel type; }; -template <typename T> -struct widget_type { - typedef typename T::widget type; -}; - template <typename T, typename U> struct QtWidget : public T { @@ -59,7 +54,7 @@ struct QtAdapter : public Q { typedef void view; - QtAdapter(T) + QtAdapter(std::shared_ptr<T>) {} }; @@ -69,27 +64,27 @@ struct QtAdapter<T, QAbstractTableModel> : public QAbstractTableModel typedef QTableView view; typedef QtWidget<view, QtAdapter<T, QAbstractTableModel>> widget; - T model; + std::shared_ptr<T> model; - QtAdapter(T model) + QtAdapter(std::shared_ptr<T> model) : model(model) {} virtual int rowCount(QModelIndex const&) const override { - return model.row_count(); + return model->row_count(); } virtual int columnCount(QModelIndex const&) const override { - return model.column_count(); + return model->column_count(); } bool setData(QModelIndex const& index, QVariant const& value, int role) override final { if(role != Qt::EditRole) return false; - model.set_cell(index.row(), index.column(), to_boost_any<typename T::row_type>(value, index.column())); + model->set_cell(index.row(), index.column(), to_boost_any<typename T::row_type>(value, index.column())); return true; } @@ -103,7 +98,7 @@ struct QtAdapter<T, QAbstractTableModel> : public QAbstractTableModel { if(role != Qt::DisplayRole && role != Qt::EditRole) return QVariant(); - return to_qvariant<typename T::row_type>(model.get_cell(index.row(), index.column()), index.column()); + return to_qvariant<typename T::row_type>(model->get_cell(index.row(), index.column()), index.column()); } virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const override @@ -113,23 +108,32 @@ struct QtAdapter<T, QAbstractTableModel> : public QAbstractTableModel } if(orientation == Qt::Horizontal && T::has_header_h) { - return QVariant(QString::fromStdString(model.field_name(section))); + return QVariant(QString::fromStdString(model->field_name(section))); } if(orientation == Qt::Vertical && T::has_header_v) { - return QVariant(QString::fromStdString(model.key(section))); + return QVariant(QString::fromStdString(model->key(section))); } return QVariant(); } }; -template <typename T> -std::shared_ptr<typename widget_type<QtAdapter<T, typename QtModelType<typename T::data_type>::type>>::type> -make_qt_widget(T& x) +template <typename Model> +struct AdapterType +{ + typedef QtAdapter<Model, typename QtModelType<typename Model::data_type>::type> type; +}; + +template <typename Model> +struct WidgetType { + typedef typename AdapterType<Model>::type::widget type; +}; + +template <typename Model> +std::shared_ptr<typename WidgetType<Model>::type> make_qt_widget(std::shared_ptr<Model> x) { - typedef QtAdapter<T, typename QtModelType<typename T::data_type>::type> adapter_type; - auto adapter_ptr = std::make_shared<adapter_type>(x); - auto widget_ptr = std::make_shared<typename widget_type<adapter_type>::type>(adapter_ptr); + auto adapter_ptr = std::make_shared<typename AdapterType<Model>::type>(x); + auto widget_ptr = std::make_shared<typename WidgetType<Model>::type>(adapter_ptr); return widget_ptr; } |
