digiKam
Loading...
Searching...
No Matches
dconfigdlgview_p.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2009-11-03
7 * Description : A dialog base class which can handle multiple pages.
8 *
9 * SPDX-FileCopyrightText: 2009-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
10 * SPDX-FileCopyrightText: 2007 by Rafael Fernández López <ereslibre at kde dot org>
11 * SPDX-FileCopyrightText: 2006 by Tobias Koenig <tokoe at kde dot org>
12 *
13 * SPDX-License-Identifier: GPL-2.0-or-later
14 *
15 * ============================================================ */
16
17#pragma once
18
19#include "dconfigdlgview.h"
20
21// Qt includes
22
23#include <QAbstractItemDelegate>
24#include <QGridLayout>
25#include <QStackedWidget>
26#include <QAbstractProxyModel>
27#include <QListView>
28#include <QTabBar>
29#include <QTreeView>
30
31// Local includes
32
33#include "dconfigdlgwidgets.h"
34
35namespace Digikam
36{
37
38class Q_DECL_HIDDEN DConfigDlgStackedWidget : public QStackedWidget
39{
40 Q_OBJECT
41
42public:
43
44 explicit DConfigDlgStackedWidget(QWidget* const parent = nullptr)
45 : QStackedWidget(parent)
46 {
47 }
48
49 void setMinimumSize(const QSize& size)
50 {
51 mMinimumSize = size;
52 }
53
54 QSize minimumSizeHint() const override
55 {
56 return mMinimumSize.expandedTo(QStackedWidget::minimumSizeHint());
57 }
58
59private:
60
61 QSize mMinimumSize;
62};
63
64// ---------------------------
65
66class Q_DECL_HIDDEN DConfigDlgViewPrivate
67{
68 Q_DECLARE_PUBLIC(DConfigDlgView)
69
70protected:
71
73
74 void updateTitleWidget(const QModelIndex& index);
75
76 void updateSelection();
77 void cleanupPages();
78 QList<QWidget*> collectPages(const QModelIndex& parent = QModelIndex());
79 DConfigDlgView::FaceType detectAutoFace() const;
80
81 // private slots
82
83 void _k_rebuildGui();
84 void _k_modelChanged();
85 void _k_dataChanged(const QModelIndex&, const QModelIndex&);
86 void _k_pageSelected(const QItemSelection&, const QItemSelection&);
87
88protected:
89
90 DConfigDlgView* q_ptr = nullptr;
91
92 // data
93
94 QAbstractItemModel* model = nullptr;
95 DConfigDlgView::FaceType faceType = DConfigDlgView::Auto;
96
97 // gui
98
99 QGridLayout* layout = nullptr;
100 DConfigDlgStackedWidget* stack = nullptr;
101 DConfigDlgTitle* titleWidget = nullptr;
102 QWidget* defaultWidget = nullptr;
103
104 QAbstractItemView* view = nullptr;
105
106private:
107
108 // cppcheck-suppress unusedPrivateFunction
109 void init();
110};
111
112// --------------------------------------------------------------------------------------------
113
114namespace DConfigDlgInternal
115{
116
117class DConfigDlgListViewDelegate;
118class DConfigDlgListViewProxy;
119
120class Q_DECL_HIDDEN DConfigDlgPlainView : public QAbstractItemView
121{
122 Q_OBJECT
123
124public:
125
126 explicit DConfigDlgPlainView(QWidget* const parent = nullptr);
127
128 QModelIndex indexAt(const QPoint& point) const override;
129 void scrollTo(const QModelIndex& index, ScrollHint hint = EnsureVisible) override;
130 QRect visualRect(const QModelIndex& index) const override;
131
132protected:
133
134 QModelIndex moveCursor(QAbstractItemView::CursorAction, Qt::KeyboardModifiers) override;
135 int horizontalOffset() const override;
136 int verticalOffset() const override;
137 bool isIndexHidden(const QModelIndex&) const override;
138 void setSelection(const QRect& , QFlags<QItemSelectionModel::SelectionFlag>) override;
139 QRegion visualRegionForSelection(const QItemSelection&) const override;
140};
141
142// ---------------------------
143
144class Q_DECL_HIDDEN DConfigDlgListView : public QListView
145{
146 Q_OBJECT
147
148public:
149
150 explicit DConfigDlgListView(QWidget* const parent = nullptr);
151 ~DConfigDlgListView() override = default;
152
153 void setModel(QAbstractItemModel* model) override;
154
155private Q_SLOTS:
156
157 void updateWidth();
158};
159
160// ---------------------------
161
162class Q_DECL_HIDDEN DConfigDlgTreeView : public QTreeView
163{
164 Q_OBJECT
165
166public:
167
168 explicit DConfigDlgTreeView(QWidget* const parent = nullptr);
169
170 void setModel(QAbstractItemModel* model) override;
171
172private Q_SLOTS:
173
174 void updateWidth();
175
176private:
177
178 void expandItems(const QModelIndex& index = QModelIndex());
179};
180
181// ---------------------------
182
183class Q_DECL_HIDDEN DConfigDlgTabbedView : public QAbstractItemView
184{
185 Q_OBJECT
186
187public:
188
189 explicit DConfigDlgTabbedView(QWidget* const parent = nullptr);
190 ~DConfigDlgTabbedView() override;
191
192 void setModel(QAbstractItemModel* model) override;
193 QModelIndex indexAt(const QPoint& point) const override;
194 void scrollTo(const QModelIndex& index, ScrollHint hint = EnsureVisible) override;
195 QRect visualRect(const QModelIndex& index) const override;
196 QSize minimumSizeHint() const override;
197
198protected:
199
200 QModelIndex moveCursor(QAbstractItemView::CursorAction, Qt::KeyboardModifiers) override;
201 int horizontalOffset() const override;
202 int verticalOffset() const override;
203 bool isIndexHidden(const QModelIndex&) const override;
204 void setSelection(const QRect& , QFlags<QItemSelectionModel::SelectionFlag>) override;
205 QRegion visualRegionForSelection(const QItemSelection&) const override;
206
207private Q_SLOTS:
208
209 void currentPageChanged(int);
210 void layoutChanged();
211 void dataChanged(const QModelIndex&, const QModelIndex&, const QVector<int>& roles) override;
212
213private:
214
215 QTabWidget* mTabWidget;
216};
217
218// ---------------------------
219
220class Q_DECL_HIDDEN DConfigDlgListViewDelegate : public QAbstractItemDelegate
221{
222 Q_OBJECT
223
224public:
225
226 explicit DConfigDlgListViewDelegate(QObject* const parent = nullptr);
227
228 void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
229 QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override;
230
231private:
232
233 void drawFocus(QPainter*, const QStyleOptionViewItem&, const QRect&) const;
234};
235
236// ---------------------------
237
242class Q_DECL_HIDDEN DConfigDlgListViewProxy : public QAbstractProxyModel
243{
244 Q_OBJECT
245
246public:
247
248 explicit DConfigDlgListViewProxy(QObject* const parent = nullptr);
249 ~DConfigDlgListViewProxy() override = default;
250
251 int rowCount(const QModelIndex& parent = QModelIndex()) const override;
252 int columnCount(const QModelIndex& parent = QModelIndex()) const override;
253 QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override;
254 QModelIndex parent(const QModelIndex&) const override;
255 QVariant data(const QModelIndex& index, int role) const override;
256 QModelIndex mapFromSource(const QModelIndex& index) const override;
257 QModelIndex mapToSource(const QModelIndex& index) const override;
258
259public Q_SLOTS:
260
261 void rebuildMap();
262
263private:
264
265 void addMapEntry(const QModelIndex&);
266
267private:
268
269 QList<QModelIndex> mList;
270};
271
272// ---------------------------
273
274class Q_DECL_HIDDEN SelectionModel : public QItemSelectionModel
275{
276 Q_OBJECT
277
278public:
279
280 SelectionModel(QAbstractItemModel* const model, QObject* const parent);
281
282public Q_SLOTS:
283
284 void clear() override;
285 void select(const QModelIndex& index, QItemSelectionModel::SelectionFlags command) override;
286 void select(const QItemSelection& selection, QItemSelectionModel::SelectionFlags command) override;
287};
288
289} // namespace DConfigDlgInternal
290
291} // namespace Digikam
Definition dconfigdlgview_p.h:39
QSize minimumSizeHint() const override
Definition dconfigdlgview_p.h:54
void setMinimumSize(const QSize &size)
Definition dconfigdlgview_p.h:49
DConfigDlgStackedWidget(QWidget *const parent=nullptr)
Definition dconfigdlgview_p.h:44
Definition dconfigdlgwidgets.h:175
Definition dconfigdlgview_p.h:67
A base class which can handle multiple pages.
Definition dconfigdlgview.h:49
FaceType
Definition dconfigdlgview.h:74
Definition datefolderview.cpp:34