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