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 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_BASE_VIEW_STACK_MODEL_NG_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_BASE_VIEW_STACK_MODEL_NG_H
18 
19 #include <memory>
20 
21 #include "base/memory/ace_type.h"
22 #include "base/utils/macros.h"
23 #include "core/components/common/properties/animation_option.h"
24 #include "core/components_ng/base/view_stack_model.h"
25 #include "core/components_ng/base/view_stack_processor.h"
26 
27 namespace OHOS::Ace::NG {
28 
29 class ACE_EXPORT ViewStackModelNG : public ViewStackModel {
30 public:
Push(const RefPtr<AceType> & node,bool isCustomView)31     void Push(const RefPtr<AceType>& node, bool isCustomView) override
32     {
33         auto uiNode = AceType::DynamicCast<UINode>(node);
34         ViewStackProcessor::GetInstance()->Push(uiNode, isCustomView);
35     }
36 
Pop()37     void Pop() override
38     {
39         ViewStackProcessor::GetInstance()->Pop();
40     }
41 
PopContainer()42     void PopContainer() override
43     {
44         ViewStackProcessor::GetInstance()->PopContainer();
45     }
46 
PushKey(const std::string & key)47     void PushKey(const std::string& key) override
48     {
49         ViewStackProcessor::GetInstance()->PushKey(key);
50     }
51 
PopKey()52     void PopKey() override
53     {
54         ViewStackProcessor::GetInstance()->PopKey();
55     }
56 
NewScope()57     void NewScope() override
58     {
59         scopeStack_ = std::make_unique<ScopedViewStackProcessor>();
60     }
61 
Finish()62     RefPtr<AceType> Finish() override
63     {
64         auto node = ViewStackProcessor::GetInstance()->Finish();
65         scopeStack_.reset();
66         return node;
67     }
68 
ProcessViewId(const std::string & viewId)69     std::string ProcessViewId(const std::string& viewId) override
70     {
71         return ViewStackProcessor::GetInstance()->ProcessViewId(viewId);
72     }
73 
GetImplicitAnimationOption()74     AnimationOption GetImplicitAnimationOption() override
75     {
76         return ViewStackProcessor::GetInstance()->GetImplicitAnimationOption();
77     }
78 
ClearVisualState()79     void ClearVisualState() override
80     {
81         ViewStackProcessor::GetInstance()->ClearVisualState();
82     }
83 
SetVisualState(VisualState state)84     void SetVisualState(VisualState state) override
85     {
86         ViewStackProcessor::GetInstance()->SetVisualState(state);
87     }
88 
StartGetAccessRecordingFor(int32_t elmtId)89     void StartGetAccessRecordingFor(int32_t elmtId) override
90     {
91         ViewStackProcessor::GetInstance()->StartGetAccessRecordingFor(elmtId);
92     }
93 
GetElmtIdToAccountFor()94     int32_t GetElmtIdToAccountFor() override
95     {
96         return ViewStackProcessor::GetInstance()->GetNodeIdToAccountFor();
97     }
98 
SetElmtIdToAccountFor(int32_t elmtId)99     void SetElmtIdToAccountFor(int32_t elmtId) override
100     {
101         ViewStackProcessor::GetInstance()->SetNodeIdToAccountFor(elmtId);
102     }
103 
StopGetAccessRecording()104     void StopGetAccessRecording() override
105     {
106         ViewStackProcessor::GetInstance()->StopGetAccessRecording();
107     }
108 
ImplicitPopBeforeContinue()109     void ImplicitPopBeforeContinue() override
110     {
111         ViewStackProcessor::GetInstance()->ImplicitPopBeforeContinue();
112     }
113 
GetAndPushFrameNode(const std::string & tag,int32_t elmtId)114     void GetAndPushFrameNode(const std::string& tag, int32_t elmtId) override
115     {
116         ViewStackProcessor::GetInstance()->GetAndPushFrameNode(tag, elmtId);
117     }
118 
CheckTopNodeFirstBuilding()119     bool CheckTopNodeFirstBuilding() const override
120     {
121         return ViewStackProcessor::GetInstance()->CheckTopNodeFirstBuilding();
122     }
123 
IsEmptyStack()124     bool IsEmptyStack() const override
125     {
126         return ViewStackProcessor::GetInstance()->IsEmpty();
127     }
128 
129 private:
130     std::unique_ptr<ScopedViewStackProcessor> scopeStack_;
131 };
132 
133 } // namespace OHOS::Ace::NG
134 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_BASE_VIEW_STACK_MODEL_NG_H
135