X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fapitracecall.cpp;h=267dc0980edeaaa7ea02c26de9e981d25e96b6fa;hb=b491d2958e2a8331f0f144de89626c284ae96121;hp=d0eb542c3583371e2d8610d0b46eb95787c5a5fd;hpb=ea4b99ff0dfe5933c8f7b50e1fd59ec3c077c876;p=apitrace diff --git a/gui/apitracecall.cpp b/gui/apitracecall.cpp index d0eb542..267dc09 100644 --- a/gui/apitracecall.cpp +++ b/gui/apitracecall.cpp @@ -192,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) @@ -229,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; -ApiEnum::ApiEnum(ApiTraceEnumSignature *sig) - : m_sig(sig) + 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, 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(); @@ -247,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(); @@ -256,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(); @@ -657,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; @@ -670,6 +691,7 @@ ApiTraceCall::ApiTraceCall(ApiTraceFrame *parentFrame, } } m_argValues.squeeze(); + m_flags = call->flags; } ApiTraceCall::~ApiTraceCall() @@ -785,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();