]> git.cworth.org Git - apitrace/commitdiff
more error handling changes.
authorZack Rusin <zack@kde.org>
Tue, 19 Apr 2011 05:59:20 +0000 (01:59 -0400)
committerZack Rusin <zack@kde.org>
Tue, 19 Apr 2011 05:59:20 +0000 (01:59 -0400)
gui/apitrace.cpp
gui/apitrace.h
gui/apitracecall.cpp
gui/apitracemodel.cpp
gui/mainwindow.cpp
gui/mainwindow.h

index 6fa994a5d43d1ff3fdda929368bada341e43bdf2..012ce6ce573f492f763503c93014cc7a0092a5dc 100644 (file)
@@ -262,7 +262,19 @@ bool ApiTrace::isSaving() const
 
 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"
index a493fd2eb1e23beea9ef62b68c9b234747130887..d0b76fa6b5dc0c1894730a9e86b4df7ffcf8bc4d 100644 (file)
@@ -52,6 +52,8 @@ public:
 
     bool isSaving() const;
 
+    bool hasErrors() const;
+
 public slots:
     void setFileName(const QString &name);
     void setFrameMarker(FrameMarker marker);
@@ -89,6 +91,8 @@ private:
     QSet<ApiTraceCall*> m_editedCalls;
 
     bool m_needsSaving;
+
+    QSet<ApiTraceCall*> m_errors;
 };
 
 #endif
index bac3d73762ce1575902e3f4ce351045c3a6f0aa9..2d41e25a4425f972b56d6f0daafabd8c694d5863 100644 (file)
@@ -30,14 +30,16 @@ const char * const styleSheet =
     "    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)
@@ -387,6 +389,14 @@ QString ApiTraceCall::toHtml() const
     }
     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\">"
@@ -814,6 +824,7 @@ void ApiTraceCall::setError(const QString &msg)
     if (m_error != msg) {
         ApiTrace *trace = parentTrace();
         m_error = msg;
+        m_richText = QString();
         if (trace)
             trace->callError(this);
     }
index 70d292adaa04d5af549e98a1aeffe641360a5adc..951d6ac085c006dc9eff305e9f8b34e00020c66c 100644 (file)
@@ -282,7 +282,7 @@ void ApiTraceModel::callChanged(ApiTraceCall *call)
 {
     ApiTrace *trace = call->parentFrame()->parentTrace();
 
-#if 1
+#if 0
     qDebug()<<"Call changed = "<<call->edited();
     qDebug()<<"\ttrace edited = "<<trace->edited();
     qDebug()<<"\ttrace file = "<<trace->fileName();
index 1af5af03120eb850e3e365840b9c80e1876ddc63..e89f9f5aec81daaeb049ab623be0477a94e60ffe 100644 (file)
@@ -645,6 +645,8 @@ void MainWindow::initConnections()
             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&)));
@@ -727,10 +729,6 @@ void MainWindow::initConnections()
 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();
@@ -1004,4 +1002,12 @@ ApiTraceFrame * MainWindow::currentFrame() const
     return NULL;
 }
 
+void MainWindow::slotTraceChanged(ApiTraceCall *call)
+{
+    Q_ASSERT(call);
+    if (call == m_selectedEvent) {
+        m_ui.detailsWebView->setHtml(call->toHtml());
+    }
+}
+
 #include "mainwindow.moc"
index b16dbb4de1a1dd130b2307c82fa3198c97f33343..a08ead25b5c6675fc0da2ec8f3010db8d755c085 100644 (file)
@@ -7,6 +7,7 @@
 #include <QProcess>
 
 class ApiTrace;
+class ApiTraceCall;
 class ApiTraceEvent;
 class ApiTraceFilter;
 class ApiTraceFrame;
@@ -64,6 +65,7 @@ private slots:
     void slotSaved();
     void slotGoFrameStart();
     void slotGoFrameEnd();
+    void slotTraceChanged(ApiTraceCall *call);
 
 private:
     void initObjects();