]> git.cworth.org Git - apitrace/commitdiff
Custom editor for the arguments.
authorZack Rusin <zack@kde.org>
Fri, 15 Apr 2011 06:00:28 +0000 (02:00 -0400)
committerZack Rusin <zack@kde.org>
Fri, 15 Apr 2011 06:00:28 +0000 (02:00 -0400)
because we want to edit longlong's and we don't want to edit strings.
they're too fragile right now.

gui/argumentseditor.cpp
gui/argumentseditor.h

index 8f2b85c44aebe8e829a528c670a082258ae47c9b..7e0974a70aaf61630af63e0db5120ae2b15dbd8a 100644 (file)
@@ -1,7 +1,12 @@
 #include "argumentseditor.h"
 
 #include <QDebug>
+#include <QDoubleSpinBox>
 #include <QItemEditorFactory>
+#include <QSpinBox>
+
+#include <limits.h>
+#include <float.h>
 
 #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<ApiBitmaskEditor>();
-
-    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<QVariant> &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"
index bcaefcc9012786050995c71c847201e7676e6c1a..fdec85725ca73ade8fdc7867be442b22dd2a852f 100644 (file)
@@ -2,11 +2,31 @@
 #define ARGUMENTSEDITOR_H
 
 #include "ui_argumentseditor.h"
+#include <QComboBox>
+#include <QItemEditorFactory>
 #include <QStandardItemModel>
 #include <QWidget>
 
 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