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 "bridge/declarative_frontend/jsview/models/navigation_model_impl.h"
17
18 #include "bridge/declarative_frontend/view_stack_processor.h"
19 #include "core/components/navigation_bar/navigation_container_component.h"
20
21 namespace OHOS::Ace::Framework {
Create()22 void NavigationModelImpl::Create()
23 {
24 auto navigationContainer = AceType::MakeRefPtr<NavigationContainerComponent>();
25 ViewStackProcessor::GetInstance()->Push(navigationContainer);
26 }
27
SetTitle(const std::string & title,bool hasSubTitle)28 void NavigationModelImpl::SetTitle(const std::string& title, bool hasSubTitle)
29 {
30 auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
31 auto navigationContainer = AceType::DynamicCast<OHOS::Ace::NavigationContainerComponent>(component);
32 CHECK_NULL_VOID(navigationContainer);
33 navigationContainer->GetDeclaration()->title = title;
34 }
35
SetCustomTitle(const RefPtr<AceType> & customTitle)36 void NavigationModelImpl::SetCustomTitle(const RefPtr<AceType>& customTitle)
37 {
38 auto customTile = AceType::DynamicCast<Component>(customTitle);
39 auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
40 auto navigationContainer = AceType::DynamicCast<OHOS::Ace::NavigationContainerComponent>(component);
41 if (!navigationContainer) {
42 LOGI("component is not navigationContainer.");
43 return;
44 }
45 #if defined(PREVIEW)
46 auto composedComponent =
47 ViewStackProcessor::GetInstance()->CreateInspectorWrapper("NavigationTitle");
48 composedComponent->SetChild(customTile);
49 navigationContainer->GetDeclaration()->customTitle = composedComponent;
50 #else
51 navigationContainer->GetDeclaration()->customTitle = customTile;
52 #endif
53 }
54
SetTitleHeight(const Dimension & height,bool isValid)55 void NavigationModelImpl::SetTitleHeight(const Dimension& height, bool isValid)
56 {
57 return;
58 }
59
SetTitleMode(NG::NavigationTitleMode mode)60 void NavigationModelImpl::SetTitleMode(NG::NavigationTitleMode mode)
61 {
62 auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
63 auto navigationContainer = AceType::DynamicCast<OHOS::Ace::NavigationContainerComponent>(component);
64 if (!navigationContainer) {
65 LOGI("component is not navigationContainer.");
66 return;
67 }
68 navigationContainer->GetDeclaration()->titleMode = static_cast<NavigationTitleMode>(mode);
69 }
70
SetSubtitle(const std::string & subtitle)71 void NavigationModelImpl::SetSubtitle(const std::string& subtitle)
72 {
73 auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
74 auto navigationContainer = AceType::DynamicCast<OHOS::Ace::NavigationContainerComponent>(component);
75 if (!navigationContainer) {
76 LOGI("component is not navigationContainer.");
77 return;
78 }
79 navigationContainer->GetDeclaration()->subTitle = subtitle;
80 }
81
SetHideTitleBar(bool hideTitleBar)82 void NavigationModelImpl::SetHideTitleBar(bool hideTitleBar)
83 {
84 auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
85 auto navigationContainer = AceType::DynamicCast<OHOS::Ace::NavigationContainerComponent>(component);
86 if (!navigationContainer) {
87 LOGI("component is not navigationContainer.");
88 return;
89 }
90 auto declaration = navigationContainer->GetDeclaration();
91 declaration->hideBar = hideTitleBar;
92 declaration->animationOption = ViewStackProcessor::GetInstance()->GetImplicitAnimationOption();
93 }
94
SetHideNavBar(bool hideNavBar)95 void NavigationModelImpl::SetHideNavBar(bool hideNavBar)
96 {
97 return;
98 }
99
SetBackButtonIcon(const std::string & src,bool noPixMap,RefPtr<PixelMap> & pixMap,const std::string & bundleName,const std::string & moduleName)100 void NavigationModelImpl::SetBackButtonIcon(const std::string& src, bool noPixMap, RefPtr<PixelMap>& pixMap,
101 const std::string& bundleName, const std::string& moduleName)
102 {
103 return;
104 }
105
SetHideBackButton(bool hideBackButton)106 void NavigationModelImpl::SetHideBackButton(bool hideBackButton)
107 {
108 auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
109 auto navigationContainer = AceType::DynamicCast<OHOS::Ace::NavigationContainerComponent>(component);
110 if (!navigationContainer) {
111 LOGI("component is not navigationContainer.");
112 return;
113 }
114 navigationContainer->GetDeclaration()->hideBarBackButton = hideBackButton;
115 }
116
SetHideToolBar(bool hideToolBar)117 void NavigationModelImpl::SetHideToolBar(bool hideToolBar)
118 {
119 auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
120 auto navigationContainer = AceType::DynamicCast<OHOS::Ace::NavigationContainerComponent>(component);
121 if (!navigationContainer) {
122 LOGI("component is not navigationContainer.");
123 return;
124 }
125 auto declaration = navigationContainer->GetDeclaration();
126 declaration->hideToolbar = hideToolBar;
127 declaration->animationOption = ViewStackProcessor::GetInstance()->GetImplicitAnimationOption();
128 }
129
SetCustomToolBar(const RefPtr<AceType> & node)130 void NavigationModelImpl::SetCustomToolBar(const RefPtr<AceType>& node)
131 {
132 auto customToolBar = AceType::DynamicCast<Component>(node);
133 auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
134 auto navigationContainer = AceType::DynamicCast<OHOS::Ace::NavigationContainerComponent>(component);
135 if (!navigationContainer) {
136 LOGI("component is not navigationContainer.");
137 return;
138 }
139 navigationContainer->GetDeclaration()->toolBarBuilder = customToolBar;
140 }
141
NeedSetItems()142 bool NavigationModelImpl::NeedSetItems()
143 {
144 return false;
145 }
146
SetToolBarItems(std::vector<NG::BarItem> && toolBarItems)147 void NavigationModelImpl::SetToolBarItems(std::vector<NG::BarItem>&& toolBarItems)
148 {
149 return;
150 }
151
SetToolbarConfiguration(std::vector<NG::BarItem> && toolBarItems)152 void NavigationModelImpl::SetToolbarConfiguration(std::vector<NG::BarItem>&& toolBarItems) {}
153
GetToolBarItems(std::list<RefPtr<AceType>> & items)154 void NavigationModelImpl::GetToolBarItems(std::list<RefPtr<AceType>>& items)
155 {
156 auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
157 auto navigationContainer = AceType::DynamicCast<OHOS::Ace::NavigationContainerComponent>(component);
158 CHECK_NULL_VOID(navigationContainer);
159 auto toolbarItems = navigationContainer->GetDeclaration()->toolbarItems;
160 items.clear();
161 for (auto item : toolbarItems) {
162 items.push_back(item);
163 }
164 }
165
SetMenuItems(std::vector<NG::BarItem> && menuItems)166 void NavigationModelImpl::SetMenuItems(std::vector<NG::BarItem>&& menuItems)
167 {
168 return;
169 }
170
GetMenuItems(std::list<RefPtr<AceType>> & items)171 void NavigationModelImpl::GetMenuItems(std::list<RefPtr<AceType>>& items)
172 {
173 auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
174 auto navigationContainer = AceType::DynamicCast<OHOS::Ace::NavigationContainerComponent>(component);
175 CHECK_NULL_VOID(navigationContainer);
176 auto toolbarItems = navigationContainer->GetDeclaration()->menuItems;
177 items.clear();
178 for (auto item : toolbarItems) {
179 items.push_back(item);
180 }
181 }
182
SetCustomMenu(const RefPtr<AceType> & customMenu)183 void NavigationModelImpl::SetCustomMenu(const RefPtr<AceType>& customMenu)
184 {
185 auto customMenus = AceType::DynamicCast<Component>(customMenu);
186 auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
187 auto navigationContainer = AceType::DynamicCast<OHOS::Ace::NavigationContainerComponent>(component);
188 if (!navigationContainer) {
189 LOGI("component is not navigationContainer.");
190 return;
191 }
192 #if defined(PREVIEW)
193 auto composedComponent = ViewStackProcessor::GetInstance()->CreateInspectorWrapper("NavigationMenus");
194 composedComponent->SetChild(customMenus);
195 navigationContainer->GetDeclaration()->customMenus = composedComponent;
196 #else
197 navigationContainer->GetDeclaration()->customMenus = customMenus;
198 #endif
199 }
200
SetOnTitleModeChange(std::function<void (NG::NavigationTitleMode)> && onTitleModeChange,std::function<void (const BaseEventInfo * baseInfo)> && eventInfo)201 void NavigationModelImpl::SetOnTitleModeChange(std::function<void(NG::NavigationTitleMode)>&& onTitleModeChange,
202 std::function<void(const BaseEventInfo* baseInfo)>&& eventInfo)
203 {
204 auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
205 auto navigationContainer = AceType::DynamicCast<OHOS::Ace::NavigationContainerComponent>(component);
206 auto eventMarker = EventMarker(std::move(eventInfo));
207 if (navigationContainer) {
208 navigationContainer->GetDeclaration()->titleModeChangedEvent = eventMarker;
209 }
210 }
211
SetUsrNavigationMode(NG::NavigationMode mode)212 void NavigationModelImpl::SetUsrNavigationMode(NG::NavigationMode mode)
213 {
214 return;
215 }
216
SetNavBarPosition(NG::NavBarPosition mode)217 void NavigationModelImpl::SetNavBarPosition(NG::NavBarPosition mode)
218 {
219 return;
220 }
221
SetNavBarWidth(const Dimension & value)222 void NavigationModelImpl::SetNavBarWidth(const Dimension& value)
223 {
224 return;
225 }
226
SetOnNavBarStateChange(std::function<void (bool)> && onNavBarStateChange)227 void NavigationModelImpl::SetOnNavBarStateChange(std::function<void(bool)>&& onNavBarStateChange)
228 {
229 return;
230 }
231
SetOnNavigationModeChange(std::function<void (NG::NavigationMode)> && onNavigationChange)232 void NavigationModelImpl::SetOnNavigationModeChange(std::function<void(NG::NavigationMode)>&& onNavigationChange)
233 {
234 return;
235 }
236
SetNavigationMode(NG::NavigationMode mode)237 void NavigationModelImpl::SetNavigationMode(NG::NavigationMode mode)
238 {
239 return;
240 }
241
SetNavigationStack()242 void NavigationModelImpl::SetNavigationStack()
243 {
244 return;
245 }
246
SetNavigationStack(const RefPtr<NG::NavigationStack> & navigationStack)247 void NavigationModelImpl::SetNavigationStack(const RefPtr<NG::NavigationStack>& navigationStack)
248 {
249 return;
250 }
251
SetNavigationStackProvided(bool provided)252 void NavigationModelImpl::SetNavigationStackProvided(bool provided)
253 {
254 return;
255 }
256
SetNavDestination(std::function<void (std::string)> && builder)257 void NavigationModelImpl::SetNavDestination(std::function<void(std::string)>&& builder)
258 {
259 return;
260 }
261
GetNavigationStack()262 RefPtr<NG::NavigationStack> NavigationModelImpl::GetNavigationStack()
263 {
264 return nullptr;
265 }
266
SetMenuCount(int32_t menuCount)267 void NavigationModelImpl::SetMenuCount(int32_t menuCount)
268 {
269 auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
270 auto navigationContainer = AceType::DynamicCast<OHOS::Ace::NavigationContainerComponent>(component);
271 if (navigationContainer) {
272 navigationContainer->SetMenuCount(menuCount);
273 }
274 }
275
SetCustomTransition(NavigationTransitionEvent && animationTransition)276 void NavigationModelImpl::SetCustomTransition(NavigationTransitionEvent&& animationTransition) {}
277
SetIsCustomAnimation(bool isCustom)278 void NavigationModelImpl::SetIsCustomAnimation(bool isCustom) {}
279 } // namespace OHOS::Ace::Framework
280