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