]> git.cworth.org Git - apitrace/blobdiff - gui/apitracemodel.cpp
Lots of various cosmetic changes to the call editing.
[apitrace] / gui / apitracemodel.cpp
index 2b4b6bb2126ae52900e7592c5b397103bda14333..a39a92935dfba6812ab5f13512dce25535b53f1e 100644 (file)
@@ -44,12 +44,12 @@ QVariant ApiTraceModel::data(const QModelIndex &index, int role) const
             ApiTraceCall *call = static_cast<ApiTraceCall*>(itm);
             if (call->state().isEmpty())
                 return QString::fromLatin1("%1)&nbsp;<b>%2</b>")
-                    .arg(call->index)
-                    .arg(call->name);
+                    .arg(call->index())
+                    .arg(call->name());
             else
                 return QString::fromLatin1("%1)&nbsp;<b>%2</b><br/>%3")
-                    .arg(call->index)
-                    .arg(call->name)
+                    .arg(call->index())
+                    .arg(call->name())
                     .arg(stateText);
         } else {
             ApiTraceFrame *frame = static_cast<ApiTraceFrame*>(itm);
@@ -145,9 +145,9 @@ QModelIndex ApiTraceModel::parent(const QModelIndex &index) const
     ApiTraceEvent *event = item(index);
     if (event && event->type() == ApiTraceEvent::Call) {
         ApiTraceCall *call = static_cast<ApiTraceCall*>(event);
-        Q_ASSERT(call->parentFrame);
-        return createIndex(call->parentFrame->number,
-                           0, call->parentFrame);
+        Q_ASSERT(call->parentFrame());
+        return createIndex(call->parentFrame()->number,
+                           0, call->parentFrame());
     }
     return QModelIndex();
 }
@@ -206,6 +206,8 @@ void ApiTraceModel::setApiTrace(ApiTrace *trace)
             this, SLOT(invalidateFrames()));
     connect(m_trace, SIGNAL(framesAdded(int, int)),
             this, SLOT(appendFrames(int, int)));
+    connect(m_trace, SIGNAL(changed(ApiTraceCall*)),
+            this, SLOT(callChanged(ApiTraceCall*)));
 }
 
 const ApiTrace * ApiTraceModel::apiTrace() const
@@ -240,7 +242,7 @@ void ApiTraceModel::stateSetOnEvent(ApiTraceEvent *event)
 
     if (event->type() == ApiTraceEvent::Call) {
         ApiTraceCall *call = static_cast<ApiTraceCall*>(event);
-        ApiTraceFrame *frame = call->parentFrame;
+        ApiTraceFrame *frame = call->parentFrame();
         int row = frame->calls.indexOf(call);
         QModelIndex index = createIndex(row, 0, call);
         emit dataChanged(index, index);
@@ -256,21 +258,44 @@ void ApiTraceModel::stateSetOnEvent(ApiTraceEvent *event)
 QModelIndex ApiTraceModel::callIndex(int callNum) const
 {
     ApiTraceCall *call = m_trace->callWithIndex(callNum);
+    return indexForCall(call);
+}
 
+QModelIndex ApiTraceModel::indexForCall(ApiTraceCall *call) const
+{
     if (!call) {
-        qDebug()<<"couldn't find call at "<<callNum;
         return QModelIndex();
     }
 
-    ApiTraceFrame *frame = call->parentFrame;
+    ApiTraceFrame *frame = call->parentFrame();
     Q_ASSERT(frame);
 
     int row = frame->calls.indexOf(call);
     if (row < 0) {
-        qDebug() << "Couldn't find call num "<<callNum<<" inside parent!";
+        qDebug() << "Couldn't find call num "<<call->index()<<" inside parent!";
         return QModelIndex();
     }
     return createIndex(row, 0, call);
 }
 
+void ApiTraceModel::callChanged(ApiTraceCall *call)
+{
+    ApiTrace *trace = call->parentFrame()->parentTrace();
+
+    Q_ASSERT(trace);
+    trace->save();
+
+#if 0
+    qDebug()<<"Call changed = "<<call->edited();
+    qDebug()<<"\ttrace edited = "<<trace->edited();
+    qDebug()<<"\ttrace file = "<<trace->fileName();
+    qDebug()<<"\ttrace needs saving = "<<trace->needsSaving();
+#endif
+
+    ApiTraceFrame *frame = call->parentFrame();
+    int row = frame->calls.indexOf(call);
+    QModelIndex index = createIndex(row, 0, call);
+    emit dataChanged(index, index);
+}
+
 #include "apitracemodel.moc"