X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;ds=sidebyside;f=gui%2Fapitracecall.cpp;h=907e10aa08294fc878549708a92e074fc9eb2681;hb=e7d7a643767ab46fdc15b4d7f430c38064f8e9ce;hp=57d2d86eb23c48bc37f75bdbbc69c9ab7a5dc197;hpb=eb64451efcd8100d02ec89ff2ae6ea2c78c7645b;p=apitrace diff --git a/gui/apitracecall.cpp b/gui/apitracecall.cpp index 57d2d86..907e10a 100644 --- a/gui/apitracecall.cpp +++ b/gui/apitracecall.cpp @@ -227,6 +227,12 @@ void VariantVisitor::visit(trace::Pointer *ptr) m_variant = QVariant::fromValue(ApiPointer(ptr->value)); } +void VariantVisitor::visit(trace::Repr *repr) +{ + /* TODO: Preserve both the human and machine value */ + repr->humanValue->visit(*this); +} + ApiTraceEnumSignature::ApiTraceEnumSignature(const trace::EnumSig *sig) { for (const trace::EnumValue *it = sig->values; @@ -336,7 +342,6 @@ void ApiBitmask::init(const trace::Bitmask *bitmask) m_value = bitmask->value; for (const trace::BitmaskFlag *it = bitmask->sig->flags; it != bitmask->sig->flags + bitmask->sig->num_flags; ++it) { - assert(it->value); QPair pair; pair.first = QString::fromStdString(it->name); @@ -351,10 +356,10 @@ QString ApiBitmask::toString() const QString str; unsigned long long value = m_value; bool first = true; - for (Signature::const_iterator it = m_sig.begin(); - value != 0 && it != m_sig.end(); ++it) { - Q_ASSERT(it->second); - if ((value & it->second) == it->second) { + for (Signature::const_iterator it = m_sig.begin(); it != m_sig.end(); ++it) { + Q_ASSERT(it->second || first); + if ((it->second && (value & it->second) == it->second) || + (!it->second && value == 0)) { if (!first) { str += QLatin1String(" | "); } @@ -362,6 +367,9 @@ QString ApiBitmask::toString() const value &= ~it->second; first = false; } + if (value == 0) { + break; + } } if (value || first) { if (!first) { @@ -678,9 +686,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; @@ -1197,3 +1205,13 @@ unsigned ApiTraceFrame::lastCallIndex() const return m_lastCallIndex; } } + +void ApiTraceFrame::setThumbnail(const QImage & thumbnail) +{ + m_thumbnail = thumbnail; +} + +const QImage & ApiTraceFrame::thumbnail() const +{ + return m_thumbnail; +}