From 134f8f526389df4db221e07a4488bb3ca04fc231 Mon Sep 17 00:00:00 2001 From: nowrep Date: Wed, 20 Feb 2013 11:46:05 +0100 Subject: [PATCH] [SiteInfo] Use uniform item sizes in list widget. Also fixed showing the whole item on Windows. --- src/lib/tools/listitemdelegate.cpp | 26 ++++++++++++++++++++++++-- src/lib/tools/listitemdelegate.h | 4 ++++ src/lib/webview/siteinfo.cpp | 1 + 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/lib/tools/listitemdelegate.cpp b/src/lib/tools/listitemdelegate.cpp index c3be8df66..1edda15cb 100644 --- a/src/lib/tools/listitemdelegate.cpp +++ b/src/lib/tools/listitemdelegate.cpp @@ -24,7 +24,9 @@ ListItemDelegate::ListItemDelegate(int iconSize, QWidget* parent) : QStyledItemDelegate(parent) , m_iconSize(iconSize) , m_updateParentHeight(false) + , m_uniformItemSizes(false) , m_itemHeight(0) + , m_itemWidth(0) , m_padding(0) { } @@ -34,6 +36,11 @@ void ListItemDelegate::setUpdateParentHeight(bool update) m_updateParentHeight = update; } +void ListItemDelegate::setUniformItemSizes(bool uniform) +{ + m_uniformItemSizes = uniform; +} + int ListItemDelegate::itemHeight() const { return m_itemHeight; @@ -91,10 +98,25 @@ QSize ListItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QMode // Update height of parent widget QWidget* p = qobject_cast(parent()); if (p && m_updateParentHeight) { - p->setFixedHeight(m_itemHeight); + p->setFixedHeight(m_itemHeight +#ifdef Q_OS_WIN + + 4 // Vertical padding 2px on Windows +#endif + ); } } int width = 2 * m_padding + option.fontMetrics.width(index.data(Qt::DisplayRole).toString()); - return QSize(width > (m_iconSize + 2 * m_padding) ? width : m_iconSize + 2 * m_padding, m_itemHeight); + width = width > (m_iconSize + 2 * m_padding) ? width : m_iconSize + 2 * m_padding; + + if (m_uniformItemSizes) { + if (width > m_itemWidth) { + m_itemWidth = width; + } + else { + width = m_itemWidth; + } + } + + return QSize(width, m_itemHeight); } diff --git a/src/lib/tools/listitemdelegate.h b/src/lib/tools/listitemdelegate.h index e3a777010..d95a14456 100644 --- a/src/lib/tools/listitemdelegate.h +++ b/src/lib/tools/listitemdelegate.h @@ -28,6 +28,8 @@ public: explicit ListItemDelegate(int iconSize, QWidget* parent); void setUpdateParentHeight(bool update); + void setUniformItemSizes(bool uniform); + int itemHeight() const; void paint(QPainter* painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; @@ -36,8 +38,10 @@ public: private: int m_iconSize; bool m_updateParentHeight; + bool m_uniformItemSizes; mutable int m_itemHeight; + mutable int m_itemWidth; mutable int m_padding; }; diff --git a/src/lib/webview/siteinfo.cpp b/src/lib/webview/siteinfo.cpp index c9210aecd..cc5302e08 100644 --- a/src/lib/webview/siteinfo.cpp +++ b/src/lib/webview/siteinfo.cpp @@ -57,6 +57,7 @@ SiteInfo::SiteInfo(WebView* view, QWidget* parent) ListItemDelegate* delegate = new ListItemDelegate(24, ui->listWidget); delegate->setUpdateParentHeight(true); + delegate->setUniformItemSizes(true); ui->listWidget->setItemDelegate(delegate); ui->listWidget->item(0)->setIcon(QIcon::fromTheme("document-properties", QIcon(":/icons/preferences/document-properties.png")));