X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fargumentseditor.cpp;h=1ee519ea444d672598d414f7dc12f559c4914862;hb=f2ed6b2161d58319f786a3a4fa4b3155f30c32e8;hp=c6280ed3e816225d85c1dfc042fa62c68c5cdc09;hpb=661842de4c97a5d1660b7148022fdbd6fd473827;p=apitrace diff --git a/gui/argumentseditor.cpp b/gui/argumentseditor.cpp index c6280ed..1ee519e 100644 --- a/gui/argumentseditor.cpp +++ b/gui/argumentseditor.cpp @@ -14,6 +14,14 @@ static bool isVariantEditable(const QVariant &var) { + if (var.canConvert()) { + ApiArray array = var.value(); + QVector vals = array.values(); + if (vals.isEmpty()) + return false; + else + return isVariantEditable(vals.first()); + } switch (var.userType()) { case QVariant::Bool: case QVariant::Int: @@ -34,7 +42,7 @@ isVariantStringArray(const QVariant &var) return false; ApiArray array = var.value(); - QList origValues = array.values(); + QVector origValues = array.values(); if (origValues.isEmpty() || origValues.first().userType() != QVariant::String) return false; @@ -143,6 +151,7 @@ ArgumentsEditor::ArgumentsEditor(QWidget *parent) ArgumentsEditor::~ArgumentsEditor() { + delete m_model; } void ArgumentsEditor::setCall(ApiTraceCall *call) @@ -201,7 +210,7 @@ void ArgumentsEditor::setupCall() if (val.canConvert()) { ApiArray array = val.value(); - QList vals = array.values(); + QVector vals = array.values(); QVariant firstVal = vals.value(0); if (firstVal.userType() == QVariant::String) { @@ -239,6 +248,15 @@ void ArgumentsEditor::setupCall() item->setIcon(icon); item->setToolTip(tr("Argument is read-only")); topRow.append(item); + } else if (val.canConvert()) { + ApiEnum en = val.value(); + QStandardItem *item = new QStandardItem(); + item->setFlags(item->flags() ^ Qt::ItemIsEditable); + item->setText(en.toString()); + QIcon icon(":/resources/emblem-locked.png"); + item->setIcon(icon); + item->setToolTip(tr("Argument is read-only")); + topRow.append(item); } else if (val.canConvert()) { ApiBitmask mask = val.value(); QStandardItem *item = new QStandardItem(); @@ -286,7 +304,7 @@ void ArgumentsEditor::setupCall() } } -void ArgumentsEditor::setupShaderEditor(const QList &sources) +void ArgumentsEditor::setupShaderEditor(const QVector &sources) { m_ui.selectStringCB->clear(); m_ui.glslEdit->clear(); @@ -321,18 +339,27 @@ void ArgumentsEditor::sourceChanged() void ArgumentsEditor::accept() { QStringList argNames = m_call->argNames(); - QList originalValues = m_call->arguments(); + QVector originalValues = m_call->arguments(); + QVector newValues; + bool changed = false; for (int i = 0; i < argNames.count(); ++i) { - bool changed = false; + bool valChanged = false; QString argName = argNames[i]; QVariant argValue = originalValues[i]; - QVariant editorValue = valueForName(argName, argValue, &changed); + QVariant editorValue = valueForName(argName, argValue, &valChanged); + + newValues.append(editorValue); +#if 0 qDebug()<<"Arg = "<