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,109 @@
#ifndef ELAMESSAGEBARPRIVATE_H
#define ELAMESSAGEBARPRIVATE_H
#include <QMap>
#include <QObject>
#include <QQueue>
#include <QVariantMap>
#include "ElaDef.h"
#include "ElaSingleton.h"
enum WorkStatus
{
Idle = 0x0000,
CreateAnimation = 0x0001,
OtherEventAnimation = 0x0002,
};
class ElaMessageBar;
class ElaMessageBarManager : public QObject
{
Q_OBJECT
Q_SINGLETON_CREATE_H(ElaMessageBarManager)
private:
explicit ElaMessageBarManager(QObject* parent = nullptr);
~ElaMessageBarManager();
public:
//请求事件堆栈调用
void requestMessageBarEvent(ElaMessageBar* messageBar);
//发布创建事件
void postMessageBarCreateEvent(ElaMessageBar* messageBar);
//发布终止事件
void postMessageBarEndEvent(ElaMessageBar* messageBar);
//强制发布终止事件
void forcePostMessageBarEndEvent(ElaMessageBar* messageBar);
//获取当前事件数量
int getMessageBarEventCount(ElaMessageBar* messageBar);
//更新活动序列
void updateActiveMap(ElaMessageBar* messageBar, bool isActive);
private:
QMap<ElaMessageBar*, QList<QVariantMap>> _messageBarEventMap;
};
class ElaIconButton;
class QPainter;
class ElaMessageBarPrivate : public QObject
{
Q_OBJECT
Q_D_CREATE(ElaMessageBar)
Q_PROPERTY_CREATE(qreal, Opacity)
public:
explicit ElaMessageBarPrivate(QObject* parent = nullptr);
~ElaMessageBarPrivate();
void tryToRequestMessageBarEvent();
WorkStatus getWorkMode() const;
Q_INVOKABLE void onOtherMessageBarEnd(QVariantMap eventData);
Q_INVOKABLE void messageBarEnd(QVariantMap eventData);
Q_SLOT void onCloseButtonClicked();
private:
friend class ElaMessageBarManager;
ElaThemeType::ThemeMode _themeMode;
int _borderRadius{6};
QString _title{""};
QString _text{""};
ElaMessageBarType::PositionPolicy _policy;
ElaMessageBarType::MessageMode _messageMode;
qreal _createTime{0};
// 位置数据
int _leftPadding{20}; // 左边框到图标中心
int _titleLeftSpacing{30}; // 图标中心到Title左侧
int _textLeftSpacing{15}; // Title右侧到Text左侧
int _closeButtonLeftRightMargin{20}; // closeButton左右总Margin
int _closeButtonWidth{30};
int _messageBarHorizontalMargin{20};
int _messageBarVerticalBottomMargin{20};
int _messageBarVerticalTopMargin{50};
int _messageBarSpacing{15};
int _shadowBorderWidth{6};
// 逻辑数据
bool _isMessageBarCreateAnimationFinished{false};
bool _isReadyToEnd{false};
bool _isNormalDisplay{false};
bool _isMessageBarEventAnimationStart{false};
ElaIconButton* _closeButton{nullptr};
Q_INVOKABLE void _messageBarCreate(int displayMsec);
// 初始坐标计算
void _calculateInitialPos(int& startX, int& startY, int& endX, int& endY);
//获取总高度和次序信息
QList<int> _getOtherMessageBarTotalData(bool isJudgeCreateOrder = false);
//计算目标坐标
qreal _calculateTargetPosY();
//创建次序判断
bool _judgeCreateOrder(ElaMessageBar* otherMessageBar);
// 绘制函数
void _drawSuccess(QPainter* painter);
void _drawWarning(QPainter* painter);
void _drawInformation(QPainter* painter);
void _drawError(QPainter* painter);
};
#endif // ELAMESSAGEBARPRIVATE_H