• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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