1 /* 2 * Copyright (c) 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 #include "core/components_ng/pattern/node_container/node_container_model_ng.h" 16 17 #include "core/components_ng/base/view_stack_processor.h" 18 #include "core/components_ng/pattern/node_container/node_container_node.h" 19 #include "core/components_ng/pattern/node_container/node_container_pattern.h" 20 21 namespace OHOS::Ace::NG { Create()22void NodeContainerModelNG::Create() 23 { 24 auto* stack = ViewStackProcessor::GetInstance(); 25 auto nodeId = stack->ClaimNodeId(); 26 auto frameNode = NodeContainerNode::GetOrCreateNodeContainerNode(nodeId); 27 stack->Push(frameNode); 28 29 ACE_UPDATE_LAYOUT_PROPERTY(LayoutProperty, Alignment, Alignment::TOP_LEFT); 30 } 31 SetMakeFunction(std::function<RefPtr<UINode> ()> && makeFunc)32void NodeContainerModelNG::SetMakeFunction(std::function<RefPtr<UINode>()>&& makeFunc) 33 { 34 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 35 CHECK_NULL_VOID(frameNode); 36 auto pattern = AceType::DynamicCast<NodeContainerPattern>(frameNode->GetPattern()); 37 CHECK_NULL_VOID(pattern); 38 pattern->SetMakeFunction(std::move(makeFunc)); 39 } 40 SetOnResize(std::function<void (const SizeF & size)> && resizeFunc)41void NodeContainerModelNG::SetOnResize(std::function<void(const SizeF& size)>&& resizeFunc) 42 { 43 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 44 CHECK_NULL_VOID(frameNode); 45 auto pattern = AceType::DynamicCast<NodeContainerPattern>(frameNode->GetPattern()); 46 CHECK_NULL_VOID(pattern); 47 pattern->SetOnResize(std::move(resizeFunc)); 48 } 49 SetOnAppear(std::function<void ()> && onAppearCallback)50void NodeContainerModelNG::SetOnAppear(std::function<void()>&& onAppearCallback) 51 { 52 auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<NodeContainerEventHub>(); 53 CHECK_NULL_VOID(eventHub); 54 eventHub->SetControllerAboutToAppear(std::move(onAppearCallback)); 55 } 56 SetOnDisAppear(std::function<void ()> && onDisAppearCallback)57void NodeContainerModelNG::SetOnDisAppear(std::function<void()>&& onDisAppearCallback) 58 { 59 auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<NodeContainerEventHub>(); 60 CHECK_NULL_VOID(eventHub); 61 eventHub->SetControllerAboutToDisappear(std::move(onDisAppearCallback)); 62 } 63 SetOnTouchEvent(TouchEventFunc && touchEventFunc)64void NodeContainerModelNG::SetOnTouchEvent(TouchEventFunc&& touchEventFunc) 65 { 66 auto gestureHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeGestureEventHub(); 67 CHECK_NULL_VOID(gestureHub); 68 gestureHub->SetOnTouchEvent(std::move(touchEventFunc)); 69 } 70 BindController(std::function<void ()> && resetFunc)71void NodeContainerModelNG::BindController(std::function<void()>&& resetFunc) 72 { 73 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 74 CHECK_NULL_VOID(frameNode); 75 auto pattern = AceType::DynamicCast<NodeContainerPattern>(frameNode->GetPattern()); 76 CHECK_NULL_VOID(pattern); 77 pattern->BindController(std::move(resetFunc)); 78 } 79 ResetController()80void NodeContainerModelNG::ResetController() 81 { 82 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 83 CHECK_NULL_VOID(frameNode); 84 auto pattern = AceType::DynamicCast<NodeContainerPattern>(frameNode->GetPattern()); 85 CHECK_NULL_VOID(pattern); 86 pattern->ResetController(); 87 } 88 FireMakeNode()89void NodeContainerModelNG::FireMakeNode() 90 { 91 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 92 CHECK_NULL_VOID(frameNode); 93 auto pattern = AceType::DynamicCast<NodeContainerPattern>(frameNode->GetPattern()); 94 CHECK_NULL_VOID(pattern); 95 pattern->RemakeNode(); 96 } 97 } // namespace OHOS::Ace::NG 98