Akonadi

collectionstatisticsdelegate.h
1 /*
2  SPDX-FileCopyrightText: 2008 Thomas McGuire <[email protected]>
3 
4  SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6 #pragma once
7 
8 #include "akonadiwidgets_export.h"
9 
10 #include <QStyledItemDelegate>
11 
12 #include <memory>
13 
14 class QAbstractItemView;
15 class QTreeView;
16 
17 namespace Akonadi
18 {
19 class CollectionStatisticsDelegatePrivate;
20 
21 /**
22  * @short A delegate that draws unread and total count for StatisticsProxyModel.
23  *
24  * The delegate provides the following features:
25  *
26  * - Collections with unread items will have the foldername and the unread
27  * column marked in bold.
28  * - If a folder is collapsed, the unread and the total column will contain
29  * the total sum of all child folders
30  * - It has the possibility to draw the unread count directly after the
31  * foldername, see toggleUnreadAfterFolderName().
32  *
33  * Example:
34  * @code
35  *
36  * Akonadi::EntityTreeView *view = new Akonadi::EntityTreeView( this );
37  *
38  * Akonadi::StatisticsProxyModel *statisticsProxy = new Akonadi::StatisticsProxyModel( view );
39  * view->setModel( statisticsProxy );
40  *
41  * Akonadi::CollectionStatisticsDelegate *delegate = new Akonadi::CollectionStatisticsDelegate( view );
42  * view->setItemDelegate( delegate );
43  *
44  * @endcode
45  *
46  * @note This proxy model is intended to be used on top of the EntityTreeModel. One of the proxies
47  * between the EntityTreeModel (the root model) and the view must be a StatisticsProxyModel. That
48  * proxy model may appear anywhere in the chain.
49  *
50  * @author Thomas McGuire <[email protected]>
51  */
52 class AKONADIWIDGETS_EXPORT CollectionStatisticsDelegate : public QStyledItemDelegate
53 {
54  Q_OBJECT
55 
56 public:
57  /**
58  * Creates a new collection statistics delegate.
59  *
60  * @param parent The parent item view, which will also take ownership.
61  *
62  * @since 4.6
63  */
65 
66  /**
67  * Creates a new collection statistics delegate.
68  *
69  * @param parent The parent tree view, which will also take ownership.
70  */
71  explicit CollectionStatisticsDelegate(QTreeView *parent);
72 
73  /**
74  * Destroys the collection statistics delegate.
75  */
76  ~CollectionStatisticsDelegate() override;
77 
78  /**
79  * @since 4.9.1
80  */
81  void updatePalette();
82 
83  /**
84  * Sets whether the unread count is drawn next to the folder name.
85  *
86  * You probably want to enable this when the unread count is hidden only.
87  * This is disabled by default.
88  *
89  * @param enable If @c true, the unread count is drawn next to the folder name,
90  * if @c false, the folder name will be drawn normally.
91  */
92  void setUnreadCountShown(bool enable);
93 
94  /**
95  * Returns whether the unread count is drawn next to the folder name.
96  */
97  Q_REQUIRED_RESULT bool unreadCountShown() const;
98 
99  /**
100  * @param enable new mode of progress animation
101  */
102  void setProgressAnimationEnabled(bool enable);
103 
104  Q_REQUIRED_RESULT bool progressAnimationEnabled() const;
105 
106 protected:
107  /**
108  * @param painter pointer for QPainter to use in method
109  * @param option style options
110  * @param index model index (QModelIndex)
111  */
112  void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
113 
114  /**
115  * @param option style option view item
116  * @param index model index (QModelIndex)
117  */
118  void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const override;
119 
120 private:
121  /// @cond PRIVATE
122  std::unique_ptr<CollectionStatisticsDelegatePrivate> const d_ptr;
123  /// @endcond
124 
125  Q_DECLARE_PRIVATE(CollectionStatisticsDelegate)
126 };
127 
128 }
129 
A delegate that draws unread and total count for StatisticsProxyModel.
Helper integration between Akonadi and Qt.
This file is part of the KDE documentation.
Documentation copyright © 1996-2022 The KDE developers.
Generated on Sat Jul 2 2022 06:41:47 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.