X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=gui%2Fapitracecall.cpp;h=267dc0980edeaaa7ea02c26de9e981d25e96b6fa;hb=91d875b883cf8db5397a048a14ebbefbc5fdf9c4;hp=c8c2245effe5e1562d40f3ca64b407944cf7a063;hpb=e181b99a776865a5aca43a64cf6afbaa371583ab;p=apitrace diff --git a/gui/apitracecall.cpp b/gui/apitracecall.cpp index c8c2245..267dc09 100644 --- a/gui/apitracecall.cpp +++ b/gui/apitracecall.cpp @@ -105,9 +105,12 @@ apiVariantToString(const QVariant &variant, bool multiLine) return QLatin1String("?"); } - if (variant.userType() == QVariant::Double) { + if (variant.userType() == QMetaType::Float) { return QString::number(variant.toFloat()); } + if (variant.userType() == QVariant::Double) { + return QString::number(variant.toDouble()); + } if (variant.userType() == QVariant::ByteArray) { if (variant.toByteArray().size() < 1024) { int bytes = variant.toByteArray().size(); @@ -171,6 +174,11 @@ void VariantVisitor::visit(trace::Float *node) m_variant = QVariant(node->value); } +void VariantVisitor::visit(trace::Double *node) +{ + m_variant = QVariant(node->value); +} + void VariantVisitor::visit(trace::String *node) { m_variant = QVariant(QString::fromStdString(node->value)); @@ -184,15 +192,13 @@ void VariantVisitor::visit(trace::Enum *e) sig = m_loader->enumSignature(e->sig->id); } if (!sig) { - sig = new ApiTraceEnumSignature( - QString::fromStdString(e->sig->name), - QVariant(e->sig->value)); + sig = new ApiTraceEnumSignature(e->sig); if (m_loader) { m_loader->addEnumSignature(e->sig->id, sig); } } - m_variant = QVariant::fromValue(ApiEnum(sig)); + m_variant = QVariant::fromValue(ApiEnum(sig, e->value)); } void VariantVisitor::visit(trace::Bitmask *bitmask) @@ -221,16 +227,39 @@ void VariantVisitor::visit(trace::Pointer *ptr) m_variant = QVariant::fromValue(ApiPointer(ptr->value)); } +ApiTraceEnumSignature::ApiTraceEnumSignature(const trace::EnumSig *sig) +{ + for (const trace::EnumValue *it = sig->values; + it != sig->values + sig->num_values; ++it) { + QPair pair; + + pair.first = QString::fromStdString(it->name); + pair.second = it->value; + + m_names.append(pair); + } +} + +QString ApiTraceEnumSignature::name(signed long long value) const +{ + for (ValueList::const_iterator it = m_names.begin(); + it != m_names.end(); ++it) { + if (value == it->second) { + return it->first; + } + } + return QString::fromLatin1("%1").arg(value); +} -ApiEnum::ApiEnum(ApiTraceEnumSignature *sig) - : m_sig(sig) +ApiEnum::ApiEnum(ApiTraceEnumSignature *sig, signed long long value) + : m_sig(sig), m_value(value) { } QString ApiEnum::toString() const { if (m_sig) { - return m_sig->name(); + return m_sig->name(m_value); } Q_ASSERT(!"should never happen"); return QString(); @@ -239,7 +268,7 @@ QString ApiEnum::toString() const QVariant ApiEnum::value() const { if (m_sig) { - return m_sig->value(); + return QVariant::fromValue(m_value); } Q_ASSERT(!"should never happen"); return QVariant(); @@ -248,7 +277,7 @@ QVariant ApiEnum::value() const QString ApiEnum::name() const { if (m_sig) { - return m_sig->name(); + return m_sig->name(m_value); } Q_ASSERT(!"should never happen"); return QString(); @@ -649,9 +678,9 @@ ApiTraceCall::ApiTraceCall(ApiTraceFrame *parentFrame, } m_argValues.reserve(call->args.size()); for (int i = 0; i < call->args.size(); ++i) { - if (call->args[i]) { + if (call->args[i].value) { VariantVisitor argVisitor(loader); - call->args[i]->visit(argVisitor); + call->args[i].value->visit(argVisitor); m_argValues.append(argVisitor.variant()); if (m_argValues[i].type() == QVariant::ByteArray) { m_hasBinaryData = true; @@ -662,6 +691,7 @@ ApiTraceCall::ApiTraceCall(ApiTraceFrame *parentFrame, } } m_argValues.squeeze(); + m_flags = call->flags; } ApiTraceCall::~ApiTraceCall() @@ -777,6 +807,11 @@ QVariant ApiTraceCall::returnValue() const return m_returnValue; } +trace::CallFlags ApiTraceCall::flags() const +{ + return m_flags; +} + QUrl ApiTraceCall::helpUrl() const { return m_signature->helpUrl();