Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / FUiControl.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
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
8 //
9 //     http://floralicense.org/license/
10 //
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.
16 //
17 /**
18  * @file                FUiControl.cpp
19  * @brief               This is the implementation file for the Control class.
20  */
21
22 #include <FUiControl.h>
23 #include <FUiContainer.h>
24 #include <FUiTouchGestureDetector.h>
25 #include <FBaseSysLog.h>
26 #include <FApp_AppInfo.h>
27 #include "FUi_ControlImpl.h"
28 #include "FUi_ContainerImpl.h"
29 #include "FUi_ErrorMessages.h"
30 #include "FUiAnimVisualElement.h"
31 #include "FUiAnimVisualElementSurface.h"
32 #include "FUiAnim_VisualElementSurfaceImpl.h"
33
34 // for sto
35 #include <Evas.h>
36 #include "FUiAnim_EflNode.h"
37 #include "FUiAnim_EflLayer.h"
38 #include "FUiAnim_VisualElementImpl.h"
39 #include "FUiAnim_DisplayContextImpl.h"
40
41
42 using namespace Tizen::Base;
43 using namespace Tizen::Base::Collection;
44 using namespace Tizen::Graphics;
45 using namespace Tizen::Ui::Animations;
46
47 extern "C" _OSP_EXPORT_ void*
48 STO_GetNativeHandle(void* pControl)
49 {
50         Handle nativeHandle = 0;
51         Tizen::Ui::Control* pControlPointer = (Tizen::Ui::Control*)pControl;
52
53         if (pControlPointer)
54         {
55                 Tizen::Ui::_ControlImpl* pControlImpl = Tizen::Ui::_ControlImpl::GetInstance(*pControlPointer);
56
57                 if (pControlImpl)
58                 {
59                         VisualElement *pVisualElement = pControlImpl->GetVisualElement();
60
61                         if (pVisualElement)
62                         {
63                                 VisualElementSurface* pSurface = pVisualElement->GetSurfaceN();
64
65                                 if (pSurface)
66                                 {
67                                         _VisualElementSurfaceImpl* pSurfaceImpl = _VisualElementSurfaceImpl::GetInstance(*pSurface);
68                                         if (pSurfaceImpl)
69                                                 nativeHandle = pSurfaceImpl->GetNativeHandle();
70
71                                         delete pSurface;
72                                 }
73                         }
74                 }
75         }
76
77         return (void*)nativeHandle;
78 }
79
80 extern "C" _OSP_EXPORT_ void
81 STO_NativeHandleSetShowState(void* pNative, bool show)
82 {
83         if(show)
84                 evas_object_show((Evas_Object*)pNative);
85         else
86                 evas_object_hide((Evas_Object*)pNative);
87 }
88
89 extern "C" _OSP_EXPORT_ void*
90 STO_GetVisualElement(void* pControl)
91 {
92         Tizen::Ui::Control* pControlPointer = (Tizen::Ui::Control*)pControl;
93         Tizen::Ui::_ControlImpl* pControlImpl = Tizen::Ui::_ControlImpl::GetInstance(*pControlPointer);
94
95         return (void *)pControlImpl->GetVisualElement();
96 }
97
98 extern "C" _OSP_EXPORT_
99 void STO_NativeHandleDataSet(void* pEvasObject, void* pData, int width, int height)
100 {
101         evas_object_image_size_set((Evas_Object*)pEvasObject, width, height);
102         evas_object_image_data_set((Evas_Object*)pEvasObject, pData);
103 }
104
105
106
107 extern "C" _OSP_EXPORT_ void
108 STO_SetVisualElementNativeObject(void* pVisualElement, void* pNativeObject)
109 {
110         VisualElement* pVE = (VisualElement* )pVisualElement;
111         Evas_Object* pEO = (Evas_Object*)pNativeObject;
112
113         _VisualElementImpl* pVEImpl = _VisualElementImpl::GetInstance(*pVE);
114
115         _EflNode* pNode = (_EflNode*)pVEImpl->GetNativeNode();
116         pNode->AddNativeSmartObject(*pVE, pEO);
117
118         int imageWidth = 0;
119         int imageHeight = 0;
120
121         evas_object_image_size_get(pEO, &imageWidth, &imageHeight);
122         evas_object_image_data_update_add(pEO, 0, 0, imageWidth, imageHeight);
123 }
124
125 extern "C" _OSP_EXPORT_
126 void* STO_CreateNativeImageObject(void* pDisplayContext, int width, int height)
127 {
128
129         if(!pDisplayContext)
130         {
131                 return null;
132         }
133
134         _DisplayContextImpl* pDispImpl =  _DisplayContextImpl::GetInstance(*(DisplayContext*)pDisplayContext);
135
136         if(!pDispImpl->GetNativeLayer())
137         {
138                 return null;
139         }
140         Evas* pEvas = ((_EflLayer*)pDispImpl->GetNativeLayer())->GetEvas();
141
142         if(!pEvas)
143         {
144                 return null;
145         }
146
147         Evas_Object* pImage = evas_object_image_filled_add(pEvas);
148         evas_object_resize(pImage, width, height);
149         evas_object_move(pImage, 0, 0);
150 //      evas_object_show(pImage);
151
152         return pImage;
153
154 }
155
156 extern "C" _OSP_EXPORT_ void
157 STO_Destroy(void* pVisualElement, void* pEvasObject)
158 {
159         VisualElement* pVE = (VisualElement* )pVisualElement;
160
161         _VisualElementImpl* pVEImpl = _VisualElementImpl::GetInstance(*pVE);
162
163         _EflNode* pNode = (_EflNode*)pVEImpl->GetNativeNode();
164         pNode->AddNativeSmartObject(*pVE, null);
165
166         evas_object_del((Evas_Object*)pEvasObject);
167 }
168
169
170 namespace Tizen { namespace Ui {
171
172 Control::Control(void)
173         : _pControlImpl(null)
174 {
175 }
176
177 Control::~Control(void)
178 {
179         Dispose();
180 }
181
182 void
183 Control::Dispose(void)
184 {
185         delete _pControlImpl;
186         _pControlImpl = null;
187 }
188
189 result
190 Control::Construct(void)
191 {
192         SysAssertf(_pControlImpl == null, "Already constructed. Calling Construct() twice or more on a same instance is not allowed for this class.");
193
194         _ControlImpl* pImpl = _ControlImpl::CreateControlImplN(*this);
195         result r = GetLastResult();
196         SysTryReturn(NID_UI, pImpl, r, r, "[%s] Propagating.", GetErrorMessage(r));
197
198         _pControlImpl = pImpl;
199
200         return E_SUCCESS;
201 }
202
203 result
204 Control::Draw(void)
205 {
206         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
207         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
208
209         result r = pControlImpl->Draw(true);
210         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
211
212         return E_SUCCESS;
213 }
214
215 result
216 Control::Draw(bool recursive)
217 {
218         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
219         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
220
221         result r = pControlImpl->Draw(recursive);
222         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
223
224         return E_SUCCESS;
225 }
226
227 void
228 Control::Invalidate(bool recursive)
229 {
230         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
231         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
232
233         pControlImpl->Invalidate(recursive);
234         result r = GetLastResult();
235         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
236 }
237
238 void
239 Control::InvalidateBounds(const Tizen::Graphics::Rectangle& bounds)
240 {
241         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
242         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
243
244         pControlImpl->Invalidate(bounds);
245         result r = GetLastResult();
246         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
247 }
248
249 Canvas*
250 Control::GetCanvasN(void) const
251 {
252         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
253         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
254
255         Canvas* pCanvas = pControlImpl->GetCanvasN();
256         result r = GetLastResult();
257         SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
258
259         return pCanvas;
260
261 CATCH:
262         delete pCanvas;
263         return null;
264 }
265
266 Canvas*
267 Control::GetCanvasN(int x, int y, int w, int h) const
268 {
269         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
270         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
271
272         Canvas* pCanvas = pControlImpl->GetCanvasN(Rectangle(x, y, w, h));
273         result r = GetLastResult();
274         SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
275
276         return pCanvas;
277
278 CATCH:
279         delete pCanvas;
280         return null;
281 }
282
283 Canvas*
284 Control::GetCanvasN(const Rectangle& bounds) const
285 {
286         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
287         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
288
289         Canvas* pCanvas = pControlImpl->GetCanvasN(bounds);
290         result r = GetLastResult();
291         SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
292
293         return pCanvas;
294
295 CATCH:
296         delete pCanvas;
297         return null;
298 }
299
300 result
301 Control::SetEnabled(bool enable)
302 {
303         //versioning
304         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
305
306         if (Tizen::App::_AppInfo::GetApiVersion() == _API_VERSION_2_0 && Tizen::App::_AppInfo::IsOspCompat())
307         {
308                 SysTryReturn(NID_UI,
309                         pControlImpl, E_UNSUPPORTED_OPERATION,
310                         E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION] This control is not constructed.");
311         }
312         else
313         {
314                 SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
315         }
316
317         pControlImpl->SetEnableState(enable);
318         result r = GetLastResult();
319         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
320
321         return E_SUCCESS;
322 }
323
324 result
325 Control::Show(void)
326 {
327         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
328         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
329
330         result r = pControlImpl->Show();
331         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
332
333         return E_SUCCESS;
334 }
335
336 void
337 Control::GetBounds(int& x, int& y, int& w, int& h) const
338 {
339         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
340         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
341
342         Rectangle bounds = pControlImpl->GetBounds();
343         result r = GetLastResult();
344         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
345
346         x = bounds.x;
347         y = bounds.y;
348         w = bounds.width;
349         h = bounds.height;
350 }
351
352 Rectangle
353 Control::GetBounds(void) const
354 {
355         const Rectangle errorBounds = _ControlImpl::GetErrorBounds();
356
357         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
358         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
359
360         Rectangle bounds = pControlImpl->GetBounds();
361         result r = GetLastResult();
362         SysTryReturn(NID_UI, r == E_SUCCESS, errorBounds, r, "[%s] Propagating.", GetErrorMessage(r));
363
364         return bounds;
365 }
366
367 Dimension
368 Control::GetSize(void) const
369 {
370         const Rectangle errorBounds = _ControlImpl::GetErrorBounds();
371         const Dimension errorSize(errorBounds.width, errorBounds.height);
372
373         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
374         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
375
376         Dimension size = pControlImpl->GetSize();
377         result r = GetLastResult();
378         SysTryReturn(NID_UI, r == E_SUCCESS, errorSize, r, "[%s] Propagating.", GetErrorMessage(r));
379
380         return size;
381 }
382
383 void
384 Control::GetSize(int& w, int& h) const
385 {
386         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
387         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
388
389         Dimension size = pControlImpl->GetSize();
390         result r = GetLastResult();
391         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
392
393         w = size.width;
394         h = size.height;
395 }
396
397 Point
398 Control::GetPosition(void) const
399 {
400         const Rectangle errorBounds = _ControlImpl::GetErrorBounds();
401         const Point errorPosition(errorBounds.x, errorBounds.y);
402
403         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
404         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
405
406         Point position = pControlImpl->GetPosition();
407         result r = GetLastResult();
408         SysTryReturn(NID_UI, r == E_SUCCESS, errorPosition, r, "[%s] Propagating.", GetErrorMessage(r));
409
410         return position;
411 }
412
413 void
414 Control::GetPosition(int& x, int& y) const
415 {
416         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
417         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
418
419         Point position = pControlImpl->GetPosition();
420         result r = GetLastResult();
421         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
422
423         x = position.x;
424         y = position.y;
425 }
426
427 int
428 Control::GetX(void) const
429 {
430         const Rectangle errorBounds = _ControlImpl::GetErrorBounds();
431         const int errorX = errorBounds.x;
432
433         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
434         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
435
436         int x = pControlImpl->GetPosition().x;
437         result r = GetLastResult();
438         SysTryReturn(NID_UI, r == E_SUCCESS, errorX, r, "[%s] Propagating.", GetErrorMessage(r));
439
440         return x;
441 }
442
443 int
444 Control::GetY(void) const
445 {
446         const Rectangle errorBounds = _ControlImpl::GetErrorBounds();
447         const int errorY = errorBounds.y;
448
449         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
450         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
451
452         int y = pControlImpl->GetPosition().y;
453         result r = GetLastResult();
454         SysTryReturn(NID_UI, r == E_SUCCESS, errorY, r, "[%s] Propagating.", GetErrorMessage(r));
455
456         return y;
457 }
458
459 int
460 Control::GetWidth(void) const
461 {
462         const Rectangle errorBounds = _ControlImpl::GetErrorBounds();
463         const int errorWidth = errorBounds.width;
464
465         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
466         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
467
468         int width = pControlImpl->GetSize().width;
469         result r = GetLastResult();
470         SysTryReturn(NID_UI, r == E_SUCCESS, errorWidth, r, "[%s] Propagating.", GetErrorMessage(r));
471
472         return width;
473 }
474
475 int
476 Control::GetHeight(void) const
477 {
478         const Rectangle errorBounds = _ControlImpl::GetErrorBounds();
479         const int errorHeight = errorBounds.height;
480
481         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
482         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
483
484         int height = pControlImpl->GetSize().height;
485         result r = GetLastResult();
486         SysTryReturn(NID_UI, r == E_SUCCESS, errorHeight, r, "[%s] Propagating.", GetErrorMessage(r));
487
488         return height;
489 }
490
491 Container*
492 Control::GetParent(void) const
493 {
494         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
495         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
496
497         _ContainerImpl* pParentImpl = pControlImpl->GetParent();
498         result r = GetLastResult();
499         SysTryReturn(NID_UI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
500
501         return pParentImpl ? &pParentImpl->GetPublic() : null;
502 }
503
504 String
505 Control::GetFont(void) const
506 {
507         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
508         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
509
510         return pControlImpl->GetFont();
511 }
512
513 result
514 Control::SetBounds(int x, int y, int w, int h)
515 {
516         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
517         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
518
519         result r = pControlImpl->SetBounds(Rectangle(x, y, w, h));
520         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
521
522         return E_SUCCESS;
523 }
524
525 result
526 Control::SetBounds(const Rectangle& bounds)
527 {
528         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
529         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
530
531         result r = pControlImpl->SetBounds(bounds);
532         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
533
534         return E_SUCCESS;
535 }
536
537 result
538 Control::SetSize(int w, int h)
539 {
540         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
541         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
542
543         result r = pControlImpl->SetSize(Dimension(w, h));
544         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
545
546         return E_SUCCESS;
547 }
548
549 result
550 Control::SetSize(const Dimension& size)
551 {
552         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
553         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
554
555         result r = pControlImpl->SetSize(size);
556         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
557
558         return E_SUCCESS;
559 }
560
561 result
562 Control::SetPosition(int x, int y)
563 {
564         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
565         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
566
567         result r = pControlImpl->SetPosition(Point(x, y));
568         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
569
570         return E_SUCCESS;
571 }
572
573 result
574 Control::SetPosition(const Point& position)
575 {
576         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
577         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
578
579         result r = pControlImpl->SetPosition(position);
580         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
581
582         return E_SUCCESS;
583 }
584
585 result
586 Control::SetFont(const String& fontName)
587 {
588         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
589         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
590
591         result r = pControlImpl->SetFont(fontName);
592         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
593         return E_SUCCESS;
594 }
595
596 bool
597 Control::IsEnabled(void) const
598 {
599         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
600         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
601
602         return pControlImpl->IsEnabled();
603 }
604
605 bool
606 Control::IsVisible(void) const
607 {
608         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
609         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
610
611         return pControlImpl->IsVisible();
612 }
613
614 result
615 Control::SetFocus()
616 {
617         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
618         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
619
620         pControlImpl->SetFocused();
621         result r = GetLastResult();
622         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
623
624         return E_SUCCESS;
625 }
626
627 result
628 Control::SetShowState(bool state)
629 {
630         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
631         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
632
633         result r = pControlImpl->SetVisibleState(state);
634         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
635
636         return E_SUCCESS;
637 }
638
639 Tizen::Ui::Animations::VisualElement*
640 Control::GetVisualElement(void) const
641 {
642         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
643         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
644
645         return pControlImpl->GetVisualElement();
646         //return pControlImpl->GetCustomVisualElement();
647 }
648
649 bool
650 Control::Contains(int x, int y) const
651 {
652         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
653         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
654
655         return pControlImpl->Contains(Point(x, y));
656 }
657
658 bool
659 Control::Contains(const Point& point) const
660 {
661         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
662         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
663
664         return pControlImpl->Contains(point);
665 }
666
667 bool
668 Control::HasFocus(void) const
669 {
670         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
671         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
672
673         return pControlImpl->IsFocused();
674 }
675
676 bool
677 Control::GetShowState(void) const
678 {
679         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
680         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
681
682         return pControlImpl->GetVisibleState();
683 }
684
685 String
686 Control::GetName(void) const
687 {
688         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
689         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
690
691         return pControlImpl->GetName();
692 }
693
694 void
695 Control::SetName(const String& name)
696 {
697         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
698         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
699
700         pControlImpl->SetName(name);
701 }
702
703 void
704 Control::AddFocusEventListener(IFocusEventListener& listener)
705 {
706         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
707         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
708
709         result r = pControlImpl->AddFocusEventListener(listener);
710         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
711 }
712
713 void
714 Control::RemoveFocusEventListener(IFocusEventListener& listener)
715 {
716         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
717         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
718
719         result r = pControlImpl->RemoveFocusEventListener(listener);
720         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
721 }
722
723 void
724 Control::AddKeyEventListener(IKeyEventListener& listener)
725 {
726         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
727         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
728
729         result r = pControlImpl->AddKeyEventListener(listener);
730         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
731 }
732
733 void
734 Control::RemoveKeyEventListener(IKeyEventListener& listener)
735 {
736         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
737         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
738
739         result r = pControlImpl->RemoveKeyEventListener(listener);
740         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
741 }
742
743 void
744 Control::AddTouchEventListener(ITouchEventListener& listener)
745 {
746         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
747         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
748
749         result r = pControlImpl->AddTouchEventListener(listener);
750         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
751 }
752
753 void
754 Control::RemoveTouchEventListener(ITouchEventListener& listener)
755 {
756         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
757         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
758
759         result r = pControlImpl->RemoveTouchEventListener(listener);
760         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
761 }
762
763 void
764 Control::AddDragDropEventListener(IDragDropEventListener& listener)
765 {
766         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
767         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
768
769         result r = pControlImpl->AddDragDropEventListener(listener);
770         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
771 }
772
773 void
774 Control::RemoveDragDropEventListener(IDragDropEventListener& listener)
775 {
776         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
777         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
778
779         result r = pControlImpl->RemoveDragDropEventListener(listener);
780         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
781 }
782
783 void
784 Control::AddTouchModeChangedEventListener(ITouchModeChangedEventListener& listener)
785 {
786         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
787         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
788
789         result r = pControlImpl->AddTouchModeChangedEventListener(listener);
790         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
791 }
792
793 void
794 Control::RemoveTouchModeChangedEventListener(ITouchModeChangedEventListener& listener)
795 {
796         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
797         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
798
799         result r = pControlImpl->RemoveTouchModeChangedEventListener(listener);
800         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
801 }
802
803 void
804 Control::SetDragEnabled(bool enabled)
805 {
806         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
807         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
808
809         pControlImpl->SetDragEnabled(enabled);
810 }
811
812 void
813 Control::SetDropEnabled(bool enabled)
814 {
815         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
816         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
817
818         pControlImpl->SetDropEnabled(enabled);
819 }
820
821 void
822 Control::RequestRedraw(bool show) const
823 {
824         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
825         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
826
827         pControlImpl->RequestRedraw(show);
828         result r = GetLastResult();
829         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
830 }
831
832 result
833 Control::OnInitializing(void)
834 {
835         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
836         SysTryReturn(NID_UI, pControlImpl, E_FAILURE, E_FAILURE, "[E_FAILURE] This callback returns failure.");
837
838         return E_SUCCESS;
839 }
840
841 result
842 Control::OnTerminating(void)
843 {
844         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
845         SysTryReturn(NID_UI, pControlImpl, E_FAILURE, E_FAILURE, "[E_FAILURE] This callback returns failure.");
846
847         return E_SUCCESS;
848 }
849
850 void
851 Control::OnUserEventReceivedN(RequestId requestId, IList* pArgs)
852 {
853 }
854
855 void
856 Control::SendUserEvent(RequestId requestId, const IList* pArgs) const
857 {
858         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
859         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
860
861         pControlImpl->SendUserEvent(requestId, pArgs);
862         result r = GetLastResult();
863         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
864 }
865
866 result
867 Control::SetFocusable(bool focusable)
868 {
869         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
870         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
871
872         result r = pControlImpl->SetFocusable(focusable);
873         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
874
875         return E_SUCCESS;
876 }
877
878 bool
879 Control::IsFocusable(void) const
880 {
881         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
882         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
883
884         return pControlImpl->IsFocusable();
885 }
886
887 bool
888 Control::IsInTouchMode(void) const
889 {
890         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
891         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
892
893         return pControlImpl->IsInTouchMode();
894 }
895
896
897 result
898 Control::SetCompositeMode(Tizen::Ui::CompositeMode compositeMode)
899 {
900         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
901         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
902
903         result r = pControlImpl->SetCompositeMode(compositeMode);
904         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
905
906         return E_SUCCESS;
907 }
908
909 CompositeMode
910 Control::GetCompositeMode(void) const
911 {
912         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
913         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
914
915         return pControlImpl->GetCompositeMode();
916 }
917
918 result
919 Control::SetChromaKeyColor(Color chromaKeyColor)
920 {
921         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
922         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
923
924         result r = pControlImpl->SetChromaKeyColor(chromaKeyColor);
925         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
926
927         return E_SUCCESS;
928 }
929
930 Color
931 Control::GetChromaKeyColor(void) const
932 {
933         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
934         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
935
936         return pControlImpl->GetChromaKeyColor();
937 }
938
939 result
940 Control::ConsumeInputEvent(void)
941 {
942         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
943         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
944
945         pControlImpl->ConsumeInputEvent();
946         result r = GetLastResult();
947         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
948
949         return E_SUCCESS;
950 }
951
952 IKeyEventListener*
953 Control::GetDefaultkeyEventListener(void) const
954 {
955         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
956         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
957
958         return pControlImpl->GetDefaultKeyEventListener();
959 }
960
961 result
962 Control::SetDefaultKeyEventListener(IKeyEventListener* pDefaultListener)
963 {
964         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
965         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
966
967         pControlImpl->SetDefaultKeyEventListener(pDefaultListener);
968         result r = GetLastResult();
969         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
970
971         return E_SUCCESS;
972 }
973
974 ITouchEventListener*
975 Control::GetDefaultTouchEventListener(void) const
976 {
977         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
978         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
979
980         return pControlImpl->GetDefaultTouchEventListener();
981 }
982
983 result
984 Control::SetDefaultTouchEventListener(ITouchEventListener* pDefaultListener)
985 {
986         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
987         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
988
989         pControlImpl->SetDefaultTouchEventListener(pDefaultListener);
990         result r = GetLastResult();
991         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
992
993         return E_SUCCESS;
994 }
995
996 bool
997 Control::IsMovable(void) const
998 {
999         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1000         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1001
1002         return pControlImpl->IsMovable();
1003 }
1004
1005 bool
1006 Control::IsResizable(void) const
1007 {
1008         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1009         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1010
1011         return pControlImpl->IsResizable();
1012 }
1013
1014 result
1015 Control::SetMinimumSize(const Dimension& minSize)
1016 {
1017         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1018         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1019
1020         result r = pControlImpl->SetMinimumSize(minSize);
1021         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1022
1023         return E_SUCCESS;
1024 }
1025
1026 result
1027 Control::SetMaximumSize(const Dimension& maxSize)
1028 {
1029         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1030         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1031
1032         result r = pControlImpl->SetMaximumSize(maxSize);
1033         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1034
1035         return E_SUCCESS;
1036 }
1037
1038 Point
1039 Control::ConvertToControlPosition(const Point& screenPosition) const
1040 {
1041         const Rectangle errorBounds = _ControlImpl::GetErrorBounds();
1042         const Point errorPosition(errorBounds.x, errorBounds.y);
1043
1044         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1045         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1046
1047         Point point = pControlImpl->ConvertToControlPosition(screenPosition);
1048         result r = GetLastResult();
1049         SysTryReturn(NID_UI, r == E_SUCCESS, errorPosition, r, "[%s] Propagating.", GetErrorMessage(r));
1050
1051         return point;
1052 }
1053
1054 Point
1055 Control::ConvertToScreenPosition(const Point& controlPosition) const
1056 {
1057         const Rectangle errorBounds = _ControlImpl::GetErrorBounds();
1058         const Point errorPosition(errorBounds.x, errorBounds.y);
1059
1060         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1061         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1062
1063         Point point = pControlImpl->ConvertToScreenPosition(controlPosition);
1064         result r = GetLastResult();
1065         SysTryReturn(NID_UI, r == E_SUCCESS, errorPosition, r, "[%s] Propagating.", GetErrorMessage(r));
1066
1067         return point;
1068 }
1069
1070 Dimension
1071 Control::GetMinimumSize(void) const
1072 {
1073         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1074         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1075
1076         return pControlImpl->GetMinimumSize();
1077 }
1078
1079 Dimension
1080 Control::GetMaximumSize(void) const
1081 {
1082         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1083         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1084
1085         return pControlImpl->GetMaximumSize();
1086 }
1087
1088 ControlAnimator*
1089 Control::GetControlAnimator(void) const
1090 {
1091         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1092         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1093
1094         return pControlImpl->GetControlAnimator();
1095 }
1096
1097 result
1098 Control::AddGestureDetector(const TouchGestureDetector& gestureDetector)
1099 {
1100         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1101         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1102
1103         result r = pControlImpl->AddGestureDetector(gestureDetector);
1104         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1105
1106         return E_SUCCESS;
1107 }
1108
1109 result
1110 Control::RemoveGestureDetector(const TouchGestureDetector& gestureDetector)
1111 {
1112         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1113         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1114
1115         result r = pControlImpl->RemoveGestureDetector(gestureDetector);
1116         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1117
1118         return E_SUCCESS;
1119 }
1120
1121 Bitmap*
1122 Control::GetCapturedBitmapN(void) const
1123 {
1124         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1125         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1126
1127         return pControlImpl->GetCapturedBitmapN();
1128 }
1129
1130 Rectangle
1131 Control::GetInvalidatedBounds(void) const
1132 {
1133         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1134         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1135
1136         return pControlImpl->GetInvalidatedBounds();
1137 }
1138
1139 void
1140 Control::SetMultipointTouchEnabled(bool enable)
1141 {
1142         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1143         if (pControlImpl)
1144         {
1145                 pControlImpl->SetMultiTouchEnabled(enable);
1146         }
1147 }
1148
1149 bool
1150 Control::IsMultipointTouchEnabled(void) const
1151 {
1152         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1153         if (pControlImpl)
1154         {
1155                 return pControlImpl->IsMultiTouchEnabled();
1156         }
1157
1158         return false;
1159 }
1160
1161 const AccessibilityContainer*
1162 Control::GetAccessibilityContainer(void) const
1163 {
1164         _ControlImpl* pControlImpl = const_cast<_ControlImpl*>(_ControlImpl::GetInstance(*this));
1165         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1166
1167         return pControlImpl->GetAccessibilityContainer();
1168 }
1169 AccessibilityContainer*
1170 Control::GetAccessibilityContainer(void)
1171 {
1172         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1173         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1174
1175         return pControlImpl->GetAccessibilityContainer();
1176 }
1177 }}      // Tizen::Ui