X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fargumentseditor.cpp;h=9ce0f848253f515a265e118d2a107970d56f7037;hb=b7eb152364aa276bb4af7536bcc41f06cdce4bd5;hp=125e12d9f788c8c4dcdb7d8bf39925297ab16e73;hpb=d54055e8535893286fe7dd90e92095bcbfe3cd5c;p=apitrace diff --git a/gui/argumentseditor.cpp b/gui/argumentseditor.cpp index 125e12d..9ce0f84 100644 --- a/gui/argumentseditor.cpp +++ b/gui/argumentseditor.cpp @@ -14,12 +14,21 @@ 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: 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(); - QList origValues = array.values(); + QVector 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 array = val.value(); - QList vals = array.values(); + QVector 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 &sources) +void ArgumentsEditor::setupShaderEditor(const QVector &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 originalValues = m_call->arguments(); - QList newValues; + QVector originalValues = m_call->arguments(); + QVector 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 = "<