From 5d22e3cbdd251819a4d2d07b9a12994d5aef778d Mon Sep 17 00:00:00 2001 From: Frank Gevaerts Date: Fri, 29 Aug 2008 21:08:38 +0000 Subject: Add wpseditor, the Google Summer of Code 2008 project of Rostislav Chekan. Closes FS#9327 git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18362 a1c6a512-1295-4272-9138-f99709370657 --- .../gui/src/QPropertyEditor/QVariantDelegate.cpp | 105 +++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 utils/wpseditor/gui/src/QPropertyEditor/QVariantDelegate.cpp (limited to 'utils/wpseditor/gui/src/QPropertyEditor/QVariantDelegate.cpp') diff --git a/utils/wpseditor/gui/src/QPropertyEditor/QVariantDelegate.cpp b/utils/wpseditor/gui/src/QPropertyEditor/QVariantDelegate.cpp new file mode 100644 index 0000000..ebda9b2 --- /dev/null +++ b/utils/wpseditor/gui/src/QPropertyEditor/QVariantDelegate.cpp @@ -0,0 +1,105 @@ +// ************************************************************************************************* +// +// QPropertyEditor v 0.1 +// +// -------------------------------------- +// Copyright (C) 2007 Volker Wiendl +// +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +// +// ************************************************************************************************* + +#include "QVariantDelegate.h" + +#include "Property.h" + +#include + + +QVariantDelegate::QVariantDelegate(QObject* parent) : QItemDelegate(parent) {} + + +QVariantDelegate::~QVariantDelegate() {} + +QWidget *QVariantDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem& option , const QModelIndex & index ) const { + QWidget* editor = 0; + Property* p = static_cast(index.internalPointer()); + switch (p->value().type()) { + case QVariant::Color: + case QVariant::Int: + case QMetaType::Float: + case QVariant::Double: + case QVariant::UserType: + editor = p->createEditor(parent, option); + if (editor) break; // if no editor could be created take default case + default: + editor = QItemDelegate::createEditor(parent, option, index); + } + parseEditorHints(editor, p->editorHints()); + return editor; +} + +void QVariantDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { + QVariant data = index.model()->data(index, Qt::EditRole); + switch (data.type()) { + case QVariant::Color: + case QMetaType::Double: + case QMetaType::Float: + case QVariant::UserType: + if (static_cast(index.internalPointer())->setEditorData(editor, data)) // if editor couldn't be recognized use default + break; + default: + QItemDelegate::setEditorData(editor, index); + break; + } +} + +void QVariantDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { + QVariant data = index.model()->data(index, Qt::EditRole); + switch (data.type()) { + case QVariant::Color: + case QMetaType::Double: + case QMetaType::Float: + case QVariant::UserType: { + QVariant data = static_cast(index.internalPointer())->editorData(editor); + if (data.isValid()) { + model->setData(index, data , Qt::EditRole); + break; + } + } + default: + QItemDelegate::setModelData(editor, model, index); + break; + } +} + +void QVariantDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex& index ) const { + return QItemDelegate::updateEditorGeometry(editor, option, index); +} + +void QVariantDelegate::parseEditorHints(QWidget* editor, const QString& editorHints) const { + if (editor && !editorHints.isEmpty()) { + // Parse for property values + QRegExp rx("(.*)(=\\s*)(.*)(;{1})"); + rx.setMinimal(true); + int pos = 0; + while ((pos = rx.indexIn(editorHints, pos)) != -1) { + qDebug("Setting %s to %s", qPrintable(rx.cap(1)), qPrintable(rx.cap(3))); + editor->setProperty(qPrintable(rx.cap(1).trimmed()), rx.cap(3).trimmed()); + pos += rx.matchedLength(); + } + } +} -- cgit v1.1