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