1
mirror of https://invent.kde.org/network/falkon.git synced 2024-11-11 01:22:10 +01:00

[SiteInfo] Use uniform item sizes in list widget.

Also fixed showing the whole item on Windows.
This commit is contained in:
nowrep 2013-02-20 11:46:05 +01:00
parent 9ea89aacc1
commit 134f8f5263
3 changed files with 29 additions and 2 deletions

View File

@ -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<QWidget*>(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);
}

View File

@ -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;
};

View File

@ -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")));