From f682e19bee94eb69a5cfc8b2db17d7f1ebb10c2b Mon Sep 17 00:00:00 2001 From: Zack Rusin Date: Wed, 7 Sep 2011 01:36:41 -0400 Subject: [PATCH] Make state lookups with on-demand loading work. --- gui/apitrace.cpp | 19 ++++++++++++++++++- gui/apitrace.h | 6 +++++- gui/apitracemodel.cpp | 20 ++++++++++++++------ gui/apitracemodel.h | 3 ++- 4 files changed, 39 insertions(+), 9 deletions(-) diff --git a/gui/apitrace.cpp b/gui/apitrace.cpp index 2eb6ab5..958009b 100644 --- a/gui/apitrace.cpp +++ b/gui/apitrace.cpp @@ -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)), this, SLOT(addFrames(const QList))); 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" diff --git a/gui/apitrace.h b/gui/apitrace.h index 8da0320..d01e7a0 100644 --- a/gui/apitrace.h +++ b/gui/apitrace.h @@ -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 &frames); void slotSaved(); + void finishedParsing(); + void frameLoadFinished(ApiTraceFrame *frame); + private: void detectFrames(); private: diff --git a/gui/apitracemodel.cpp b/gui/apitracemodel.cpp index a510c43..8f4892f 100644 --- a/gui/apitracemodel.cpp +++ b/gui/apitracemodel.cpp @@ -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 "<