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/side_bar_container_model_impl.h"
17
18 #include "base/image/pixel_map.h"
19 #include "bridge/declarative_frontend/jsview/js_view_abstract.h"
20 #include "bridge/declarative_frontend/jsview/js_view_common_def.h"
21 #include "bridge/declarative_frontend/view_stack_processor.h"
22 #include "core/components/side_bar/side_bar_container_component.h"
23 #include "core/components_ng/base/view_abstract.h"
24
25 namespace OHOS::Ace::Framework {
Pop()26 void SideBarContainerModelImpl::Pop()
27 {
28 ViewStackProcessor::GetInstance()->PopContainer();
29 }
30
SetSideBarContainerType(SideBarContainerType type)31 void SideBarContainerModelImpl::SetSideBarContainerType(SideBarContainerType type)
32 {
33 std::list<RefPtr<Component>> children;
34 auto sideBarContainer = AceType::MakeRefPtr<OHOS::Ace::SideBarContainerComponent>(children);
35 ViewStackProcessor::GetInstance()->ClaimElementId(sideBarContainer);
36 sideBarContainer->SetMainStackSize(MainStackSize::MAX);
37 sideBarContainer->SetSideBarContainerType(type);
38
39 auto stack = ViewStackProcessor::GetInstance();
40 stack->Push(sideBarContainer);
41 JSInteractableView::SetFocusable(false);
42 JSInteractableView::SetFocusNode(true);
43 }
44
SetShowSideBar(bool isShow)45 void SideBarContainerModelImpl::SetShowSideBar(bool isShow)
46 {
47 auto stack = ViewStackProcessor::GetInstance();
48 auto component = AceType::DynamicCast<OHOS::Ace::SideBarContainerComponent>(stack->GetMainComponent());
49 CHECK_NULL_VOID(component);
50 component->SetShowSideBar(isShow);
51 }
52
SetShowControlButton(bool showControlButton)53 void SideBarContainerModelImpl::SetShowControlButton(bool showControlButton)
54 {
55 auto stack = ViewStackProcessor::GetInstance();
56 auto component = AceType::DynamicCast<OHOS::Ace::SideBarContainerComponent>(stack->GetMainComponent());
57 CHECK_NULL_VOID(component);
58 component->SetShowControlButton(showControlButton);
59 }
60
ParseAndSetWidth(WidthType widthType,Dimension & width)61 void SideBarContainerModelImpl::ParseAndSetWidth(WidthType widthType, Dimension& width)
62 {
63 if (LessNotEqual(width.Value(), 0.0)) {
64 width.SetValue(0.0);
65 }
66 auto stack = ViewStackProcessor::GetInstance();
67 auto component = AceType::DynamicCast<OHOS::Ace::SideBarContainerComponent>(stack->GetMainComponent());
68 CHECK_NULL_VOID(component);
69 if (width.Unit() == DimensionUnit::PERCENT) {
70 component->SetIsPercentSize(width.Unit() == DimensionUnit::PERCENT);
71 }
72 switch (widthType) {
73 case WidthType::SIDEBAR_WIDTH:
74 component->SetSideBarWidth(width);
75 break;
76 case WidthType::MIN_SIDEBAR_WIDTH:
77 component->SetSideBarMinWidth(width);
78 break;
79 case WidthType::MAX_SIDEBAR_WIDTH:
80 component->SetSideBarMaxWidth(width);
81 break;
82 default:
83 break;
84 }
85 }
86
SetSideBarWidth(const Dimension & sideBarWidth)87 void SideBarContainerModelImpl::SetSideBarWidth(const Dimension& sideBarWidth) {}
88
SetMinSideBarWidth(const Dimension & minSideBarWidth)89 void SideBarContainerModelImpl::SetMinSideBarWidth(const Dimension& minSideBarWidth) {}
90
SetMaxSideBarWidth(const Dimension & maxSideBarWidth)91 void SideBarContainerModelImpl::SetMaxSideBarWidth(const Dimension& maxSideBarWidth) {}
92
SetAutoHide(bool autoHide)93 void SideBarContainerModelImpl::SetAutoHide(bool autoHide)
94 {
95 auto stack = ViewStackProcessor::GetInstance();
96 auto component = AceType::DynamicCast<OHOS::Ace::SideBarContainerComponent>(stack->GetMainComponent());
97 CHECK_NULL_VOID(component);
98 component->SetAutoHide(autoHide);
99 }
100
SetSideBarPosition(SideBarPosition sideBarPosition)101 void SideBarContainerModelImpl::SetSideBarPosition(SideBarPosition sideBarPosition)
102 {
103 auto stack = ViewStackProcessor::GetInstance();
104 auto component = AceType::DynamicCast<SideBarContainerComponent>(stack->GetMainComponent());
105 CHECK_NULL_VOID(component);
106 component->SetSideBarPosition(sideBarPosition);
107 }
108
SetControlButtonWidth(const Dimension & width)109 void SideBarContainerModelImpl::SetControlButtonWidth(const Dimension& width)
110 {
111 auto stack = ViewStackProcessor::GetInstance();
112 auto component = AceType::DynamicCast<OHOS::Ace::SideBarContainerComponent>(stack->GetMainComponent());
113 CHECK_NULL_VOID(component);
114 auto buttonWidth = width.ConvertToVp();
115 component->SetButtonWidth(buttonWidth);
116 }
117
SetControlButtonHeight(const Dimension & height)118 void SideBarContainerModelImpl::SetControlButtonHeight(const Dimension& height)
119 {
120 auto stack = ViewStackProcessor::GetInstance();
121 auto component = AceType::DynamicCast<OHOS::Ace::SideBarContainerComponent>(stack->GetMainComponent());
122 CHECK_NULL_VOID(component);
123 auto buttonHeight = height.ConvertToVp();
124 component->SetButtonHeight(buttonHeight);
125 }
126
SetControlButtonLeft(const Dimension & left)127 void SideBarContainerModelImpl::SetControlButtonLeft(const Dimension& left)
128 {
129 auto stack = ViewStackProcessor::GetInstance();
130 auto component = AceType::DynamicCast<OHOS::Ace::SideBarContainerComponent>(stack->GetMainComponent());
131 CHECK_NULL_VOID(component);
132 auto buttonLeft = left.ConvertToVp();
133 component->SetButtonLeft(buttonLeft);
134 }
135
SetControlButtonTop(const Dimension & top)136 void SideBarContainerModelImpl::SetControlButtonTop(const Dimension& top)
137 {
138 auto stack = ViewStackProcessor::GetInstance();
139 auto component = AceType::DynamicCast<OHOS::Ace::SideBarContainerComponent>(stack->GetMainComponent());
140 CHECK_NULL_VOID(component);
141 auto buttonTop = top.ConvertToVp();
142 component->SetButtonTop(buttonTop);
143 }
144
SetControlButtonShowIconInfo(const std::string & showIconStr,bool isPixelMap,RefPtr<PixelMap> pixMap)145 void SideBarContainerModelImpl::SetControlButtonShowIconInfo(
146 const std::string& showIconStr, bool isPixelMap, RefPtr<PixelMap> pixMap)
147 {
148 auto stack = ViewStackProcessor::GetInstance();
149 auto component = AceType::DynamicCast<OHOS::Ace::SideBarContainerComponent>(stack->GetMainComponent());
150 CHECK_NULL_VOID(component);
151 component->SetShowIcon(showIconStr);
152 }
153
SetControlButtonHiddenIconInfo(const std::string & hiddenIconStr,bool isPixelMap,RefPtr<PixelMap> pixMap)154 void SideBarContainerModelImpl::SetControlButtonHiddenIconInfo(
155 const std::string& hiddenIconStr, bool isPixelMap, RefPtr<PixelMap> pixMap)
156 {
157 auto stack = ViewStackProcessor::GetInstance();
158 auto component = AceType::DynamicCast<OHOS::Ace::SideBarContainerComponent>(stack->GetMainComponent());
159 CHECK_NULL_VOID(component);
160 component->SetHiddenIcon(hiddenIconStr);
161 }
162
SetControlButtonSwitchingIconInfo(const std::string & switchingIconStr,bool isPixelMap,RefPtr<PixelMap> pixMap)163 void SideBarContainerModelImpl::SetControlButtonSwitchingIconInfo(
164 const std::string& switchingIconStr, bool isPixelMap, RefPtr<PixelMap> pixMap)
165 {
166 auto stack = ViewStackProcessor::GetInstance();
167 auto component = AceType::DynamicCast<OHOS::Ace::SideBarContainerComponent>(stack->GetMainComponent());
168 CHECK_NULL_VOID(component);
169 component->SetSwitchIcon(switchingIconStr);
170 }
171
SetOnChange(std::function<void (const bool)> && onChange)172 void SideBarContainerModelImpl::SetOnChange(std::function<void(const bool)>&& onChange)
173 {
174 JSViewSetProperty(&SideBarContainerComponent::SetOnChange, std::move(onChange));
175 }
176
SetDividerStrokeWidth(const Dimension & strokeWidth)177 void SideBarContainerModelImpl::SetDividerStrokeWidth(const Dimension& strokeWidth) {}
178
SetDividerColor(const Color & color)179 void SideBarContainerModelImpl::SetDividerColor(const Color& color) {}
180
SetDividerStartMargin(const Dimension & startMargin)181 void SideBarContainerModelImpl::SetDividerStartMargin(const Dimension& startMargin) {}
182
SetDividerEndMargin(const Dimension & endMargin)183 void SideBarContainerModelImpl::SetDividerEndMargin(const Dimension& endMargin) {}
184
SetMinContentWidth(const Dimension & minContentWidth)185 void SideBarContainerModelImpl::SetMinContentWidth(const Dimension& minContentWidth) {};
186
CreateAndMountControlButton(const RefPtr<NG::FrameNode> & parentNode)187 void SideBarContainerModelImpl::CreateAndMountControlButton(const RefPtr<NG::FrameNode>& parentNode) {}
188
CreateAndMountDivider(const RefPtr<NG::FrameNode> & parentNode)189 void SideBarContainerModelImpl::CreateAndMountDivider(const RefPtr<NG::FrameNode>& parentNode) {}
190
MarkNeedInitRealSideBarWidth()191 void SideBarContainerModelImpl::MarkNeedInitRealSideBarWidth() {}
192 } // namespace OHOS::Ace::Framework
193