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