QStaticText ApiTraceCall::staticText() const
{
- if (!m_staticText.text().isEmpty())
- return m_staticText;
+ if (m_staticText && !m_staticText->text().isEmpty())
+ return *m_staticText;
- QString richText = QString::fromLatin1("<span style=\"font-weight:bold\">%1</span>(").arg(m_name);
+ QString richText = QString::fromLatin1(
+ "<span style=\"font-weight:bold\">%1</span>(").arg(m_name);
for (int i = 0; i < m_argNames.count(); ++i) {
richText += QLatin1String("<span style=\"color:#0000ff\">");
QString argText = apiVariantToString(m_argValues[i]);
richText += QLatin1String("</span>");
}
- m_staticText.setText(richText);
+ if (!m_staticText)
+ m_staticText = new QStaticText(richText);
QTextOption opt;
opt.setWrapMode(QTextOption::NoWrap);
- m_staticText.setTextOption(opt);
- m_staticText.prepare();
+ m_staticText->setTextOption(opt);
+ m_staticText->prepare();
- return m_staticText;
+ return *m_staticText;
}
QString ApiTraceCall::toHtml() const
QStaticText ApiTraceFrame::staticText() const
{
- if (!m_staticText.text().isEmpty())
- return m_staticText;
+ if (m_staticText && !m_staticText->text().isEmpty())
+ return *m_staticText;
QString richText =
QString::fromLatin1("<span style=\"font-weight:bold\">Frame %1</span>").arg(number);
- m_staticText.setText(richText);
+ if (!m_staticText)
+ m_staticText = new QStaticText(richText);
+
QTextOption opt;
opt.setWrapMode(QTextOption::NoWrap);
- m_staticText.setTextOption(opt);
- m_staticText.prepare();
+ m_staticText->setTextOption(opt);
+ m_staticText->prepare();
- return m_staticText;
+ return *m_staticText;
}
int ApiTraceCall::numChildren() const
}
ApiTraceEvent::ApiTraceEvent()
- : m_type(ApiTraceEvent::None)
+ : m_type(ApiTraceEvent::None),
+ m_staticText(0)
{
}
ApiTraceEvent::ApiTraceEvent(Type t)
- : m_type(t)
+ : m_type(t),
+ m_staticText(0)
{
}
VariantVisitor argVisitor;
call->args[i]->visit(argVisitor);
m_argValues += argVisitor.variant();
+
+ //XXX
+ //FIXME: this is a nasty hack. Trace::Blob's can't
+ // delete the contents in the destructor because
+ // the data is being used by other calls. we should
+ // use something like Boost's shared_ptr or
+ // Qt's QSharedPointer to handle it.
+ Trace::Blob *b = dynamic_cast<Trace::Blob*>(call->args[i]);
+ if (b && b->blob()) {
+ char *buf = (char*)b->blob();
+ delete [] buf;
+ }
+
}
}
return m_parentFrame;
}
+ApiTraceEvent::~ApiTraceEvent()
+{
+ delete m_staticText;
+}
+
public:
ApiTraceEvent();
ApiTraceEvent(Type t);
+ virtual ~ApiTraceEvent();
Type type() const { return m_type; }
protected:
Type m_type;
ApiTraceState m_state;
+
+ mutable QStaticText *m_staticText;
};
Q_DECLARE_METATYPE(ApiTraceEvent*);
mutable QString m_richText;
mutable QString m_filterText;
- mutable QStaticText m_staticText;
mutable bool m_hasBinaryData;
mutable int m_binaryDataIndex;
};
int numChildren() const;
QStaticText staticText() const;
-private:
- mutable QStaticText m_staticText;
};
Q_DECLARE_METATYPE(ApiTraceFrame*);