+ if (!m_richText.isEmpty())
+ return m_richText;
+
+ m_richText = QLatin1String("<div class=\"call\">");
+
+ QUrl helpUrl = m_signature->helpUrl();
+ if (helpUrl.isEmpty()) {
+ m_richText += QString::fromLatin1(
+ "%1) <span class=\"callName\">%2</span>(")
+ .arg(m_index)
+ .arg(m_signature->name());
+ } else {
+ m_richText += QString::fromLatin1(
+ "%1) <span class=\"callName\"><a href=\"%2\">%3</a></span>(")
+ .arg(m_index)
+ .arg(helpUrl.toString())
+ .arg(m_signature->name());
+ }
+
+ QVector<QVariant> argValues = arguments();
+ QStringList argNames = m_signature->argNames();
+ for (int i = 0; i < argNames.count(); ++i) {
+ m_richText +=
+ QLatin1String("<span class=\"arg-name\">") +
+ argNames[i] +
+ QLatin1String("</span>") +
+ QLatin1Literal(" = ") +
+ QLatin1Literal("<span class=\"arg-value\">") +
+ apiVariantToString(argValues[i], true) +
+ QLatin1Literal("</span>");
+ if (i < argNames.count() - 1)
+ m_richText += QLatin1String(", ");
+ }
+ m_richText += QLatin1String(")");
+
+ if (m_returnValue.isValid()) {
+ m_richText +=
+ QLatin1String(" = ") +
+ QLatin1String("<span style=\"color:#0000ff\">") +
+ apiVariantToString(m_returnValue, true) +
+ QLatin1String("</span>");
+ }
+ m_richText += QLatin1String("</div>");
+
+ if (hasError()) {
+ QString errorStr =
+ QString::fromLatin1(
+ "<div class=\"error\">%1</div>")
+ .arg(m_error);
+ m_richText += errorStr;
+ }
+
+ m_richText =
+ QString::fromLatin1(
+ "<html><head><style type=\"text/css\" media=\"all\">"
+ "%1</style></head><body>%2</body></html>")
+ .arg(styleSheet)
+ .arg(m_richText);
+ m_richText.squeeze();
+
+ //qDebug()<<m_richText;
+ return m_richText;
+}
+
+QString ApiTraceCall::searchText() const
+{
+ if (!m_searchText.isEmpty())
+ return m_searchText;
+
+ QVector<QVariant> argValues = arguments();
+ m_searchText = m_signature->name() + QLatin1Literal("(");
+ QStringList argNames = m_signature->argNames();
+ for (int i = 0; i < argNames.count(); ++i) {
+ m_searchText += argNames[i] +
+ QLatin1Literal(" = ") +
+ apiVariantToString(argValues[i]);
+ if (i < argNames.count() - 1)
+ m_searchText += QLatin1String(", ");
+ }
+ m_searchText += QLatin1String(")");
+
+ if (m_returnValue.isValid()) {
+ m_searchText += QLatin1Literal(" = ") +
+ apiVariantToString(m_returnValue);
+ }
+ m_searchText.squeeze();
+ return m_searchText;
+}
+
+int ApiTraceCall::numChildren() const
+{
+ return 0;
+}
+
+bool ApiTraceCall::contains(const QString &str,
+ Qt::CaseSensitivity sensitivity) const
+{
+ QString txt = searchText();
+ return txt.contains(str, sensitivity);
+}
+
+
+ApiTraceFrame::ApiTraceFrame(ApiTrace *parentTrace)
+ : ApiTraceEvent(ApiTraceEvent::Frame),
+ m_parentTrace(parentTrace),
+ m_binaryDataSize(0),
+ m_loaded(false),
+ m_callsToLoad(0),
+ m_lastCallIndex(0)
+{
+}
+
+ApiTraceFrame::~ApiTraceFrame()
+{
+ qDeleteAll(m_calls);
+}
+
+QStaticText ApiTraceFrame::staticText() const
+{
+ if (m_staticText && !m_staticText->text().isEmpty())
+ return *m_staticText;
+
+ QString richText = QObject::tr(
+ "<span style=\"font-weight:bold\">Frame %1</span>"
+ " "
+ "<span style=\"font-style:italic;font-size:small;font-weight:lighter;\"> "
+ "(%2 calls)</span>")
+ .arg(number)
+ .arg(m_loaded ? m_calls.count() : m_callsToLoad);
+
+ //mark the frame if it uploads more than a meg a frame
+ if (m_binaryDataSize > (1024*1024)) {
+ richText =
+ QObject::tr(
+ "%1"
+ "<span style=\"font-style:italic;\">"
+ " (%2MB)</span>")
+ .arg(richText)
+ .arg(double(m_binaryDataSize / (1024.*1024.)), 0, 'g', 2);
+ }
+
+ if (!m_staticText)
+ m_staticText = new QStaticText(richText);
+
+ QTextOption opt;
+ opt.setWrapMode(QTextOption::NoWrap);
+ m_staticText->setTextOption(opt);
+ m_staticText->prepare();
+
+ return *m_staticText;
+}
+
+int ApiTraceFrame::numChildren() const
+{
+ return m_calls.count();
+}
+
+ApiTrace * ApiTraceFrame::parentTrace() const
+{
+ return m_parentTrace;