File indexing completed on 2025-04-27 03:58:31

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2005-03-22
0007  * Description : a widget to manage sidebar in GUI - Private headers.
0008  *
0009  * SPDX-FileCopyrightText: 2005-2006 by Joern Ahrens <joern dot ahrens at kdemail dot net>
0010  * SPDX-FileCopyrightText: 2006-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
0011  * SPDX-FileCopyrightText: 2008-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
0012  * SPDX-FileCopyrightText: 2001-2003 by Joseph Wenninger <jowenn at kde dot org>
0013  *
0014  * SPDX-License-Identifier: GPL-2.0-or-later
0015  *
0016  * ============================================================ */
0017 
0018 #ifndef DIGIKAM_SIDE_BAR_P_H
0019 #define DIGIKAM_SIDE_BAR_P_H
0020 
0021 #include "sidebar.h"
0022 
0023 // Qt includes
0024 
0025 #include <QDragEnterEvent>
0026 #include <QEvent>
0027 #include <QPixmap>
0028 #include <QSplitter>
0029 #include <QStackedWidget>
0030 #include <QTimer>
0031 #include <QHash>
0032 #include <QScrollArea>
0033 #include <QFrame>
0034 #include <QActionEvent>
0035 #include <QLayout>
0036 #include <QPainter>
0037 #include <QFontMetrics>
0038 #include <QStyle>
0039 #include <QStyleOptionButton>
0040 
0041 // KDE includes
0042 
0043 #include <kconfiggroup.h>
0044 
0045 // Local includes
0046 
0047 #include "digikam_debug.h"
0048 
0049 namespace Digikam
0050 {
0051 
0052 class Q_DECL_HIDDEN DMultiTabBarFrame::Private
0053 {
0054 public:
0055 
0056     explicit Private();
0057 
0058     QBoxLayout*             mainLayout;
0059     QList<DMultiTabBarTab*> tabs;
0060     Qt::Edge                position;
0061     DMultiTabBar::TextStyle style;
0062 };
0063 
0064 // -------------------------------------------------------------------------------------
0065 
0066 class Q_DECL_HIDDEN DMultiTabBarTab::Private
0067 {
0068 public:
0069 
0070     explicit Private();
0071 
0072     Qt::Edge                position;
0073     DMultiTabBar::TextStyle style;
0074 };
0075 
0076 // -------------------------------------------------------------------------------------
0077 
0078 class Q_DECL_HIDDEN DMultiTabBar::Private
0079 {
0080 public:
0081 
0082     explicit Private();
0083 
0084     DMultiTabBarFrame*         internal;
0085     QBoxLayout*                layout;
0086     QFrame*                    btnTabSep;
0087     QList<DMultiTabBarButton*> buttons;
0088     Qt::Edge                   position;
0089 };
0090 
0091 // -------------------------------------------------------------------------------------
0092 
0093 class Q_DECL_HIDDEN SidebarState
0094 {
0095 public:
0096 
0097     SidebarState();
0098     SidebarState(QWidget* const w, int size);
0099 
0100     QWidget* activeWidget;
0101     int      size;
0102 };
0103 
0104 // -------------------------------------------------------------------------------------
0105 
0106 class Q_DECL_HIDDEN Sidebar::Private
0107 {
0108 
0109 public:
0110 
0111     explicit Private();
0112 
0113     bool                          minimizedDefault;
0114     bool                          minimized;
0115 
0116     /**
0117      * Backup of shrinked status before backup(), restored by restore()
0118      * NOTE: when sidebar is hidden, only icon bar is affected. If sidebar view is
0119      * visible, this one must be shrink and restored accordingly.
0120      */
0121     bool                          isMinimized;
0122 
0123     int                           tabs;
0124     int                           activeTab;
0125     int                           dragSwitchId;
0126     int                           restoreSize;
0127 
0128     QStackedWidget*               stack;
0129     SidebarSplitter*              splitter;
0130     QTimer*                       dragSwitchTimer;
0131 
0132     QHash<QWidget*, SidebarState> appendedTabsStateCache;
0133 
0134     const QString                 optionActiveTabEntry;
0135     const QString                 optionMinimizedEntry;
0136     const QString                 optionRestoreSizeEntry;
0137 };
0138 
0139 // -------------------------------------------------------------------------------------
0140 
0141 class Q_DECL_HIDDEN SidebarSplitter::Private
0142 {
0143 public:
0144 
0145     QList<Sidebar*> sidebars;
0146 };
0147 
0148 } // namespace Digikam
0149 
0150 #endif // DIGIKAM_SIDE_BAR_P_H