6#include <QtCore/QPropertyAnimation>
7#include <QtCore/QSortFilterProxyModel>
8#include <QtGui/QStandardItemModel>
11#include <iwidgets/CFocusDecorator.h>
14#include <imtwidgets/IMenuPanelDelegate.h>
15#include <GeneratedFiles/imtwidgets/ui_CMenuPanel.h>
22class CMenuPanel:
public QWidget,
public Ui::CMenuPanel
27 Q_PROPERTY(
int MaxWidth READ GetMaxWidth WRITE SetMaxWidth)
28 Q_PROPERTY(QByteArray ActivePage READ GetActivePage WRITE SetActivePage)
32 DR_PAGE_ID = Qt::UserRole,
35 DR_PAGE_HIDDEN_WHILE_COLLAPSED
45 CMenuPanel(QWidget* parent =
nullptr);
47 virtual int GetMaxWidth()
const;
48 virtual void SetMaxWidth(
int maxWidth);
50 virtual QByteArray GetActivePage()
const;
51 virtual void SetActivePage(
const QByteArray& pageId);
53 virtual bool IsPageEnabled(
const QByteArray& pageId)
const;
54 virtual bool SetPageEnabled(
const QByteArray& pageId,
bool isPageEnabled =
true);
56 virtual bool IsPageVisible(
const QByteArray& pageId)
const;
57 virtual bool SetPageVisible(
const QByteArray& pageId,
bool isPageVisible =
true);
59 virtual void ResetPages();
60 virtual bool IsPageIdExist(
const QByteArray& pageId)
const;
62 virtual bool RemovePage(
const QByteArray& pageId);
63 virtual bool InsertPage(
const QByteArray& pageId,
const QByteArray& parentPageId = QByteArray(),
bool insertToBottom =
false);
65 virtual int GetPageOrder(
const QByteArray& pageId)
const;
66 virtual bool SetPageOrder(
const QByteArray& pageId,
int position);
68 virtual QList<QByteArray> GetChilds(
const QByteArray& pageId);
70 virtual QIcon GetPageIcon(
const QByteArray& pageId)
const;
71 virtual bool SetPageIcon(
const QByteArray& pageId,
const QIcon& pageIcon);
73 virtual QString GetPageName(
const QByteArray& pageId)
const;
74 virtual bool SetPageName(
const QByteArray& pageId,
const QString& pageName);
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);
82 virtual void SetItemVerticalPadding(
int padding);
83 virtual void SetItemLeftPadding(
int padding);
84 virtual void SetItemRightPadding(
int padding);
85 virtual void SetItemIconToTextPadding(
int padding);
87 virtual void SetAnimationDelay(
int delay);
88 virtual void SetAnimationDuration(
int duration);
89 virtual void SetAnimationEnabled(
int animationEnabled);
91 virtual void SetMainWidget(QWidget* mainWidget);
93 virtual void CollapsePanelImmideatly();
95 virtual void UpdateFontSize();
97 virtual void SetDelegate(IMenuPanelDelegate* menuPanelDelegate);
103 void PageIdChanged(
const QByteArray& selected,
const QByteArray& deselected);
106 void OnPageIdChanged(
const QModelIndex& selected,
const QModelIndex& deselected);
107 void OnAnimationFinished();
108 void on_pushTop_clicked();
109 void on_pushBottom_clicked();
113 virtual bool eventFilter(QObject* watched, QEvent* event)
override;
114 virtual void timerEvent(QTimerEvent* event)
override;
117#if QT_VERSION < 0x060000
118 virtual void enterEvent(QEvent* event)
override;
120 virtual void enterEvent(QEnterEvent* event)
override;
122 virtual void leaveEvent(QEvent* event)
override;
123 virtual void resizeEvent(QResizeEvent* event)
override;
126 class VisibleFilterModel :
public QSortFilterProxyModel
129 VisibleFilterModel(QObject* parent =
nullptr);
131 bool filterAcceptsRow(
int sourceRow,
const QModelIndex &sourceParent)
const override;
134 int m_cachedItemHeight;
135 double m_cachedIconSizeRatio;
136 double m_cachedFontSizeRatio;
141 int m_verticalPadding;
143 AnimationAction m_animationAction;
144 int m_animationTimerIdentifier;
145 int m_animationDelay;
146 int m_animationDuration;
147 bool m_animationEnabled;
150 QStandardItemModel m_model;
151 VisibleFilterModel m_filterModel;
152 QStandardItemModel m_bottomModel;
153 QPropertyAnimation m_animationWidth;
154 QPropertyAnimation m_animationIndent;
156 QWidget* m_leftFramePtr;
157 QWidget* m_mainWidgetPtr;
158 QWidget* m_parentWidgetPtr;
160 IMenuPanelDelegate* m_delegatePtr;
162 QGraphicsDropShadowEffect* m_shadowPtr;
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();
173 void StartTimer(
int time = -1);
175 void StartAnimation();
176 void StopAnimation();
178 void ReconnectModel();
179 void AfterSizesChanged();