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