]> git.cworth.org Git - apitrace/commitdiff
Display shaders in the shader editor.
authorZack Rusin <zack@kde.org>
Fri, 15 Apr 2011 20:20:45 +0000 (16:20 -0400)
committerZack Rusin <zack@kde.org>
Fri, 15 Apr 2011 20:20:45 +0000 (16:20 -0400)
gui/argumentseditor.cpp
gui/argumentseditor.h

index bc5563c84e008e16a9c3be03d0cb985cfc53bbd5..f050ec374e4b08412ac105bcb75215277289d437 100644 (file)
@@ -1,5 +1,7 @@
 #include "argumentseditor.h"
 
+#include "apitracecall.h"
+
 #include <QDebug>
 #include <QDoubleSpinBox>
 #include <QItemEditorFactory>
@@ -8,8 +10,6 @@
 #include <limits.h>
 #include <float.h>
 
-#include "apitracecall.h"
-
 
 static bool
 isVariantEditable(const QVariant &var)
@@ -27,6 +27,98 @@ isVariantEditable(const QVariant &var)
     }
 }
 
+
+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(8);
+        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);
+}
+
 ArgumentsEditor::ArgumentsEditor(QWidget *parent)
     : QWidget(parent),
       m_model(new QStandardItemModel()),
@@ -56,6 +148,11 @@ void ArgumentsEditor::init()
 {
     m_ui.setupUi(this);
 
+    connect(m_ui.selectStringCB, SIGNAL(currentIndexChanged(int)),
+            SLOT(currentSourceChanged(int)));
+    connect(m_ui.glslEdit, SIGNAL(textChanged()),
+            SLOT(sourceChanged()));
+
     m_ui.argsTree->setModel(m_model);
     QItemEditorFactory *factory =
         new ArgumentsItemEditorFactory();
@@ -92,18 +189,15 @@ void ArgumentsEditor::setupCall()
         if (val.canConvert<ApiArray>()) {
             ApiArray array = val.value<ApiArray>();
             QList<QVariant> vals = array.values();
-            QVariant firstVal = vals.value(0);
 
-            QVariant x = val;
-            x.convert(QVariant::String);
-            qDebug()<<"aaaaa = "<<x;
+            QVariant firstVal = vals.value(0);
             if (firstVal.userType() == QVariant::String) {
                 m_ui.argsTabWidget->addTab(
                     m_ui.shaderTab, argName);
                 setupShaderEditor(vals);
                 delete nameItem;
                 continue;
-            } else {
+            } else if (isVariantEditable(firstVal)) {
                 for (int i = 0; i < vals.count(); ++i) {
                     QList<QStandardItem*> row;
 
@@ -117,9 +211,12 @@ void ArgumentsEditor::setupCall()
                     row.append(idx);
                     row.append(col);
                     nameItem->appendRow(row);
-                };
+                }
+            } else {
+                qDebug()<<"\tUnsupported array = "<<firstVal;
+                delete nameItem;
+                continue;
             }
-            qDebug()<<"\tarray first = "<<vals[0];
         } else  if (val.canConvert<ApiPointer>()) {
             ApiPointer ptr = val.value<ApiPointer>();
             QStandardItem *item = new QStandardItem();
@@ -178,97 +275,30 @@ 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(8);
-        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";
+    m_ui.selectStringCB->clear();
+    m_ui.glslEdit->clear();
+    for (int i = 0; i < sources.count(); ++i) {
+        m_ui.selectStringCB->addItem(
+            tr("Shader string: %1").arg(i),
+            sources[i]);
     }
+    m_ui.selectStringCB->setCurrentIndex(0);
 }
 
-BooleanComboBox::BooleanComboBox(QWidget *parent)
-    : QComboBox(parent)
+void ArgumentsEditor::currentSourceChanged(int idx)
 {
-    addItem(tr("False"));
-    addItem(tr("True"));
+    QVariant source = m_ui.selectStringCB->itemData(idx);
+    QString str = source.toString();
+    m_ui.glslEdit->setPlainText(source.toString());
+    m_ui.lengthLabel->setText(
+        tr("%1").arg(str.length()));
 }
 
-void BooleanComboBox::setValue(bool value)
+void ArgumentsEditor::sourceChanged()
 {
-    setCurrentIndex(value ? 1 : 0);
-}
-
-bool BooleanComboBox::value() const
-{
-    return (currentIndex() == 1);
+    QString str = m_ui.glslEdit->toPlainText();
+    m_ui.lengthLabel->setText(
+        tr("%1").arg(str.length()));
 }
 
 #include "argumentseditor.moc"
index fdec85725ca73ade8fdc7867be442b22dd2a852f..aa8452df3126b1bfd51e0bd644ed290ee8dceaba 100644 (file)
@@ -38,9 +38,9 @@ public:
     void setCall(ApiTraceCall *call);
     ApiTraceCall *call() const;
 
-signals:
-    void argumentsEdited(ApiTraceCall *call);
-
+private slots:
+    void currentSourceChanged(int idx);
+    void sourceChanged();
 private:
     void init();
     void setupCall();