2 * Copyright (c) 2019 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.
19 #include "control-devel.h"
22 #include <dali/public-api/animation/animation.h>
25 #include <dali/public-api/actors/actor.h>
26 #include <dali-toolkit/internal/controls/control/control-data-impl.h>
27 #include <dali-toolkit/public-api/controls/control.h>
28 #include <dali-toolkit/public-api/controls/control-impl.h>
29 #include <dali-toolkit/devel-api/visual-factory/transition-data.h>
37 namespace DevelControl
40 void RegisterVisual( Internal::Control& control, Dali::Property::Index index, Toolkit::Visual::Base& visual )
42 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get( control );
43 controlDataImpl.RegisterVisual( index, visual );
46 void RegisterVisual( Internal::Control& control, Dali::Property::Index index, Toolkit::Visual::Base& visual, int depthIndex )
48 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get( control );
49 controlDataImpl.RegisterVisual( index, visual, depthIndex );
52 void RegisterVisual( Internal::Control& control, Dali::Property::Index index, Toolkit::Visual::Base& visual, bool enabled )
54 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get( control );
55 controlDataImpl.RegisterVisual( index, visual, enabled );
58 void RegisterVisual( Internal::Control& control, Dali::Property::Index index, Toolkit::Visual::Base& visual, bool enabled, int depthIndex )
60 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get( control );
61 controlDataImpl.RegisterVisual( index, visual, enabled, depthIndex );
64 void UnregisterVisual( Internal::Control& control, Dali::Property::Index index )
66 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get( control );
67 controlDataImpl.UnregisterVisual( index );
70 Toolkit::Visual::Base GetVisual( const Internal::Control& control, Dali::Property::Index index )
72 const Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get( control );
73 return controlDataImpl.GetVisual( index );
76 void EnableVisual( Internal::Control& control, Dali::Property::Index index, bool enable )
78 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get( control );
79 controlDataImpl.EnableVisual( index, enable );
82 bool IsVisualEnabled( const Internal::Control& control, Dali::Property::Index index )
84 const Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get( control );
85 return controlDataImpl.IsVisualEnabled( index );
88 Dali::Animation CreateTransition( Internal::Control& control, const Toolkit::TransitionData& handle )
90 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get( control );
91 return controlDataImpl.CreateTransition( handle );
95 void AddTransitions( Internal::Control& control,
96 Dali::Animation animation,
97 const Toolkit::TransitionData& transitionData )
99 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get( control );
100 controlDataImpl.AddTransitions( animation, transitionData );
103 void DoAction( Control& control, Dali::Property::Index visualIndex, Dali::Property::Index actionId, const Dali::Property::Value attributes )
105 Internal::Control& controlInternal = Toolkit::Internal::GetImplementation( control );
106 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get( controlInternal );
107 controlDataImpl.DoAction( visualIndex, actionId, attributes );
110 void SetInputMethodContext( Internal::Control& control, InputMethodContext& inputMethodContext )
112 Internal::Control::Impl::Get( control ).SetInputMethodContext( inputMethodContext );
115 VisualEventSignalType& VisualEventSignal( Control control )
117 Internal::Control& internalControl = Toolkit::Internal::GetImplementation( control );
118 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get( internalControl );
119 return controlDataImpl.VisualEventSignal();
122 static Toolkit::Internal::Control::Impl *GetControlImplementationIfAny( Dali::Actor actor)
124 Dali::Toolkit::Control c = Toolkit::Control::DownCast( actor );
127 auto &impl1 = Toolkit::Internal::GetImplementation( c );
128 auto &impl2 = Toolkit::Internal::Control::Impl::Get( impl1 );
134 Toolkit::Control::AccessibilityActivateSignalType &AccessibilityActivateSignal( Toolkit::Control control )
136 auto ac = GetControlImplementationIfAny ( control );
137 return ac->mAccessibilityActivateSignal;
140 Toolkit::Control::AccessibilityReadingSkippedSignalType &AccessibilityReadingSkippedSignal( Toolkit::Control control )
142 auto ac = GetControlImplementationIfAny ( control );
143 return ac->mAccessibilityReadingSkippedSignal;
146 Toolkit::Control::AccessibilityReadingCancelledSignalType &AccessibilityReadingCancelledSignal( Toolkit::Control control )
148 auto ac = GetControlImplementationIfAny ( control );
149 return ac->mAccessibilityReadingCancelledSignal;
152 Toolkit::Control::AccessibilityReadingStoppedSignalType &AccessibilityReadingStoppedSignal( Toolkit::Control control )
154 auto ac = GetControlImplementationIfAny ( control );
155 return ac->mAccessibilityReadingStoppedSignal;
158 Toolkit::Control::AccessibilityGetNameSignalType &AccessibilityGetNameSignal( Toolkit::Control control )
160 auto ac = GetControlImplementationIfAny ( control );
161 return ac->mAccessibilityGetNameSignal;
164 Toolkit::Control::AccessibilityGetDescriptionSignalType &AccessibilityGetDescriptionSignal( Toolkit::Control control )
166 auto ac = GetControlImplementationIfAny ( control );
167 return ac->mAccessibilityGetDescriptionSignal;
170 Toolkit::Control::AccessibilityDoGestureSignalType &AccessibilityDoGestureSignal( Toolkit::Control control )
172 auto ac = GetControlImplementationIfAny ( control );
173 return ac->mAccessibilityDoGestureSignal;
176 void AppendAccessibilityRelation( Dali::Actor control, Actor destination, Dali::Accessibility::RelationType relation)
178 if ( auto ac = GetControlImplementationIfAny ( control ) )
180 auto index = static_cast<Dali::Property::Array::SizeType>(relation);
181 if (index >= ac->mAccessibilityRelations.size())
183 DALI_LOG_INFO( gLogFilter, Debug::Verbose, "Relation index exceeds vector size." );
187 auto obj = ac->GetAccessibilityObject(destination);
188 ac->mAccessibilityRelations[index].push_back(obj->GetAddress());
192 void RemoveAccessibilityRelation( Dali::Actor control, Actor destination, Dali::Accessibility::RelationType relation)
194 if ( auto ac = GetControlImplementationIfAny ( control ) )
196 auto index = static_cast<Dali::Property::Array::SizeType>(relation);
197 if (index >= ac->mAccessibilityRelations.size())
199 DALI_LOG_INFO( gLogFilter, Debug::Verbose, "Relation index exceeds vector size." );
203 auto obj = ac->GetAccessibilityObject(destination);
204 auto address = obj->GetAddress();
206 auto &targets = ac->mAccessibilityRelations[index];
207 for (auto i = 0u; i < targets.size(); ++i) {
208 if (targets[i].ToString() == address.ToString())
210 targets[i] = targets.back();
211 targets.erase(targets.end() - 1);
217 std::vector<std::vector<Accessibility::Address>> GetAccessibilityRelations( Dali::Actor control )
219 if ( auto ac = GetControlImplementationIfAny ( control ) )
221 return ac->mAccessibilityRelations;
226 void ClearAccessibilityRelations( Dali::Actor control )
228 if ( auto ac = GetControlImplementationIfAny ( control ) )
230 for (auto &it : ac->mAccessibilityRelations)
235 void SetAccessibilityConstructor( Dali::Actor control,
236 std::function< std::unique_ptr< Dali::Accessibility::Accessible >( Dali::Actor ) > constructor )
238 if ( auto ac = GetControlImplementationIfAny ( control ) )
240 ac->accessibilityConstructor = constructor;
244 void AppendAccessibilityAttribute( Dali::Actor control, const std::string& key,
245 const std::string value )
247 if ( auto ac = GetControlImplementationIfAny ( control ) )
249 ac->AppendAccessibilityAttribute( key, value );
253 void RemoveAccessibilityAttribute( Dali::Actor control, const std::string& key )
255 if ( auto ac = GetControlImplementationIfAny ( control ) )
257 ac->RemoveAccessibilityAttribute( key );
261 void ClearAccessibilityAttributes( Dali::Actor control )
263 if ( auto ac = GetControlImplementationIfAny ( control ) )
265 ac->ClearAccessibilityAttributes();
269 void SetAccessibilityReadingInfoType( Dali::Actor control, const Dali::Accessibility::ReadingInfoTypes types )
271 if ( auto ac = GetControlImplementationIfAny ( control ) )
273 ac->SetAccessibilityReadingInfoType( types );
277 Dali::Accessibility::ReadingInfoTypes GetAccessibilityReadingInfoType(Dali::Actor control )
279 if ( auto ac = GetControlImplementationIfAny ( control ) )
281 return ac->GetAccessibilityReadingInfoType();
286 bool ClearAccessibilityHighlight( Dali::Actor control )
288 if ( auto ac = GetControlImplementationIfAny ( control ) )
290 auto ptr = dynamic_cast<Dali::Accessibility::Component*>( ac );
292 return ptr->ClearHighlight();
297 bool GrabAccessibilityHighlight( Dali::Actor control )
299 if ( auto ac = GetControlImplementationIfAny ( control ) )
301 auto ptr = dynamic_cast<Dali::Accessibility::Component*>( ac );
303 return ptr->GrabHighlight();
308 Dali::Accessibility::States GetAccessibilityStates( Dali::Actor control )
310 if ( auto ac = GetControlImplementationIfAny ( control ) )
312 auto ptr = dynamic_cast<Dali::Accessibility::Component*>( ac );
314 return ptr->GetStates();
319 void NotifyAccessibilityStateChange( Dali::Actor control, Dali::Accessibility::States states, bool doRecursive )
321 if ( auto ac = GetControlImplementationIfAny ( control ) )
323 ac->GetAccessibilityObject()->NotifyAccessibilityStateChange( states, doRecursive );
327 Dali::Accessibility::Accessible *GetBoundAccessibilityObject( Dali::Actor control )
329 return Dali::Accessibility::Accessible::Get( control );
332 } // namespace DevelControl
334 } // namespace Toolkit