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_v2/inspector/inspector_composed_component.h" 29 30 namespace OHOS::Ace { 31 32 struct SwiperParameters { 33 std::optional<Dimension> dimLeft; 34 std::optional<Dimension> dimTop; 35 std::optional<Dimension> dimRight; 36 std::optional<Dimension> dimBottom; 37 std::optional<Dimension> itemWidth; 38 std::optional<Dimension> itemHeight; 39 std::optional<Dimension> selectedItemWidth; 40 std::optional<Dimension> selectedItemHeight; 41 std::optional<bool> maskValue; 42 std::optional<Color> colorVal; 43 std::optional<Color> selectedColorVal; 44 }; 45 46 struct SwiperDigitalParameters { 47 std::optional<Dimension> dimLeft; 48 std::optional<Dimension> dimTop; 49 std::optional<Dimension> dimRight; 50 std::optional<Dimension> dimBottom; 51 std::optional<Color> fontColor; 52 std::optional<Color> selectedFontColor; 53 std::optional<Dimension> fontSize; 54 std::optional<Dimension> selectedFontSize; 55 std::optional<FontWeight> fontWeight; 56 std::optional<FontWeight> selectedFontWeight; 57 }; 58 59 struct SwiperArrowParameters { 60 std::optional<bool> isShowBackground; 61 std::optional<bool> isSidebarMiddle; 62 std::optional<Dimension> backgroundSize; 63 std::optional<Color> backgroundColor; 64 std::optional<Dimension> arrowSize; 65 std::optional<Color> arrowColor; 66 }; 67 68 struct AnimationCallbackInfo { 69 std::optional<float> currentOffset; 70 std::optional<float> targetOffset; 71 std::optional<float> velocity; 72 }; 73 74 using AnimationStartEvent = std::function<void(int32_t index, int32_t targetIndex, const AnimationCallbackInfo& info)>; 75 using AnimationEndEvent = std::function<void(int32_t index, const AnimationCallbackInfo& info)>; 76 using GestureSwipeEvent = std::function<void(int32_t index, const AnimationCallbackInfo& info)>; 77 78 class ACE_EXPORT SwiperModel { 79 public: 80 static SwiperModel* GetInstance(); 81 virtual ~SwiperModel() = default; 82 83 virtual RefPtr<SwiperController> Create(); 84 virtual void SetDirection(Axis axis); 85 virtual void SetIndex(uint32_t index); 86 virtual void SetAutoPlay(bool autoPlay); 87 virtual void SetAutoPlayInterval(uint32_t interval); 88 virtual void SetDuration(uint32_t duration); 89 virtual void SetCurve(const RefPtr<Curve>& curve); 90 virtual void SetLoop(bool loop); 91 virtual void SetEnabled(bool enabled); 92 virtual void SetDisableSwipe(bool disableSwipe); 93 virtual void SetEdgeEffect(EdgeEffect EdgeEffect); 94 virtual void SetDisplayMode(SwiperDisplayMode displayMode); 95 virtual void SetDisplayCount(int32_t displayCount); ResetDisplayCount()96 virtual void ResetDisplayCount() {} ResetDisplayMode()97 virtual void ResetDisplayMode() {} 98 virtual void SetMinSize(const Dimension& minSize); 99 virtual void SetShowIndicator(bool showIndicator); 100 virtual void SetItemSpace(const Dimension& itemSpace); 101 virtual void SetCachedCount(int32_t cachedCount); 102 virtual void SetOnChange(std::function<void(const BaseEventInfo* info)>&& onChange); SetOnAnimationStart(std::function<void (const BaseEventInfo * info)> && onAnimationStart)103 virtual void SetOnAnimationStart(std::function<void(const BaseEventInfo* info)>&& onAnimationStart) {} SetOnAnimationEnd(std::function<void (const BaseEventInfo * info)> && onAnimationEnd)104 virtual void SetOnAnimationEnd(std::function<void(const BaseEventInfo* info)>&& onAnimationEnd) {} SetOnAnimationStart(AnimationStartEvent && onAnimationStart)105 virtual void SetOnAnimationStart(AnimationStartEvent&& onAnimationStart) {} SetOnAnimationEnd(AnimationEndEvent && onAnimationEnd)106 virtual void SetOnAnimationEnd(AnimationEndEvent&& onAnimationEnd) {} SetOnGestureSwipe(GestureSwipeEvent && gestureSwipe)107 virtual void SetOnGestureSwipe(GestureSwipeEvent&& gestureSwipe) {} 108 109 virtual void SetRemoteMessageEventId(RemoteCallback&& remoteCallback); 110 virtual void SetOnClick( 111 std::function<void(const BaseEventInfo* info, const RefPtr<V2::InspectorFunctionImpl>& impl)>&& value); 112 virtual void SetMainSwiperSizeWidth(); 113 virtual void SetMainSwiperSizeHeight(); 114 virtual void SetIndicatorStyle(const SwiperParameters& swiperParameters); SetIndicatorType(SwiperIndicatorType indicatorType)115 virtual void SetIndicatorType(SwiperIndicatorType indicatorType) {} SetIsIndicatorCustomSize(bool isCustomSize)116 virtual void SetIsIndicatorCustomSize(bool isCustomSize) {} SetDotIndicatorStyle(const SwiperParameters & swiperParameters)117 virtual void SetDotIndicatorStyle(const SwiperParameters& swiperParameters) {} SetDigitIndicatorStyle(const SwiperDigitalParameters & swiperDigitalParameters)118 virtual void SetDigitIndicatorStyle(const SwiperDigitalParameters& swiperDigitalParameters) {} SetPreviousMargin(const Dimension & prevMargin)119 virtual void SetPreviousMargin(const Dimension& prevMargin) {} SetNextMargin(const Dimension & nextMargin)120 virtual void SetNextMargin(const Dimension& nextMargin) {} 121 virtual void SetOnChangeEvent(std::function<void(const BaseEventInfo* info)>&& onChangeEvent); SetIndicatorIsBoolean(bool isBoolean)122 virtual void SetIndicatorIsBoolean(bool isBoolean) {} SetArrowStyle(const SwiperArrowParameters & swiperArrowParameters)123 virtual void SetArrowStyle(const SwiperArrowParameters& swiperArrowParameters) {} SetDisplayArrow(bool displayArrow)124 virtual void SetDisplayArrow(bool displayArrow) {} SetHoverShow(bool hoverShow)125 virtual void SetHoverShow(bool hoverShow) {} 126 private: 127 static std::unique_ptr<SwiperModel> instance_; 128 static std::mutex mutex_; 129 }; 130 131 } // namespace OHOS::Ace 132 133 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SWIPER_SWIPER_MODEL_H 134