m_needsSaving(false)
{
m_loader = new TraceLoader();
+
connect(this, SIGNAL(loadTrace(QString)),
m_loader, SLOT(loadTrace(QString)));
connect(this, SIGNAL(requestFrame(ApiTraceFrame*)),
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()));
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"
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:
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
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
qDebug()<<"\tindex is "<<index;
#endif
-
endInsertRows();
emit dataChanged(index, index);
+
+ m_loadingFrames.remove(frame);
}
#include "apitracemodel.moc"
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;