summaryrefslogtreecommitdiff
path: root/qt_adapter.hpp
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2014-05-03 16:14:48 +0200
committerDennis Brentjes <d.brentjes@gmail.com>2014-05-03 22:38:33 +0200
commit13cfd05f9b2bb3c8d7d1bf47fcef037a745bacf8 (patch)
tree98a325d0e547d5da0b0fd4b0b9ce2054306e87d0 /qt_adapter.hpp
parent5bf919190e90b017ff00ab074bce68e90958fa3c (diff)
downloadgeneric-gui-13cfd05f9b2bb3c8d7d1bf47fcef037a745bacf8.tar.gz
generic-gui-13cfd05f9b2bb3c8d7d1bf47fcef037a745bacf8.tar.bz2
generic-gui-13cfd05f9b2bb3c8d7d1bf47fcef037a745bacf8.zip
Adds editing functionality to the models.
no longer able to store QStrings in the model though, But when creating generic guis you should not use any Gui related types anyway.
Diffstat (limited to 'qt_adapter.hpp')
-rw-r--r--qt_adapter.hpp19
1 files changed, 17 insertions, 2 deletions
diff --git a/qt_adapter.hpp b/qt_adapter.hpp
index d19a35c..8af44d7 100644
--- a/qt_adapter.hpp
+++ b/qt_adapter.hpp
@@ -1,7 +1,7 @@
#pragma once
#include "fusion_model.hpp"
-#include "boost_any_to_qvariant.hpp"
+#include "boost_any_qvariant_convert.hpp"
#include "meta_types.hpp"
#include "gui_item_delegate.hpp"
@@ -67,6 +67,7 @@ struct QtWidget : public T {
{
T::setModel(this->model.get());
T::setItemDelegate(&delegate);
+ T::setEditTriggers(QAbstractItemView::DoubleClicked);
}
};
@@ -101,9 +102,23 @@ struct QtAdapter<T, QAbstractTableModel> : public QAbstractTableModel
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()));
+
+ return true;
+ }
+
+ virtual Qt::ItemFlags flags(const QModelIndex &index) const
+ {
+ return QAbstractTableModel::flags(index) | Qt::ItemIsEditable;
+ }
+
virtual QVariant data(QModelIndex const& index, int role) const override
{
- if(role != Qt::DisplayRole) return QVariant();
+ 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());
}