From 474611ee60d0ba4d734584f275d3191ef541359f Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Wed, 25 Mar 2009 02:27:16 -0400 Subject: Update ClassModel --- sigtools/ClassModel.cpp | 54 +++++++++++++++++++++++++++++++++++++++++-------- sigtools/ClassModel.h | 1 + 2 files changed, 47 insertions(+), 8 deletions(-) (limited to 'sigtools') diff --git a/sigtools/ClassModel.cpp b/sigtools/ClassModel.cpp index 3bab9b35..5c138abb 100644 --- a/sigtools/ClassModel.cpp +++ b/sigtools/ClassModel.cpp @@ -21,8 +21,15 @@ // Sigtools includes #include "PluginModel.h" +// KDE includes +#include +#include +#include + // Qt includes #include +#include +#include using namespace Sigtools; @@ -44,20 +51,51 @@ Qt::ItemFlags ClassModel::flags() const return Qt::ItemIsEnabled; } -void ClassModel::paint(QPainter* painter, const QStyleOptionViewItem& option) const -{ -} - -QSize ClassModel::sizeHint(const QStyleOptionViewItem& option) const -{ -} - BaseModel* ClassModel::childItem(const int row) { + Q_UNUSED(row) return NULL; } int ClassModel::findChild(BaseModel* model) const { + Q_UNUSED(model) return -1; } + +void ClassModel::redraw(const int width) const +{ + QFont regFont = KGlobalSettings::generalFont(); + QFontMetrics regMetrics(regFont); + QFont smallFont = KGlobalSettings::smallestReadableFont(); + smallFont.setItalic(true); + QFontMetrics smallMetrics(smallFont); + + QSize nameSize = regMetrics.size(0, m_name); + + int maxWidth = qMax(nameSize.width() + nameSize.width() + horizSpacing, width); + + QSize descSize = smallMetrics.boundingRect(QRect(0, 0, maxWidth, 0), Qt::TextWordWrap, m_description).size(); + + int maxHeight = nameSize.height() + descSize.height() + vertSpacing; + + m_pixmap = QPixmap(maxWidth + 2 * borderWidth, maxHeight + 2 * borderWidth); + m_pixmap.fill(KStatefulBrush(KColorScheme::View, KColorScheme::NormalBackground).brush(QPalette::Normal).color()); + QPainter painter(&m_pixmap); + + int h = borderWidth; + int w = borderWidth; + + painter.drawPixmap(w, h, KIcon(m_icon).pixmap(nameSize.height(), nameSize.height())); + + w += nameSize.height(); + w += horizSpacing; + + painter.drawText(QRect(QPoint(w, h), QSize(maxWidth - w, nameSize.height())), Qt::AlignBottom | Qt::AlignLeft, m_name); + + w = borderWidth; + h += vertSpacing; + + painter.setFont(smallFont); + painter.drawText(QRect(QPoint(w, h), descSize), Qt::AlignBottom | Qt::AlignLeft | Qt::TextWordWrap, m_description); +} diff --git a/sigtools/ClassModel.h b/sigtools/ClassModel.h index d5d0a65c..23a6c3d2 100644 --- a/sigtools/ClassModel.h +++ b/sigtools/ClassModel.h @@ -46,6 +46,7 @@ class SIGTOOLS_NO_EXPORT ClassModel : public BaseModel BaseModel* childItem(const int row); protected: int findChild(BaseModel* model) const; + void redraw(const int width) const; const QIcon& m_icon; const QString& m_name; -- cgit