2 * Copyright (c) 2024 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include "dummy-control.h"
20 #include <dali-toolkit/dali-toolkit.h>
21 #include <dali-toolkit/devel-api/controls/control-devel.h>
22 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
28 DummyControl::DummyControl()
32 DummyControl::DummyControl(const DummyControl& control)
37 DummyControl::~DummyControl()
41 DummyControl DummyControl::DownCast(BaseHandle handle)
43 return Control::DownCast<DummyControl, DummyControlImpl>(handle);
46 DummyControl& DummyControl::operator=(const DummyControl& control)
48 Control::operator=(control);
52 // Used to test signal connections
53 void DummyControlImpl::CustomSlot1(Actor actor)
55 mCustomSlot1Called = true;
62 return DummyControlImpl::New();
65 DALI_TYPE_REGISTRATION_BEGIN(Toolkit::DummyControl, Toolkit::Control, Create);
66 DALI_TYPE_REGISTRATION_END()
68 Dali::PropertyRegistration dummyControlVisualProperty01(
69 typeRegistration, "testVisual", Dali::Toolkit::DummyControl::Property::TEST_VISUAL, Dali::Property::MAP, &Dali::Toolkit::DummyControlImpl::SetProperty, &Dali::Toolkit::DummyControlImpl::GetProperty);
71 Dali::PropertyRegistration dummyControlVisualProperty02(
72 typeRegistration, "testVisual2", Dali::Toolkit::DummyControl::Property::TEST_VISUAL2, Dali::Property::MAP, &Dali::Toolkit::DummyControlImpl::SetProperty, &Dali::Toolkit::DummyControlImpl::GetProperty);
74 Dali::PropertyRegistration dummyControlVisualProperty03(
75 typeRegistration, "foregroundVisual", Dali::Toolkit::DummyControl::Property::FOREGROUND_VISUAL, Dali::Property::MAP, &Dali::Toolkit::DummyControlImpl::SetProperty, &Dali::Toolkit::DummyControlImpl::GetProperty);
77 Dali::PropertyRegistration dummyControlVisualProperty04(
78 typeRegistration, "focusVisual", Dali::Toolkit::DummyControl::Property::FOCUS_VISUAL, Dali::Property::MAP, &Dali::Toolkit::DummyControlImpl::SetProperty, &Dali::Toolkit::DummyControlImpl::GetProperty);
80 Dali::PropertyRegistration dummyControlVisualProperty05(
81 typeRegistration, "labelVisual", Dali::Toolkit::DummyControl::Property::LABEL_VISUAL, Dali::Property::MAP, &Dali::Toolkit::DummyControlImpl::SetProperty, &Dali::Toolkit::DummyControlImpl::GetProperty);
85 DummyControl DummyControlImpl::New()
87 IntrusivePtr<DummyControlImpl> impl = new DummyControlImpl;
88 DummyControl control(*impl);
93 DummyControlImpl::DummyControlImpl()
94 : Control(ControlBehaviour()),
95 mCustomSlot1Called(false)
99 DummyControlImpl::~DummyControlImpl()
103 void DummyControlImpl::RegisterVisual(Property::Index index, Toolkit::Visual::Base visual)
105 DevelControl::RegisterVisual(*this, index, visual);
107 VisualIndices::iterator iter = std::find(mRegisteredVisualIndices.begin(), mRegisteredVisualIndices.end(), index);
108 if(iter == mRegisteredVisualIndices.end())
110 mRegisteredVisualIndices.push_back(index);
114 void DummyControlImpl::RegisterVisual(Property::Index index, Toolkit::Visual::Base visual, bool enabled)
116 DevelControl::RegisterVisual(*this, index, visual, enabled);
118 VisualIndices::iterator iter = std::find(mRegisteredVisualIndices.begin(), mRegisteredVisualIndices.end(), index);
119 if(iter == mRegisteredVisualIndices.end())
121 mRegisteredVisualIndices.push_back(index);
125 void DummyControlImpl::RegisterVisual(Property::Index index, Toolkit::Visual::Base visual, int depthIndex)
127 DevelControl::RegisterVisual(*this, index, visual, depthIndex);
129 VisualIndices::iterator iter = std::find(mRegisteredVisualIndices.begin(), mRegisteredVisualIndices.end(), index);
130 if(iter == mRegisteredVisualIndices.end())
132 mRegisteredVisualIndices.push_back(index);
136 void DummyControlImpl::UnregisterVisual(Property::Index index)
138 DevelControl::UnregisterVisual(*this, index);
140 VisualIndices::iterator iter = std::find(mRegisteredVisualIndices.begin(), mRegisteredVisualIndices.end(), index);
141 if(iter != mRegisteredVisualIndices.end())
143 mRegisteredVisualIndices.erase(iter);
147 Toolkit::Visual::Base DummyControlImpl::GetVisual(Property::Index index)
149 return DevelControl::GetVisual(*this, index);
152 void DummyControlImpl::EnableVisual(Property::Index index, bool enabled)
154 DevelControl::EnableVisual(*this, index, enabled);
157 bool DummyControlImpl::IsVisualEnabled(Property::Index index)
159 return DevelControl::IsVisualEnabled(*this, index);
162 Animation DummyControlImpl::CreateTransition(const Toolkit::TransitionData& transition)
164 return DevelControl::CreateTransition(*this, transition);
167 void DummyControlImpl::DoAction(Dali::Property::Index index, Dali::Property::Index action, const Dali::Property::Value attributes)
169 DummyControl control(*this);
170 DevelControl::DoAction(control, index, action, attributes);
173 void DummyControlImpl::SetProperty(BaseObject* object, Dali::Property::Index index, const Dali::Property::Value& value)
175 Toolkit::DummyControl control = Toolkit::DummyControl::DownCast(Dali::BaseHandle(object));
176 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(control.GetImplementation());
180 case Toolkit::DummyControl::Property::TEST_VISUAL:
181 case Toolkit::DummyControl::Property::TEST_VISUAL2:
182 case Toolkit::DummyControl::Property::FOREGROUND_VISUAL:
183 case Toolkit::DummyControl::Property::FOCUS_VISUAL:
184 case Toolkit::DummyControl::Property::LABEL_VISUAL:
186 const Property::Map* map = value.GetMap();
189 VisualFactory visualFactory = VisualFactory::Get();
190 Visual::Base visual = visualFactory.CreateVisual(*map);
191 dummyImpl.RegisterVisual(index, visual);
198 Property::Value DummyControlImpl::GetProperty(BaseObject* object, Dali::Property::Index propertyIndex)
200 Toolkit::DummyControl control = Toolkit::DummyControl::DownCast(Dali::BaseHandle(object));
201 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(control.GetImplementation());
203 Visual::Base visual = dummyImpl.GetVisual(propertyIndex);
207 visual.CreatePropertyMap(map);
209 Dali::Property::Value value = map;
214 Toolkit::DummyControl Impl::DummyControl::New()
216 IntrusivePtr<Toolkit::Impl::DummyControl> impl = new Toolkit::Impl::DummyControl;
217 Toolkit::DummyControl control(*impl);
222 int Impl::DummyControl::constructorCount;
223 int Impl::DummyControl::destructorCount;
225 Impl::DummyControl::DummyControl()
226 : DummyControlImpl(),
227 initializeCalled(false),
228 activatedCalled(false),
229 onAccValueChangeCalled(false),
230 themeChangeCalled(false),
231 fontChangeCalled(false),
235 longPressCalled(false),
236 stageConnectionCalled(false),
237 stageDisconnectionCalled(false),
238 childAddCalled(false),
239 childRemoveCalled(false),
240 sizeSetCalled(false),
241 sizeAnimationCalled(false),
242 hoverEventCalled(false),
243 wheelEventCalled(false),
244 keyEventCalled(false),
245 keyInputFocusGained(false),
246 keyInputFocusLost(false)
251 Impl::DummyControl::~DummyControl()
256 void Impl::DummyControl::OnInitialize()
258 initializeCalled = true;
260 bool Impl::DummyControl::OnAccessibilityActivated()
262 activatedCalled = true;
265 bool Impl::DummyControl::OnAccessibilityValueChange(bool isIncrease)
267 onAccValueChangeCalled = true;
271 void Impl::DummyControl::OnStyleChange(Toolkit::StyleManager styleManager, StyleChange::Type change)
273 themeChangeCalled = change == StyleChange::THEME_CHANGE;
274 fontChangeCalled = change == StyleChange::DEFAULT_FONT_SIZE_CHANGE;
276 void Impl::DummyControl::OnPinch(const PinchGesture& pinch)
280 void Impl::DummyControl::OnPan(const PanGesture& pan)
284 void Impl::DummyControl::OnTap(const TapGesture& tap)
288 void Impl::DummyControl::OnLongPress(const LongPressGesture& longPress)
290 longPressCalled = true;
292 void Impl::DummyControl::OnSceneConnection(int depth)
294 Control::OnSceneConnection(depth);
295 stageConnectionCalled = true;
297 void Impl::DummyControl::OnSceneDisconnection()
299 stageDisconnectionCalled = true;
300 Control::OnSceneDisconnection();
302 void Impl::DummyControl::OnChildAdd(Actor& child)
304 childAddCalled = true;
306 void Impl::DummyControl::OnChildRemove(Actor& child)
308 childRemoveCalled = true;
310 void Impl::DummyControl::OnSizeSet(const Vector3& targetSize)
312 Control::OnSizeSet(targetSize);
313 sizeSetCalled = true;
315 void Impl::DummyControl::OnSizeAnimation(Animation& animation, const Vector3& targetSize)
317 Control::OnSizeAnimation(animation, targetSize);
318 sizeAnimationCalled = true;
320 bool Impl::DummyControl::OnKeyEvent(const KeyEvent& event)
322 keyEventCalled = true;
325 void Impl::DummyControl::OnKeyInputFocusGained()
327 if(this->HasKeyInputFocus())
329 keyInputFocusGained = true;
332 void Impl::DummyControl::OnKeyInputFocusLost()
334 if(!this->HasKeyInputFocus())
336 keyInputFocusLost = true;
340 void Impl::DummyControl::SetLayout(Property::Index visualIndex, Property::Map& map)
342 Property::Value value(map);
343 mLayouts[visualIndex] = value;
346 void Impl::DummyControl::OnRelayout(const Vector2& size, RelayoutContainer& container)
348 if(mRelayoutCallback)
350 mRelayoutCallback(size); // Execute callback if set
353 Property::Map emptyMap;
355 for(VisualIndices::iterator iter = mRegisteredVisualIndices.begin(); iter != mRegisteredVisualIndices.end(); ++iter)
357 Visual::Base visual = GetVisual(*iter);
358 Property::Value value = mLayouts[*iter];
359 Property::Map* map = NULL;
361 if(value.GetType() != Property::NONE)
363 map = value.GetMap();
370 visual.SetTransformAndSize(*map, size);
374 void Impl::DummyControl::SetRelayoutCallback(RelayoutCallbackFunc callback)
376 mRelayoutCallback = callback;
379 Vector3 Impl::DummyControl::GetNaturalSize()
383 for(auto elem : mRegisteredVisualIndices)
386 Visual::Base visual = GetVisual(elem);
387 visual.GetNaturalSize(naturalSize);
388 currentSize.width = std::max(naturalSize.width, currentSize.width);
389 currentSize.height = std::max(naturalSize.height, currentSize.height);
392 return Vector3(currentSize);
395 DummyControl DummyControl::New(bool override)
397 DummyControl control;
401 control = Impl::DummyControl::New();
405 control = DummyControlImpl::New();
411 DummyControl::DummyControl(DummyControlImpl& implementation)
412 : Control(implementation)
416 DummyControl::DummyControl(Dali::Internal::CustomActor* internal)
419 VerifyCustomActorPointer<DummyControlImpl>(internal);
422 } // namespace Toolkit