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 struct SwiperContentWillScrollResult { 88 int32_t currentIndex; 89 int32_t comingIndex; 90 float offset; 91 }; 92 93 using AnimationStartEvent = std::function<void(int32_t index, int32_t targetIndex, const AnimationCallbackInfo& info)>; 94 using AnimationStartEventPtr = std::shared_ptr<AnimationStartEvent>; 95 using AnimationEndEvent = std::function<void(int32_t index, const AnimationCallbackInfo& info)>; 96 using AnimationEndEventPtr = std::shared_ptr<AnimationEndEvent>; 97 using GestureSwipeEvent = std::function<void(int32_t index, const AnimationCallbackInfo& info)>; 98 using ContentDidScrollEvent = 99 std::function<void(int32_t selectedIndex, int32_t index, float position, float mainAxisLength)>; 100 using ContentWillScrollEvent = std::function<bool(const SwiperContentWillScrollResult& result)>; 101 102 class ACE_FORCE_EXPORT SwiperModel { 103 public: 104 static SwiperModel* GetInstance(); 105 virtual ~SwiperModel() = default; 106 107 virtual RefPtr<SwiperController> Create(); 108 virtual void SetDirection(Axis axis); 109 virtual void SetIndex(uint32_t index); SetIndicatorInteractive(bool interactive)110 virtual void SetIndicatorInteractive(bool interactive) {} 111 virtual void SetAutoPlay(bool autoPlay); 112 virtual void SetAutoPlayInterval(uint32_t interval); 113 virtual void SetDuration(uint32_t duration); 114 virtual void SetCurve(const RefPtr<Curve>& curve); 115 virtual void SetLoop(bool loop); 116 virtual void SetEnabled(bool enabled); 117 virtual void SetDisableSwipe(bool disableSwipe); 118 virtual void SetEdgeEffect(EdgeEffect EdgeEffect); 119 virtual void SetDisplayMode(SwiperDisplayMode displayMode); 120 virtual void SetDisplayCount(int32_t displayCount); ResetDisplayCount()121 virtual void ResetDisplayCount() {} 122 virtual void SetMinSize(const Dimension& minSize); 123 virtual void SetShowIndicator(bool showIndicator); 124 virtual void SetItemSpace(const Dimension& itemSpace); 125 virtual void SetCachedCount(int32_t cachedCount); SetCachedIsShown(bool isShown)126 virtual void SetCachedIsShown(bool isShown) {} 127 virtual void SetOnChange(std::function<void(const BaseEventInfo* info)>&& onChange); SetOnAnimationStart(std::function<void (const BaseEventInfo * info)> && onAnimationStart)128 virtual void SetOnAnimationStart(std::function<void(const BaseEventInfo* info)>&& onAnimationStart) {} SetOnAnimationEnd(std::function<void (const BaseEventInfo * info)> && onAnimationEnd)129 virtual void SetOnAnimationEnd(std::function<void(const BaseEventInfo* info)>&& onAnimationEnd) {} SetOnAnimationStart(AnimationStartEvent && onAnimationStart)130 virtual void SetOnAnimationStart(AnimationStartEvent&& onAnimationStart) {} SetOnAnimationEnd(AnimationEndEvent && onAnimationEnd)131 virtual void SetOnAnimationEnd(AnimationEndEvent&& onAnimationEnd) {} SetOnGestureSwipe(GestureSwipeEvent && gestureSwipe)132 virtual void SetOnGestureSwipe(GestureSwipeEvent&& gestureSwipe) {} 133 134 virtual void SetRemoteMessageEventId(RemoteCallback&& remoteCallback); 135 virtual void SetOnClick( 136 std::function<void(const BaseEventInfo* info, const RefPtr<V2::InspectorFunctionImpl>& impl)>&& value); 137 virtual void SetMainSwiperSizeWidth(); 138 virtual void SetMainSwiperSizeHeight(); 139 virtual void SetIndicatorStyle(const SwiperParameters& swiperParameters); SetIndicatorType(SwiperIndicatorType indicatorType)140 virtual void SetIndicatorType(SwiperIndicatorType indicatorType) {} SetIsIndicatorCustomSize(bool isCustomSize)141 virtual void SetIsIndicatorCustomSize(bool isCustomSize) {} SetDotIndicatorStyle(const SwiperParameters & swiperParameters)142 virtual void SetDotIndicatorStyle(const SwiperParameters& swiperParameters) {} SetDigitIndicatorStyle(const SwiperDigitalParameters & swiperDigitalParameters)143 virtual void SetDigitIndicatorStyle(const SwiperDigitalParameters& swiperDigitalParameters) {} SetPreviousMargin(const Dimension & prevMargin,bool ignoreBlank)144 virtual void SetPreviousMargin(const Dimension& prevMargin, bool ignoreBlank) {} SetNextMargin(const Dimension & nextMargin,bool ignoreBlank)145 virtual void SetNextMargin(const Dimension& nextMargin, bool ignoreBlank) {} 146 virtual void SetOnChangeEvent(std::function<void(const BaseEventInfo* info)>&& onChangeEvent); SetIndicatorIsBoolean(bool isBoolean)147 virtual void SetIndicatorIsBoolean(bool isBoolean) {} SetArrowStyle(const SwiperArrowParameters & swiperArrowParameters)148 virtual void SetArrowStyle(const SwiperArrowParameters& swiperArrowParameters) {} SetDisplayArrow(bool displayArrow)149 virtual void SetDisplayArrow(bool displayArrow) {} SetHoverShow(bool hoverShow)150 virtual void SetHoverShow(bool hoverShow) {} SetNestedScroll(const NestedScrollOptions & nestedOpt)151 virtual void SetNestedScroll(const NestedScrollOptions& nestedOpt) {} SetSwipeByGroup(bool swipeByGroup)152 virtual void SetSwipeByGroup(bool swipeByGroup) {} SetCustomContentTransition(SwiperContentAnimatedTransition & transition)153 virtual void SetCustomContentTransition(SwiperContentAnimatedTransition& transition) {} SetOnContentDidScroll(ContentDidScrollEvent && onContentDidScroll)154 virtual void SetOnContentDidScroll(ContentDidScrollEvent&& onContentDidScroll) {} SetBindIndicator(bool bind)155 virtual void SetBindIndicator(bool bind) {} SetPageFlipMode(int32_t pageFlipMode)156 virtual void SetPageFlipMode(int32_t pageFlipMode) {} SetOnContentWillScroll(ContentWillScrollEvent && onContentWillScroll)157 virtual void SetOnContentWillScroll(ContentWillScrollEvent&& onContentWillScroll) {} 158 159 private: 160 static std::unique_ptr<SwiperModel> instance_; 161 static std::mutex mutex_; 162 }; 163 164 } // namespace OHOS::Ace 165 166 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SWIPER_SWIPER_MODEL_H 167