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 #ifdef SUPPORT_DIGITAL_CROWN 32 #include "core/event/crown_event.h" 33 #endif 34 35 namespace OHOS::Ace::Framework { 36 class JSIndicatorController; 37 } 38 39 namespace OHOS::Ace { 40 41 struct SwiperParameters { 42 std::optional<Dimension> dimLeft; 43 std::optional<Dimension> dimTop; 44 std::optional<Dimension> dimRight; 45 std::optional<Dimension> dimBottom; 46 std::optional<Dimension> dimStart; 47 std::optional<Dimension> dimEnd; 48 std::optional<Dimension> itemWidth; 49 std::optional<Dimension> itemHeight; 50 std::optional<Dimension> selectedItemWidth; 51 std::optional<Dimension> selectedItemHeight; 52 std::optional<bool> maskValue; 53 std::optional<Color> colorVal; 54 std::optional<Color> selectedColorVal; 55 std::optional<int32_t> maxDisplayCountVal; 56 std::optional<bool> ignoreSizeValue; 57 std::optional<bool> setIgnoreSizeValue; 58 std::optional<Dimension> dimSpace; 59 60 RefPtr<ResourceObject> resourceDimLeftValueObject; 61 RefPtr<ResourceObject> resourceDimTopValueObject; 62 RefPtr<ResourceObject> resourceDimRightValueObject; 63 RefPtr<ResourceObject> resourceDimBottomValueObject; 64 RefPtr<ResourceObject> resourceColorValueObject; 65 RefPtr<ResourceObject> resourceSelectedColorValueObject; 66 RefPtr<ResourceObject> resourceItemWidthValueObject; 67 RefPtr<ResourceObject> resourceItemHeightValueObject; 68 RefPtr<ResourceObject> resourceSelectedItemWidthValueObject; 69 RefPtr<ResourceObject> resourceSelectedItemHeightValueObject; 70 RefPtr<ResourceObject> resourceItemSizeValueObject; 71 std::unordered_set<std::string> parametersByUser; 72 }; 73 74 struct SwiperDigitalParameters { 75 std::optional<Dimension> dimLeft; 76 std::optional<Dimension> dimTop; 77 std::optional<Dimension> dimRight; 78 std::optional<Dimension> dimBottom; 79 std::optional<Dimension> dimStart; 80 std::optional<Dimension> dimEnd; 81 std::optional<Color> fontColor; 82 std::optional<Color> selectedFontColor; 83 std::optional<Dimension> fontSize; 84 std::optional<Dimension> selectedFontSize; 85 std::optional<FontWeight> fontWeight; 86 std::optional<FontWeight> selectedFontWeight; 87 std::optional<bool> ignoreSizeValue; 88 std::optional<bool> setIgnoreSizeValue; 89 90 RefPtr<ResourceObject> resourceDimLeftValueObject; 91 RefPtr<ResourceObject> resourceDimTopValueObject; 92 RefPtr<ResourceObject> resourceDimRightValueObject; 93 RefPtr<ResourceObject> resourceDimBottomValueObject; 94 RefPtr<ResourceObject> resourceFontColorValueObject; 95 RefPtr<ResourceObject> resourceSelectedFontColorValueObject; 96 RefPtr<ResourceObject> resourceFontSizeValueObject; 97 RefPtr<ResourceObject> resourceSelectedFontSizeValueObject; 98 std::unordered_set<std::string> parametersByUser; 99 }; 100 101 struct SwiperArcDotParameters { 102 std::optional<SwiperArcDirection> arcDirection; 103 std::optional<Color> itemColor; 104 std::optional<Color> selectedItemColor; 105 std::optional<Color> containerColor; 106 std::optional<NG::Gradient> maskColor; 107 }; 108 109 struct SwiperArrowParameters { 110 std::optional<bool> isShowBackground; 111 std::optional<bool> isSidebarMiddle; 112 std::optional<Dimension> backgroundSize; 113 std::optional<Color> backgroundColor; 114 std::optional<Dimension> arrowSize; 115 std::optional<Color> arrowColor; 116 117 RefPtr<ResourceObject> resourceBackgroundSizeValueObject; 118 RefPtr<ResourceObject> resourceBackgroundColorValueObject; 119 RefPtr<ResourceObject> resourceArrowSizeValueObject; 120 RefPtr<ResourceObject> resourceArrowColorValueObject; 121 std::unordered_set<std::string> parametersByUser; 122 }; 123 124 struct AnimationCallbackInfo { 125 std::optional<float> currentOffset; 126 std::optional<float> targetOffset; 127 std::optional<float> velocity; 128 bool isForceStop = false; 129 }; 130 131 struct SwiperMarginOptions { 132 float margin; 133 bool ignoreBlank; 134 }; 135 136 struct SwiperAutoPlayOptions { 137 bool stopWhenTouched = true; 138 }; 139 140 struct SwiperContentWillScrollResult { 141 int32_t currentIndex; 142 int32_t comingIndex; 143 float offset; 144 }; 145 146 using AnimationStartEvent = std::function<void(int32_t index, int32_t targetIndex, const AnimationCallbackInfo& info)>; 147 using AnimationStartEventPtr = std::shared_ptr<AnimationStartEvent>; 148 using AnimationEndEvent = std::function<void(int32_t index, const AnimationCallbackInfo& info)>; 149 using AnimationEndEventPtr = std::shared_ptr<AnimationEndEvent>; 150 using GestureSwipeEvent = std::function<void(int32_t index, const AnimationCallbackInfo& info)>; 151 using ContentDidScrollEvent = 152 std::function<void(int32_t selectedIndex, int32_t index, float position, float mainAxisLength)>; 153 using ContentWillScrollEvent = std::function<bool(const SwiperContentWillScrollResult& result)>; 154 155 class ACE_FORCE_EXPORT SwiperModel { 156 public: 157 static SwiperModel* GetInstance(); 158 virtual ~SwiperModel() = default; 159 160 virtual RefPtr<SwiperController> Create(bool isCreateArc = false); 161 virtual void SetDirection(Axis axis); 162 virtual void SetIndex(uint32_t index); SetIndicatorInteractive(bool interactive)163 virtual void SetIndicatorInteractive(bool interactive) {} 164 virtual void SetAutoPlay(bool autoPlay); 165 virtual void SetAutoPlayInterval(uint32_t interval); 166 virtual void SetDuration(uint32_t duration); 167 virtual void SetCurve(const RefPtr<Curve>& curve); 168 virtual void SetLoop(bool loop); 169 virtual void SetEnabled(bool enabled); 170 virtual void SetDisableSwipe(bool disableSwipe); 171 virtual void SetEdgeEffect(EdgeEffect EdgeEffect); 172 virtual void SetDisplayMode(SwiperDisplayMode displayMode); ResetDisplayMode()173 virtual void ResetDisplayMode() {} 174 virtual void SetDisplayCount(int32_t displayCount); ResetDisplayCount()175 virtual void ResetDisplayCount() {} 176 virtual void SetMinSize(const Dimension& minSize); ResetMinSize()177 virtual void ResetMinSize() {} 178 virtual void SetShowIndicator(bool showIndicator); 179 virtual void SetItemSpace(const Dimension& itemSpace); 180 virtual void SetCachedCount(int32_t cachedCount); SetCachedIsShown(bool isShown)181 virtual void SetCachedIsShown(bool isShown) {} 182 virtual void SetOnChange(std::function<void(const BaseEventInfo* info)>&& onChange); SetOnUnselected(std::function<void (const BaseEventInfo * info)> && onUnselected)183 virtual void SetOnUnselected(std::function<void(const BaseEventInfo* info)>&& onUnselected) {} SetOnAnimationStart(std::function<void (const BaseEventInfo * info)> && onAnimationStart)184 virtual void SetOnAnimationStart(std::function<void(const BaseEventInfo* info)>&& onAnimationStart) {} SetOnAnimationEnd(std::function<void (const BaseEventInfo * info)> && onAnimationEnd)185 virtual void SetOnAnimationEnd(std::function<void(const BaseEventInfo* info)>&& onAnimationEnd) {} SetOnAnimationStart(AnimationStartEvent && onAnimationStart)186 virtual void SetOnAnimationStart(AnimationStartEvent&& onAnimationStart) {} SetOnAnimationEnd(AnimationEndEvent && onAnimationEnd)187 virtual void SetOnAnimationEnd(AnimationEndEvent&& onAnimationEnd) {} SetOnGestureSwipe(GestureSwipeEvent && gestureSwipe)188 virtual void SetOnGestureSwipe(GestureSwipeEvent&& gestureSwipe) {} 189 190 virtual void SetRemoteMessageEventId(RemoteCallback&& remoteCallback); 191 virtual void SetOnClick( 192 std::function<void(const BaseEventInfo* info, const RefPtr<V2::InspectorFunctionImpl>& impl)>&& value); 193 virtual void SetMainSwiperSizeWidth(); 194 virtual void SetMainSwiperSizeHeight(); 195 virtual void SetIndicatorStyle(const SwiperParameters& swiperParameters); SetIndicatorType(SwiperIndicatorType indicatorType)196 virtual void SetIndicatorType(SwiperIndicatorType indicatorType) {} SetIsIndicatorCustomSize(bool isCustomSize)197 virtual void SetIsIndicatorCustomSize(bool isCustomSize) {} SetDotIndicatorStyle(const SwiperParameters & swiperParameters)198 virtual void SetDotIndicatorStyle(const SwiperParameters& swiperParameters) {} SetArcDotIndicatorStyle(const SwiperArcDotParameters & swiperArcDotParameters)199 virtual void SetArcDotIndicatorStyle(const SwiperArcDotParameters& swiperArcDotParameters) {} SetDigitIndicatorStyle(const SwiperDigitalParameters & swiperDigitalParameters)200 virtual void SetDigitIndicatorStyle(const SwiperDigitalParameters& swiperDigitalParameters) {} SetPreviousMargin(const Dimension & prevMargin,bool ignoreBlank)201 virtual void SetPreviousMargin(const Dimension& prevMargin, bool ignoreBlank) {} SetNextMargin(const Dimension & nextMargin,bool ignoreBlank)202 virtual void SetNextMargin(const Dimension& nextMargin, bool ignoreBlank) {} 203 virtual void SetOnChangeEvent(std::function<void(const BaseEventInfo* info)>&& onChangeEvent); SetIndicatorIsBoolean(bool isBoolean)204 virtual void SetIndicatorIsBoolean(bool isBoolean) {} SetAutoPlayOptions(const SwiperAutoPlayOptions & swiperAutoPlayOptions)205 virtual void SetAutoPlayOptions(const SwiperAutoPlayOptions& swiperAutoPlayOptions) {} SetArrowStyle(const SwiperArrowParameters & swiperArrowParameters)206 virtual void SetArrowStyle(const SwiperArrowParameters& swiperArrowParameters) {} SetDisplayArrow(bool displayArrow)207 virtual void SetDisplayArrow(bool displayArrow) {} SetHoverShow(bool hoverShow)208 virtual void SetHoverShow(bool hoverShow) {} SetNestedScroll(const NestedScrollOptions & nestedOpt)209 virtual void SetNestedScroll(const NestedScrollOptions& nestedOpt) {} SetSwipeByGroup(bool swipeByGroup)210 virtual void SetSwipeByGroup(bool swipeByGroup) {} SetCustomContentTransition(SwiperContentAnimatedTransition & transition)211 virtual void SetCustomContentTransition(SwiperContentAnimatedTransition& transition) {} SetOnContentDidScroll(ContentDidScrollEvent && onContentDidScroll)212 virtual void SetOnContentDidScroll(ContentDidScrollEvent&& onContentDidScroll) {} SetOnContentWillScroll(ContentWillScrollEvent && onContentWillScroll)213 virtual void SetOnContentWillScroll(ContentWillScrollEvent&& onContentWillScroll) {} SetOnScrollStateChanged(std::function<void (const BaseEventInfo * info)> && onScrollStateChanged)214 virtual void SetOnScrollStateChanged( 215 std::function<void(const BaseEventInfo* info)>&& onScrollStateChanged) {} SetPageFlipMode(int32_t pageFlipMode)216 virtual void SetPageFlipMode(int32_t pageFlipMode) {} SetDigitalCrownSensitivity(int32_t sensitivity)217 virtual void SetDigitalCrownSensitivity(int32_t sensitivity) {} SetDisableTransitionAnimation(bool isDisable)218 virtual void SetDisableTransitionAnimation(bool isDisable) {} SetBindIndicator(bool bind)219 virtual void SetBindIndicator(bool bind) {} SetJSIndicatorController(std::function<void ()> resetFunc)220 virtual void SetJSIndicatorController(std::function<void()> resetFunc) {} SetOnSelected(std::function<void (const BaseEventInfo * info)> && onSelected)221 virtual void SetOnSelected(std::function<void(const BaseEventInfo* info)>&& onSelected) {} SetIndicatorController(Framework::JSIndicatorController * controller)222 virtual void SetIndicatorController(Framework::JSIndicatorController* controller) {} GetIndicatorController()223 virtual Framework::JSIndicatorController* GetIndicatorController() { return nullptr; } SetMaintainVisibleContentPosition(bool value)224 virtual void SetMaintainVisibleContentPosition(bool value) {} ProcessNextMarginWithResourceObj(const RefPtr<ResourceObject> & resObj)225 virtual void ProcessNextMarginWithResourceObj(const RefPtr<ResourceObject>& resObj) {} ProcessPreviousMarginWithResourceObj(const RefPtr<ResourceObject> & resObj)226 virtual void ProcessPreviousMarginWithResourceObj(const RefPtr<ResourceObject>& resObj) {}; 227 228 private: 229 static std::unique_ptr<SwiperModel> instance_; 230 static std::mutex mutex_; 231 }; 232 233 } // namespace OHOS::Ace 234 235 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SWIPER_SWIPER_MODEL_H 236