2 * SPDX-FileCopyrightText: 2012 Peter Penz <peter.penz19@gmail.com>
4 * SPDX-License-Identifier: GPL-2.0-or-later
7 #include "kstandarditemlistview.h"
9 #include "kstandarditemlistwidget.h"
11 #include <KIconLoader>
13 KStandardItemListView::KStandardItemListView(QGraphicsWidget
*parent
)
14 : KItemListView(parent
)
15 , m_itemLayout(DetailsLayout
)
18 setScrollOrientation(Qt::Vertical
);
19 setVisibleRoles({"text"});
20 setAlternateBackgrounds(true);
23 KStandardItemListView::~KStandardItemListView()
27 void KStandardItemListView::setItemLayout(ItemLayout layout
)
29 if (m_itemLayout
== layout
) {
35 const ItemLayout previous
= m_itemLayout
;
36 m_itemLayout
= layout
;
38 // keep the leading padding option unchanged here
39 setHighlightEntireRow(itemLayoutHighlightEntireRow(layout
));
40 setSupportsItemExpanding(itemLayoutSupportsItemExpanding(layout
));
41 setScrollOrientation(layout
== CompactLayout
? Qt::Horizontal
: Qt::Vertical
);
43 onItemLayoutChanged(layout
, previous
);
48 KStandardItemListView::ItemLayout
KStandardItemListView::itemLayout() const
53 KItemListWidgetCreatorBase
*KStandardItemListView::defaultWidgetCreator() const
55 return new KItemListWidgetCreator
<KStandardItemListWidget
>();
58 KItemListGroupHeaderCreatorBase
*KStandardItemListView::defaultGroupHeaderCreator() const
60 return new KItemListGroupHeaderCreator
<KStandardItemListGroupHeader
>();
63 void KStandardItemListView::initializeItemListWidget(KItemListWidget
*item
)
65 KStandardItemListWidget
*standardItemListWidget
= qobject_cast
<KStandardItemListWidget
*>(item
);
66 Q_ASSERT(standardItemListWidget
);
68 switch (itemLayout()) {
70 standardItemListWidget
->setLayout(KStandardItemListWidget::IconsLayout
);
73 standardItemListWidget
->setLayout(KStandardItemListWidget::CompactLayout
);
76 standardItemListWidget
->setLayout(KStandardItemListWidget::DetailsLayout
);
83 standardItemListWidget
->setHighlightEntireRow(highlightEntireRow());
84 standardItemListWidget
->setSupportsItemExpanding(supportsItemExpanding());
87 bool KStandardItemListView::itemSizeHintUpdateRequired(const QSet
<QByteArray
> &changedRoles
) const
89 // The only thing that can modify the item's size hint is the amount of space
90 // needed to display the text for the visible roles.
91 // Even if the icons have a different size they are always aligned within
92 // the area defined by KItemStyleOption.iconSize and hence result in no
93 // change of the item-size.
94 const auto roles
= visibleRoles();
95 for (const QByteArray
&role
: roles
) {
96 if (changedRoles
.contains(role
)) {
103 bool KStandardItemListView::itemLayoutHighlightEntireRow(ItemLayout layout
) const
105 return layout
== DetailsLayout
;
108 bool KStandardItemListView::itemLayoutSupportsItemExpanding(ItemLayout layout
) const
110 return layout
== DetailsLayout
;
113 void KStandardItemListView::onItemLayoutChanged(ItemLayout current
, ItemLayout previous
)
117 updateLayoutOfVisibleItems();
120 void KStandardItemListView::onScrollOrientationChanged(Qt::Orientation current
, Qt::Orientation previous
)
124 updateLayoutOfVisibleItems();
127 void KStandardItemListView::onSupportsItemExpandingChanged(bool supportsExpanding
)
129 Q_UNUSED(supportsExpanding
)
130 updateLayoutOfVisibleItems();
133 void KStandardItemListView::polishEvent()
135 switch (m_itemLayout
) {
137 applyDefaultStyleOption(style()->pixelMetric(QStyle::PM_LargeIconSize
), 2, 4, 8);
140 applyDefaultStyleOption(style()->pixelMetric(QStyle::PM_SmallIconSize
), 2, 8, 0);
143 applyDefaultStyleOption(style()->pixelMetric(QStyle::PM_SmallIconSize
), 2, 0, 0);
150 QGraphicsWidget::polishEvent();
153 void KStandardItemListView::applyDefaultStyleOption(int iconSize
, int padding
, int horizontalMargin
, int verticalMargin
)
155 KItemListStyleOption option
= styleOption();
157 if (option
.iconSize
< 0) {
158 option
.iconSize
= iconSize
;
160 if (option
.padding
< 0) {
161 option
.padding
= padding
;
163 if (option
.horizontalMargin
< 0) {
164 option
.horizontalMargin
= horizontalMargin
;
166 if (option
.verticalMargin
< 0) {
167 option
.verticalMargin
= verticalMargin
;
170 setStyleOption(option
);
173 void KStandardItemListView::updateLayoutOfVisibleItems()
176 const auto widgets
= visibleItemListWidgets();
177 for (KItemListWidget
*widget
: widgets
) {
178 initializeItemListWidget(widget
);
183 #include "moc_kstandarditemlistview.cpp"