101 lines
3.8 KiB
C++
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
|