X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fapicalldelegate.cpp;h=c68717580ddc6e5e5d94f3b95eb9fd27b8d6cf45;hb=6ea8dee938bdb475811657e123af4cc2f1abe991;hp=a681c7549008b84fab16385831c7cfcdb4e8ab8e;hpb=96130aca85f0d828cae3da84dc9a7e258cbeb22a;p=apitrace diff --git a/gui/apicalldelegate.cpp b/gui/apicalldelegate.cpp index a681c75..c687175 100644 --- a/gui/apicalldelegate.cpp +++ b/gui/apicalldelegate.cpp @@ -1,27 +1,73 @@ #include "apicalldelegate.h" #include "apitracecall.h" +#include "apitracemodel.h" +#include #include #include #include #include ApiCallDelegate::ApiCallDelegate(QWidget *parent) - : QStyledItemDelegate(parent) + : QStyledItemDelegate(parent), + m_stateEmblem(":/resources/dialog-information.png"), + m_editEmblem(":/resources/document-edit.png"), + m_errorEmblem(":/resources/script-error.png") { } -void ApiCallDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, +void ApiCallDelegate::paint(QPainter *painter, + const QStyleOptionViewItem &option, const QModelIndex &index) const { - ApiTraceCall *call = index.data().value(); - if (call) { - QStaticText text = call->staticText(); + QVariant var = index.data(ApiTraceModel::EventRole); + ApiTraceEvent *event = var.value(); + + Q_ASSERT(index.column() == 0); + + if (event) { + QPoint offset = QPoint(0, 0); + QStaticText text = event->staticText(); //text.setTextWidth(option.rect.width()); - QStyledItemDelegate::paint(painter, option, index); - painter->drawStaticText(option.rect.topLeft(), text); - } else{ + //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(event); + const 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()); + painter->drawPixmap(option.rect.topLeft(), px); + offset = QPoint(option.rect.height() + 5, 0); + } + if (event->type() == ApiTraceEvent::Call) { + ApiTraceCall *call = static_cast(event); + if (call->hasError()) { + QPixmap px = m_errorEmblem.pixmap(option.rect.height(), + option.rect.height()); + painter->drawPixmap(option.rect.topLeft() + offset, px); + offset += QPoint(option.rect.height() + 5, 0); + } + if (call->edited()) { + QPixmap px = m_editEmblem.pixmap(option.rect.height(), + option.rect.height()); + painter->drawPixmap(option.rect.topLeft() + offset, px); + offset += QPoint(option.rect.height() + 5, 0); + } + } + + painter->drawStaticText(option.rect.topLeft() + offset, text); + } else { QStyledItemDelegate::paint(painter, option, index); } } @@ -29,10 +75,18 @@ void ApiCallDelegate::paint(QPainter *painter, const QStyleOptionViewItem &optio QSize ApiCallDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { - ApiTraceCall *call = index.data().value(); - if (call) { - QStaticText text = call->staticText(); + ApiTraceEvent *event = + index.data(ApiTraceModel::EventRole).value(); + +#ifndef __APPLE__ + /* XXX: This fails on MacOSX, but seems safe to ignore */ + Q_ASSERT(index.column() == 0); +#endif + + if (event) { + QStaticText text = event->staticText(); //text.setTextWidth(option.rect.width()); + //qDebug()<<"text size = "<