ImagingTools Core SDK
CMenuPanel.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5// Qt includes
6#include <QtCore/QPropertyAnimation>
7#include <QtCore/QSortFilterProxyModel>
8#include <QtGui/QStandardItemModel>
9
10// ACF includes
11#include <iwidgets/CFocusDecorator.h>
12
13// ImtCore includes
14#include <imtwidgets/IMenuPanelDelegate.h>
15#include <GeneratedFiles/imtwidgets/ui_CMenuPanel.h>
16
17
18namespace imtwidgets
19{
20
21
22class CMenuPanel: public QWidget, public Ui::CMenuPanel
23{
24 Q_OBJECT
25
26public:
27 Q_PROPERTY(int MaxWidth READ GetMaxWidth WRITE SetMaxWidth)
28 Q_PROPERTY(QByteArray ActivePage READ GetActivePage WRITE SetActivePage)
29
30 enum DataRole
31 {
32 DR_PAGE_ID = Qt::UserRole,
33 DR_PAGE_ENABLED,
34 DR_PAGE_VISIBLE,
35 DR_PAGE_HIDDEN_WHILE_COLLAPSED
36 };
37
38 enum AnimationAction
39 {
40 AA_NONE = 0,
41 AA_EXPAND,
42 AA_COLLAPSE
43 };
44
45 CMenuPanel(QWidget* parent = nullptr);
46
47 virtual int GetMaxWidth() const;
48 virtual void SetMaxWidth(int maxWidth);
49
50 virtual QByteArray GetActivePage() const;
51 virtual void SetActivePage(const QByteArray& pageId);
52
53 virtual bool IsPageEnabled(const QByteArray& pageId) const;
54 virtual bool SetPageEnabled(const QByteArray& pageId, bool isPageEnabled = true);
55
56 virtual bool IsPageVisible(const QByteArray& pageId) const;
57 virtual bool SetPageVisible(const QByteArray& pageId, bool isPageVisible = true);
58
59 virtual void ResetPages();
60 virtual bool IsPageIdExist(const QByteArray& pageId) const;
61
62 virtual bool RemovePage(const QByteArray& pageId);
63 virtual bool InsertPage(const QByteArray& pageId, const QByteArray& parentPageId = QByteArray(), bool insertToBottom = false);
64
65 virtual int GetPageOrder(const QByteArray& pageId) const;
66 virtual bool SetPageOrder(const QByteArray& pageId, int position);
67
68 virtual QList<QByteArray> GetChilds(const QByteArray& pageId);
69
70 virtual QIcon GetPageIcon(const QByteArray& pageId) const;
71 virtual bool SetPageIcon(const QByteArray& pageId, const QIcon& pageIcon);
72
73 virtual QString GetPageName(const QByteArray& pageId) const;
74 virtual bool SetPageName(const QByteArray& pageId, const QString& pageName);
75
76 virtual void SetItemIndent(int indent);
77 virtual void SetItemHeight(int height);
78 virtual void SetIconSizeRatio(double ratio);
79 virtual void SetIconSizeHoverRatio(double ratio);
80 virtual void SetFontSizeRatio(double ratio);
81
82 virtual void SetItemVerticalPadding(int padding);
83 virtual void SetItemLeftPadding(int padding);
84 virtual void SetItemRightPadding(int padding);
85 virtual void SetItemIconToTextPadding(int padding);
86
87 virtual void SetAnimationDelay(int delay);
88 virtual void SetAnimationDuration(int duration);
89 virtual void SetAnimationEnabled(int animationEnabled);
90
91 virtual void SetMainWidget(QWidget* mainWidget);
92
93 virtual void CollapsePanelImmideatly();
94
95 virtual void UpdateFontSize();
96
97 virtual void SetDelegate(IMenuPanelDelegate* menuPanelDelegate);
98
99Q_SIGNALS:
103 void PageIdChanged(const QByteArray& selected, const QByteArray& deselected);
104
105private Q_SLOTS:
106 void OnPageIdChanged(const QModelIndex& selected, const QModelIndex& deselected);
107 void OnAnimationFinished();
108 void on_pushTop_clicked();
109 void on_pushBottom_clicked();
110
111protected:
112 // reimplemented (QObject)
113 virtual bool eventFilter(QObject* watched, QEvent* event) override;
114 virtual void timerEvent(QTimerEvent* event) override;
115
116 // reimplemented (QWidget)
117#if QT_VERSION < 0x060000
118 virtual void enterEvent(QEvent* event) override;
119#else
120 virtual void enterEvent(QEnterEvent* event) override;
121#endif
122 virtual void leaveEvent(QEvent* event) override;
123 virtual void resizeEvent(QResizeEvent* event) override;
124
125private:
126 class VisibleFilterModel : public QSortFilterProxyModel
127 {
128 public:
129 VisibleFilterModel(QObject* parent = nullptr);
130 // reimplemented (QSortFilterProxyModel)
131 bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
132 };
133
134 int m_cachedItemHeight;
135 double m_cachedIconSizeRatio;
136 double m_cachedFontSizeRatio;
137
138 int m_minWidth;
139 int m_maxWidth;
140 int m_indent;
141 int m_verticalPadding;
142
143 AnimationAction m_animationAction;
144 int m_animationTimerIdentifier;
145 int m_animationDelay;
146 int m_animationDuration;
147 bool m_animationEnabled;
148 bool m_guiCreated;
149
150 QStandardItemModel m_model;
151 VisibleFilterModel m_filterModel;
152 QStandardItemModel m_bottomModel;
153 QPropertyAnimation m_animationWidth;
154 QPropertyAnimation m_animationIndent;
155
156 QWidget* m_leftFramePtr;
157 QWidget* m_mainWidgetPtr;
158 QWidget* m_parentWidgetPtr;
159
160 IMenuPanelDelegate* m_delegatePtr;
161
162 QGraphicsDropShadowEffect* m_shadowPtr;
163
164private:
165 void HoverMoveEvent(QHoverEvent* event);
166 QModelIndex GetModelIndex(const QByteArray& pageId, const QStandardItemModel** modelPtr) const;
167 QModelIndex GetModelIndexFromModel(const QByteArray& pageId, const QStandardItemModel& model) const;
168 void SetMinimumPanelWidth(int width);
169 int CalculateMaxItemWith();
170 int CalculateMaxItemWithByModel(const QStandardItemModel& model);
171 void CheckButtonsVisible();
172
173 void StartTimer(int time = -1);
174 void StopTimer();
175 void StartAnimation();
176 void StopAnimation();
177
178 void ReconnectModel();
179 void AfterSizesChanged();
180};
181
182
183} // namespace imtwidgets
184
185