1  /*
2   * Copyright (c) 2022-2023 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_PATTERNS_SWIPER_SWIPER_MODEL_H
17  #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SWIPER_SWIPER_MODEL_H
18  
19  #include <mutex>
20  
21  #include "base/geometry/axis.h"
22  #include "base/geometry/dimension.h"
23  #include "base/memory/referenced.h"
24  #include "base/utils/macros.h"
25  #include "core/components/common/layout/constants.h"
26  #include "core/components/declaration/swiper/swiper_declaration.h"
27  #include "core/components_ng/base/view_abstract_model.h"
28  #include "core/components_ng/pattern/scrollable/scrollable_properties.h"
29  #include "core/components_ng/pattern/swiper/swiper_content_transition_proxy.h"
30  #include "core/components_v2/inspector/inspector_composed_component.h"
31  
32  namespace OHOS::Ace {
33  
34  struct SwiperParameters {
35      std::optional<Dimension> dimLeft;
36      std::optional<Dimension> dimTop;
37      std::optional<Dimension> dimRight;
38      std::optional<Dimension> dimBottom;
39      std::optional<Dimension> dimStart;
40      std::optional<Dimension> dimEnd;
41      std::optional<Dimension> itemWidth;
42      std::optional<Dimension> itemHeight;
43      std::optional<Dimension> selectedItemWidth;
44      std::optional<Dimension> selectedItemHeight;
45      std::optional<bool> maskValue;
46      std::optional<Color> colorVal;
47      std::optional<Color> selectedColorVal;
48      std::optional<int32_t> maxDisplayCountVal;
49  };
50  
51  struct SwiperDigitalParameters {
52      std::optional<Dimension> dimLeft;
53      std::optional<Dimension> dimTop;
54      std::optional<Dimension> dimRight;
55      std::optional<Dimension> dimBottom;
56      std::optional<Dimension> dimStart;
57      std::optional<Dimension> dimEnd;
58      std::optional<Color> fontColor;
59      std::optional<Color> selectedFontColor;
60      std::optional<Dimension> fontSize;
61      std::optional<Dimension> selectedFontSize;
62      std::optional<FontWeight> fontWeight;
63      std::optional<FontWeight> selectedFontWeight;
64  };
65  
66  struct SwiperArrowParameters {
67      std::optional<bool> isShowBackground;
68      std::optional<bool> isSidebarMiddle;
69      std::optional<Dimension> backgroundSize;
70      std::optional<Color> backgroundColor;
71      std::optional<Dimension> arrowSize;
72      std::optional<Color> arrowColor;
73  };
74  
75  struct AnimationCallbackInfo {
76      std::optional<float> currentOffset;
77      std::optional<float> targetOffset;
78      std::optional<float> velocity;
79      bool isForceStop = false;
80  };
81  
82  struct SwiperMarginOptions {
83      float margin;
84      bool ignoreBlank;
85  };
86  
87  using AnimationStartEvent = std::function<void(int32_t index, int32_t targetIndex, const AnimationCallbackInfo& info)>;
88  using AnimationStartEventPtr = std::shared_ptr<AnimationStartEvent>;
89  using AnimationEndEvent = std::function<void(int32_t index, const AnimationCallbackInfo& info)>;
90  using AnimationEndEventPtr = std::shared_ptr<AnimationEndEvent>;
91  using GestureSwipeEvent = std::function<void(int32_t index, const AnimationCallbackInfo& info)>;
92  using ContentDidScrollEvent =
93      std::function<void(int32_t selectedIndex, int32_t index, float position, float mainAxisLength)>;
94  
95  class ACE_FORCE_EXPORT SwiperModel {
96  public:
97      static SwiperModel* GetInstance();
98      virtual ~SwiperModel() = default;
99  
100      virtual RefPtr<SwiperController> Create();
101      virtual void SetDirection(Axis axis);
102      virtual void SetIndex(uint32_t index);
SetIndicatorInteractive(bool interactive)103      virtual void SetIndicatorInteractive(bool interactive) {}
104      virtual void SetAutoPlay(bool autoPlay);
105      virtual void SetAutoPlayInterval(uint32_t interval);
106      virtual void SetDuration(uint32_t duration);
107      virtual void SetCurve(const RefPtr<Curve>& curve);
108      virtual void SetLoop(bool loop);
109      virtual void SetEnabled(bool enabled);
110      virtual void SetDisableSwipe(bool disableSwipe);
111      virtual void SetEdgeEffect(EdgeEffect EdgeEffect);
112      virtual void SetDisplayMode(SwiperDisplayMode displayMode);
113      virtual void SetDisplayCount(int32_t displayCount);
ResetDisplayCount()114      virtual void ResetDisplayCount() {}
115      virtual void SetMinSize(const Dimension& minSize);
116      virtual void SetShowIndicator(bool showIndicator);
117      virtual void SetItemSpace(const Dimension& itemSpace);
118      virtual void SetCachedCount(int32_t cachedCount);
119      virtual void SetOnChange(std::function<void(const BaseEventInfo* info)>&& onChange);
SetOnAnimationStart(std::function<void (const BaseEventInfo * info)> && onAnimationStart)120      virtual void SetOnAnimationStart(std::function<void(const BaseEventInfo* info)>&& onAnimationStart) {}
SetOnAnimationEnd(std::function<void (const BaseEventInfo * info)> && onAnimationEnd)121      virtual void SetOnAnimationEnd(std::function<void(const BaseEventInfo* info)>&& onAnimationEnd) {}
SetOnAnimationStart(AnimationStartEvent && onAnimationStart)122      virtual void SetOnAnimationStart(AnimationStartEvent&& onAnimationStart) {}
SetOnAnimationEnd(AnimationEndEvent && onAnimationEnd)123      virtual void SetOnAnimationEnd(AnimationEndEvent&& onAnimationEnd) {}
SetOnGestureSwipe(GestureSwipeEvent && gestureSwipe)124      virtual void SetOnGestureSwipe(GestureSwipeEvent&& gestureSwipe) {}
125  
126      virtual void SetRemoteMessageEventId(RemoteCallback&& remoteCallback);
127      virtual void SetOnClick(
128          std::function<void(const BaseEventInfo* info, const RefPtr<V2::InspectorFunctionImpl>& impl)>&& value);
129      virtual void SetMainSwiperSizeWidth();
130      virtual void SetMainSwiperSizeHeight();
131      virtual void SetIndicatorStyle(const SwiperParameters& swiperParameters);
SetIndicatorType(SwiperIndicatorType indicatorType)132      virtual void SetIndicatorType(SwiperIndicatorType indicatorType) {}
SetIsIndicatorCustomSize(bool isCustomSize)133      virtual void SetIsIndicatorCustomSize(bool isCustomSize) {}
SetDotIndicatorStyle(const SwiperParameters & swiperParameters)134      virtual void SetDotIndicatorStyle(const SwiperParameters& swiperParameters) {}
SetDigitIndicatorStyle(const SwiperDigitalParameters & swiperDigitalParameters)135      virtual void SetDigitIndicatorStyle(const SwiperDigitalParameters& swiperDigitalParameters) {}
SetPreviousMargin(const Dimension & prevMargin,bool ignoreBlank)136      virtual void SetPreviousMargin(const Dimension& prevMargin, bool ignoreBlank) {}
SetNextMargin(const Dimension & nextMargin,bool ignoreBlank)137      virtual void SetNextMargin(const Dimension& nextMargin, bool ignoreBlank) {}
138      virtual void SetOnChangeEvent(std::function<void(const BaseEventInfo* info)>&& onChangeEvent);
SetIndicatorIsBoolean(bool isBoolean)139      virtual void SetIndicatorIsBoolean(bool isBoolean) {}
SetArrowStyle(const SwiperArrowParameters & swiperArrowParameters)140      virtual void SetArrowStyle(const SwiperArrowParameters& swiperArrowParameters) {}
SetDisplayArrow(bool displayArrow)141      virtual void SetDisplayArrow(bool displayArrow) {}
SetHoverShow(bool hoverShow)142      virtual void SetHoverShow(bool hoverShow) {}
SetNestedScroll(const NestedScrollOptions & nestedOpt)143      virtual void SetNestedScroll(const NestedScrollOptions& nestedOpt) {}
SetSwipeByGroup(bool swipeByGroup)144      virtual void SetSwipeByGroup(bool swipeByGroup) {}
SetCustomContentTransition(SwiperContentAnimatedTransition & transition)145      virtual void SetCustomContentTransition(SwiperContentAnimatedTransition& transition) {}
SetOnContentDidScroll(ContentDidScrollEvent && onContentDidScroll)146      virtual void SetOnContentDidScroll(ContentDidScrollEvent&& onContentDidScroll) {}
147  private:
148      static std::unique_ptr<SwiperModel> instance_;
149      static std::mutex mutex_;
150  };
151  
152  } // namespace OHOS::Ace
153  
154  #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SWIPER_SWIPER_MODEL_H
155