Q_ASSERT(index.column() == 0);
if (event) {
- QPoint offset;
+ QPoint offset = QPoint(0, 0);
QStaticText text = event->staticText();
//text.setTextWidth(option.rect.width());
//QStyledItemDelegate::paint(painter, option, index);
QStyle *style = QApplication::style();
style->drawControl(QStyle::CE_ItemViewItem, &option, painter, 0);
+
+ // draw thumbnail of frame
+ if(event->type() == ApiTraceEvent::Frame) {
+ ApiTraceFrame *frame = static_cast<ApiTraceFrame*>(event);
+ QImage thumbnail = frame->thumbnail();
+ if (!thumbnail.isNull()) {
+ painter->drawImage(option.rect.topLeft() + offset, thumbnail);
+ offset += QPoint(option.rect.height() + 16, 0);
+ }
+ }
+
if (event->hasState()) {
QPixmap px = m_stateEmblem.pixmap(option.rect.height(),
option.rect.height());
return m_loadingFrames.contains(frame);
}
+void ApiTrace::bindThumbnailsToFrames(const QList<QImage> &thumbnails)
+{
+ QList<ApiTraceFrame *> frames = m_frames;
+
+ QList<QImage>::const_iterator thumbnail = thumbnails.begin();
+
+ foreach (ApiTraceFrame *frame, frames) {
+ if (thumbnail != thumbnails.end()) {
+ frame->setThumbnail(*thumbnail);
+
+ ++thumbnail;
+
+ emit changed(frame);
+ }
+ }
+}
+
#include "apitrace.moc"
void findCallIndex(int index);
void setCallError(const ApiTraceError &error);
+ void bindThumbnailsToFrames(const QList<QImage> &thumbnails);
signals:
void loadTrace(const QString &name);
void finishedLoadingTrace();
void invalidated();
void framesInvalidated();
- void changed(ApiTraceCall *call);
+ void changed(ApiTraceEvent *event);
void startedSaving();
void saved();
void findResult(const ApiTrace::SearchRequest &request,
return m_lastCallIndex;
}
}
+
+void ApiTraceFrame::setThumbnail(QImage thumbnail)
+{
+ m_thumbnail = thumbnail;
+}
+
+QImage ApiTraceFrame::thumbnail() const
+{
+ return m_thumbnail;
+}
void setLastCallIndex(unsigned index);
unsigned lastCallIndex() const;
+
+ void setThumbnail(QImage thumbnail);
+ QImage thumbnail() const;
+
private:
ApiTrace *m_parentTrace;
quint64 m_binaryDataSize;
bool m_loaded;
unsigned m_callsToLoad;
unsigned m_lastCallIndex;
+ QImage m_thumbnail;
};
Q_DECLARE_METATYPE(ApiTraceFrame*);
this, SLOT(beginAddingFrames(int, int)));
connect(m_trace, SIGNAL(endAddingFrames()),
this, SLOT(endAddingFrames()));
- connect(m_trace, SIGNAL(changed(ApiTraceCall*)),
- this, SLOT(callChanged(ApiTraceCall*)));
+ connect(m_trace, SIGNAL(changed(ApiTraceEvent*)),
+ this, SLOT(changed(ApiTraceEvent*)));
connect(m_trace, SIGNAL(beginLoadingFrame(ApiTraceFrame*,int)),
this, SLOT(beginLoadingFrame(ApiTraceFrame*,int)));
connect(m_trace, SIGNAL(endLoadingFrame(ApiTraceFrame*)),
return createIndex(row, 0, call);
}
+void ApiTraceModel::changed(ApiTraceEvent *event)
+{
+ if (event->type() == ApiTraceEvent::Call) {
+ callChanged(static_cast<ApiTraceCall*>(event));
+ } else if (event->type() == ApiTraceEvent::Frame) {
+ frameChanged(static_cast<ApiTraceFrame*>(event));
+ }
+}
+
void ApiTraceModel::callChanged(ApiTraceCall *call)
{
ApiTrace *trace = call->parentFrame()->parentTrace();
emit dataChanged(index, index);
}
+void ApiTraceModel::frameChanged(ApiTraceFrame *frame)
+{
+ const QList<ApiTraceFrame*> frames = m_trace->frames();
+ int row = frames.indexOf(frame);
+ QModelIndex index = createIndex(row, 0, frame);
+ emit dataChanged(index, index);
+}
+
void ApiTraceModel::endAddingFrames()
{
endInsertRows();
void invalidateFrames();
void beginAddingFrames(int oldCount, int numAdded);
void endAddingFrames();
+ void changed(ApiTraceEvent *event);
void callChanged(ApiTraceCall *call);
+ void frameChanged(ApiTraceFrame *frame);
void beginLoadingFrame(ApiTraceFrame *frame, int numAdded);
void endLoadingFrame(ApiTraceFrame *frame);
this, SLOT(slotStartedSaving()));
connect(m_trace, SIGNAL(saved()),
this, SLOT(slotSaved()));
- connect(m_trace, SIGNAL(changed(ApiTraceCall*)),
- this, SLOT(slotTraceChanged(ApiTraceCall*)));
+ connect(m_trace, SIGNAL(changed(ApiTraceEvent*)),
+ this, SLOT(slotTraceChanged(ApiTraceEvent*)));
connect(m_trace, SIGNAL(findResult(ApiTrace::SearchRequest,ApiTrace::SearchResult,ApiTraceCall*)),
this, SLOT(slotSearchResult(ApiTrace::SearchRequest,ApiTrace::SearchResult,ApiTraceCall*)));
connect(m_trace, SIGNAL(foundFrameStart(ApiTraceFrame*)),
void MainWindow::replayThumbnailsFound(const QList<QImage> &thumbnails)
{
m_thumbnails = thumbnails;
+
+ m_trace->bindThumbnailsToFrames(thumbnails);
}
void MainWindow::slotGoTo()
return NULL;
}
-void MainWindow::slotTraceChanged(ApiTraceCall *call)
+void MainWindow::slotTraceChanged(ApiTraceEvent *event)
{
- Q_ASSERT(call);
- if (call == m_selectedEvent) {
- m_ui.detailsWebView->setHtml(call->toHtml());
+ Q_ASSERT(event);
+ if (event == m_selectedEvent) {
+ if (event->type() == ApiTraceEvent::Call) {
+ ApiTraceCall *call = static_cast<ApiTraceCall*>(event);
+ m_ui.detailsWebView->setHtml(call->toHtml());
+ }
}
}
void slotSaved();
void slotGoFrameStart();
void slotGoFrameEnd();
- void slotTraceChanged(ApiTraceCall *call);
+ void slotTraceChanged(ApiTraceEvent *event);
void slotRetraceErrors(const QList<ApiTraceError> &errors);
void slotErrorSelected(QTreeWidgetItem *current);
void slotSearchResult(const ApiTrace::SearchRequest &request,