summaryrefslogtreecommitdiff
path: root/gui_item_delegate.cpp
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 /gui_item_delegate.cpp
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 'gui_item_delegate.cpp')
-rw-r--r--gui_item_delegate.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/gui_item_delegate.cpp b/gui_item_delegate.cpp
index aba0727..7527020 100644
--- a/gui_item_delegate.cpp
+++ b/gui_item_delegate.cpp
@@ -2,11 +2,40 @@
#include "gui_item_delegate.hpp"
+#include <QMetaProperty>
+#include <iostream>
+
GuiItemDelegate::GuiItemDelegate(QObject *parent) :
QStyledItemDelegate(parent)
{
}
+void GuiItemDelegate::setModelData(QWidget* widget, QAbstractItemModel* model, const QModelIndex& index) const
+{
+ static int string_id = qMetaTypeId<std::string>();
+ QByteArray n = widget->metaObject()->userProperty().name();
+ QVariant variant = widget->property(n);
+
+ if(variant.type() == QVariant::String) {
+ model->setData(index, QVariant::fromValue(variant.toString().toStdString()), Qt::EditRole);
+ } else {
+ QStyledItemDelegate::setModelData(widget, model, index);
+ }
+}
+
+void GuiItemDelegate::setEditorData(QWidget* widget, const QModelIndex& index) const
+{
+ static int string_id = qMetaTypeId<std::string>();
+ QVariant variant = index.data(Qt::EditRole);
+ QByteArray n = widget->metaObject()->userProperty().name();
+
+ if(string_id == variant.userType()) {
+ widget->setProperty(n, QVariant(QString::fromStdString(variant.value<std::string>())));
+ } else {
+ QStyledItemDelegate::setEditorData(widget, index);
+ }
+}
+
QString GuiItemDelegate::displayText(const QVariant &value, const QLocale &locale) const
{
QString ret;