digiKam
Loading...
Searching...
No Matches
sidebar.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 : 2005-03-22
7 * Description : a widget to manage sidebar in GUI.
8 *
9 * SPDX-FileCopyrightText: 2005-2006 by Joern Ahrens <joern dot ahrens at kdemail dot net>
10 * SPDX-FileCopyrightText: 2006-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
11 * SPDX-FileCopyrightText: 2008-2013 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
12 * SPDX-FileCopyrightText: 2001-2003 by Joseph Wenninger <jowenn at kde dot org>
13 *
14 * SPDX-License-Identifier: GPL-2.0-or-later
15 *
16 * ============================================================ */
17
18#pragma once
19
20// Qt includes
21
22#include <QIcon>
23#include <QPixmap>
24#include <QSplitter>
25#include <QPushButton>
26#include <QWidget>
27#include <QList>
28#include <QStyleOptionToolButton>
29#include <QBoxLayout>
30
31// Local includes
32
33#include "digikam_export.h"
34#include "statesavingobject.h"
35
36class KConfigGroup;
37
38namespace Digikam
39{
40
41class DMultiTabBarButton;
42class DMultiTabBarTab;
43
47class DIGIKAM_EXPORT DMultiTabBar : public QWidget
48{
49 Q_OBJECT
50
51public:
52
57 {
58 ActiveIconText = 0,
59 AllIconsText = 2
60 };
61
62public:
63
64 explicit DMultiTabBar(Qt::Edge pos, QWidget* const parent = nullptr);
65 ~DMultiTabBar() override;
66
76 void appendButton(const QIcon& pic,
77 int id = -1,
78 QMenu* const popup = nullptr,
79 const QString& not_used_yet = QString());
80
84 void removeButton(int id);
85
92 void appendTab(const QIcon& pic,
93 int id = -1,
94 const QString& text = QString());
95
99 void removeTab(int id);
100
106 void setTab(int id, bool state);
107
111 bool isTabRaised(int id) const;
112
116 DMultiTabBarButton* button(int id) const;
117
121 DMultiTabBarTab* tab(int id) const;
122
127 void setPosition(Qt::Edge pos);
128
133 Qt::Edge position() const;
134
138 void setStyle(TextStyle style);
139
144 TextStyle tabStyle() const;
145
146protected:
147
148 void updateSeparator();
149
150 virtual void fontChange(const QFont&);
151
152private:
153
154 friend class DMultiTabBarButton;
155
156 class Private;
157 Private* const d = nullptr;
158};
159
160// -------------------------------------------------------------------------------------
161
162class DIGIKAM_EXPORT DMultiTabBarButton: public QPushButton
163{
164 Q_OBJECT
165
166public:
167
168 ~DMultiTabBarButton() override;
169
170 int id() const;
171
172public Q_SLOTS:
173
174 void setText(const QString& text);
175
176Q_SIGNALS:
177
182 void signalClicked(int id);
183
184protected Q_SLOTS:
185
186 virtual void slotClicked();
187
188protected:
189
190 DMultiTabBarButton(const QIcon& pic,
191 const QString&,
192 int id,
193 QWidget* const parent);
194
195 void hideEvent(QHideEvent*) override;
196 void showEvent(QShowEvent*) override;
197 void paintEvent(QPaintEvent*) override;
198
199private:
200
201 friend class DMultiTabBar;
202
203 int m_id;
204};
205
206// -------------------------------------------------------------------------------------
207
208class DIGIKAM_EXPORT DMultiTabBarTab: public DMultiTabBarButton
209{
210 Q_OBJECT
211
212public:
213
214 ~DMultiTabBarTab() override;
215
216 QSize sizeHint() const override;
217 QSize minimumSizeHint() const override;
218
219public Q_SLOTS:
220
225 void setPosition(Qt::Edge);
226
231 void setStyle(DMultiTabBar::TextStyle);
232
237 void setState(bool state);
238
239 void setIcon(const QString&);
240 void setIcon(const QIcon&);
241
242protected:
243
244 void computeMargins (int* hMargin, int* vMargin) const;
245 QSize computeSizeHint(bool withText) const;
246 bool shouldDrawText() const;
247 bool isVertical() const;
248 QPixmap iconPixmap() const;
249 void initButtonStyleOption(QStyleOptionToolButton* opt) const;
250
251 friend class DMultiTabBarFrame;
252
256 DMultiTabBarTab(const QIcon& pic,
257 const QString&,
258 int id,
259 QWidget* const parent,
260 Qt::Edge pos,
262
263 void paintEvent(QPaintEvent*) override;
264
265private:
266
267 class Private;
268 Private* const d = nullptr;
269};
270
271// -------------------------------------------------------------------------------------
272
273class DMultiTabBarFrame: public QFrame
274{
275 Q_OBJECT
276
277public:
278
279 explicit DMultiTabBarFrame(QWidget* const parent, Qt::Edge pos);
280 ~DMultiTabBarFrame() override;
281
282 void appendTab(const QIcon&, int = -1, const QString& = QString());
283 DMultiTabBarTab* tab(int) const;
284 void removeTab(int);
285 void setPosition(Qt::Edge pos);
287 void showActiveTabTexts(bool show);
288 QList<DMultiTabBarTab*>* tabs();
289
290protected:
291
297 virtual void contentsMousePressEvent(QMouseEvent*);
298 void mousePressEvent(QMouseEvent*) override;
299
300private:
301
302 friend class DMultiTabBar;
303
304 class Private;
305 Private* const d = nullptr;
306};
307
308// -------------------------------------------------------------------------------------
309
310class SidebarSplitter;
311
322class DIGIKAM_EXPORT Sidebar : public DMultiTabBar,
323 public StateSavingObject
324{
325 Q_OBJECT
326
327public:
328
339 explicit Sidebar(QWidget* const parent,
340 SidebarSplitter* const sp,
341 Qt::Edge side = Qt::LeftEdge,
342 bool minimizedDefault = false);
343
344 ~Sidebar() override;
345
346 SidebarSplitter* splitter() const;
347
354 void appendTab(QWidget* const w, const QIcon& pic, const QString& title);
355
359 void deleteTab(QWidget* const w);
360
364 void setActiveTab(QWidget* const w);
365
369 void activeNextTab();
370
374 void activePreviousTab();
375
379 QWidget* getActiveTab() const;
380
384 void shrink();
385
389 void expand();
390
394 void backup();
395
401 void backup(const QList<QWidget*>& thirdWidgetsToBackup, QList<int>* const sizes);
402
406 void restore();
407
412 void restore(const QList<QWidget*>& thirdWidgetsToRestore, const QList<int>& sizes);
413
417 bool isExpanded() const;
418
419protected:
420
424 void doLoadState() override;
425
429 void doSaveState() override;
430
431private:
432
433 bool eventFilter(QObject* o, QEvent* e) override;
434 void switchTabAndStackToTab(int tab);
435
436private Q_SLOTS:
437
441 void slotClicked(int tab);
442
443 void slotExpandTimer();
444 void slotDragSwitchTimer();
445
446 void slotSplitterBtnClicked();
447
448Q_SIGNALS:
449
453 void signalChangedTab(QWidget* w);
454
459
460private:
461
462 friend class SidebarSplitter;
463
464 class Private;
465 Private* const d = nullptr;
466};
467
468// -----------------------------------------------------------------------------
469
470class DIGIKAM_EXPORT SidebarSplitter : public QSplitter
471{
472 Q_OBJECT
473
474public:
475
476 const static QString DEFAULT_CONFIG_KEY;
477
482 explicit SidebarSplitter(QWidget* const parent = nullptr);
483 explicit SidebarSplitter(Qt::Orientation orientation, QWidget* const parent = nullptr);
484
485 ~SidebarSplitter() override;
486
491 void saveState(KConfigGroup& group);
492
497 void saveState(KConfigGroup& group, const QString& key);
498
503 void restoreState(KConfigGroup& group);
504
509 void restoreState(KConfigGroup& group, const QString& key);
510
514 int size(Sidebar* const bar) const;
515 int size(QWidget* const widget) const;
516
521 void setSize(Sidebar* const bar, int size);
522 void setSize(QWidget* const widget, int size);
523
524 void addSplitterCollapserButton(QWidget* const widget);
525
526private Q_SLOTS:
527
528 void slotSplitterMoved(int pos, int index);
529
530private:
531
532 friend class Sidebar;
533
534 class Private;
535 Private* const d = nullptr;
536};
537
538} // namespace Digikam
Definition sidebar.h:163
Definition sidebar_p.h:52
Definition sidebar.h:274
void mousePressEvent(QMouseEvent *) override
Definition sidebar_dmultitabbarframe.cpp:70
void showActiveTabTexts(bool show)
void removeTab(int)
Definition sidebar_dmultitabbarframe.cpp:103
DMultiTabBarTab * tab(int) const
Definition sidebar_dmultitabbarframe.cpp:75
~DMultiTabBarFrame() override
Definition sidebar_dmultitabbarframe.cpp:45
QList< DMultiTabBarTab * > * tabs()
Definition sidebar_dmultitabbarframe.cpp:129
virtual void contentsMousePressEvent(QMouseEvent *)
Definition sidebar_dmultitabbarframe.cpp:65
void appendTab(const QIcon &, int=-1, const QString &=QString())
Definition sidebar_dmultitabbarframe.cpp:92
void setPosition(Qt::Edge pos)
Definition sidebar_dmultitabbarframe.cpp:117
void setStyle(DMultiTabBar::TextStyle style)
Definition sidebar_dmultitabbarframe.cpp:53
Definition sidebar_p.h:66
Definition sidebar.h:209
Definition sidebar_p.h:78
Definition sidebar.h:48
TextStyle
Definition sidebar.h:57
Definition sidebar_p.h:146
Definition sidebar.h:471
static const QString DEFAULT_CONFIG_KEY
Definition sidebar.h:476
void addSplitterCollapserButton(QWidget *const widget)
Definition sidebar_p.h:111
Definition sidebar.h:324
void signalViewChanged()
void signalChangedTab(QWidget *w)
Definition statesavingobject.h:66
Definition datefolderview.cpp:34