summaryrefslogtreecommitdiff
path: root/utils/wpseditor/gui/src/QPropertyEditor/QVariantDelegate.cpp
diff options
context:
space:
mode:
authorFrank Gevaerts <frank@gevaerts.be>2008-08-29 21:08:38 +0000
committerFrank Gevaerts <frank@gevaerts.be>2008-08-29 21:08:38 +0000
commit5d22e3cbdd251819a4d2d07b9a12994d5aef778d (patch)
tree4c6a81187ccf065a5f296a903b9f7da88503e403 /utils/wpseditor/gui/src/QPropertyEditor/QVariantDelegate.cpp
parentcc31b1fbdae455f975b69dd6bffc23d8bd021566 (diff)
downloadrockbox-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.cpp105
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();
+ }
+ }
+}