mcu_hi3321_watch/application/wearable/nativeapp/nativeui/main/include/DialBinParserV3.h
2025-05-26 20:15:20 +08:00

70 lines
2.8 KiB
C++

/*
* Copyright (c) CompanyNameMagicTag 2025. All rights reserved.
* Description: DialBinParserV3
* Author:
* Create: 2025-02-06
*/
#ifndef GRAPHIC_LITE_DIAL_BIN_PARSER_V3_H
#define GRAPHIC_LITE_DIAL_BIN_PARSER_V3_H
#include "DialBinParserManager.h"
#include "DialModelTime.h"
#include "components/ui_abstract_progress.h"
#include "DialViewContainer.h"
#include "DialDataType.h"
#include "DialOHSliceId.h"
namespace OHOS {
class DialBinParserV3 : public DialBinParserInterface {
public:
DialBinParserV3();
~DialBinParserV3() override;
bool UpdateDial(const std::string& file, FILE* fp, DialViewGroup* group, DisplayState state) override;
bool GetDialPreviewInfo(FILE* fp, DialPreviewInfo* info) override;
protected:
bool ParseDialHeader(FILE* file);
bool ParserDialStaticImg(ContainerInterface &parent);
bool ParserDialSequenceImg(ContainerInterface &parent);
bool ParserDialRotateImg(ContainerInterface &parent);
bool ParserDialOptionImg(ContainerInterface &parent);
bool ParserDialDigitalImg(ContainerInterface &parent);
bool ParserDialLabel(ContainerInterface &parent);
bool ParserDialArcLabel(ContainerInterface &parent);
bool ParserDialBoxProgress(ContainerInterface &parent);
bool ParserDialArcProgress(ContainerInterface &parent);
bool ParserDialVideo(ContainerInterface &parent);
bool ParserDialClick(ContainerInterface &parent);
bool ParserDialKaleidoscope(ContainerInterface &parent);
bool ParserDialContainer(ContainerInterface &parent);
bool ParserDialOptions(ContainerInterface &parent);
private:
void* MallocAndReadBuf(FILE* file, uint32_t readSize);
bool SetProgressType(FILE* fp, UIAbstractProgress* view, DialProgressType data);
static constexpr uint8_t DIAL_BIN_PARSER_FUNC_NUM = 14; // 14: func max value
bool (DialBinParserV3::*funcArray_[DIAL_BIN_PARSER_FUNC_NUM])(ContainerInterface&);
void AddToParentWithView(ContainerInterface &parent, uint8_t displayMode, UIView *view);
void AddToParentWithDialView(ContainerInterface &parent, uint8_t displayMode,
DialView *view, DialDataType bindData, bool isPeriodic);
struct {
uint8_t *viewType;
uint8_t dialViewCount;
FILE *file;
uint8_t curIndex;
} curViewType_;
bool ParseTimeIntervals(FILE* fp, uint8_t cnt, TimeChangeListener *listener);
bool ParseViewType(uint8_t *viewType, uint8_t dialViewCount, FILE *file);
bool ParseContainerSubviews(DialViewContainer *container, uint8_t num);
bool ParseOptionsSubviews(ContainerInterface &parent);
DialViewGroup* dialGroup_ = nullptr;
std::string file_;
const uint32_t dirId_ = 0xfef << 20; // 20: offset
uint32_t imageOffset_ = 0;
DisplayState state_ = DisplayState::NORMAL;
}; // class DialBinParserV3
} // namespace OHOS
#endif // GRAPHIC_LITE_DIAL_BIN_PARSER_V3_H