• 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 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_NAVIGATION_NAV_BAR_NODE_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_NAVIGATION_NAV_BAR_NODE_H
18 
19 #include <cstdint>
20 #include <list>
21 
22 #include "core/animation/page_transition_common.h"
23 #include "core/components_ng/base/frame_node.h"
24 #include "core/components_ng/base/group_node.h"
25 #include "core/components_ng/pattern/navigation/bar_item_node.h"
26 #include "core/components_ng/pattern/navigation/navigation_declaration.h"
27 #include "core/components_ng/pattern/navigation/title_bar_node.h"
28 #include "core/components_ng/property/property.h"
29 
30 namespace OHOS::Ace::NG {
31 
32 class ACE_EXPORT NavBarNode : public GroupNode {
DECLARE_ACE_TYPE(NavBarNode,GroupNode)33     DECLARE_ACE_TYPE(NavBarNode, GroupNode)
34 public:
35     NavBarNode(const std::string& tag, int32_t nodeId, const RefPtr<Pattern>& pattern) : GroupNode(tag, nodeId, pattern)
36     {}
37     ~NavBarNode() override = default;
38     void AddChildToGroup(const RefPtr<UINode>& child, int32_t slot = DEFAULT_NODE_SLOT) override;
39     static RefPtr<NavBarNode> GetOrCreateNavBarNode(
40         const std::string& tag, int32_t nodeId, const std::function<RefPtr<Pattern>(void)>& patternCreator);
41 
IsAtomicNode()42     bool IsAtomicNode() const override
43     {
44         return false;
45     }
46 
SetMenu(const RefPtr<UINode> & menu)47     void SetMenu(const RefPtr<UINode>& menu)
48     {
49         menu_ = menu;
50     }
51 
GetMenu()52     const RefPtr<UINode>& GetMenu() const
53     {
54         return menu_;
55     }
56 
SetToolbarContainer(const RefPtr<UINode> & menu)57     void SetToolbarContainer(const RefPtr<UINode>& menu)
58     {
59         toolbarMenu_ = menu;
60     }
61 
GetToolbarContainer()62     const RefPtr<UINode>& GetToolbarContainer() const
63     {
64         return toolbarMenu_;
65     }
66 
SetMenuNode(const RefPtr<UINode> & menuNode)67     void SetMenuNode(const RefPtr<UINode>& menuNode)
68     {
69         moreMenuNode_ = menuNode;
70     }
71 
SetToolbarMenuNode(const RefPtr<UINode> & menuNode)72     void SetToolbarMenuNode(const RefPtr<UINode>& menuNode)
73     {
74         toolbarMoreMenuNode_ = menuNode;
75     }
76 
SetLandscapeMenuNode(const RefPtr<UINode> & moreLandscapeMenuNode)77     void SetLandscapeMenuNode(const RefPtr<UINode>& moreLandscapeMenuNode)
78     {
79         moreLandscapeMenuNode_ = moreLandscapeMenuNode;
80     }
81 
SetLandscapeMenu(const RefPtr<UINode> & menu)82     void SetLandscapeMenu(const RefPtr<UINode>& menu)
83     {
84         landscapeMenu_ = menu;
85     }
86 
GetLandscapeMenu()87     const RefPtr<UINode>& GetLandscapeMenu() const
88     {
89         return landscapeMenu_;
90     }
91 
SetTitleBarNode(const RefPtr<UINode> & title)92     void SetTitleBarNode(const RefPtr<UINode>& title)
93     {
94         titleBarNode_ = title;
95     }
96 
GetTitleBarNode()97     const RefPtr<UINode>& GetTitleBarNode() const
98     {
99         return titleBarNode_;
100     }
101 
SetNavBarContentNode(const RefPtr<UINode> & navBarContentNode)102     void SetNavBarContentNode(const RefPtr<UINode>& navBarContentNode)
103     {
104         navBarContentNode_ = navBarContentNode;
105     }
106 
GetNavBarContentNode()107     const RefPtr<UINode>& GetNavBarContentNode() const
108     {
109         return navBarContentNode_;
110     }
111 
SetToolBarNode(const RefPtr<UINode> & toolBarNode)112     void SetToolBarNode(const RefPtr<UINode>& toolBarNode)
113     {
114         toolBarNode_ = toolBarNode;
115     }
116 
GetToolBarNode()117     const RefPtr<UINode>& GetToolBarNode() const
118     {
119         return toolBarNode_;
120     }
121 
SetPreToolBarNode(const RefPtr<UINode> & preToolBarNode)122     void SetPreToolBarNode(const RefPtr<UINode>& preToolBarNode)
123     {
124         preToolBarNode_ = preToolBarNode;
125     }
126 
GetPreToolBarNode()127     const RefPtr<UINode>& GetPreToolBarNode() const
128     {
129         return preToolBarNode_;
130     }
131 
SetToolBarDividerNode(const RefPtr<UINode> & toolBarDividerNode)132     void SetToolBarDividerNode(const RefPtr<UINode>& toolBarDividerNode)
133     {
134         toolBarDividerNode_ = toolBarDividerNode;
135     }
136 
GetToolBarDividerNode()137     const RefPtr<UINode>& GetToolBarDividerNode() const
138     {
139         return toolBarDividerNode_;
140     }
141 
SetNarBarUseToolbarConfiguration(bool isNewToolbar)142     void SetNarBarUseToolbarConfiguration(bool isNewToolbar)
143     {
144         isNewToolbar_ = isNewToolbar;
145     }
146 
IsNavbarUseToolbarConfiguration()147     bool IsNavbarUseToolbarConfiguration() const
148     {
149         return isNewToolbar_;
150     }
151 
SetIsTitleMenuNodeShowing(const bool isTitleMenuNodeShowing)152     void SetIsTitleMenuNodeShowing(const bool isTitleMenuNodeShowing)
153     {
154         isTitleMenuNodeShowing_ = isTitleMenuNodeShowing;
155     }
156 
IsTitleMenuNodeShowing()157     bool IsTitleMenuNodeShowing() const
158     {
159         return isTitleMenuNodeShowing_;
160     }
161 
162     std::string GetTitleString() const;
163     std::string GetSubtitleString() const;
164     std::string GetBarItemsString(bool isMenu) const;
165     void ToJsonValue(std::unique_ptr<JsonValue>& json) const override;
166 
167     // custom node checking
168     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(PrevTitleIsCustom, bool);
OnPrevTitleIsCustomUpdate(bool value)169     void OnPrevTitleIsCustomUpdate(bool value) {}
170     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(PrevMenuIsCustom, bool);
OnPrevMenuIsCustomUpdate(bool value)171     void OnPrevMenuIsCustomUpdate(bool value) {}
172     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(PrevToolBarIsCustom, bool);
OnPrevToolBarIsCustomUpdate(bool value)173     void OnPrevToolBarIsCustomUpdate(bool value) {}
174 
175     // node operation related
176     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(MenuNodeOperation, ChildNodeOperation);
OnMenuNodeOperationUpdate(ChildNodeOperation value)177     void OnMenuNodeOperationUpdate(ChildNodeOperation value) {}
178     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(ToolBarNodeOperation, ChildNodeOperation);
OnToolBarNodeOperationUpdate(ChildNodeOperation value)179     void OnToolBarNodeOperationUpdate(ChildNodeOperation value) {}
180 
SetTransitionType(PageTransitionType type)181     void SetTransitionType(PageTransitionType type)
182     {
183         transitionType_ = type;
184     }
185 
GetTransitionType()186     PageTransitionType GetTransitionType() const
187     {
188         return transitionType_;
189     }
190 
191 private:
192     RefPtr<UINode> menu_;
193     RefPtr<UINode> toolbarMenu_;
194     RefPtr<UINode> landscapeMenu_;
195     RefPtr<UINode> moreMenuNode_;
196     RefPtr<UINode> toolbarMoreMenuNode_;
197     RefPtr<UINode> moreLandscapeMenuNode_;
198     RefPtr<UINode> titleBarNode_;
199     RefPtr<UINode> navBarContentNode_;
200     RefPtr<UINode> toolBarNode_;
201     RefPtr<UINode> preToolBarNode_;
202     RefPtr<UINode> toolBarDividerNode_;
203     bool isTitleMenuNodeShowing_ = false;
204     bool isNewToolbar_ = false;
205     PageTransitionType transitionType_ = PageTransitionType::NONE;
206 };
207 
208 } // namespace OHOS::Ace::NG
209 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_NAVIGATION_NAV_BAR_NODE_H
210