]> git.cworth.org Git - apitrace/blobdiff - gui/argumentseditor.cpp
Add hyperlinks for non-ARB extensions too.
[apitrace] / gui / argumentseditor.cpp
index 125e12d9f788c8c4dcdb7d8bf39925297ab16e73..9ce0f848253f515a265e118d2a107970d56f7037 100644 (file)
 static bool
 isVariantEditable(const QVariant &var)
 {
+    if (var.canConvert<ApiArray>()) {
+        ApiArray array = var.value<ApiArray>();
+        QVector<QVariant> vals = array.values();
+        if (vals.isEmpty())
+            return false;
+        else
+            return isVariantEditable(vals.first());
+    }
     switch (var.userType()) {
     case QVariant::Bool:
     case QVariant::Int:
     case QVariant::UInt:
     case QVariant::LongLong:
     case QVariant::ULongLong:
+    case QMetaType::Float:
     case QVariant::Double:
         return true;
     default:
@@ -34,7 +43,7 @@ isVariantStringArray(const QVariant &var)
         return false;
 
     ApiArray array = var.value<ApiArray>();
-    QList<QVariant> origValues = array.values();
+    QVector<QVariant> origValues = array.values();
     if (origValues.isEmpty() ||
         origValues.first().userType() != QVariant::String)
         return false;
@@ -47,7 +56,7 @@ ArgumentsItemEditorFactory::ArgumentsItemEditorFactory()
 {
 }
 
-QWidget * ArgumentsItemEditorFactory::createEditor(QVariant::Type type,
+QWidget * ArgumentsItemEditorFactory::createEditor(QMetaType::Type type,
                                                    QWidget *parent) const
 {
     switch (type) {
@@ -82,6 +91,14 @@ QWidget * ArgumentsItemEditorFactory::createEditor(QVariant::Type type,
     }
     case QVariant::Pixmap:
         return new QLabel(parent);
+    case QMetaType::Float: {
+        QDoubleSpinBox *sb = new QDoubleSpinBox(parent);
+        sb->setFrame(false);
+        sb->setMinimum(-FLT_MAX);
+        sb->setMaximum(FLT_MAX);
+        sb->setDecimals(8);
+        return sb;
+    }
     case QVariant::Double: {
         QDoubleSpinBox *sb = new QDoubleSpinBox(parent);
         sb->setFrame(false);
@@ -97,7 +114,7 @@ QWidget * ArgumentsItemEditorFactory::createEditor(QVariant::Type type,
 }
 
 QByteArray
-ArgumentsItemEditorFactory::valuePropertyName(QVariant::Type type) const
+ArgumentsItemEditorFactory::valuePropertyName(QMetaType::Type type) const
 {
     switch (type) {
     case QVariant::Bool:
@@ -106,6 +123,7 @@ ArgumentsItemEditorFactory::valuePropertyName(QVariant::Type type) const
     case QVariant::Int:
     case QVariant::LongLong:
     case QVariant::ULongLong:
+    case QMetaType::Float:
     case QVariant::Double:
         return "value";
 #if 0
@@ -143,6 +161,7 @@ ArgumentsEditor::ArgumentsEditor(QWidget *parent)
 
 ArgumentsEditor::~ArgumentsEditor()
 {
+    delete m_model;
 }
 
 void ArgumentsEditor::setCall(ApiTraceCall *call)
@@ -201,7 +220,7 @@ void ArgumentsEditor::setupCall()
 
         if (val.canConvert<ApiArray>()) {
             ApiArray array = val.value<ApiArray>();
-            QList<QVariant> vals = array.values();
+            QVector<QVariant> vals = array.values();
 
             QVariant firstVal = vals.value(0);
             if (firstVal.userType() == QVariant::String) {
@@ -295,7 +314,7 @@ void ArgumentsEditor::setupCall()
     }
 }
 
-void ArgumentsEditor::setupShaderEditor(const QList<QVariant> &sources)
+void ArgumentsEditor::setupShaderEditor(const QVector<QVariant> &sources)
 {
     m_ui.selectStringCB->clear();
     m_ui.glslEdit->clear();
@@ -330,19 +349,22 @@ void ArgumentsEditor::sourceChanged()
 void ArgumentsEditor::accept()
 {
     QStringList argNames = m_call->argNames();
-    QList<QVariant> originalValues = m_call->arguments();
-    QList<QVariant> newValues;
+    QVector<QVariant> originalValues = m_call->arguments();
+    QVector<QVariant> newValues;
     bool changed = false;
     for (int i = 0; i < argNames.count(); ++i) {
         bool valChanged = false;
         QString argName = argNames[i];
         QVariant argValue = originalValues[i];
         QVariant editorValue = valueForName(argName, argValue, &valChanged);
+
         newValues.append(editorValue);
+#if 0
         qDebug()<<"Arg = "<<argName;
         qDebug()<<"\toriginal = "<<argValue;
         qDebug()<<"\teditor   = "<<editorValue;
         qDebug()<<"\tchanged  = "<<valChanged;
+#endif
         if (valChanged)
             changed = true;
     }
@@ -365,6 +387,10 @@ QVariant ArgumentsEditor::valueForName(const QString &name,
         return arrayFromEditor(array, changed);
     }
 
+    if (!isVariantEditable(originalValue)) {
+        return originalValue;
+    }
+
     for (int topRow = 0; topRow < m_model->rowCount(); ++topRow) {
         QModelIndex nameIdx = m_model->index(topRow, 0, QModelIndex());
         QString argName = nameIdx.data().toString();
@@ -389,14 +415,14 @@ QVariant ArgumentsEditor::arrayFromIndex(const QModelIndex &parentIndex,
                                          const ApiArray &origArray,
                                          bool *changed) const
 {
-    QList<QVariant> origValues = origArray.values();
+    QVector<QVariant> origValues = origArray.values();
 
     *changed = false;
 
     if (origValues.isEmpty())
         return QVariant::fromValue(ApiArray());
 
-    QList<QVariant> lst;
+    QVector<QVariant> lst;
     for (int i = 0; i < origValues.count(); ++i) {
         QModelIndex valIdx = m_model->index(i, 1, parentIndex);
         QVariant var = valIdx.data();
@@ -412,8 +438,8 @@ QVariant ArgumentsEditor::arrayFromIndex(const QModelIndex &parentIndex,
 QVariant ArgumentsEditor::arrayFromEditor(const ApiArray &origArray,
                                           bool *changed) const
 {
-    QList<QVariant> vals;
-    QList<QVariant> origValues = origArray.values();
+    QVector<QVariant> vals;
+    QVector<QVariant> origValues = origArray.values();
 
     Q_ASSERT(isVariantStringArray(QVariant::fromValue(origArray)));
     *changed = false;