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
16 #include "core/components_ng/pattern/navigation/tool_bar_node.h"
17
18 #include "core/components_ng/pattern/navigation/tool_bar_pattern.h"
19
20 namespace OHOS::Ace::NG {
NavToolbarNode(const std::string & tag,int32_t nodeId)21 NavToolbarNode::NavToolbarNode(const std::string& tag, int32_t nodeId)
22 : FrameNode(tag, nodeId, MakeRefPtr<NavToolbarPattern>())
23 {}
24
~NavToolbarNode()25 NavToolbarNode::~NavToolbarNode()
26 {
27 auto pipeline = GetContextRefPtr();
28 CHECK_NULL_VOID(pipeline);
29 auto overlayManager = pipeline->GetOverlayManager();
30 CHECK_NULL_VOID(overlayManager);
31 auto toolBarPattern = GetPattern<NavToolbarPattern>();
32 CHECK_NULL_VOID(toolBarPattern);
33 auto toolBarDialog = toolBarPattern->GetDialogNode();
34 if (toolBarDialog) {
35 overlayManager->CloseDialog(toolBarDialog);
36 }
37 }
38
GetOrCreateToolbarNode(const std::string & tag,int32_t nodeId,const std::function<RefPtr<Pattern> (void)> & patternCreator)39 RefPtr<NavToolbarNode> NavToolbarNode::GetOrCreateToolbarNode(
40 const std::string& tag, int32_t nodeId, const std::function<RefPtr<Pattern>(void)>& patternCreator)
41 {
42 auto frameNode = GetFrameNode(tag, nodeId);
43 CHECK_NULL_RETURN(!frameNode, AceType::DynamicCast<NavToolbarNode>(frameNode));
44 auto pattern = patternCreator ? patternCreator() : MakeRefPtr<Pattern>();
45 auto toolbarNode = AceType::MakeRefPtr<NavToolbarNode>(tag, nodeId, pattern);
46 toolbarNode->InitializePatternAndContext();
47 ElementRegister::GetInstance()->AddUINode(toolbarNode);
48 return toolbarNode;
49 }
50
ToJsonValue(std::unique_ptr<JsonValue> & json,const InspectorFilter & filter) const51 void NavToolbarNode::ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const
52 {
53 auto toolBarPattern = GetPattern<NavToolbarPattern>();
54 CHECK_NULL_VOID(toolBarPattern);
55 auto toolBarOptions = toolBarPattern->GetToolBarOptions();
56 toolBarOptions.ToJsonValue(json, filter);
57 auto moreButtonOptions = toolBarPattern->GetToolbarMoreButtonOptions();
58 auto mbOptionJson = JsonUtil::Create(true);
59 moreButtonOptions.ToJsonValue(mbOptionJson, filter);
60 json->PutExtAttr("moreButtonOptions", mbOptionJson, filter);
61 }
62 } // namespace OHOS::Ace::NG
63