1 /***************************************************************************
2 * Copyright (C) 2012 by Peter Penz <peter.penz19@gmail.com> *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by *
6 * the Free Software Foundation; either version 2 of the License, or *
7 * (at your option) any later version. *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
18 ***************************************************************************/
20 #ifndef KSTANDARDITEMLISTWIDGET_H
21 #define KSTANDARDITEMLISTWIDGET_H
23 #include <libdolphin_export.h>
25 #include <kitemviews/kitemlistwidget.h>
29 #include <QStaticText>
31 class KItemListRoleEditor
;
32 class KItemListStyleOption
;
35 class LIBDOLPHINPRIVATE_EXPORT KStandardItemListWidgetInformant
: public KItemListWidgetInformant
38 KStandardItemListWidgetInformant();
39 virtual ~KStandardItemListWidgetInformant();
41 virtual void calculateItemSizeHints(QVector
<QSizeF
>& sizeHints
, const KItemListView
* view
) const;
43 virtual qreal
preferredRoleColumnWidth(const QByteArray
& role
,
45 const KItemListView
* view
) const;
48 * @return The value of the "text" role. The default implementation returns
49 * view->model()->data(index)["text"]. If a derived class can
50 * prevent the (possibly expensive) construction of the
51 * QHash<QByteArray, QVariant> returned by KItemModelBase::data(int),
52 * it can reimplement this function.
54 virtual QString
itemText(int index
, const KItemListView
* view
) const;
57 * @return String representation of the role \a role. The representation of
58 * a role might depend on other roles, so the values of all roles
59 * are passed as parameter.
61 virtual QString
roleText(const QByteArray
& role
,
62 const QHash
<QByteArray
, QVariant
>& values
) const;
64 void calculateIconsLayoutItemSizeHints(QVector
<QSizeF
>& sizeHints
, const KItemListView
* view
) const;
65 void calculateCompactLayoutItemSizeHints(QVector
<QSizeF
>& sizeHints
, const KItemListView
* view
) const;
66 void calculateDetailsLayoutItemSizeHints(QVector
<QSizeF
>& sizeHints
, const KItemListView
* view
) const;
68 friend class KStandardItemListWidget
; // Accesses roleText()
72 * @brief Itemlist widget implementation for KStandardItemView and KStandardItemModel.
74 class LIBDOLPHINPRIVATE_EXPORT KStandardItemListWidget
: public KItemListWidget
86 KStandardItemListWidget(KItemListWidgetInformant
* informant
, QGraphicsItem
* parent
);
87 virtual ~KStandardItemListWidget();
89 void setLayout(Layout layout
);
90 Layout
layout() const;
92 void setSupportsItemExpanding(bool supportsItemExpanding
);
93 bool supportsItemExpanding() const;
95 virtual void paint(QPainter
* painter
, const QStyleOptionGraphicsItem
* option
, QWidget
* widget
= 0);
97 virtual QRectF
iconRect() const;
98 virtual QRectF
textRect() const;
99 virtual QRectF
textFocusRect() const;
100 virtual QRectF
expansionToggleRect() const;
101 virtual QRectF
selectionToggleRect() const;
102 virtual QPixmap
createDragPixmap(const QStyleOptionGraphicsItem
* option
, QWidget
* widget
= 0);
104 static KItemListWidgetInformant
* createInformant();
108 * Invalidates the cache which results in calling KStandardItemListWidget::refreshCache() as
109 * soon as the item need to gets repainted.
111 void invalidateCache();
114 * Is called if the cache got invalidated by KStandardItemListWidget::invalidateCache().
115 * The default implementation is empty.
117 virtual void refreshCache();
120 * @return True if the give role should be right aligned when showing it inside a column.
121 * Per default false is returned.
123 virtual bool isRoleRightAligned(const QByteArray
& role
) const;
126 * @return True if the item should be visually marked as hidden item. Per default
129 virtual bool isHidden() const;
132 * @return A font based on baseFont which is customized according to the data shown in the widget.
134 virtual QFont
customizedFont(const QFont
& baseFont
) const;
136 virtual QPalette::ColorRole
normalTextColorRole() const;
138 void setTextColor(const QColor
& color
);
139 QColor
textColor() const;
141 void setOverlay(const QPixmap
& overlay
);
142 QPixmap
overlay() const;
145 * @see KStandardItemListWidgetInformant::roleText().
147 QString
roleText(const QByteArray
& role
, const QHash
<QByteArray
, QVariant
>& values
) const;
151 * Select the text without MIME-type extension
152 * This is file-item-specific and should be moved
153 * into KFileItemListWidget.
155 * Inherited classes can define, if the MIME-type extension
156 * should be selected or not.
158 * @return Selection length (with or without MIME-type extension)
160 virtual int selectionLength(const QString
& text
) const;
162 virtual void dataChanged(const QHash
<QByteArray
, QVariant
>& current
, const QSet
<QByteArray
>& roles
= QSet
<QByteArray
>());
163 virtual void visibleRolesChanged(const QList
<QByteArray
>& current
, const QList
<QByteArray
>& previous
);
164 virtual void columnWidthChanged(const QByteArray
& role
, qreal current
, qreal previous
);
165 virtual void styleOptionChanged(const KItemListStyleOption
& current
, const KItemListStyleOption
& previous
);
166 virtual void hoveredChanged(bool hovered
);
167 virtual void selectedChanged(bool selected
);
168 virtual void siblingsInformationChanged(const QBitArray
& current
, const QBitArray
& previous
);
169 virtual void editedRoleChanged(const QByteArray
& current
, const QByteArray
& previous
);
170 virtual void resizeEvent(QGraphicsSceneResizeEvent
* event
);
171 virtual void showEvent(QShowEvent
* event
);
172 virtual void hideEvent(QHideEvent
* event
);
175 void slotCutItemsChanged();
176 void slotRoleEditingCanceled(const QByteArray
& role
, const QVariant
& value
);
177 void slotRoleEditingFinished(const QByteArray
& role
, const QVariant
& value
);
180 void triggerCacheRefreshing();
181 void updateExpansionArea();
182 void updatePixmapCache();
184 void updateTextsCache();
185 void updateIconsLayoutTextCache();
186 void updateCompactLayoutTextCache();
187 void updateDetailsLayoutTextCache();
189 void updateAdditionalInfoTextColor();
191 void drawPixmap(QPainter
* painter
, const QPixmap
& pixmap
);
192 void drawSiblingsInformation(QPainter
* painter
);
194 QRectF
roleEditingRect(const QByteArray
&role
) const;
197 * Closes the role editor and returns the focus back
198 * to the KItemListContainer.
200 void closeRoleEditor();
202 static QPixmap
pixmapForIcon(const QString
& name
, const QStringList
& overlays
, int size
);
205 * @return Preferred size of the rating-image based on the given
206 * style-option. The height of the font is taken as
209 static QSizeF
preferredRatingSize(const KItemListStyleOption
& option
);
212 * @return Horizontal padding in pixels that is added to the required width of
213 * a column to display the content.
215 static qreal
columnPadding(const KItemListStyleOption
& option
);
220 QFont m_customizedFont
;
221 QFontMetrics m_customizedFontMetrics
;
223 bool m_supportsItemExpanding
;
227 QSet
<QByteArray
> m_dirtyContentRoles
;
232 QSize m_scaledPixmapSize
;
234 QRectF m_iconRect
; // Cache for KItemListWidget::iconRect()
235 QPixmap m_hoverPixmap
; // Cache for modified m_pixmap when hovering the item
240 QStaticText staticText
;
242 QHash
<QByteArray
, TextInfo
*> m_textInfo
;
246 QList
<QByteArray
> m_sortedVisibleRoles
;
248 QRectF m_expansionArea
;
250 QColor m_customTextColor
;
251 QColor m_additionalInfoTextColor
;
256 KItemListRoleEditor
* m_roleEditor
;
257 KItemListRoleEditor
* m_oldRoleEditor
;
259 friend class KStandardItemListWidgetInformant
; // Accesses private static methods to be able to
260 // share a common layout calculation