]> git.cworth.org Git - apitrace/commitdiff
Make state lookups with on-demand loading work.
authorZack Rusin <zack@kde.org>
Wed, 7 Sep 2011 05:36:41 +0000 (01:36 -0400)
committerZack Rusin <zack@kde.org>
Wed, 7 Sep 2011 05:36:41 +0000 (01:36 -0400)
gui/apitrace.cpp
gui/apitrace.h
gui/apitracemodel.cpp
gui/apitracemodel.h

index 2eb6ab52a665075752011cb6678c8c0189304c4e..958009b7e383ff6a8b3ccd0984586c4174d52ee2 100644 (file)
@@ -12,6 +12,7 @@ ApiTrace::ApiTrace()
       m_needsSaving(false)
 {
     m_loader = new TraceLoader();
+
     connect(this, SIGNAL(loadTrace(QString)),
             m_loader, SLOT(loadTrace(QString)));
     connect(this, SIGNAL(requestFrame(ApiTraceFrame*)),
@@ -19,7 +20,9 @@ ApiTrace::ApiTrace()
     connect(m_loader, SIGNAL(framesLoaded(const QList<ApiTraceFrame*>)),
             this, SLOT(addFrames(const QList<ApiTraceFrame*>)));
     connect(m_loader, SIGNAL(frameLoaded(ApiTraceFrame*)),
-            this, SIGNAL(frameLoaded(ApiTraceFrame*)));
+            this, SLOT(frameLoadFinished(ApiTraceFrame*)));
+    connect(m_loader, SIGNAL(finishedParsing()),
+            this, SLOT(finishedParsing()));
 
     connect(m_loader, SIGNAL(startedParsing()),
             this, SIGNAL(startedLoadingTrace()));
@@ -303,7 +306,21 @@ bool ApiTrace::hasErrors() const
 void ApiTrace::loadFrame(ApiTraceFrame *frame)
 {
     Q_ASSERT(!frame->loaded());
+    emit beginLoadingFrame(frame, frame->numChildrenToLoad());
     emit requestFrame(frame);
 }
 
+void ApiTrace::finishedParsing()
+{
+    ApiTraceFrame *firstFrame = m_frames[0];
+    if (firstFrame && !firstFrame->loaded()) {
+        loadFrame(firstFrame);
+    }
+}
+
+void ApiTrace::frameLoadFinished(ApiTraceFrame *frame)
+{
+    emit endLoadingFrame(frame);
+}
+
 #include "apitrace.moc"
index 8da0320484a455560c430103885a4b43df298bde..d01e7a0cfd81f3770d4157823eca0de538e7495c 100644 (file)
@@ -71,15 +71,19 @@ signals:
     void changed(ApiTraceCall *call);
     void startedSaving();
     void saved();
-    void frameLoaded(ApiTraceFrame *frame);
 
     void beginAddingFrames(int oldCount, int numAdded);
     void endAddingFrames();
     void callsAdded(int oldCount, int numAdded);
+    void beginLoadingFrame(ApiTraceFrame *frame, int numAdded);
+    void endLoadingFrame(ApiTraceFrame *frame);
 
 private slots:
     void addFrames(const QList<ApiTraceFrame*> &frames);
     void slotSaved();
+    void finishedParsing();
+    void frameLoadFinished(ApiTraceFrame *frame);
+
 private:
     void detectFrames();
 private:
index a510c437118153b2e2da50d5ef683f2160ad5823..8f4892f63e494d5580ecdc361d3b64ccb63b71a6 100644 (file)
@@ -218,8 +218,11 @@ void ApiTraceModel::setApiTrace(ApiTrace *trace)
             this, SLOT(endAddingFrames()));
     connect(m_trace, SIGNAL(changed(ApiTraceCall*)),
             this, SLOT(callChanged(ApiTraceCall*)));
-    connect(m_trace, SIGNAL(frameLoaded(ApiTraceFrame*)),
-            this, SLOT(frameChanged(ApiTraceFrame*)));
+    connect(m_trace, SIGNAL(beginLoadingFrame(ApiTraceFrame*,int)),
+            this, SLOT(beginLoadingFrame(ApiTraceFrame*,int)));
+    connect(m_trace, SIGNAL(endLoadingFrame(ApiTraceFrame*)),
+            this, SLOT(endLoadingFrame(ApiTraceFrame*)));
+
 }
 
 const ApiTrace * ApiTraceModel::apiTrace() const
@@ -339,15 +342,19 @@ void ApiTraceModel::fetchMore(const QModelIndex &parent)
 
             Q_ASSERT(!frame->loaded());
             m_loadingFrames.insert(frame);
-            beginInsertRows(index, 0,
-                            frame->numChildrenToLoad() - 1);
 
             m_trace->loadFrame(frame);
         }
     }
 }
 
-void ApiTraceModel::frameChanged(ApiTraceFrame *frame)
+void ApiTraceModel::beginLoadingFrame(ApiTraceFrame *frame, int numAdded)
+{
+    QModelIndex index = createIndex(frame->number, 0, frame);
+    beginInsertRows(index, 0, numAdded - 1);
+}
+
+void ApiTraceModel::endLoadingFrame(ApiTraceFrame *frame)
 {
     QModelIndex index = createIndex(frame->number, 0, frame);
 #if 0
@@ -358,10 +365,11 @@ void ApiTraceModel::frameChanged(ApiTraceFrame *frame)
     qDebug()<<"\tindex is "<<index;
 #endif
 
-
     endInsertRows();
 
     emit dataChanged(index, index);
+
+    m_loadingFrames.remove(frame);
 }
 
 #include "apitracemodel.moc"
index 3abf248e6a5fcaa9e1f816acbd4dd0094ee62df5..c4c5d6d34a8e114fbda32d0c57ddb5bfab6a1484 100644 (file)
@@ -56,7 +56,8 @@ private slots:
     void beginAddingFrames(int oldCount, int numAdded);
     void endAddingFrames();
     void callChanged(ApiTraceCall *call);
-    void frameChanged(ApiTraceFrame *frame);
+    void beginLoadingFrame(ApiTraceFrame *frame, int numAdded);
+    void endLoadingFrame(ApiTraceFrame *frame);
 
 private:
     ApiTraceEvent *item(const QModelIndex &index) const;