summaryrefslogtreecommitdiff
path: root/qt_adapter.hpp
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2014-05-06 12:35:50 +0200
committerDennis Brentjes <d.brentjes@gmail.com>2014-05-06 12:35:50 +0200
commita8d753c769fb98dc27066aed0f4df8fe101ad842 (patch)
treec38bc3c6a2ee513a565364a6686f5b3f2c2d899e /qt_adapter.hpp
parentdfefe42d0fe40dd97260d3ec0b3e1cb7690cf669 (diff)
downloadgeneric-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.hpp44
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;
}