Files
cbh/ElaWidgetTools/private/ElaNavigationBarPrivate.h
2025-09-20 01:41:33 +08:00

101 lines
3.8 KiB
C++

#ifndef ELANAVIGATIONBARPRIVATE_H
#define ELANAVIGATIONBARPRIVATE_H
#include <QMap>
#include <QObject>
#include "ElaDef.h"
class QLayout;
class ElaMenu;
class QVBoxLayout;
class QHBoxLayout;
class QLinearGradient;
class ElaNavigationBar;
class ElaNavigationNode;
class ElaNavigationModel;
class ElaNavigationView;
class ElaNavigationDelegate;
class ElaSuggestBox;
class ElaInteractiveCard;
class ElaBaseListView;
class ElaFooterModel;
class ElaFooterDelegate;
class ElaIconButton;
class ElaToolButton;
class ElaNavigationBarPrivate : public QObject {
Q_OBJECT
Q_D_CREATE(ElaNavigationBar)
Q_PROPERTY_CREATE_D(bool, IsTransparent)
Q_PROPERTY_CREATE_D(bool, IsAllowPageOpenInNewWindow)
Q_PROPERTY_CREATE_D(int, NavigationBarWidth)
Q_PROPERTY_CREATE(int, NavigationViewWidth);
public:
explicit ElaNavigationBarPrivate(QObject *parent = nullptr);
~ElaNavigationBarPrivate() override;
Q_SLOT void onNavigationButtonClicked();
Q_SLOT void onNavigationOpenNewWindow(QString nodeKey);
Q_INVOKABLE void onNavigationRouteBack(QVariantMap routeData);
// 核心跳转逻辑
void onTreeViewClicked(const QModelIndex &index, bool isLogRoute = true, bool isRouteBack = false);
void onFooterViewClicked(const QModelIndex &index, bool isLogRoute = true, bool isRouteBack = false);
protected:
virtual bool eventFilter(QObject *watched, QEvent *event);
private:
friend class ElaNavigationView;
friend class ElaNavigationStyle;
ElaThemeType::ThemeMode _themeMode;
QMap<QString, QString> _suggestKeyMap;
QMap<QString, const QMetaObject *> _pageMetaMap;
QMap<QString, int> _pageNewWindowCountMap;
QMap<ElaNavigationNode *, ElaMenu *> _compactMenuMap;
QVBoxLayout *_navigationButtonLayout{nullptr};
QHBoxLayout *_navigationSuggestLayout{nullptr};
QVBoxLayout *_userButtonLayout{nullptr};
ElaIconButton *_userButton{nullptr};
ElaToolButton *_searchButton{nullptr};
ElaToolButton *_navigationButton{nullptr};
ElaNavigationModel *_navigationModel{nullptr};
ElaNavigationView *_navigationView{nullptr};
ElaBaseListView *_footerView{nullptr};
ElaFooterModel *_footerModel{nullptr};
ElaFooterDelegate *_footerDelegate{nullptr};
ElaSuggestBox *_navigationSuggestBox{nullptr};
ElaInteractiveCard *_userCard{nullptr};
bool _isShowUserCard{true};
QList<ElaNavigationNode *> _lastExpandedNodesList;
ElaNavigationType::NavigationDisplayMode _currentDisplayMode{ElaNavigationType::NavigationDisplayMode::Maximal};
void _initNodeModelIndex(const QModelIndex &parentIndex);
void _resetNodeSelected();
void _expandSelectedNodeParent();
void _expandOrCollpaseExpanderNode(ElaNavigationNode *node, bool isExpand);
void _addStackedPage(QWidget *page, QString pageKey);
void _addFooterPage(QWidget *page, QString footKey);
void _raiseNavigationBar();
void _doComponentAnimation(ElaNavigationType::NavigationDisplayMode displayMode, bool isAnimation);
void _handleNavigationExpandState(bool isSave);
void _handleMaximalToCompactLayout();
void _handleCompactToMaximalLayout();
void _resetLayout();
void _doNavigationBarWidthAnimation(ElaNavigationType::NavigationDisplayMode displayMode, bool isAnimation);
void _doNavigationViewWidthAnimation(bool isAnimation);
void _doNavigationButtonAnimation(bool isCompact, bool isAnimation);
void _doSearchButtonAnimation(bool isCompact, bool isAnimation);
void _doUserButtonAnimation(bool isCompact, bool isAnimation);
};
#endif // ELANAVIGATIONBARPRIVATE_H