1 /*
2  * Copyright (c) 2022-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_BASE_VIEW_ABSTRACT_MODEL_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_BASE_VIEW_ABSTRACT_MODEL_H
18 
19 #include <cstdint>
20 #include <functional>
21 #include <memory>
22 #include <mutex>
23 #include <optional>
24 #include <vector>
25 
26 #include "base/geometry/dimension.h"
27 #include "base/memory/ace_type.h"
28 #include "base/utils/macros.h"
29 #include "core/components/common/layout/position_param.h"
30 #include "core/components/common/properties/alignment.h"
31 #include "core/components/common/properties/popup_param.h"
32 #include "core/components/common/properties/shared_transition_option.h"
33 #include "core/components/common/properties/blend_mode.h"
34 #include "core/components_ng/base/modifier.h"
35 #include "core/components_ng/base/view_abstract.h"
36 #include "core/components_ng/event/focus_box.h"
37 #include "core/components_ng/event/gesture_event_hub.h"
38 #include "core/components_ng/pattern/menu/menu_pattern.h"
39 #include "core/components_ng/pattern/overlay/content_cover_param.h"
40 #include "core/components_ng/pattern/overlay/modal_style.h"
41 #include "core/components_ng/pattern/overlay/sheet_style.h"
42 #include "core/components_ng/property/gradient_property.h"
43 #include "core/components_ng/property/progress_mask_property.h"
44 #include "core/components_ng/property/transition_property.h"
45 #include "core/event/ace_events.h"
46 #include "core/event/key_event.h"
47 #include "core/event/mouse_event.h"
48 #include "core/event/touch_event.h"
49 #include "core/gestures/gesture_info.h"
50 #include "core/image/image_source_info.h"
51 
52 namespace OHOS::Ace {
53 
54 using ClickEventFunc = std::function<void(const ClickInfo* info)>;
55 using RemoteCallback = std::function<void(const BaseEventInfo* info)>;
56 using OnNewDragFunc = std::function<void(const RefPtr<OHOS::Ace::DragEvent>&)>;
57 using BiasPair = std::pair<float, float>;
58 enum class ResponseType : int32_t {
59     RIGHT_CLICK = 0,
60     LONG_PRESS,
61 };
62 
63 class ACE_FORCE_EXPORT ViewAbstractModel {
64 public:
65     static ViewAbstractModel* GetInstance();
66     virtual ~ViewAbstractModel() = default;
67 
68     // basic size
69     virtual void SetWidth(const CalcDimension& width) = 0;
70     virtual void SetHeight(const CalcDimension& height) = 0;
71     virtual void ClearWidthOrHeight(bool isWidth) = 0;
72     virtual void SetMinWidth(const CalcDimension& minWidth) = 0;
73     virtual void SetMinHeight(const CalcDimension& minHeight) = 0;
74     virtual void SetMaxWidth(const CalcDimension& maxWidth) = 0;
75     virtual void SetMaxHeight(const CalcDimension& maxHeight) = 0;
76     virtual void ResetMinSize(bool resetWidth) = 0;
77     virtual void ResetMaxSize(bool resetWidth) = 0;
78 
79     // box props
80     virtual void SetBackgroundColor(const Color& color) = 0;
81     virtual void SetBackgroundImage(const ImageSourceInfo& src, RefPtr<ThemeConstants> themeConstant) = 0;
82     virtual void SetBackgroundImageRepeat(const ImageRepeat& imageRepeat) = 0;
83     virtual void SetBackgroundImageSize(const BackgroundImageSize& bgImgSize) = 0;
84     virtual void SetBackgroundImagePosition(const BackgroundImagePosition& bgImgPosition) = 0;
85     virtual void SetBackgroundBlurStyle(const BlurStyleOption& bgBlurStyle) = 0;
SetBackgroundEffect(const EffectOption & effectOption)86     virtual void SetBackgroundEffect(const EffectOption& effectOption) {}
87     virtual void SetBackgroundImageResizableSlice(const ImageResizableSlice& slice) = 0;
SetForegroundBlurStyle(const BlurStyleOption & fgBlurStyle)88     virtual void SetForegroundBlurStyle(const BlurStyleOption& fgBlurStyle) {}
SetForegroundEffect(float radius)89     virtual void SetForegroundEffect(float radius) {}
SetSphericalEffect(double radio)90     virtual void SetSphericalEffect(double radio) {}
SetPixelStretchEffect(PixStretchEffectOption & option)91     virtual void SetPixelStretchEffect(PixStretchEffectOption& option) {}
SetLightUpEffect(double radio)92     virtual void SetLightUpEffect(double radio) {}
93 
94     virtual void SetPadding(const CalcDimension& value) = 0;
95     virtual void SetPaddings(const std::optional<CalcDimension>& top, const std::optional<CalcDimension>& bottom,
96         const std::optional<CalcDimension>& left, const std::optional<CalcDimension>& right) = 0;
97     virtual void SetPaddings(const NG::PaddingProperty& paddings) = 0;
98     virtual void SetMargin(const CalcDimension& value) = 0;
99     virtual void SetMargins(const std::optional<CalcDimension>& top, const std::optional<CalcDimension>& bottom,
100         const std::optional<CalcDimension>& left, const std::optional<CalcDimension>& right) = 0;
101     virtual void SetMargins(const NG::MarginProperty& margins) = 0;
102     virtual void ResetSafeAreaPadding() = 0;
103     virtual void SetSafeAreaPadding(const CalcDimension& value) = 0;
104     virtual void SetSafeAreaPaddings(const NG::PaddingProperty& paddings) = 0;
105     virtual void SetSafeAreaPaddings(const std::optional<CalcDimension>& top,
106         const std::optional<CalcDimension>& bottom, const std::optional<CalcDimension>& left,
107         const std::optional<CalcDimension>& right) = 0;
108     virtual void SetBorderRadius(const Dimension& value) = 0;
109     virtual void SetBorderRadius(const std::optional<Dimension>& radiusTopLeft,
110         const std::optional<Dimension>& radiusTopRight, const std::optional<Dimension>& radiusBottomLeft,
111         const std::optional<Dimension>& radiusBottomRight) = 0;
112     virtual void SetBorderRadius(const NG::BorderRadiusProperty& borderRadius) = 0;
113     virtual void SetBorderColor(const Color& value) = 0;
114     virtual void SetBorderColor(const std::optional<Color>& colorLeft, const std::optional<Color>& colorRight,
115         const std::optional<Color>& colorTop, const std::optional<Color>& colorBottom) = 0;
116     virtual void SetBorderColor(const NG::BorderColorProperty& borderColors) = 0;
117     virtual void SetBorderWidth(const Dimension& value) = 0;
118     virtual void SetBorderWidth(const std::optional<Dimension>& left, const std::optional<Dimension>& right,
119         const std::optional<Dimension>& top, const std::optional<Dimension>& bottom) = 0;
120     virtual void SetBorderWidth(const std::optional<Dimension>& left, const std::optional<Dimension>& right,
121         const std::optional<Dimension>& top, const std::optional<Dimension>& bottom, bool isLocalized) = 0;
122     virtual void SetBorderStyle(const BorderStyle& value) = 0;
123     virtual void SetBorderStyle(const std::optional<BorderStyle>& styleLeft,
124         const std::optional<BorderStyle>& styleRight, const std::optional<BorderStyle>& styleTop,
125         const std::optional<BorderStyle>& styleBottom) = 0;
SetDashGap(const Dimension & value)126     virtual void SetDashGap(const Dimension& value) {}
SetDashGap(const std::optional<Dimension> & left,const std::optional<Dimension> & right,const std::optional<Dimension> & top,const std::optional<Dimension> & bottom)127     virtual void SetDashGap(const std::optional<Dimension>& left, const std::optional<Dimension>& right,
128         const std::optional<Dimension>& top, const std::optional<Dimension>& bottom) {}
SetDashWidth(const Dimension & value)129     virtual void SetDashWidth(const Dimension& value) {}
SetDashWidth(const std::optional<Dimension> & left,const std::optional<Dimension> & right,const std::optional<Dimension> & top,const std::optional<Dimension> & bottom)130     virtual void SetDashWidth(const std::optional<Dimension>& left, const std::optional<Dimension>& right,
131         const std::optional<Dimension>& top, const std::optional<Dimension>& bottom) {}
132     virtual void SetBorderImage(const RefPtr<BorderImage>& borderImage, uint8_t bitset) = 0;
133     virtual void SetBorderImageGradient(const NG::Gradient& gradient) = 0;
134 
135     // visual
SetVisualEffect(const OHOS::Rosen::VisualEffect * visualEffect)136     virtual void SetVisualEffect(const OHOS::Rosen::VisualEffect* visualEffect) {};
SetBackgroundFilter(const OHOS::Rosen::Filter * backgroundFilter)137     virtual void SetBackgroundFilter(const OHOS::Rosen::Filter* backgroundFilter) {};
SetForegroundFilter(const OHOS::Rosen::Filter * foregroundFilter)138     virtual void SetForegroundFilter(const OHOS::Rosen::Filter* foregroundFilter) {};
SetCompositingFilter(const OHOS::Rosen::Filter * compositingFilter)139     virtual void SetCompositingFilter(const OHOS::Rosen::Filter* compositingFilter) {};
SetBrightnessBlender(const OHOS::Rosen::BrightnessBlender * brightnessBlender)140     virtual void SetBrightnessBlender(const OHOS::Rosen::BrightnessBlender* brightnessBlender) {};
141 
142     // outerBorder
143     virtual void SetOuterBorderRadius(const Dimension& value) = 0;
144     virtual void SetOuterBorderRadius(const std::optional<Dimension>& radiusTopLeft,
145         const std::optional<Dimension>& radiusTopRight, const std::optional<Dimension>& radiusBottomLeft,
146         const std::optional<Dimension>& radiusBottomRight) = 0;
147     virtual void SetOuterBorderRadius(const NG::BorderRadiusProperty& borderRadius) = 0;
148     virtual void SetOuterBorderColor(const Color& value) = 0;
149     virtual void SetOuterBorderColor(const std::optional<Color>& colorLeft, const std::optional<Color>& colorRight,
150         const std::optional<Color>& colorTop, const std::optional<Color>& colorBottom) = 0;
151     virtual void SetOuterBorderColor(const NG::BorderColorProperty& borderColors) = 0;
152     virtual void SetOuterBorderWidth(const Dimension& value) = 0;
153     virtual void SetOuterBorderWidth(const std::optional<Dimension>& left, const std::optional<Dimension>& right,
154         const std::optional<Dimension>& top, const std::optional<Dimension>& bottom) = 0;
155     virtual void SetOuterBorderStyle(const BorderStyle& value) = 0;
156     virtual void SetOuterBorderStyle(const std::optional<BorderStyle>& styleLeft,
157         const std::optional<BorderStyle>& styleRight, const std::optional<BorderStyle>& styleTop,
158         const std::optional<BorderStyle>& styleBottom) = 0;
159 
160     // layout
161     virtual void SetLayoutPriority(int32_t priority) = 0;
162     virtual void SetLayoutWeight(float value) = 0;
163     virtual void SetLayoutWeight(const NG::LayoutWeightPair& value) = 0;
164     virtual void SetPixelRound(uint16_t value) = 0;
165     virtual void SetLayoutDirection(TextDirection value) = 0;
166     virtual void SetAspectRatio(float ratio) = 0;
167     virtual void ResetAspectRatio() = 0;
168     virtual void SetAlign(const Alignment& alignment) = 0;
169     virtual void SetAlignRules(const std::map<AlignDirection, AlignRule>& alignRules) = 0;
170     virtual void SetChainStyle(const ChainInfo& chainInfo) = 0;
171     virtual void SetBias(const BiasPair& biasPair) = 0;
172     virtual void SetUseAlign(
173         AlignDeclarationPtr declaration, AlignDeclaration::Edge edge, const std::optional<Dimension>& offset) = 0;
174     virtual void SetGrid(
175         std::optional<uint32_t> span, std::optional<int32_t> offset, GridSizeType type = GridSizeType::UNDEFINED) = 0;
176     virtual void SetZIndex(int32_t value) = 0;
177 
178     // position
179     virtual void SetPosition(const Dimension& x, const Dimension& y) = 0;
180     virtual void SetOffset(const Dimension& x, const Dimension& y) = 0;
SetPositionEdges(const EdgesParam & value)181     virtual void SetPositionEdges(const EdgesParam& value) {};
SetOffsetEdges(const EdgesParam & value)182     virtual void SetOffsetEdges(const EdgesParam& value) {};
183     virtual void MarkAnchor(const Dimension& x, const Dimension& y) = 0;
ResetPosition()184     virtual void ResetPosition() {};
185 
186     // transforms
187     virtual void SetScale(float x, float y, float z) = 0;
188     virtual void SetPivot(const Dimension& x, const Dimension& y, const Dimension& z) = 0;
189     virtual void SetTranslate(const Dimension& x, const Dimension& y, const Dimension& z) = 0;
190     virtual void SetRotate(float x, float y, float z, float angle, float perspective = 0.0f) = 0;
191     virtual void SetTransformMatrix(const std::vector<float>& matrix) = 0;
192 
193     // display props
194     virtual void SetOpacity(double opacity, bool passThrough = false) = 0;
195     virtual void SetTransition(const NG::TransitionOptions& transitionOptions, bool passThrough = false) = 0;
CleanTransition()196     virtual void CleanTransition() {};
197     virtual void SetChainedTransition(
198         const RefPtr<NG::ChainedTransitionEffect>& effect, NG::TransitionFinishCallback&& finishCallback = nullptr) = 0;
199     virtual void SetOverlay(const std::string& text, std::function<void()>&& buildFunc,
200         const RefPtr<NG::FrameNode>& contentNode, const std::optional<Alignment>& align,
201         const std::optional<Dimension>& offsetX, const std::optional<Dimension>& offsetY, NG::OverlayType type) = 0;
202     virtual void SetVisibility(VisibleType visible, std::function<void(int32_t)>&& changeEventFunc) = 0;
203     virtual void SetSharedTransition(
204         const std::string& shareId, const std::shared_ptr<SharedTransitionOption>& option) = 0;
205     virtual void SetGeometryTransition(const std::string& id,
206         bool followWithoutTransition = false, bool doRegisterSharedTransition = true) = 0;
207     virtual void SetMotionPath(const MotionPathOption& option) = 0;
208     virtual void SetRenderGroup(bool isRenderGroup) = 0;
209     virtual void SetRenderFit(RenderFit renderFit) = 0;
210 
211     // flex props
212     virtual void SetFlexBasis(const Dimension& value) = 0;
213     virtual void SetAlignSelf(FlexAlign value) = 0;
214     virtual void SetFlexShrink(float value) = 0;
215     virtual void SetFlexGrow(float value) = 0;
216     virtual void SetDisplayIndex(int32_t value) = 0;
217     virtual void ResetFlexShrink() = 0;
218 
219     // gradient
220     virtual void SetLinearGradient(const NG::Gradient& gradient) = 0;
221     virtual void SetSweepGradient(const NG::Gradient& gradient) = 0;
222     virtual void SetRadialGradient(const NG::Gradient& gradient) = 0;
223 
224     // clip
225     virtual void SetClipShape(const RefPtr<BasicShape>& shape) = 0;
226     virtual void SetClipEdge(bool isClip) = 0;
227 
228     // effects
229     virtual void SetMask(const RefPtr<BasicShape>& shape) = 0;
230     virtual void SetBackdropBlur(const Dimension& radius, const BlurOption& blurOption) = 0;
231     virtual void SetLinearGradientBlur(NG::LinearGradientBlurPara blurPara) = 0;
232 
233     virtual void SetDynamicDim(float DimDegree) = 0;
234     virtual void SetDynamicLightUp(float rate, float lightUpDegree) = 0;
235     virtual void SetBgDynamicBrightness(const BrightnessOption& brightnessOption) = 0;
236     virtual void SetFgDynamicBrightness(const BrightnessOption& brightnessOption) = 0;
237 
238     virtual void SetFrontBlur(const Dimension& radius, const BlurOption& blurOption) = 0;
SetMotionBlur(const MotionBlurOption & motionBlurOption)239     virtual void SetMotionBlur(const MotionBlurOption& motionBlurOption) {}
240     virtual void SetBackShadow(const std::vector<Shadow>& shadows) = 0;
241     virtual void SetBlendMode(BlendMode blendMode) = 0;
242     virtual void SetBlendApplyType(BlendApplyType blendApplyType) = 0;
243     virtual void SetColorBlend(const Color& value) = 0;
244     virtual void SetWindowBlur(float progress, WindowBlurStyle blurStyle) = 0;
245     virtual void SetBrightness(const Dimension& value) = 0;
246     virtual void SetGrayScale(const Dimension& value) = 0;
247     virtual void SetContrast(const Dimension& value) = 0;
248     virtual void SetSaturate(const Dimension& value) = 0;
249     virtual void SetSepia(const Dimension& value) = 0;
250     virtual void SetInvert(const InvertVariant& value) = 0;
251     virtual void SetSystemBarEffect(bool systemBarEffect) = 0;
252     virtual void SetHueRotate(float value) = 0;
253     virtual void SetClickEffectLevel(const ClickEffectLevel& level, float scaleValue) = 0;
254     virtual void SetUseEffect(bool useEffect, EffectType effectType) = 0;
255     virtual void SetUseShadowBatching(bool useShadowBatching) = 0;
256     virtual void SetFreeze(bool freeze) = 0;
257 
258     // event
259     virtual void SetOnClick(GestureEventFunc&& tapEventFunc, ClickEventFunc&& clickEventFunc,
260         double distanceThreshold = std::numeric_limits<double>::infinity()) = 0;
261     virtual void SetOnGestureJudgeBegin(NG::GestureJudgeFunc&& gestureJudgeFunc) = 0;
262     virtual void SetOnTouchIntercept(NG::TouchInterceptFunc&& touchInterceptFunc) = 0;
263     virtual void SetShouldBuiltInRecognizerParallelWith(
264         NG::ShouldBuiltInRecognizerParallelWithFunc&& shouldBuiltInRecognizerParallelWithFunc) = 0;
265     virtual void SetOnGestureRecognizerJudgeBegin(
266         NG::GestureRecognizerJudgeFunc&& gestureRecognizerJudgeFunc, bool exposeInnerGestureFlag) = 0;
267     virtual void SetOnTouch(TouchEventFunc&& touchEventFunc) = 0;
268     virtual void SetOnKeyEvent(OnKeyConsumeFunc&& onKeyCallback) = 0;
SetOnKeyPreIme(OnKeyConsumeFunc && onKeyCallback)269     virtual void SetOnKeyPreIme(OnKeyConsumeFunc&& onKeyCallback) {}
270     virtual void SetOnMouse(OnMouseEventFunc&& onMouseEventFunc) = 0;
271     virtual void SetOnHover(OnHoverFunc&& onHoverEventFunc) = 0;
272     virtual void SetOnAccessibilityHover(OnAccessibilityHoverFunc&& onAccessibilityHoverEventFunc) = 0;
273     virtual void SetOnDelete(std::function<void()>&& onDeleteCallback) = 0;
274     virtual void SetOnAppear(std::function<void()>&& onAppearCallback) = 0;
275     virtual void SetOnAttach(std::function<void()>&& onAttachCallback) = 0;
276     virtual void SetOnDisAppear(std::function<void()>&& onDisAppearCallback) = 0;
277     virtual void SetOnDetach(std::function<void()>&& onDetachCallback) = 0;
278     virtual void SetOnAccessibility(std::function<void(const std::string&)>&& onAccessibilityCallback) = 0;
279     virtual void SetOnRemoteMessage(RemoteCallback&& onRemoteCallback) = 0;
280     virtual void SetOnFocusMove(std::function<void(int32_t)>&& onFocusMoveCallback) = 0;
281     virtual void SetOnFocus(OnFocusFunc&& onFocusCallback) = 0;
282     virtual void SetOnBlur(OnBlurFunc&& onBlurCallback) = 0;
283     virtual void SetDraggable(bool draggable) = 0;
284     virtual void SetDragPreviewOptions(const NG::DragPreviewOption& previewOption) = 0;
285     virtual void SetOnDragStart(NG::OnDragStartFunc&& onDragStart) = 0;
286     virtual void SetOnPreDrag(NG::OnPreDragFunc&& onPreDrag) = 0;
287     virtual void SetOnDragEnter(NG::OnDragDropFunc&& onDragEnter) = 0;
288     virtual void SetOnDragEnd(OnNewDragFunc&& onDragEnd) = 0;
289     virtual void SetOnDragLeave(NG::OnDragDropFunc&& onDragLeave) = 0;
290     virtual void SetOnDragMove(NG::OnDragDropFunc&& onDragMove) = 0;
291     virtual void SetOnDrop(NG::OnDragDropFunc&& onDrop) = 0;
292     virtual void SetAllowDrop(const std::set<std::string>& allowDrop) = 0;
293     virtual void SetDrawModifier(const RefPtr<NG::DrawModifier>& drawModifier) = 0;
294     virtual void SetDragPreview(const NG::DragDropInfo& info) = 0;
295     virtual void SetOnVisibleChange(
296         std::function<void(bool, double)>&& onVisibleChange, const std::vector<double>& ratios) = 0;
297     virtual void SetOnAreaChanged(
298         std::function<void(const Rect& oldRect, const Offset& oldOrigin, const Rect& rect, const Offset& origin)>&&
299             onAreaChanged) = 0;
300     virtual void SetOnSizeChanged(
301         std::function<void(const NG::RectF& oldRect, const NG::RectF& rect)>&& onSizeChanged) = 0;
302     virtual void* GetFrameNode() = 0;
303 
304     // Disable event when the param is undefined.
305     virtual void DisableOnClick() = 0;
306     virtual void DisableOnTouch() = 0;
307     virtual void DisableOnKeyEvent() = 0;
DisableOnKeyPreIme()308     virtual void DisableOnKeyPreIme() {}
309     virtual void DisableOnHover() = 0;
310     virtual void DisableOnAccessibilityHover() = 0;
311     virtual void DisableOnMouse() = 0;
312     virtual void DisableOnAppear() = 0;
313     virtual void DisableOnDisAppear() = 0;
314     virtual void DisableOnAttach() = 0;
315     virtual void DisableOnDetach() = 0;
316     virtual void DisableOnAreaChange() = 0;
317     virtual void DisableOnFocus() = 0;
318     virtual void DisableOnBlur() = 0;
319 
320     // interact
321     virtual void SetResponseRegion(const std::vector<DimensionRect>& responseRegion) = 0;
SetMouseResponseRegion(const std::vector<DimensionRect> & responseRegion)322     virtual void SetMouseResponseRegion(const std::vector<DimensionRect>& responseRegion) {}
323     virtual void SetEnabled(bool enabled) = 0;
324     virtual void SetTouchable(bool touchable) = 0;
325     virtual void SetFocusable(bool focusable) = 0;
SetTabStop(bool tabStop)326     virtual void SetTabStop(bool tabStop) {}
327     virtual void SetFocusNode(bool focus) = 0;
328     virtual void SetTabIndex(int32_t index) = 0;
329     virtual void SetFocusOnTouch(bool isSet) = 0;
330     virtual void SetDefaultFocus(bool isSet) = 0;
331     virtual void SetGroupDefaultFocus(bool isSet) = 0;
SetFocusBoxStyle(const NG::FocusBoxStyle & style)332     virtual void SetFocusBoxStyle(const NG::FocusBoxStyle& style) {}
SetFocusScopeId(const std::string & focusScopeId,bool isGroup,bool arrowKeyStepOut)333     virtual void SetFocusScopeId(const std::string& focusScopeId, bool isGroup, bool arrowKeyStepOut) {}
SetFocusScopePriority(const std::string & focusScopeId,const uint32_t focusPriority)334     virtual void SetFocusScopePriority(const std::string& focusScopeId, const uint32_t focusPriority) {}
335     virtual void SetInspectorId(const std::string& inspectorId) = 0;
SetAutoEventParam(const std::string & param)336     virtual void SetAutoEventParam(const std::string& param) {}
337     virtual void SetRestoreId(int32_t restoreId) = 0;
338     virtual void SetDebugLine(const std::string& line) = 0;
339     virtual void SetHoverEffect(HoverEffectType hoverEffect) = 0;
340     virtual void SetHitTestMode(NG::HitTestMode hitTestMode) = 0;
341     virtual void SetOnTouchTestFunc(NG::OnChildTouchTestFunc&& onChildTouchTest) = 0;
342     virtual void SetKeyboardShortcut(const std::string& value, const std::vector<ModifierKey>& keys,
343         std::function<void()>&& onKeyboardShortcutAction) = 0;
344     virtual void SetMonopolizeEvents(bool monopolizeEvents) = 0;
345     virtual void SetDragEventStrictReportingEnabled(bool dragEventStrictReportingEnabled) = 0;
SetDisallowDropForcedly(bool isDisallowDropForcedly)346     virtual void SetDisallowDropForcedly(bool isDisallowDropForcedly) {}
347     // obscured
348     virtual void SetObscured(const std::vector<ObscuredReasons>& reasons) = 0;
349     virtual void SetPrivacySensitive(bool flag) = 0;
350 
351     // background
352     virtual void BindBackground(std::function<void()>&& buildFunc, const Alignment& align) = 0;
353 
354     // popup and menu
355     virtual void BindPopup(const RefPtr<PopupParam>& param, const RefPtr<AceType>& customNode) = 0;
356     virtual void DismissPopup() = 0;
357     virtual void BindMenu(
358         std::vector<NG::OptionParam>&& params, std::function<void()>&& buildFunc, const NG::MenuParam& menuParam) = 0;
359     virtual void BindContextMenu(ResponseType type, std::function<void()>& buildFunc, const NG::MenuParam& menuParam,
360         std::function<void()>& previewBuildFunc) = 0;
361     virtual void BindDragWithContextMenuParams(const NG::MenuParam& menuParam) = 0;
362     virtual void BindContentCover(bool isShow, std::function<void(const std::string&)>&& callback,
363         std::function<void()>&& buildFunc, NG::ModalStyle& modalStyle, std::function<void()>&& onAppear,
364         std::function<void()>&& onDisappear, std::function<void()>&& onWillAppear,
365         std::function<void()>&& onWillDisappear, const NG::ContentCoverParam& contentCoverParam) = 0;
366     virtual void BindSheet(bool isShow, std::function<void(const std::string&)>&& callback,
367         std::function<void()>&& buildFunc, std::function<void()>&& titleBuildFunc, NG::SheetStyle& sheetStyle,
368         std::function<void()>&& onAppear, std::function<void()>&& onDisappear, std::function<void()>&& shouldDismiss,
369         std::function<void(const int32_t info)>&& onWillDismiss, std::function<void()>&& onWillAppear,
370         std::function<void()>&& onWillDisappear, std::function<void(const float)>&& onHeightDidChange,
371         std::function<void(const float)>&& onDetentsDidChange,
372         std::function<void(const float)>&& onWidthDidChange,
373         std::function<void(const float)>&& onTypeDidChange,
374         std::function<void()>&& sheetSpringBack) = 0;
375     virtual void DismissContentCover() = 0;
376     virtual void DismissSheet() = 0;
377     virtual void SheetSpringBack() = 0;
DismissDialog()378     virtual void DismissDialog() {};
379 
380     // accessibility
381     virtual void SetAccessibilityGroup(bool accessible) = 0;
382     virtual void SetAccessibilityText(const std::string& text) = 0;
383     virtual void SetAccessibilityTextHint(const std::string& text) = 0;
384     virtual void SetAccessibilityDescription(const std::string& description) = 0;
385     virtual void SetAccessibilityImportance(const std::string& importance) = 0;
386     virtual void SetAccessibilityVirtualNode(std::function<void()>&& buildFunc) = 0;
387     virtual void SetAccessibilitySelected(bool selected, bool resetValue) = 0;
388     virtual void SetAccessibilityChecked(bool checked, bool resetValue) = 0;
389     virtual void SetAccessibilityTextPreferred(bool accessibilityTextPreferred) = 0;
390 
391     // progress mask
392     virtual void SetProgressMask(const RefPtr<NG::ProgressMaskProperty>& progress) = 0;
393     // foregroundColor
394     virtual void SetForegroundColor(const Color& color) = 0;
395     virtual void SetForegroundColorStrategy(const ForegroundColorStrategy& strategy) = 0;
396 
397     // custom animation properties
398     virtual void CreateAnimatablePropertyFloat(
399         const std::string& propertyName, float value, const std::function<void(float)>& onCallbackEvent) = 0;
400     virtual void UpdateAnimatablePropertyFloat(const std::string& propertyName, float value) = 0;
401 
402     virtual void CreateAnimatableArithmeticProperty(const std::string& propertyName,
403         RefPtr<NG::CustomAnimatableArithmetic>& value,
404         std::function<void(const RefPtr<NG::CustomAnimatableArithmetic>&)>& onCallbackEvent) = 0;
405     virtual void UpdateAnimatableArithmeticProperty(
406         const std::string& propertyName, RefPtr<NG::CustomAnimatableArithmetic>& value) = 0;
407     virtual void UpdateSafeAreaExpandOpts(const NG::SafeAreaExpandOpts& opts) = 0;
408 
409     // global light
410     virtual void SetLightPosition(
411         const CalcDimension& positionX, const CalcDimension& positionY, const CalcDimension& positionZ) = 0;
412     virtual void SetLightIntensity(const float value) = 0;
413     virtual void SetLightColor(const Color& value) = 0;
414     virtual void SetLightIlluminated(const uint32_t value) = 0;
415     virtual void SetIlluminatedBorderWidth(const Dimension& value) = 0;
416     virtual void SetBloom(const float value) = 0;
417     virtual void SetPositionLocalizedEdges(bool needLocalized) = 0;
418     virtual void SetLocalizedMarkAnchor(bool needLocalized) = 0;
419     virtual void SetOffsetLocalizedEdges(bool needLocalized) = 0;
420 
421 private:
422     static std::unique_ptr<ViewAbstractModel> instance_;
423     static std::mutex mutex_;
424 };
425 } // namespace OHOS::Ace
426 
427 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_BASE_VIEW_ABSTRACT_MODEL_H
428