From 4b3d3bf911c2fd927ce6570e1e52e7b3286746ad Mon Sep 17 00:00:00 2001 From: Zack Rusin Date: Fri, 15 Apr 2011 02:00:28 -0400 Subject: [PATCH] Custom editor for the arguments. because we want to edit longlong's and we don't want to edit strings. they're too fragile right now. --- gui/argumentseditor.cpp | 108 ++++++++++++++++++++++++++++++++++++---- gui/argumentseditor.h | 20 ++++++++ 2 files changed, 118 insertions(+), 10 deletions(-) diff --git a/gui/argumentseditor.cpp b/gui/argumentseditor.cpp index 8f2b85c..7e0974a 100644 --- a/gui/argumentseditor.cpp +++ b/gui/argumentseditor.cpp @@ -1,7 +1,12 @@ #include "argumentseditor.h" #include +#include #include +#include + +#include +#include #include "apitracecall.h" @@ -35,17 +40,10 @@ void ArgumentsEditor::init() m_ui.setupUi(this); m_ui.argsTree->setModel(m_model); -#if 0 - const QItemEditorFactory *factory = QItemEditorFactory::defaultFactory(); - - QItemEditorCreatorBase *apiBitmaskCreator = - new QStandardItemEditorCreator(); - - factory->registerEditor(QMetaType::type("ApiBitmask") , - apiBitmaskCreator); + QItemEditorFactory *factory = + new ArgumentsItemEditorFactory(); QItemEditorFactory::setDefaultFactory(factory); -#endif } void ArgumentsEditor::setupCall() @@ -152,7 +150,97 @@ void ArgumentsEditor::setupCall() void ArgumentsEditor::setupShaderEditor(const QList &sources) { - +} + +ArgumentsItemEditorFactory::ArgumentsItemEditorFactory() + : QItemEditorFactory() +{ +} + +QWidget * ArgumentsItemEditorFactory::createEditor(QVariant::Type type, + QWidget *parent) const +{ + switch (type) { + case QVariant::Bool: { + BooleanComboBox *cb = new BooleanComboBox(parent); + cb->setFrame(false); + return cb; + } + case QVariant::UInt: { + QSpinBox *sb = new QSpinBox(parent); + sb->setFrame(false); + sb->setMaximum(INT_MAX); + return sb; } + case QVariant::Int: { + QSpinBox *sb = new QSpinBox(parent); + sb->setFrame(false); + sb->setMinimum(INT_MIN); + sb->setMaximum(INT_MAX); + return sb; + } + case QVariant::ULongLong: { + QSpinBox *sb = new QSpinBox(parent); + sb->setFrame(false); + sb->setMaximum(INT_MAX); + return sb; } + case QVariant::LongLong: { + QSpinBox *sb = new QSpinBox(parent); + sb->setFrame(false); + sb->setMinimum(INT_MIN); + sb->setMaximum(INT_MAX); + return sb; + } + case QVariant::Pixmap: + return new QLabel(parent); + case QVariant::Double: { + QDoubleSpinBox *sb = new QDoubleSpinBox(parent); + sb->setFrame(false); + sb->setMinimum(-DBL_MAX); + sb->setMaximum(DBL_MAX); + sb->setDecimals(10); + return sb; + } + default: + break; + } + return 0; +} + +QByteArray +ArgumentsItemEditorFactory::valuePropertyName(QVariant::Type type) const +{ + switch (type) { + case QVariant::Bool: + return "currentIndex"; + case QVariant::UInt: + case QVariant::Int: + case QVariant::LongLong: + case QVariant::ULongLong: + case QVariant::Double: + return "value"; +#if 0 + case QVariant::String: +#endif + default: + return "text"; + } +} + +BooleanComboBox::BooleanComboBox(QWidget *parent) + : QComboBox(parent) +{ + addItem(tr("False")); + addItem(tr("True")); +} + +void BooleanComboBox::setValue(bool value) +{ + setCurrentIndex(value ? 1 : 0); +} + +bool BooleanComboBox::value() const +{ + return (currentIndex() == 1); } #include "argumentseditor.moc" diff --git a/gui/argumentseditor.h b/gui/argumentseditor.h index bcaefcc..fdec857 100644 --- a/gui/argumentseditor.h +++ b/gui/argumentseditor.h @@ -2,11 +2,31 @@ #define ARGUMENTSEDITOR_H #include "ui_argumentseditor.h" +#include +#include #include #include class ApiTraceCall; +class BooleanComboBox : public QComboBox +{ + Q_OBJECT + Q_PROPERTY(bool value READ value WRITE setValue USER true) +public: + BooleanComboBox(QWidget *parent); + void setValue(bool); + bool value() const; +}; + +class ArgumentsItemEditorFactory : public QItemEditorFactory +{ +public: + ArgumentsItemEditorFactory(); + QWidget *createEditor(QVariant::Type type, QWidget *parent) const; + QByteArray valuePropertyName(QVariant::Type) const; +}; + class ArgumentsEditor : public QWidget { Q_OBJECT -- 2.43.0