From 18eade5a1b8820633210e4127129a8b14450e13f Mon Sep 17 00:00:00 2001 From: Zack Rusin Date: Sat, 26 Mar 2011 14:23:35 -0400 Subject: [PATCH] some color in the list --- gui/CMakeLists.txt | 1 + gui/apicalldelegate.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ gui/apicalldelegate.h | 21 +++++++++++++++++++++ gui/apitracecall.cpp | 39 +++++++++++++++++++++++++++++++++++++++ gui/apitracecall.h | 7 +++++++ gui/apitracemodel.cpp | 20 +------------------- gui/mainwindow.cpp | 2 ++ 7 files changed, 111 insertions(+), 19 deletions(-) create mode 100644 gui/apicalldelegate.cpp create mode 100644 gui/apicalldelegate.h diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index 3a6ef75..3ffb147 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -1,4 +1,5 @@ set(qapitrace_SRCS + apicalldelegate.cpp apitracecall.cpp apitracefilter.cpp apitracemodel.cpp diff --git a/gui/apicalldelegate.cpp b/gui/apicalldelegate.cpp new file mode 100644 index 0000000..43c96e9 --- /dev/null +++ b/gui/apicalldelegate.cpp @@ -0,0 +1,40 @@ +#include "apicalldelegate.h" + +#include "apitracecall.h" + +#include +#include +#include + +ApiCallDelegate::ApiCallDelegate(QWidget *parent) + : QStyledItemDelegate(parent) +{ +} + +void ApiCallDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, + const QModelIndex &index) const +{ + ApiTraceCall *call = static_cast(index.internalPointer()); + if (call) { + QStaticText text = call->staticText(); + //text.setTextWidth(option.rect.width()); + painter->drawStaticText(option.rect.topLeft(), text); + } else{ + QStyledItemDelegate::paint(painter, option, index); + } +} + +QSize ApiCallDelegate::sizeHint(const QStyleOptionViewItem &option, + const QModelIndex &index) const +{ + ApiTraceCall *call = static_cast(index.internalPointer()); + if (call) { + QStaticText text = call->staticText(); + //text.setTextWidth(option.rect.width()); + return text.size().toSize(); + } + return QStyledItemDelegate::sizeHint(option, index); +} + + +#include "apicalldelegate.moc" diff --git a/gui/apicalldelegate.h b/gui/apicalldelegate.h new file mode 100644 index 0000000..0329839 --- /dev/null +++ b/gui/apicalldelegate.h @@ -0,0 +1,21 @@ +#ifndef APICALLDELEGATE_H +#define APICALLDELEGATE_H + + + +#include + +class ApiCallDelegate : public QStyledItemDelegate +{ + Q_OBJECT + +public: + ApiCallDelegate(QWidget *parent = 0); + + void paint(QPainter *painter, const QStyleOptionViewItem &option, + const QModelIndex &index) const; + QSize sizeHint(const QStyleOptionViewItem &option, + const QModelIndex &index) const; +}; + +#endif diff --git a/gui/apitracecall.cpp b/gui/apitracecall.cpp index 679ee5c..b964739 100644 --- a/gui/apitracecall.cpp +++ b/gui/apitracecall.cpp @@ -224,3 +224,42 @@ void ApiArray::init(const Trace::Array *arr) m_array.append(vis.variant()); } } + +QStaticText ApiTraceCall::staticText() const +{ + if (!m_richText.isEmpty()) + return m_staticText; + + m_richText = QString::fromLatin1("%1(").arg(name); + for (int i = 0; i < argNames.count(); ++i) { + m_richText += argNames[i]; + m_richText += QString::fromLatin1(" = "); + m_richText += QLatin1String(""); + m_richText += apiVariantToString(argValues[i]); + m_richText += QLatin1String(""); + if (i < argNames.count() - 1) + m_richText += QString::fromLatin1(", "); + } + m_richText += QLatin1String(")"); + + if (returnValue.isValid()) { + m_richText += QLatin1String(" = "); + m_richText += QLatin1String(""); + m_richText += apiVariantToString(returnValue); + m_richText += QLatin1String(""); + } + + m_staticText.setText(m_richText); + QTextOption opt; + opt.setWrapMode(QTextOption::NoWrap); + m_staticText.setTextOption(opt); + m_staticText.prepare(); + + return m_staticText; +} + +QString ApiTraceCall::richText() const +{ + staticText(); + return m_richText; +} diff --git a/gui/apitracecall.h b/gui/apitracecall.h index 8dffb27..1c03408 100644 --- a/gui/apitracecall.h +++ b/gui/apitracecall.h @@ -1,6 +1,7 @@ #ifndef APITRACECALL_H #define APITRACECALL_H +#include #include #include @@ -104,6 +105,12 @@ public: QStringList argNames; QVariantList argValues; QVariant returnValue; + + QString richText() const; + QStaticText staticText() const; +private: + mutable QString m_richText; + mutable QStaticText m_staticText; }; #endif diff --git a/gui/apitracemodel.cpp b/gui/apitracemodel.cpp index f635294..c2a5e96 100644 --- a/gui/apitracemodel.cpp +++ b/gui/apitracemodel.cpp @@ -38,25 +38,7 @@ QVariant ApiTraceModel::data(const QModelIndex &index, int role) const switch (index.column()) { case 0: { - QString str; - str += QString::number(index.row()); - str += QLatin1String(") "); - str += item->name; - str += QLatin1String("("); - for (int i = 0; i < item->argNames.count(); ++i) { - str += item->argNames[i]; - str += QString::fromLatin1(" = "); - str += apiVariantToString(item->argValues[i]); - if (i < item->argNames.count() - 1) - str += QString::fromLatin1(", "); - } - str += QLatin1String(")"); - - if (item->returnValue.isValid()) { - str += QLatin1String(" = "); - str += apiVariantToString(item->returnValue); - } - return str; + return item->richText(); } default: return QVariant(); diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index 05dbb63..a2fc380 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -1,5 +1,6 @@ #include "mainwindow.h" +#include "apicalldelegate.h" #include "apitracemodel.h" #include "apitracefilter.h" @@ -18,6 +19,7 @@ MainWindow::MainWindow() m_proxyModel = new ApiTraceFilter(); m_proxyModel->setSourceModel(m_model); m_ui.callView->setModel(m_model); + m_ui.callView->setItemDelegate(new ApiCallDelegate); for (int column = 0; column < m_model->columnCount(); ++column) m_ui.callView->resizeColumnToContents(column); -- 2.43.0