void ApiTrace::callError(ApiTraceCall *call)
{
+ Q_ASSERT(call);
+
+ if (call->hasError())
+ m_errors.insert(call);
+ else
+ m_errors.remove(call);
+
emit changed(call);
}
+bool ApiTrace::hasErrors() const
+{
+ return !m_errors.isEmpty();
+}
+
#include "apitrace.moc"
bool isSaving() const;
+ bool hasErrors() const;
+
public slots:
void setFileName(const QString &name);
void setFrameMarker(FrameMarker marker);
QSet<ApiTraceCall*> m_editedCalls;
bool m_needsSaving;
+
+ QSet<ApiTraceCall*> m_errors;
};
#endif
" color: #0000ff;\n"
"}\n"
".error {\n"
+ " border: 1px solid rgb(255,0,0);\n"
" margin: 10px;\n"
- " padding: 0;\n"
- " color: red;\n"
- " background: #6fb2e5;\n"
- " box-shadow: 0 1px 5px #0061aa, inset 0 10px 20px #b6f9ff;\n"
- " -o-box-shadow: 0 1px 5px #0061aa, inset 0 10px 20px #b6f9ff;\n"
- " -webkit-box-shadow: 0 1px 5px #0061aa, inset 0 10px 20px #b6f9ff;\n"
- " -moz-box-shadow: 0 1px 5px #0061aa, inset 0 10px 20px #b6f9ff;\n"
+ " padding: 1;\n"
+ " border-radius: 4px;\n"
+ // also looks great but qtwebkit doesn't support it
+ //" background: #6fb2e5;\n"
+ //" box-shadow: 0 1px 5px #0061aa, inset 0 10px 20px #b6f9ff;\n"
+ //" -o-box-shadow: 0 1px 5px #0061aa, inset 0 10px 20px #b6f9ff;\n"
+ //" -webkit-box-shadow: 0 1px 5px #0061aa, inset 0 10px 20px #b6f9ff;\n"
+ //" -moz-box-shadow: 0 1px 5px #0061aa, inset 0 10px 20px #b6f9ff;\n"
"}\n";
ApiPointer::ApiPointer(unsigned long long val)
}
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\">"
if (m_error != msg) {
ApiTrace *trace = parentTrace();
m_error = msg;
+ m_richText = QString();
if (trace)
trace->callError(this);
}
{
ApiTrace *trace = call->parentFrame()->parentTrace();
-#if 1
+#if 0
qDebug()<<"Call changed = "<<call->edited();
qDebug()<<"\ttrace edited = "<<trace->edited();
qDebug()<<"\ttrace file = "<<trace->fileName();
this, SLOT(slotStartedSaving()));
connect(m_trace, SIGNAL(saved()),
this, SLOT(slotSaved()));
+ connect(m_trace, SIGNAL(changed(ApiTraceCall*)),
+ this, SLOT(slotTraceChanged(ApiTraceCall*)));
connect(m_retracer, SIGNAL(finished(const QString&)),
this, SLOT(replayFinished(const QString&)));
void MainWindow::replayStateFound(const ApiTraceState &state)
{
m_stateEvent->setState(state);
- if (m_stateEvent->type() == ApiTraceEvent::Call) {
- ApiTraceCall *call = static_cast<ApiTraceCall*>(m_stateEvent);
- call->setError(tr("Some wonky error."));
- }
m_model->stateSetOnEvent(m_stateEvent);
if (m_selectedEvent == m_stateEvent) {
fillStateForFrame();
return NULL;
}
+void MainWindow::slotTraceChanged(ApiTraceCall *call)
+{
+ Q_ASSERT(call);
+ if (call == m_selectedEvent) {
+ m_ui.detailsWebView->setHtml(call->toHtml());
+ }
+}
+
#include "mainwindow.moc"
#include <QProcess>
class ApiTrace;
+class ApiTraceCall;
class ApiTraceEvent;
class ApiTraceFilter;
class ApiTraceFrame;
void slotSaved();
void slotGoFrameStart();
void slotGoFrameEnd();
+ void slotTraceChanged(ApiTraceCall *call);
private:
void initObjects();