2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://floralicense.org/license/
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
18 #include <FBaseSysLog.h>
19 #include <FBaseString.h>
20 #include <FUiAccessibilityElement.h>
21 #include <FUiAccessibilityContainer.h>
22 #include "FUi_ControlImpl.h"
23 #include "FUi_AccessibilityElement.h"
24 #include "FUi_AccessibilityElementImpl.h"
25 #include "FUi_AccessibilityContainer.h"
26 #include "FUi_AccessibilityContainerImpl.h"
28 using namespace Tizen::Base;
29 using namespace Tizen::Base::Collection;
30 using namespace Tizen::Graphics;
32 namespace Tizen { namespace Ui {
33 _AccessibilityContainerImpl::_AccessibilityContainerImpl(const _ControlImpl& controlImpl, const AccessibilityContainer& publicInstance, const _AccessibilityContainer& coreInstance)
34 : __pControlImpl(null)
38 __pControlImpl = &const_cast<_ControlImpl&>(controlImpl);
39 __pPublic = &const_cast<AccessibilityContainer&>(publicInstance);
40 __pCore = &const_cast<_AccessibilityContainer&>(coreInstance);
41 __coreHandle = controlImpl.GetCore().GetHandle();
43 AccessibilityContainer*
44 _AccessibilityContainerImpl::CreateAccessibilityContainerN(const _ControlImpl& controlImpl)
46 _ControlImpl* pControlImpl = const_cast <_ControlImpl*>(&controlImpl);
47 _AccessibilityContainer* pCore = pControlImpl->GetCore().GetAccessibilityContainer();
48 SysTryReturn(NID_UI, pCore && pCore->IsActivated(), null, E_SYSTEM, "[E_SYSTEM] This instance has not constructed.");
50 AccessibilityContainer* pPublic = new (std::nothrow) AccessibilityContainer();
51 SysTryReturn(NID_UI, pPublic, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed");
53 _AccessibilityContainerImpl* pImpl = new (std::nothrow) _AccessibilityContainerImpl(controlImpl, *pPublic, *pCore);
54 SysTryCatch(NID_UI, pImpl,,E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed");
55 pPublic->__pAccessibilityContainerImpl = pImpl;
62 _AccessibilityContainerImpl::~_AccessibilityContainerImpl(void)
64 AccessibilityElement* pElement = null;
65 int count = __elementList.GetCount();
67 for ( int i = 0 ; i < count ; i++)
69 r = __elementList.GetAt(i, pElement);
76 __elementList.RemoveAll();
79 __listenerList.RemoveAll();
82 _AccessibilityContainerImpl::GetOwner(void)
84 return *__pControlImpl;
87 AccessibilityContainer&
88 _AccessibilityContainerImpl::GetPublic(void)
94 _AccessibilityContainerImpl::GetChildElement(const String& name)
96 SysTryReturn(NID_UI, ControlCoreExists(__coreHandle), null, E_SYSTEM,"[E_SYSTEM] A core of control is invalid.");
97 _AccessibilityElementImpl* pNewElementImpl = null;
98 _AccessibilityElement* pElement = __pCore->GetChildElement(name);
99 SysTryReturn(NID_UI, pElement, null, E_SYSTEM,"[E_SYSTEM]");
100 if(pElement->GetUserData() == null)
102 pNewElementImpl = new (std::nothrow) _AccessibilityElementImpl(*pElement);
103 SysTryReturn(NID_UI, pNewElementImpl, null, E_OUT_OF_MEMORY,"[E_OUT_OF_MEMORY] Memory allocation is failed");
104 pElement->SetUserData(pNewElementImpl);
105 __elementList.Add(&(pNewElementImpl->GetPublic()));
106 return &(pNewElementImpl->GetPublic());
108 return &(static_cast<_AccessibilityElementImpl*>(pElement->GetUserData())->GetPublic());
112 _AccessibilityContainerImpl::AddAccessibilityListener(const IAccessibilityListener& listener)
114 SysTryReturn(NID_UI, ControlCoreExists(__coreHandle), E_SYSTEM, E_SYSTEM,"[E_SYSTEM] A core of control is invalid.");
115 result r = E_OBJ_ALREADY_EXIST;
116 __pCore->AddListener(*this);
118 IAccessibilityListener* pListener = &const_cast<IAccessibilityListener&>(listener);
119 SysTryReturn(NID_UI,pListener && __listenerList.IndexOf(pListener,index) != E_SUCCESS, E_OBJ_ALREADY_EXIST, E_OBJ_ALREADY_EXIST,"[E_OBJ_ALREADY_EXIST] The listener is already exist.");
120 r = __listenerList.Add(pListener);
121 SysTryReturn(NID_UI, r == E_SUCCESS, r, r,"[%s]",GetErrorMessage(r));
127 _AccessibilityContainerImpl::RemoveAccessibilityListener(const IAccessibilityListener& listener)
129 SysTryReturn(NID_UI, ControlCoreExists(__coreHandle), E_SYSTEM, E_SYSTEM,"[E_SYSTEM] A core of control is invalid.");
130 result r = E_OBJ_NOT_FOUND;
131 SysTryReturn(NID_UI, __listenerList.GetCount() > 0, E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND,"[E_OBJ_NOT_FOUND] the listener has been not added.");
134 IAccessibilityListener* pListener = &const_cast<IAccessibilityListener&>(listener);
135 SysTryReturn(NID_UI,pListener && __listenerList.IndexOf(pListener,index) == E_SUCCESS, E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND,"[E_OBJ_NOT_FOUND] the listener has been not added.");
136 r = __listenerList.Remove(pListener);
137 SysTryReturn(NID_UI, r == E_SUCCESS, r, r,"[%s]",GetErrorMessage(r));
139 if(__listenerList.GetCount() < 1)
141 __pCore->RemoveListener(*this);
147 _AccessibilityContainerImpl::AddElement(const _AccessibilityElementImpl& element)
149 SysTryReturn(NID_UI, ControlCoreExists(__coreHandle), E_SYSTEM, E_SYSTEM,"[E_SYSTEM] A core of control is invalid.");
150 __elementList.Add(&(const_cast<_AccessibilityElementImpl&>(element).GetPublic()));
151 return __pCore->AddElement(element.GetCore());
155 _AccessibilityContainerImpl::AddElements(const IList& elementList)
161 _AccessibilityContainerImpl::GetElementsN(void)
163 SysTryReturn(NID_UI, ControlCoreExists(__coreHandle), null, E_SYSTEM,"[E_SYSTEM] A core of control is invalid.");
164 LinkedList* _pList = new (std::nothrow) LinkedList;
165 SysTryReturn(NID_UI, _pList, null, E_OUT_OF_MEMORY,"[E_OUT_OF_MEMORY] Memory allocation is failed");
167 result r = E_SUCCESS;
168 _AccessibilityElement* pItem = null;
169 IListT<_AccessibilityElement*>* pList = __pCore->GetElementsN();
170 SysTryCatch(NID_UI, pList, , E_SYSTEM,"[E_SYSTEM]");
171 count = pList->GetCount();
172 SysTryCatch(NID_UI, count >= 1, , E_SYSTEM,"[E_SYSTEM]");
174 for (int i = 0;i < count; i++)
176 _AccessibilityElementImpl* pNewElementImpl = null;
177 r = pList->GetAt(i,pItem);
178 SysTryCatch(NID_UI, r == E_SUCCESS, , E_SYSTEM,"[E_SYSTEM]");
180 if(pItem->GetUserData() == null)
182 pNewElementImpl = new (std::nothrow) _AccessibilityElementImpl(*pItem);
183 SysTryCatch(NID_UI, pNewElementImpl, , E_OUT_OF_MEMORY,"[E_OUT_OF_MEMORY] Memory allocation is failed");
184 pItem->SetUserData(pNewElementImpl);
185 AddSystemElement(pNewElementImpl->GetPublic());
189 pNewElementImpl = static_cast<_AccessibilityElementImpl*>(pItem->GetUserData());
191 _pList->Add(pNewElementImpl->GetPublic());
202 _AccessibilityContainerImpl::RemoveElement(const _AccessibilityElementImpl& element)
204 SysTryReturn(NID_UI, ControlCoreExists(__coreHandle), E_SYSTEM, E_SYSTEM,"[E_SYSTEM] A core of control is invalid.");
205 result r = __pCore->RemoveElement(element.GetCore());
206 AccessibilityElement* pElement = const_cast<AccessibilityElement*>(&(element.GetPublic()));
207 __elementList.Remove(pElement);
213 _AccessibilityContainerImpl::RemoveAllElement(void)
215 SysTryReturn(NID_UI, ControlCoreExists(__coreHandle), E_SYSTEM, E_SYSTEM,"[E_SYSTEM] A core of control is invalid.");
216 result r = __pCore->RemoveAllElement();
219 int count = __elementList.GetCount();
220 AccessibilityElement* pElement = null;
221 for (int i = 0; i < count; i++)
223 if (__elementList.GetAt(i, pElement) == E_SUCCESS)
229 __elementList.RemoveAll();
235 _AccessibilityContainerImpl::GetCurrentGrammar(void) const
237 SysTryReturn(NID_UI, ControlCoreExists(__coreHandle), L"", E_SYSTEM,"[E_SYSTEM] A core of control is invalid.");
238 return __pCore->GetCurrentGrammar();
241 AccessibilityScreenReaderStatus
242 _AccessibilityContainerImpl::GetStatus(void) const
244 SysTryReturn(NID_UI, ControlCoreExists(__coreHandle), ACCESSIBILITY_SCREEN_READER_STATUS__NONE, E_SYSTEM,"[E_SYSTEM] A core of control is invalid.");
245 return __pCore->GetStatus();
249 _AccessibilityContainerImpl::ReadingAll(void)
251 SysTryReturn(NID_UI, ControlCoreExists(__coreHandle), , E_SYSTEM,"[E_SYSTEM] A core of control is invalid.");
252 return __pCore->ReadingAll();
255 _AccessibilityContainerImpl*
256 _AccessibilityContainerImpl::GetInstance(AccessibilityContainer& container)
258 return static_cast<_AccessibilityContainerImpl*> (container.__pAccessibilityContainerImpl);
261 const _AccessibilityContainerImpl*
262 _AccessibilityContainerImpl::GetInstance(const AccessibilityContainer& container)
264 return static_cast<_AccessibilityContainerImpl*> (container.__pAccessibilityContainerImpl);
268 _AccessibilityContainerImpl::OnAccessibilityFocusMovedNext(const _AccessibilityContainer& control, const _AccessibilityElement& element)
273 _AccessibilityContainerImpl::OnAccessibilityFocusMovedPrevious(const _AccessibilityContainer& control, const _AccessibilityElement& element)
278 _AccessibilityContainerImpl::OnAccessibilityReadElement(const _AccessibilityContainer& control, const _AccessibilityElement& element)
283 _AccessibilityContainerImpl::OnAccessibilityFocusIn(const _AccessibilityContainer& control, const _AccessibilityElement& element)
288 _AccessibilityContainerImpl::OnAccessibilityFocusOut(const _AccessibilityContainer& control, const _AccessibilityElement& element)
293 _AccessibilityContainerImpl::OnAccessibilityActionPerformed(const _AccessibilityContainer& control, const _AccessibilityElement& element)
298 _AccessibilityContainerImpl::OnAccessibilityValueIncreased(const _AccessibilityContainer& control, const _AccessibilityElement& element)
303 _AccessibilityContainerImpl::OnAccessibilityValueDecreased(const _AccessibilityContainer& control, const _AccessibilityElement& element)
308 _AccessibilityContainerImpl::ControlCoreExists(_ControlHandle handle) const
310 _Control* p_Control = null;
311 _ControlManager* pManager = _ControlManager::GetInstance();
312 SysTryReturn(NID_UI, !(handle.IsNull()), false, E_SYSTEM, "[E_SYSTEM] System Error.");
313 SysTryReturn(NID_UI, pManager, false, E_SYSTEM, "[E_SYSTEM] System Error.");
315 p_Control = pManager->GetObject(handle);
317 p_Control && p_Control->GetHandle() == __pControlImpl->GetCore().GetHandle(), false, E_SYSTEM,
318 "[E_SYSTEM] System Error.");
320 SetLastResult(E_SUCCESS);
325 _AccessibilityContainerImpl::MoveElement(const _AccessibilityElementImpl* pPreviousElement, const _AccessibilityElementImpl& element)
327 _AccessibilityElement* pPreviousCore = null;
328 if (pPreviousElement != null)
330 pPreviousCore = &const_cast<_AccessibilityElement&>(pPreviousElement->GetCore());
332 return __pCore->MoveElement(pPreviousCore, element.GetCore());
336 _AccessibilityContainerImpl::AddSystemElement(const AccessibilityElement& element)