feat: 添加ElaWidgetTool库

This commit is contained in:
sleepwithoutbz
2025-09-19 22:40:52 +08:00
parent 5f93e8caf6
commit 4eef5c7fd5
407 changed files with 36325 additions and 7 deletions

View File

@@ -0,0 +1,48 @@
#ifndef ELANAVIGATIONSTYLE_H
#define ELANAVIGATIONSTYLE_H
#include <QModelIndex>
#include <QProxyStyle>
#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