diff options
| author | Frank Gevaerts <frank@gevaerts.be> | 2008-08-29 21:08:38 +0000 |
|---|---|---|
| committer | Frank Gevaerts <frank@gevaerts.be> | 2008-08-29 21:08:38 +0000 |
| commit | 5d22e3cbdd251819a4d2d07b9a12994d5aef778d (patch) | |
| tree | 4c6a81187ccf065a5f296a903b9f7da88503e403 /utils/wpseditor/gui/src/QPropertyEditor/QVariantDelegate.cpp | |
| parent | cc31b1fbdae455f975b69dd6bffc23d8bd021566 (diff) | |
| download | rockbox-5d22e3cbdd251819a4d2d07b9a12994d5aef778d.zip rockbox-5d22e3cbdd251819a4d2d07b9a12994d5aef778d.tar.gz rockbox-5d22e3cbdd251819a4d2d07b9a12994d5aef778d.tar.bz2 rockbox-5d22e3cbdd251819a4d2d07b9a12994d5aef778d.tar.xz | |
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
Diffstat (limited to 'utils/wpseditor/gui/src/QPropertyEditor/QVariantDelegate.cpp')
| -rw-r--r-- | utils/wpseditor/gui/src/QPropertyEditor/QVariantDelegate.cpp | 105 |
1 files changed, 105 insertions, 0 deletions
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 <Qt/qabstractitemview.h> + + +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<Property*>(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<Property*>(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<Property*>(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(); + } + } +} |