• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 #include "core/components_ng/pattern/stepper/stepper_model_ng.h"
17 
18 #include "base/i18n/localization.h"
19 #include "core/components_ng/base/view_stack_processor.h"
20 #include "core/components_ng/pattern/stepper/stepper_node.h"
21 #include "core/components_ng/pattern/stepper/stepper_pattern.h"
22 #include "core/components_ng/pattern/swiper/swiper_pattern.h"
23 #include "core/components_v2/inspector/inspector_constants.h"
24 
25 namespace OHOS::Ace::NG {
26 
Create(uint32_t index)27 void StepperModelNG::Create(uint32_t index)
28 {
29     auto* stack = ViewStackProcessor::GetInstance();
30     auto nodeId = stack->ClaimNodeId();
31     auto stepperNode = StepperNode::GetOrCreateStepperNode(
32         V2::STEPPER_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr<StepperPattern>(); });
33     stack->Push(stepperNode);
34     bool hasSwiperNode = stepperNode->HasSwiperNode();
35     auto swiperId = stepperNode->GetSwiperId();
36     if (!hasSwiperNode) {
37         auto swiperNode = CreateSwiperChild(swiperId, index);
38         swiperNode->MountToParent(stepperNode);
39         ACE_UPDATE_LAYOUT_PROPERTY(StepperLayoutProperty, Index, index);
40     } else {
41         auto swiperNode = AceType::DynamicCast<FrameNode>(
42             stepperNode->GetChildAtIndex(stepperNode->GetChildIndexById(stepperNode->GetSwiperId())));
43         CHECK_NULL_VOID(swiperNode);
44         auto swiperController = swiperNode->GetPattern<SwiperPattern>()->GetSwiperController();
45         swiperController->SwipeTo(index);
46     }
47 }
48 
SetOnFinish(RoutineCallbackEvent && eventOnFinish)49 void StepperModelNG::SetOnFinish(RoutineCallbackEvent&& eventOnFinish)
50 {
51     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
52     CHECK_NULL_VOID(frameNode);
53     auto eventHub = frameNode->GetEventHub<StepperEventHub>();
54     CHECK_NULL_VOID(eventHub);
55     eventHub->SetFinishEvent(std::move(eventOnFinish));
56 }
57 
SetOnSkip(RoutineCallbackEvent && eventOnSkip)58 void StepperModelNG::SetOnSkip(RoutineCallbackEvent&& eventOnSkip)
59 {
60     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
61     CHECK_NULL_VOID(frameNode);
62     auto eventHub = frameNode->GetEventHub<StepperEventHub>();
63     CHECK_NULL_VOID(eventHub);
64     eventHub->SetSkipEvent(std::move(eventOnSkip));
65 }
66 
SetOnChange(IndexCallbackEvent && eventOnChange)67 void StepperModelNG::SetOnChange(IndexCallbackEvent&& eventOnChange)
68 {
69     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
70     CHECK_NULL_VOID(frameNode);
71     auto eventHub = frameNode->GetEventHub<StepperEventHub>();
72     CHECK_NULL_VOID(eventHub);
73     eventHub->SetChangeEvent(std::move(eventOnChange));
74 }
75 
SetOnNext(IndexCallbackEvent && eventOnNext)76 void StepperModelNG::SetOnNext(IndexCallbackEvent&& eventOnNext)
77 {
78     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
79     CHECK_NULL_VOID(frameNode);
80     auto eventHub = frameNode->GetEventHub<StepperEventHub>();
81     CHECK_NULL_VOID(eventHub);
82     eventHub->SetNextEvent(std::move(eventOnNext));
83 }
84 
SetOnPrevious(IndexCallbackEvent && eventOnPrevious)85 void StepperModelNG::SetOnPrevious(IndexCallbackEvent&& eventOnPrevious)
86 {
87     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
88     CHECK_NULL_VOID(frameNode);
89     auto eventHub = frameNode->GetEventHub<StepperEventHub>();
90     CHECK_NULL_VOID(eventHub);
91     eventHub->SetPreviousEvent(std::move(eventOnPrevious));
92 }
93 
CreateSwiperChild(int32_t id,uint32_t index)94 RefPtr<FrameNode> StepperModelNG::CreateSwiperChild(int32_t id, uint32_t index)
95 {
96     auto swiperNode =
97         FrameNode::GetOrCreateFrameNode(V2::SWIPER_ETS_TAG, id, []() { return AceType::MakeRefPtr<SwiperPattern>(); });
98     auto swiperPaintProperty = swiperNode->GetPaintProperty<SwiperPaintProperty>();
99     CHECK_NULL_RETURN(swiperPaintProperty, nullptr);
100     swiperPaintProperty->UpdateEdgeEffect(EdgeEffect::NONE);
101     swiperPaintProperty->UpdateDisableSwipe(true);
102     auto swiperLayoutProperty = swiperNode->GetLayoutProperty<SwiperLayoutProperty>();
103     CHECK_NULL_RETURN(swiperLayoutProperty, nullptr);
104     swiperLayoutProperty->UpdateLoop(false);
105     swiperLayoutProperty->UpdateCachedCount(0);
106     swiperLayoutProperty->UpdateIndex(static_cast<int32_t>(index));
107     swiperLayoutProperty->UpdateShowIndicator(false);
108     swiperNode->MarkModifyDone();
109     return swiperNode;
110 }
111 
SetOnChangeEvent(IndexChangeEvent && onChangeEvent)112 void StepperModelNG::SetOnChangeEvent(IndexChangeEvent&& onChangeEvent)
113 {
114     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
115     CHECK_NULL_VOID(frameNode);
116     auto eventHub = frameNode->GetEventHub<StepperEventHub>();
117     CHECK_NULL_VOID(eventHub);
118     eventHub->SetOnChangeEvent(std::move(onChangeEvent));
119 }
120 } // namespace OHOS::Ace::NG
121