#ifndef ELANAVIGATIONSTYLE_H #define ELANAVIGATIONSTYLE_H #include #include #include "ElaDef.h" class ElaNavigationNode; class ElaNavigationView; class QPropertyAnimation; class ElaNavigationStyle : public QProxyStyle { Q_OBJECT Q_PROPERTY_CREATE(qreal, Opacity) Q_PROPERTY_CREATE(qreal, Rotate) Q_PROPERTY_CREATE(int, ItemHeight) Q_PRIVATE_CREATE(ElaNavigationView*, NavigationView) Q_PROPERTY_CREATE(qreal, LastSelectMarkTop) Q_PROPERTY_CREATE(qreal, LastSelectMarkBottom) Q_PROPERTY_CREATE(qreal, SelectMarkTop) Q_PROPERTY_CREATE(qreal, SelectMarkBottom) Q_PRIVATE_CREATE(QModelIndex, PressIndex) public: explicit ElaNavigationStyle(QStyle* style = nullptr); ~ElaNavigationStyle() override; void drawPrimitive(PrimitiveElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget = nullptr) const override; void drawControl(ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget = nullptr) const override; QSize sizeFromContents(ContentsType type, const QStyleOption* option, const QSize& size, const QWidget* widget) const override; void navigationNodeStateChange(QVariantMap data); private: ElaThemeType::ThemeMode _themeMode; bool _isSelectMarkDisplay{true}; int _leftPadding{11}; int _iconAreaWidth{40}; int _textRightSpacing{3}; int _indicatorIconAreaWidth{34}; ElaNavigationNode* _opacityAnimationTargetNode{nullptr}; ElaNavigationNode* _expandAnimationTargetNode{nullptr}; ElaNavigationNode* _lastSelectedNode{nullptr}; QPropertyAnimation* _lastSelectMarkTopAnimation{nullptr}; QPropertyAnimation* _lastSelectMarkBottomAnimation{nullptr}; QPropertyAnimation* _selectMarkTopAnimation{nullptr}; QPropertyAnimation* _selectMarkBottomAnimation{nullptr}; bool _compareItemY(ElaNavigationNode* node1, ElaNavigationNode* node2); }; #endif // ELANAVIGATIONSTYLE_H