X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fapicalldelegate.cpp;h=9ad9f24ad535fe729cb478164b30410727014401;hb=7a9fb5103e052150232b64cb5d99374cda3f1234;hp=c68717580ddc6e5e5d94f3b95eb9fd27b8d6cf45;hpb=8759ae0a429088d4d1e54b6c0c205e8058150245;p=apitrace diff --git a/gui/apicalldelegate.cpp b/gui/apicalldelegate.cpp index c687175..9ad9f24 100644 --- a/gui/apicalldelegate.cpp +++ b/gui/apicalldelegate.cpp @@ -2,6 +2,7 @@ #include "apitracecall.h" #include "apitracemodel.h" +#include "thumbnail.h" #include #include @@ -27,46 +28,47 @@ void ApiCallDelegate::paint(QPainter *painter, Q_ASSERT(index.column() == 0); if (event) { - QPoint offset = QPoint(0, 0); + QPoint offset = option.rect.topLeft(); QStaticText text = event->staticText(); + QSize textSize = text.size().toSize(); //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) { + 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); + painter->drawImage(offset, thumbnail); + offset += QPoint(textSize.height() + thumbnail.width(), option.rect.height()/2 - textSize.height()/2); } } if (event->hasState()) { - QPixmap px = m_stateEmblem.pixmap(option.rect.height(), - option.rect.height()); + QPixmap px = m_stateEmblem.pixmap(textSize.height(), + textSize.height()); painter->drawPixmap(option.rect.topLeft(), px); - offset = QPoint(option.rect.height() + 5, 0); + offset += QPoint(textSize.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); + QPixmap px = m_errorEmblem.pixmap(textSize.height(), + textSize.height()); + painter->drawPixmap(offset, px); + offset += QPoint(textSize.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); + QPixmap px = m_editEmblem.pixmap(textSize.height(), + textSize.height()); + painter->drawPixmap(offset, px); + offset += QPoint(textSize.height() + 5, 0); } } - painter->drawStaticText(option.rect.topLeft() + offset, text); + painter->drawStaticText(offset, text); } else { QStyledItemDelegate::paint(painter, option, index); } @@ -75,8 +77,8 @@ void ApiCallDelegate::paint(QPainter *painter, QSize ApiCallDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { - ApiTraceEvent *event = - index.data(ApiTraceModel::EventRole).value(); + QVariant var = index.data(ApiTraceModel::EventRole); + ApiTraceEvent *event = var.value(); #ifndef __APPLE__ /* XXX: This fails on MacOSX, but seems safe to ignore */ @@ -87,7 +89,21 @@ QSize ApiCallDelegate::sizeHint(const QStyleOptionViewItem &option, QStaticText text = event->staticText(); //text.setTextWidth(option.rect.width()); //qDebug()<<"text size = "<type() == ApiTraceEvent::Frame) { + ApiTraceFrame *frame = static_cast(event); + const QImage & thumbnail = frame->thumbnail(); + if (!thumbnail.isNull()) { + size.rwidth() += thumbnail.width(); + if (size.height() < thumbnail.height()) { + size.setHeight(thumbnail.height()); + } + } + } + + return size; } return QStyledItemDelegate::sizeHint(option, index); }