• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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