• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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/sliding_panel_model_impl.h"
17 
18 #include "base/log/ace_scoring_log.h"
19 #include "bridge/declarative_frontend/jsview/js_view_abstract.h"
20 #include "bridge/declarative_frontend/view_stack_processor.h"
21 #include "core/components/panel/sliding_panel_component_v2.h"
22 
23 namespace OHOS::Ace::Framework {
24 
Create(bool isShow)25 void SlidingPanelModelImpl::Create(bool isShow)
26 {
27     auto slidingPanel = AceType::MakeRefPtr<SlidingPanelComponentV2>();
28     ViewStackProcessor::GetInstance()->ClaimElementId(slidingPanel);
29     slidingPanel->SetHasDragBar(true);
30     ViewStackProcessor::GetInstance()->Push(slidingPanel);
31     slidingPanel->SetVisible(isShow);
32     auto component = ViewStackProcessor::GetInstance()->GetDisplayComponent();
33     auto display = AceType::DynamicCast<DisplayComponent>(component);
34     if (!display) {
35         LOGE("display is null");
36         return;
37     }
38     display->SetVisible(isShow ? VisibleType::VISIBLE : VisibleType::GONE);
39 }
40 
SetPanelMode(PanelMode mode)41 void SlidingPanelModelImpl::SetPanelMode(PanelMode mode)
42 {
43     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
44     auto panel = AceType::DynamicCast<SlidingPanelComponent>(component);
45     if (panel) {
46         panel->SetMode(mode);
47     }
48 }
49 
SetPanelType(PanelType type)50 void SlidingPanelModelImpl::SetPanelType(PanelType type)
51 {
52     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
53     auto panel = AceType::DynamicCast<SlidingPanelComponent>(component);
54     if (panel) {
55         panel->SetType(type);
56     }
57 }
58 
SetHasDragBar(bool hasDragBar)59 void SlidingPanelModelImpl::SetHasDragBar(bool hasDragBar)
60 {
61     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
62     auto panel = AceType::DynamicCast<SlidingPanelComponent>(component);
63     if (panel) {
64         panel->SetHasDragBar(hasDragBar);
65     }
66 }
67 
SetMiniHeight(const Dimension & miniHeight)68 void SlidingPanelModelImpl::SetMiniHeight(const Dimension& miniHeight)
69 {
70     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
71     auto panel = AceType::DynamicCast<SlidingPanelComponent>(component);
72     if (panel) {
73         panel->SetMiniHeight(std::pair(miniHeight, true));
74     }
75 }
76 
SetHalfHeight(const Dimension & halfHeight)77 void SlidingPanelModelImpl::SetHalfHeight(const Dimension& halfHeight)
78 {
79     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
80     auto panel = AceType::DynamicCast<SlidingPanelComponent>(component);
81     if (panel) {
82         panel->SetHalfHeight(std::pair(halfHeight, true));
83     }
84 }
85 
SetFullHeight(const Dimension & fullHeight)86 void SlidingPanelModelImpl::SetFullHeight(const Dimension& fullHeight)
87 {
88     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
89     auto panel = AceType::DynamicCast<SlidingPanelComponent>(component);
90     if (panel) {
91         panel->SetFullHeight(std::pair(fullHeight, true));
92     }
93 }
94 
SetIsShow(bool isShow)95 void SlidingPanelModelImpl::SetIsShow(bool isShow)
96 {
97     auto component = ViewStackProcessor::GetInstance()->GetDisplayComponent();
98     auto display = AceType::DynamicCast<DisplayComponent>(component);
99     if (!display) {
100         LOGE("display is null");
101         return;
102     }
103     display->SetVisible(isShow ? VisibleType::VISIBLE : VisibleType::GONE);
104     auto panelComponent = ViewStackProcessor::GetInstance()->GetMainComponent();
105     auto panel = AceType::DynamicCast<SlidingPanelComponent>(panelComponent);
106     if (!panel) {
107         LOGE("Panel is null");
108         return;
109     }
110     panel->SetVisible(isShow);
111 }
112 
SetBackgroundMask(const Color & backgroundMask)113 void SlidingPanelModelImpl::SetBackgroundMask(const Color& backgroundMask)
114 {
115     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
116     auto panel = AceType::DynamicCast<SlidingPanelComponent>(component);
117     if (!panel) {
118         LOGE("Panel is null");
119         return;
120     }
121 
122     auto displayComponent = ViewStackProcessor::GetInstance()->GetDisplayComponent();
123     auto display = AceType::DynamicCast<DisplayComponent>(displayComponent);
124     if (!display) {
125         LOGE("display is null");
126         return;
127     }
128     display->SetBackgroundMask(backgroundMask);
129 }
130 
SetBackgroundColor(const Color & backgroundColor)131 void SlidingPanelModelImpl::SetBackgroundColor(const Color& backgroundColor)
132 {
133     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
134     auto panel = AceType::DynamicCast<SlidingPanelComponentV2>(component);
135     auto box = SlidingPanelModelImpl::GetPanelBox();
136     if (!panel || !box) {
137         LOGE("Not valid type for SlidingPanel");
138         return;
139     }
140     box->SetColor(backgroundColor);
141     panel->SetHasBgStyle(true);
142     panel->SetHasDecorationStyle(true);
143 }
144 
SetOnSizeChange(std::function<void (const BaseEventInfo *)> && changeEvent)145 void SlidingPanelModelImpl::SetOnSizeChange(std::function<void(const BaseEventInfo*)>&& changeEvent)
146 {
147     auto onSizeChange = EventMarker(changeEvent);
148     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
149     auto panel = AceType::DynamicCast<SlidingPanelComponent>(component);
150     if (panel) {
151         panel->SetOnSizeChanged(onSizeChange);
152     }
153 }
154 
SetOnHeightChange(std::function<void (const float)> && onHeightChange)155 void SlidingPanelModelImpl::SetOnHeightChange(std::function<void(const float)>&& onHeightChange)
156 {
157     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
158     auto panel = AceType::DynamicCast<SlidingPanelComponent>(component);
159     if (panel) {
160         panel->SetOnHeightChanged(onHeightChange);
161     }
162 }
163 
Pop()164 void SlidingPanelModelImpl::Pop()
165 {
166     JSContainerBase::Pop();
167 }
168 
SetBorderColor(const Color & borderColor)169 void SlidingPanelModelImpl::SetBorderColor(const Color& borderColor)
170 {
171     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
172     auto panel = AceType::DynamicCast<SlidingPanelComponentV2>(component);
173     auto decoration = SlidingPanelModelImpl::GetPanelDecoration();
174     if (!panel || !decoration) {
175         return;
176     }
177     auto border = decoration->GetBorder();
178     border.SetColor(borderColor);
179     decoration->SetBorder(border);
180     panel->SetHasBorderStyle(true);
181     panel->SetHasDecorationStyle(true);
182 }
183 
SetBorderWidth(const Dimension & borderWidth)184 void SlidingPanelModelImpl::SetBorderWidth(const Dimension& borderWidth)
185 {
186     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
187     auto panel = AceType::DynamicCast<SlidingPanelComponentV2>(component);
188     auto decoration = SlidingPanelModelImpl::GetPanelDecoration();
189     if (!panel || !decoration) {
190         return;
191     }
192     auto border = decoration->GetBorder();
193     border.SetWidth(borderWidth);
194     decoration->SetBorder(border);
195     panel->SetHasBorderStyle(true);
196     panel->SetHasDecorationStyle(true);
197 }
198 
SetBorderStyle(const BorderStyle & borderStyle)199 void SlidingPanelModelImpl::SetBorderStyle(const BorderStyle& borderStyle)
200 {
201     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
202     auto panel = AceType::DynamicCast<SlidingPanelComponentV2>(component);
203     auto decoration = SlidingPanelModelImpl::GetPanelDecoration();
204     if (!panel || !decoration) {
205         return;
206     }
207     auto border = decoration->GetBorder();
208     border.SetStyle(borderStyle);
209     decoration->SetBorder(border);
210     panel->SetHasBorderStyle(true);
211     panel->SetHasDecorationStyle(true);
212 }
213 
SetBorder(const BorderStyle & borderStyle,const Dimension & borderWidth)214 void SlidingPanelModelImpl::SetBorder(const BorderStyle& borderStyle, const Dimension& borderWidth)
215 {
216     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
217     auto panel = AceType::DynamicCast<SlidingPanelComponentV2>(component);
218     if (!panel) {
219         LOGE("Panel is Null");
220         return;
221     }
222     auto decoration = SlidingPanelModelImpl::GetPanelDecoration();
223     auto border = decoration->GetBorder();
224     border.SetStyle(borderStyle);
225     border.SetWidth(borderWidth);
226     decoration->SetBorder(border);
227     panel->SetHasBorderStyle(true);
228     panel->SetHasDecorationStyle(true);
229 }
230 
GetPanelBox()231 RefPtr<BoxComponent> SlidingPanelModelImpl::GetPanelBox()
232 {
233     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
234     auto panel = AceType::DynamicCast<SlidingPanelComponentV2>(component);
235     if (!panel) {
236         return nullptr;
237     }
238     if (panel->HasBoxStyle()) {
239         return panel->GetBoxStyle();
240     } else {
241         panel->SetHasBoxStyle(true);
242         auto box = AceType::MakeRefPtr<BoxComponent>();
243         panel->SetBoxStyle(box);
244         return box;
245     }
246 }
247 
GetPanelDecoration()248 RefPtr<Decoration> SlidingPanelModelImpl::GetPanelDecoration()
249 {
250     auto box = SlidingPanelModelImpl::GetPanelBox();
251     if (!box) {
252         return nullptr;
253     }
254     auto decoration = box->GetBackDecoration();
255     if (!decoration) {
256         decoration = AceType::MakeRefPtr<Decoration>();
257         box->SetBackDecoration(decoration);
258     }
259     return decoration;
260 }
261 } // namespace OHOS::Ace::Framework