Merge master into tizen_2.1 for Slider and EEA
[framework/osp/uifw.git] / src / ui / controls / FUiCtrl_SearchBar.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0/
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 /**
19  * @file                FUiCtrl_SearchBar.cpp
20  * @brief               This is the implementation file for the _SearchBar class.
21  */
22
23 #include <FBaseErrorDefine.h>
24 #include <FBaseSysLog.h>
25 #include <FGrp_BitmapImpl.h>
26 #include "FUiAnim_VisualElement.h"
27 #include "FUi_ResourceManager.h"
28 #include "FUiCtrl_SearchBar.h"
29 #include "FUiCtrl_SearchBarPresenter.h"
30 #include "FUiCtrl_Form.h"
31 #include "FUiCtrl_Edit.h"
32 #include "FUiCtrl_Panel.h"
33 #include "FUiCtrl_OverlayPanel.h"
34 #include "FUiCtrl_Keypad.h"
35 #include "FUiCtrl_ColorPicker.h"
36 #include "FUiCtrl_ActionEvent.h"
37 #include "FUiCtrl_TextBlockEvent.h"
38 #include "FUiCtrl_TextEvent.h"
39 #include "FUi_AccessibilityContainer.h"
40 #include "FUi_AccessibilityElement.h"
41 #include "FUi_AccessibilityManager.h"
42 #include "FUi_CoordinateSystemUtils.h"
43
44 using namespace Tizen::Graphics;
45 using namespace Tizen::Ui;
46 using namespace Tizen::Ui::Animations;
47 using namespace Tizen::Base;
48 using namespace Tizen::Base::Runtime;
49 using namespace Tizen::Locales;
50
51 namespace Tizen { namespace Ui { namespace Controls
52 {
53
54 IMPLEMENT_PROPERTY(_SearchBar);
55
56 _SearchBar::_SearchBar(void)
57         : __pSearchBarPresenter(null)
58         , __pClippedGroupControl(null)
59         , __pEdit(null)
60         , __pCancelButton(null)
61         , __pContainer(null)
62         , __pContentControl(null)
63         , __actionId(0)
64         , __searchBarStyle(0)
65         , __isButtonEnabled(true)
66         , __isUsableCancelButton(false)
67         , __isUserContainerBounds(false)
68         , __isCancelActionInProgress(false)
69         , __isUserGuideTextColor(false)
70         , __isKeypadOpening(false)
71         , __isupdateContentBounds(false)
72         , __keypadAction(CORE_KEYPAD_ACTION_SEARCH)
73         , __pBackgroundBitmap(null)
74         , __backgroundColor(Color())
75         , __contentColor(Color())
76         , __pActionEvent(null)
77         , __pKeypadEvent(null)
78         , __pTextBlockEvent(null)
79         , __pTextEvent(null)
80         , __pSearchBarEvent(null)
81         , __pLanguageEvent(null)
82         , __pAccessibilitySearchBarElement(null)
83 {
84         for (int i = 0; i < SEARCHBAR_BUTTON_COLOR_MAX; i++)
85         {
86                 __buttonColor[i] = Color(0);
87                 __buttonTextColor[i] = Color(0);
88         }
89
90         for (int i = 0; i < SEARCHBAR_COLOR_MAX; i++)
91         {
92                 __color[i] = Color(0);
93                 __textColor[i] = Color(0);
94                 __guideTextColor[i] = Color(0);
95         }
96
97         _AccessibilityContainer* pContainer = GetAccessibilityContainer();
98         if (pContainer)
99         {
100                 pContainer->Activate(true);
101         }
102 }
103
104 _SearchBar::~_SearchBar(void)
105 {
106
107         delete __pSearchBarPresenter;
108         __pSearchBarPresenter = null;
109
110         if (__pEdit)
111         {
112                 __pEdit->HideKeypad();
113
114                 __pClippedGroupControl->DetachChild(*__pEdit);
115
116                 delete __pEdit;
117                 __pEdit = null;
118         }
119
120         if (__pCancelButton)
121         {
122                 __pClippedGroupControl->DetachChild(*__pCancelButton);
123
124                 delete __pCancelButton;
125                 __pCancelButton = null;
126         }
127
128         if (__pClippedGroupControl)
129         {
130                 DetachChild(*__pClippedGroupControl);
131
132                 delete __pClippedGroupControl;
133                 __pClippedGroupControl = null;
134         }
135
136         if (__pContainer)
137         {
138                 DetachChild(*__pContainer);
139
140                 delete __pContainer;
141                 __pContainer = null;
142         }
143
144         if (__pActionEvent)
145         {
146                 delete __pActionEvent;
147                 __pActionEvent = null;
148         }
149
150         if (__pKeypadEvent)
151         {
152                 delete __pKeypadEvent;
153                 __pKeypadEvent = null;
154         }
155
156         if (__pTextBlockEvent)
157         {
158                 delete __pTextBlockEvent;
159                 __pTextBlockEvent = null;
160         }
161
162         if (__pTextEvent)
163         {
164                 delete __pTextEvent;
165                 __pTextEvent = null;
166         }
167
168         if (__pSearchBarEvent)
169         {
170                 delete __pSearchBarEvent;
171                 __pSearchBarEvent = null;
172         }
173
174         if (__pAccessibilitySearchBarElement)
175         {
176                 __pAccessibilitySearchBarElement->Activate(false);
177                 __pAccessibilitySearchBarElement = null;
178         }
179
180         delete __pBackgroundBitmap;
181         __pBackgroundBitmap = null;
182 }
183
184 _SearchBar*
185 _SearchBar::CreateSearchBarN(void)
186 {
187         _SearchBar* pSearchBar = new (std::nothrow) _SearchBar;
188         SysTryReturn(NID_UI_CTRL, pSearchBar, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
189         if (GetLastResult() != E_SUCCESS)
190         {
191                 delete pSearchBar;
192                 return null;
193         }
194
195         pSearchBar->AcquireHandle();
196         pSearchBar->SetTouchPressThreshold(_TOUCH_PRESS_THRESHOLD_INSENSITIVE);
197
198         return pSearchBar;
199 }
200
201 result
202 _SearchBar::Initialize(bool enableSearchBarButton, CoreKeypadAction keypadAction)
203 {
204         result r = E_SUCCESS;
205
206         // Setting Button color
207         GET_COLOR_CONFIG(SEARCHBAR::BUTTON_BG_NORMAL, __buttonColor[SEARCH_BAR_BUTTON_STATUS_NORMAL]);
208         GET_COLOR_CONFIG(SEARCHBAR::BUTTON_BG_PRESSED, __buttonColor[SEARCH_BAR_BUTTON_STATUS_PRESSED]);
209         GET_COLOR_CONFIG(SEARCHBAR::BUTTON_BG_HIGHLIGHTED, __buttonColor[SEARCH_BAR_BUTTON_STATUS_HIGHLIGHTED]);
210         GET_COLOR_CONFIG(SEARCHBAR::BUTTON_BG_DISABLED, __buttonColor[SEARCH_BAR_BUTTON_STATUS_DISABLED]);
211
212         GET_COLOR_CONFIG(SEARCHBAR::BUTTON_TEXT_NORMAL, __buttonTextColor[SEARCH_BAR_BUTTON_STATUS_NORMAL]);
213         GET_COLOR_CONFIG(SEARCHBAR::BUTTON_TEXT_PRESSED, __buttonTextColor[SEARCH_BAR_BUTTON_STATUS_PRESSED]);
214         GET_COLOR_CONFIG(SEARCHBAR::BUTTON_TEXT_HIGHLIGHTED, __buttonTextColor[SEARCH_BAR_BUTTON_STATUS_HIGHLIGHTED]);
215         GET_COLOR_CONFIG(SEARCHBAR::BUTTON_TEXT_DISABLED, __buttonTextColor[SEARCH_BAR_BUTTON_STATUS_DISABLED]);
216
217         GET_COLOR_CONFIG(SEARCHBAR::CONTENT_AREA_BG_NORMAL, __contentColor);
218
219         for (int i = 0; i < SEARCHBAR_COLOR_MAX; i++)
220         {
221                 switch(i)
222                 {
223                 case SEARCH_FIELD_STATUS_DISABLED:
224                         GET_COLOR_CONFIG(SEARCHBAR::EDIT_BG_DISABLED, __color[i]);
225                         GET_COLOR_CONFIG(SEARCHBAR::EDIT_TEXT_DISABLED, __textColor[i]);
226                         GET_COLOR_CONFIG(SEARCHBAR::GUIDE_TEXT_DISABLED, __guideTextColor[i]);
227                         break;
228
229                 case SEARCH_FIELD_STATUS_HIGHLIGHTED:
230                         GET_COLOR_CONFIG(SEARCHBAR::EDIT_BG_NORMAL, __color[i]);
231                         GET_COLOR_CONFIG(SEARCHBAR::EDIT_TEXT_HIGHLIGHTED, __textColor[i]);
232                         GET_COLOR_CONFIG(SEARCHBAR::GUIDE_TEXT_HIGHLIGHTED, __guideTextColor[i]);
233                         break;
234                 default:
235                         GET_COLOR_CONFIG(SEARCHBAR::EDIT_BG_NORMAL, __color[i]);
236                         GET_COLOR_CONFIG(SEARCHBAR::EDIT_TEXT_NORMAL, __textColor[i]);
237                         GET_COLOR_CONFIG(SEARCHBAR::GUIDE_TEXT_NORMAL, __guideTextColor[i]);
238                         break;
239                 }
240         }
241
242         __isUsableCancelButton = enableSearchBarButton;
243         __keypadAction = keypadAction;
244
245         GetVisualElement()->SetClipChildrenEnabled(false);
246
247         r = CreateClippedGroupControl();
248         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
249                      "[E_SYSTEM] A system error has occurred. The construction of parent control for clipped group control failed.");
250
251         r = CreateSearchField();
252         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
253                      "[E_SYSTEM] A system error has occurred. The edit construction failed.");
254         r = CreateCancelButton();
255         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
256                      "[E_SYSTEM] A system error has occurred. The cancel button construction failed.");
257
258         SetContentsArea();
259         r = CreateContentsArea();
260         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
261                      "[E_SYSTEM] A system error has occurred. The construction of parent for content failed.");
262
263         _SearchBarPresenter* pPresenter = new (std::nothrow) _SearchBarPresenter;
264         SysTryReturn(NID_UI_CTRL, pPresenter, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
265
266         r = pPresenter->Construct(*this);
267         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
268
269         r = pPresenter->Install();
270         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
271
272         __pSearchBarPresenter = pPresenter;
273
274         CreateAccessibilityElement();
275         return r;
276
277 CATCH:
278         delete pPresenter;
279         pPresenter = null;
280
281         return r;
282 }
283
284 result
285 _SearchBar::CreateSearchField(void)
286 {
287         result r = E_SUCCESS;
288
289         FloatRectangle editBounds;
290         float horizontalMargin = 0.0f;
291         float verticalMargin = 0.0f;
292         float iconHorizontalMargin = 0.0f;
293         float textHorizontalMargin = 0.0f;
294         float iconWidth = 0.0f;
295         float textSize = 0.0f;
296         float searchBarMinHeight = 0.0f;
297         float searchBarMinWidthModeNormal = 0.0f;
298
299         FloatRectangle searchBarBounds = GetBoundsF();
300         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
301
302         GET_SHAPE_CONFIG(SEARCHBAR::HORIZONTAL_MARGIN, orientation, horizontalMargin);
303         GET_SHAPE_CONFIG(SEARCHBAR::VERTICAL_MARGIN, orientation, verticalMargin);
304         GET_SHAPE_CONFIG(SEARCHBAR::ICON_HORIZONTAL_MARGIN, orientation, iconHorizontalMargin);
305         GET_SHAPE_CONFIG(SEARCHBAR::ICON_WIDTH, orientation, iconWidth);
306         GET_SHAPE_CONFIG(SEARCHBAR::TEXT_HORIZONTAL_MARGIN, orientation, textHorizontalMargin);
307         GET_SHAPE_CONFIG(SEARCHBAR::SEARCH_FIELD_MIN_WIDTH_NORMAL_MODE, orientation, searchBarMinWidthModeNormal);
308         GET_SHAPE_CONFIG(SEARCHBAR::MIN_HEIGHT, orientation, searchBarMinHeight);
309
310         float searchFieldMinHeight = searchBarMinHeight - (verticalMargin * 2.0f);
311
312         editBounds.x = horizontalMargin;
313
314         if (searchBarBounds.height < searchBarMinHeight)
315         {
316                 verticalMargin = (searchBarBounds.height - searchFieldMinHeight)/2.0f;
317                 if (verticalMargin < 0.0f)
318                 {
319                         verticalMargin = 0.0f;
320                 }
321         }
322
323         editBounds.y = verticalMargin;
324
325         editBounds.width = searchBarBounds.width - (editBounds.x * 2.0f);
326         editBounds.height = searchBarBounds.height - (editBounds.y * 2.0f);
327
328         editBounds.width = (editBounds.width > searchBarMinWidthModeNormal) ? editBounds.width : searchBarMinWidthModeNormal;
329         editBounds.height = (editBounds.height > searchFieldMinHeight) ? editBounds.height : searchFieldMinHeight;
330
331         __pEdit = _Edit::CreateEditN();
332         r = GetLastResult();
333         SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
334
335         r = __pEdit->Initialize(EDIT_STYLE_NORMAL | EDIT_STYLE_SINGLE_LINE | EDIT_STYLE_CLEAR | EDIT_STYLE_NOSCROLL, INPUT_STYLE_OVERLAY,
336                                                         SEARCHBAR_TEXT_LENGTH_MAX);
337         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
338
339         __pEdit->SetKeypadCommandButtonVisible(false);
340         __pEdit->SetBounds(editBounds);
341         __pEdit->AddKeypadEventListener(*this);
342         __pEdit->AddTextBlockEventListener(*this);
343         __pEdit->AddTextEventListener(*this);
344
345         GET_SHAPE_CONFIG(SEARCHBAR::EDIT_TEXT_SIZE, orientation, textSize);
346         __pEdit->SetTextSize(textSize);
347
348         __pEdit->SetHorizontalMargin(iconHorizontalMargin + iconWidth + textHorizontalMargin, EDIT_TEXT_LEFT_MARGIN);
349         __pEdit->SetHorizontalMargin(textHorizontalMargin, EDIT_TEXT_RIGHT_MARGIN);
350         __pEdit->SetLimitLength(SEARCHBAR_TEXT_LENGTH_MAX);
351
352         for (int status = 0; status < SEARCHBAR_COLOR_MAX; status++)
353         {
354                 EditStatus editStatus = ConvertSearchBarStatus((SearchFieldStatus) status);
355                 __pEdit->SetColor(editStatus, __color[status]);
356         }
357
358         __pEdit->SetTextColor(EDIT_TEXT_COLOR_NORMAL, __textColor[SEARCH_FIELD_STATUS_NORMAL]);
359         __pEdit->SetTextColor(EDIT_TEXT_COLOR_DISABLED, __textColor[SEARCH_FIELD_STATUS_DISABLED]);
360         __pEdit->SetTextColor(EDIT_TEXT_COLOR_HIGHLIGHTED, __textColor[SEARCH_FIELD_STATUS_HIGHLIGHTED]);
361
362         __pEdit->ReplaceDefaultBackgroundBitmapForSearchBar();
363
364         __pEdit->SetKeypadAction(__keypadAction);
365
366         r = __pClippedGroupControl->AttachChild(*__pEdit);
367         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM,
368                     "[E_SYSTEM] A system error has occurred. Failed to attach edit as child.");
369
370         return E_SUCCESS;
371
372 CATCH:
373         delete __pEdit;
374         __pEdit = null;
375
376         return r;
377 }
378
379 result
380 _SearchBar::CreateCancelButton(void)
381 {
382         result r = E_SUCCESS;
383
384         float textSize = 0.0f;
385         String cancelButtonText;
386
387         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
388
389         __pCancelButton = _Button::CreateButtonN();
390         r = GetLastResult();
391         SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
392
393         r = ResizeCancelButton();
394         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
395
396         GET_STRING_CONFIG(IDS_COM_SK_CANCEL, cancelButtonText);
397         r = __pCancelButton->SetText(cancelButtonText);
398         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
399
400         GET_SHAPE_CONFIG(SEARCHBAR::BUTTON_TEXT_SIZE, orientation, textSize);
401         r = __pCancelButton->SetTextSize(textSize);
402         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
403
404         __pCancelButton->SetTextHorizontalAlignment(ALIGNMENT_CENTER);
405         __pCancelButton->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
406
407         r = __pCancelButton->SetActionId(__actionId);
408         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
409
410         r = __pCancelButton->AddActionEventListener(*this);
411         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
412
413         __pCancelButton->SetVisibleState(false);
414
415         for (int status = 0; status < SEARCHBAR_BUTTON_COLOR_MAX; status++)
416         {
417                 _ButtonStatus buttonStatus = ConvertSearchBarButtonStatus((SearchBarButtonStatus) status);
418
419                 r = __pCancelButton->SetColor(buttonStatus, __buttonColor[status]);
420                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
421
422                 r = __pCancelButton->SetTextColor(buttonStatus, __buttonTextColor[status]);
423                 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
424         }
425
426         r = __pClippedGroupControl->AttachChild(*__pCancelButton);
427         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM,
428                     "[E_SYSTEM] A system error has occurred. Failed to attach button as child.");
429
430         return E_SUCCESS;
431
432 CATCH:
433         delete __pCancelButton;
434         __pCancelButton = null;
435
436         return r;
437 }
438
439 result
440 _SearchBar::CreateContentsArea(void)
441 {
442         result r = E_SUCCESS;
443
444         __pContainer = _Control::CreateControlN();
445
446         r = GetLastResult();
447         SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
448
449         __pContainer->SetVisibleState(false);
450
451         r = AttachChild(*__pContainer);
452         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM,
453                     "[E_SYSTEM] A system error has occurred. Failed to attach the parent of content.");
454
455         return E_SUCCESS;
456
457 CATCH:
458         delete __pContainer;
459         __pContainer = null;
460
461         return r;
462 }
463
464 void
465 _SearchBar::SetContentsArea(void)
466 {
467         if (__isUserContainerBounds)
468         {
469                 return;
470         }
471
472         FloatDimension screenSize = _ControlManager::GetInstance()->GetScreenSizeF();
473         float width = screenSize.width;
474         float height = screenSize.height;
475
476         _Control* pParent = GetParentForm();
477         if (pParent != null)
478         {
479                 width = pParent->GetClientBoundsF().width;
480                 height = pParent->GetClientBoundsF().height;
481         }
482
483         FloatRectangle controlBounds = GetBoundsF();
484         controlBounds = CoordinateSystem::AlignToDevice(FloatRectangle(controlBounds));
485
486         __contentAreaBounds.x = 0.0f;
487         __contentAreaBounds.y = controlBounds.height;
488         __contentAreaBounds.width = width - controlBounds.x;
489         __contentAreaBounds.height = height - (controlBounds.y + controlBounds.height);
490
491         if (__pContainer)
492         {
493                 result r = E_SUCCESS;
494                 r = __pContainer->SetBounds(__contentAreaBounds);
495                 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
496         }
497         return;
498 }
499
500 _Control*
501 _SearchBar::GetContent(void) const
502 {
503         return __pContentControl;
504 }
505
506 result
507 _SearchBar::SetContent(const _Control* pContent)
508 {
509         __pContentControl = const_cast <_Control*>(pContent);
510         result r = E_SUCCESS;
511
512         if (__pContainer)
513         {
514                 r = __pContainer->AttachChild(*__pContentControl);
515                 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating");
516         }
517
518         return r;
519 }
520
521 result
522 _SearchBar::UpdateContentArea(bool invalidate)
523 {
524         return __pSearchBarPresenter->UpdateContentArea(invalidate);
525 }
526
527 result
528 _SearchBar::SetContentAreaVisible(bool visible)
529 {
530         SysTryReturn(NID_UI_CTRL, __pContainer, E_SYSTEM, E_SYSTEM,
531                      "[E_SYSTEM] A system error has occurred. The instance of parent to content is null.");
532
533         SearchBarMode searchBarMode = GetMode();
534         if (searchBarMode == SEARCH_BAR_MODE_INPUT)
535         {
536                 __pContainer->SetVisibleState(visible);
537         }
538
539         return __pSearchBarPresenter->SetContentAreaVisible(visible);
540 }
541
542 bool
543 _SearchBar::IsContentAreaVisible(void) const
544 {
545         return __pSearchBarPresenter->IsContentAreaVisible();
546 }
547
548 result
549 _SearchBar::SetContentAreaSize(const Dimension& size)
550 {
551         return SetProperty("contentAreaSize", Variant(size));
552 }
553
554 Dimension
555 _SearchBar::GetContentAreaSize(void) const
556 {
557         Variant size = GetProperty("contentAreaSize");
558
559         return size.ToDimension();
560 }
561
562 SearchBarMode
563 _SearchBar::GetMode(void) const
564 {
565         return __pSearchBarPresenter->GetMode();
566 }
567
568 bool
569 _SearchBar::IsModeLocked(void) const
570 {
571         return __pSearchBarPresenter->IsModeLocked();
572 }
573
574 result
575 _SearchBar::SetMode(SearchBarMode mode)
576 {
577         return __pSearchBarPresenter->SetMode(mode);
578 }
579
580 result
581 _SearchBar::SetModeLocked(bool modeLocked)
582 {
583         if (modeLocked == true && GetMode() == SEARCH_BAR_MODE_NORMAL)
584         {
585                 __pEdit->SetViewModeEnabled(true);
586         }
587
588         if (modeLocked == false && __pEdit->IsViewModeEnabled())
589         {
590                 __pEdit->SetViewModeEnabled(false);
591         }
592
593         return __pSearchBarPresenter->SetModeLocked(modeLocked);
594 }
595
596 int
597 _SearchBar::GetButtonActionId(void) const
598 {
599         Variant actionId = GetProperty("buttonActionId");
600
601         return actionId.ToInt();
602 }
603
604 Color
605 _SearchBar::GetButtonColor(SearchBarButtonStatus status) const
606 {
607         Variant buttonColor;
608
609         switch (status)
610         {
611         case SEARCH_BAR_BUTTON_STATUS_NORMAL:
612                 buttonColor = GetProperty("buttonNormalColor");
613                 break;
614         case SEARCH_BAR_BUTTON_STATUS_PRESSED:
615                 buttonColor = GetProperty("buttonPressedColor");
616                 break;
617         case SEARCH_BAR_BUTTON_STATUS_HIGHLIGHTED:
618                 buttonColor = GetProperty("buttonHighlightedColor");
619                 break;
620         case SEARCH_BAR_BUTTON_STATUS_DISABLED:
621                 buttonColor = GetProperty("buttonDisabledColor");
622                 break;
623         default:
624                 break;
625         }
626
627         return buttonColor.ToColor();
628 }
629
630 Color
631 _SearchBar::GetButtonTextColor(SearchBarButtonStatus status) const
632 {
633         Variant buttonTextColor;
634
635         switch (status)
636         {
637         case SEARCH_BAR_BUTTON_STATUS_NORMAL:
638                 buttonTextColor = GetProperty("buttonNormalTextColor");
639                 break;
640         case SEARCH_BAR_BUTTON_STATUS_PRESSED:
641                 buttonTextColor = GetProperty("buttonPressedTextColor");
642                 break;
643         case SEARCH_BAR_BUTTON_STATUS_HIGHLIGHTED:
644                 buttonTextColor = GetProperty("buttonHighlightedTextColor");
645                 break;
646         case SEARCH_BAR_BUTTON_STATUS_DISABLED:
647                 buttonTextColor = GetProperty("buttonDisabledTextColor");
648                 break;
649         default:
650                 break;
651         }
652
653         return buttonTextColor.ToColor();
654 }
655
656 SearchBarButtonStatus
657 _SearchBar::GetButtonStatus(void) const
658 {
659         SysTryReturn(NID_UI_CTRL, __pCancelButton, SEARCH_BAR_BUTTON_STATUS_NORMAL, E_SYSTEM,
660                      "[E_SYSTEM] A system error has occurred. The cancel button instance is null.");
661
662         SearchBarButtonStatus buttonStatus = SEARCH_BAR_BUTTON_STATUS_NORMAL;
663
664         if (__isButtonEnabled == false)
665         {
666                 buttonStatus = SEARCH_BAR_BUTTON_STATUS_DISABLED;
667         }
668
669         return buttonStatus;
670 }
671
672 result
673 _SearchBar::SetButtonText(const String& text)
674 {
675         SysTryReturn(NID_UI_CTRL, __pCancelButton, E_SYSTEM, E_SYSTEM,
676                      "[E_SYSTEM] A system error has occurred. The cancel button instance is null.");
677
678         result r = E_SUCCESS;
679
680         r = __pCancelButton->SetText(text);
681         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
682                      "[E_SYSTEM] A system error has occurred. Failed to set text.");
683
684         return r;
685 }
686
687 result
688 _SearchBar::SetButtonActionId(int actionId)
689 {
690         return SetProperty("buttonActionId", Variant(actionId));
691 }
692
693 result
694 _SearchBar::SetButtonEnabled(bool enabled)
695 {
696         SysTryReturn(NID_UI_CTRL, __pCancelButton, E_SYSTEM, E_SYSTEM,
697                      "[E_SYSTEM] A system error has occurred. The cancel button instance is null.");
698
699         __pCancelButton->SetEnableState(enabled);
700
701         __isButtonEnabled = enabled;
702
703         return E_SUCCESS;
704 }
705
706 result
707 _SearchBar::SetButtonColor(SearchBarButtonStatus status, const Color& color)
708 {
709         result r = E_SUCCESS;
710
711         switch (status)
712         {
713         case SEARCH_BAR_BUTTON_STATUS_NORMAL:
714                 r = SetProperty("buttonNormalColor", Variant(color));
715                 break;
716         case SEARCH_BAR_BUTTON_STATUS_PRESSED:
717                 r = SetProperty("buttonPressedColor", Variant(color));
718                 break;
719         case SEARCH_BAR_BUTTON_STATUS_HIGHLIGHTED:
720                 r = SetProperty("buttonHighlightedColor", Variant(color));
721                 break;
722         case SEARCH_BAR_BUTTON_STATUS_DISABLED:
723                 r = SetProperty("buttonDisabledColor", Variant(color));
724                 break;
725         default:
726                 break;
727         }
728
729         return r;
730 }
731
732 result
733 _SearchBar::SetButtonTextColor(SearchBarButtonStatus status, const Color& color)
734 {
735         result r = E_SUCCESS;
736
737         switch (status)
738         {
739         case SEARCH_BAR_BUTTON_STATUS_NORMAL:
740                 r = SetProperty("buttonNormalTextColor", Variant(color));
741                 break;
742         case SEARCH_BAR_BUTTON_STATUS_PRESSED:
743                 r = SetProperty("buttonPressedTextColor", Variant(color));
744                 break;
745         case SEARCH_BAR_BUTTON_STATUS_HIGHLIGHTED:
746                 r = SetProperty("buttonHighlightedTextColor", Variant(color));
747                 break;
748         case SEARCH_BAR_BUTTON_STATUS_DISABLED:
749                 r = SetProperty("buttonDisabledTextColor", Variant(color));
750                 break;
751         default:
752                 break;
753         }
754
755         return r;
756 }
757
758 result
759 _SearchBar::AppendCharacter(const Character& character)
760 {
761         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
762                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
763         SysTryReturn(NID_UI_CTRL, character.CompareTo(null), E_SYSTEM, E_SYSTEM,
764                      "[E_SYSTEM] A system error has occurred. The character is null.");
765
766         result r = E_SUCCESS;
767
768         r = __pEdit->AppendCharacter(character);
769         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
770                      "[E_SYSTEM] A system error has occurred. Failed to set character.");
771
772         return r;
773 }
774
775 result
776 _SearchBar::AppendText(const String& text)
777 {
778         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
779                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
780         SysTryReturn(NID_UI_CTRL, text.IsEmpty() == false, E_SYSTEM, E_SYSTEM,
781                      "[E_SYSTEM] A system error has occurred. The text is empty.");
782
783         result r = E_SUCCESS;
784
785         r = __pEdit->AppendText(text);
786         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
787                      "[E_SYSTEM] A system error has occurred. Failed to set text.");
788
789         return r;
790 }
791
792 result
793 _SearchBar::SetText(const String& text)
794 {
795         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
796                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
797
798         result r = E_SUCCESS;
799
800         int limitLength = __pEdit->GetTextLimitLength();
801         int textLength = text.GetLength();
802         SysTryReturn(NID_UI_CTRL, limitLength >= textLength, E_SYSTEM, E_SYSTEM,
803                      "[E_SYSTEM] A system error has occurred. textLength exceeds the limitLength");
804
805         r = __pEdit->SetText(text);
806         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
807                      "[E_SYSTEM] A system error has occurred. Failed to set text.");
808
809         return r;
810 }
811
812 result
813 _SearchBar::InsertCharacterAt(int index, const Character& character)
814 {
815         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
816                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
817         SysTryReturn(NID_UI_CTRL, index > -1, E_OUT_OF_RANGE, E_OUT_OF_RANGE,
818                      "[E_OUT_OF_RANGE] index(%d) is out of range.", index);
819         SysTryReturn(NID_UI_CTRL, character.CompareTo(null), E_SYSTEM, E_SYSTEM,
820                      "[E_SYSTEM] A system error has occurred. The character is null.");
821
822         result r = E_SUCCESS;
823
824         int textLength = 0;
825         int limitLength = 0;
826         limitLength = __pEdit->GetTextLimitLength();
827         textLength = __pEdit->GetTextLength() + 1;
828
829         SysTryReturn(NID_UI_CTRL, limitLength >= textLength, E_MAX_EXCEEDED, E_MAX_EXCEEDED,
830                      "[E_MAX_EXCEEDED] limitLength(%d) exceeds the maximum limit textLength(%d).", limitLength, textLength);
831
832         SysTryReturn(NID_UI_CTRL, index <= __pEdit->GetTextLength(), E_OUT_OF_RANGE, E_OUT_OF_RANGE,
833                      "[E_OUT_OF_RANGE] index(%d) is out of range of current textLength(%d).", index, __pEdit->GetTextLength());
834
835         r = __pEdit->InsertCharacterAt(index, character);
836         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
837                      "[E_SYSTEM] A system error has occurred. Failed to set text.");
838
839         return r;
840 }
841
842 result
843 _SearchBar::InsertTextAt(int index, const String& text)
844 {
845         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
846                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
847         SysTryReturn(NID_UI_CTRL, index > -1, E_OUT_OF_RANGE, E_OUT_OF_RANGE,
848                      "[E_OUT_OF_RANGE] index(%d) is out of range.", index);
849
850         result r = E_SUCCESS;
851
852         int textLength = 0;
853         int limitLength = 0;
854         limitLength = __pEdit->GetTextLimitLength();
855         textLength = __pEdit->GetTextLength() + text.GetLength();
856
857         SysTryReturn(NID_UI_CTRL, limitLength >= textLength, E_MAX_EXCEEDED, E_MAX_EXCEEDED,
858                      "[E_MAX_EXCEEDED] limitLength(%d) exceeds the maximum limit textLength(%d).", limitLength, textLength);
859         SysTryReturn(NID_UI_CTRL, index <= __pEdit->GetTextLength(), E_OUT_OF_RANGE, E_OUT_OF_RANGE,
860                      "[E_OUT_OF_RANGE] index(%d) is out of range of current textLength(%d).", index, __pEdit->GetTextLength());
861
862         r = __pEdit->InsertTextAt(index, text);
863         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
864                      "[E_SYSTEM] A system error has occurred. Failed to insert text.");
865
866         return r;
867 }
868
869 result
870 _SearchBar::DeleteCharacterAt(int index)
871 {
872         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
873                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
874         SysTryReturn(NID_UI_CTRL, index > -1, E_INVALID_ARG, E_INVALID_ARG,
875                      "[E_INVALID_ARG] Invalid argument(s) is used. index = %d", index);
876
877         result r = E_SUCCESS;
878         int textLength = 0;
879         textLength = __pEdit->GetTextLength();
880
881         SysTryReturn(NID_UI_CTRL, textLength > index, E_OUT_OF_RANGE, E_OUT_OF_RANGE,
882                      "[E_OUT_OF_RANGE] index(%d) is out of range. textLength(%d)", index, textLength);
883
884         r = __pEdit->DeleteCharacterAt(index);
885         SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM,
886                            "[E_SYSTEM] A system error has occured. Failed to delete character.");
887
888         return r;
889 }
890
891 result
892 _SearchBar::Clear(void)
893 {
894         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
895                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
896
897         return __pEdit->ClearText();
898 }
899
900 int
901 _SearchBar::GetTextLength(void) const
902 {
903         SysTryReturn(NID_UI_CTRL, __pEdit, -1, E_SYSTEM,
904                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
905
906         return __pEdit->GetTextLength();
907 }
908
909 String
910 _SearchBar::GetText(void) const
911 {
912         SysTryReturn(NID_UI_CTRL, __pEdit, String(), E_SYSTEM,
913                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
914
915         return __pEdit->GetText();
916 }
917
918 String
919 _SearchBar::GetText(int start, int end) const
920 {
921         SysTryReturn(NID_UI_CTRL, __pEdit, String(), E_SYSTEM,
922                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
923
924         return __pEdit->GetText(start, end);
925 }
926
927 int
928 _SearchBar::GetLimitLength(void) const
929 {
930         SysTryReturn(NID_UI_CTRL, __pEdit, -1, E_SYSTEM,
931                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
932
933         return __pEdit->GetTextLimitLength();
934 }
935
936 result
937 _SearchBar::SetLimitLength(int limitLength)
938 {
939         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
940                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
941         SysTryReturn(NID_UI_CTRL, limitLength > 0, E_INVALID_ARG, E_INVALID_ARG,
942                      "[E_INVALID_ARG] Invalid argument(s) is used.limitLength = %d", limitLength);
943
944         String tempString = GetText();
945
946         int textLength = tempString.GetLength();
947         SysTryReturn(NID_UI_CTRL, limitLength >= textLength, E_INVALID_ARG, E_INVALID_ARG,
948                      "[E_INVALID_ARG] Invalid argument(s) is used. limitLength = %d, textLength = %d", limitLength, textLength);
949
950         result r = __pEdit->SetLimitLength(limitLength);
951         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
952
953         r = SetText(tempString);
954         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, r, "[%s] Propagating.", GetErrorMessage(r));
955
956         return E_SUCCESS;
957 }
958
959 result
960 _SearchBar::ShowKeypad(void) const
961 {
962         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
963                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
964
965         SearchBarMode mode = __pSearchBarPresenter->GetMode();
966         SysTryReturn(NID_UI_CTRL, mode == SEARCH_BAR_MODE_INPUT, E_INVALID_STATE, E_INVALID_STATE,
967                      "[E_INVALID_STATE] The SearchBar is currently in Normal mode.");
968         return __pEdit->ShowKeypad();
969 }
970
971 result
972 _SearchBar::HideKeypad(void)
973 {
974         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
975                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
976
977         SearchBarMode mode = __pSearchBarPresenter->GetMode();
978         SysTryReturn(NID_UI_CTRL, mode == SEARCH_BAR_MODE_INPUT, E_SYSTEM, E_SYSTEM,
979                      "[E_SYSTEM] A system error has occurred. The SearchBar is currently in Normal mode.");
980
981         result r = __pEdit->HideKeypad();
982
983         SetContentsArea();
984
985         return r;
986 }
987
988 float
989 _SearchBar::GetSearchFieldTextSizeF(void) const
990 {
991         SysTryReturn(NID_UI_CTRL, __pEdit, -1, E_SYSTEM,
992                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
993
994         return __pEdit->GetTextSizeF();
995 }
996
997 result
998 _SearchBar::SetSearchFieldTextSize(float size)
999 {
1000         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
1001                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
1002
1003         return __pEdit->SetTextSize(size);
1004 }
1005
1006 result
1007 _SearchBar::GetBlockRange(int& start, int& end) const
1008 {
1009         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
1010                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
1011
1012         int startIndex = -1;
1013         int endIndex = -1;
1014
1015         __pEdit->GetBlockRange(startIndex, endIndex);
1016         SysTryReturn(NID_UI_CTRL, (startIndex > -1 && endIndex > 0), E_SYSTEM, E_SYSTEM,
1017                      "[E_SYSTEM] A system error has occurred. Failed to get text block range.");
1018
1019         start = startIndex;
1020         end = endIndex - 1;
1021
1022         return E_SUCCESS;
1023 }
1024
1025 result
1026 _SearchBar::ReleaseBlock(void)
1027 {
1028         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
1029                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
1030
1031         result r = E_SUCCESS;
1032
1033         int start = 0;
1034         int end = 0;
1035
1036         r = GetBlockRange(start, end);
1037         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1038
1039         return __pEdit->ReleaseTextBlock();
1040 }
1041
1042 result
1043 _SearchBar::SetBlockRange(int start, int end)
1044 {
1045         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
1046                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
1047
1048         result r = E_SUCCESS;
1049
1050         int textLength = 0;
1051         textLength = __pEdit->GetTextLength();
1052
1053         SysTryReturn(NID_UI_CTRL, (start < end && start >= 0 && textLength >= end), E_OUT_OF_RANGE, E_OUT_OF_RANGE,
1054                      "[E_OUT_OF_RANGE] start (%d) and end (%d) is out of range.", start, end - 1);
1055
1056         r = SetCursorPosition(start);
1057         SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
1058
1059         r = __pEdit->BeginTextBlock();
1060         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
1061                      "[E_SYSTEM] A system error has occurred. Failed to set text block range.");
1062
1063         r = SetCursorPosition(end);
1064         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
1065                      "[E_SYSTEM] A system error has occurred. Failed to set cursor position.");
1066
1067         return E_SUCCESS;
1068 }
1069
1070 result
1071 _SearchBar::RemoveTextBlock(void)
1072 {
1073         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
1074                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
1075
1076         result r = E_SUCCESS;
1077
1078         r = __pEdit->RemoveTextBlock();
1079         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1080
1081         return r;
1082 }
1083
1084 Color
1085 _SearchBar::GetColor(void) const
1086 {
1087         Variant backgroundColor = GetProperty("color");
1088
1089         return backgroundColor.ToColor();
1090 }
1091
1092 Color
1093 _SearchBar::GetSearchFieldColor(SearchFieldStatus status) const
1094 {
1095         Variant searchFieldColor;
1096
1097         switch (status)
1098         {
1099         case SEARCH_FIELD_STATUS_NORMAL:
1100                 searchFieldColor = GetProperty("searchFieldNormalColor");
1101                 break;
1102         case SEARCH_FIELD_STATUS_HIGHLIGHTED:
1103                 searchFieldColor = GetProperty("searchFieldHighlightedColor");
1104                 break;
1105         case SEARCH_FIELD_STATUS_DISABLED:
1106                 searchFieldColor = GetProperty("searchFieldDisabledColor");
1107                 break;
1108         default:
1109                 break;
1110         }
1111
1112         return searchFieldColor.ToColor();
1113 }
1114
1115
1116 Color
1117 _SearchBar::GetSearchFieldTextColor(SearchFieldStatus status) const
1118 {
1119         Variant searchFieldTextColor;
1120
1121         switch (status)
1122         {
1123         case SEARCH_FIELD_STATUS_NORMAL:
1124                 searchFieldTextColor = GetProperty("searchFieldNormalTextColor");
1125                 break;
1126         case SEARCH_FIELD_STATUS_HIGHLIGHTED:
1127                 searchFieldTextColor = GetProperty("searchFieldHighlightedTextColor");
1128                 break;
1129         case SEARCH_FIELD_STATUS_DISABLED:
1130                 searchFieldTextColor = GetProperty("searchFieldDisabledTextColor");
1131                 break;
1132         default:
1133                 break;
1134         }
1135
1136         return searchFieldTextColor.ToColor();
1137 }
1138
1139
1140 result
1141 _SearchBar::SetBackgroundBitmap(const Bitmap& bitmap)
1142 {
1143         Bitmap* pNewBitmap = _BitmapImpl::CloneN(bitmap);
1144         SysTryReturn(NID_UI_CTRL, pNewBitmap, E_SYSTEM, E_SYSTEM,
1145                      "[E_SYSTEM] A system error has occurred. The creation of bitmap failed.");
1146
1147         delete __pBackgroundBitmap;
1148         __pBackgroundBitmap = null;
1149
1150         __pBackgroundBitmap = pNewBitmap;
1151
1152         return E_SUCCESS;
1153 }
1154
1155 Bitmap*
1156 _SearchBar::GetBackgroundBitmap(void) const
1157 {
1158         return __pBackgroundBitmap;
1159 }
1160
1161 result
1162 _SearchBar::SetColor(const Color& color)
1163 {
1164         return SetProperty("color", Variant(color));
1165 }
1166
1167 result
1168 _SearchBar::SetSearchFieldColor(SearchFieldStatus status, const Color& color)
1169 {
1170         result r = E_SUCCESS;
1171
1172         switch (status)
1173         {
1174         case SEARCH_FIELD_STATUS_NORMAL:
1175                 r = SetProperty("searchFieldNormalColor", Variant(color));
1176                 break;
1177         case SEARCH_FIELD_STATUS_HIGHLIGHTED:
1178                 r = SetProperty("searchFieldHighlightedColor", Variant(color));
1179                 break;
1180         case SEARCH_FIELD_STATUS_DISABLED:
1181                 r = SetProperty("searchFieldDisabledColor", Variant(color));
1182                 break;
1183         default:
1184                 break;
1185         }
1186
1187         return r;
1188 }
1189
1190
1191 result
1192 _SearchBar::SetSearchFieldTextColor(SearchFieldStatus status, const Color& color)
1193 {
1194         result r = E_SUCCESS;
1195
1196         switch (status)
1197         {
1198         case SEARCH_FIELD_STATUS_NORMAL:
1199                 r = SetProperty("searchFieldNormalTextColor", Variant(color));
1200                 break;
1201         case SEARCH_FIELD_STATUS_HIGHLIGHTED:
1202                 r = SetProperty("searchFieldHighlightedTextColor", Variant(color));
1203                 break;
1204         case SEARCH_FIELD_STATUS_DISABLED:
1205                 r = SetProperty("searchFieldDisabledTextColor", Variant(color));
1206                 break;
1207         default:
1208                 break;
1209         }
1210
1211         return r;
1212 }
1213
1214
1215 String
1216 _SearchBar::GetGuideText(void) const
1217 {
1218         SysTryReturn(NID_UI_CTRL, __pEdit, String(), E_SYSTEM,
1219                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
1220
1221         return __pEdit->GetGuideText();
1222 }
1223
1224 result
1225 _SearchBar::SetGuideText(const String& guideText)
1226 {
1227         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
1228                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
1229
1230         __pEdit->SetGuideText(guideText);
1231
1232         return E_SUCCESS;
1233 }
1234
1235 Color
1236 _SearchBar::GetGuideTextColor(void) const
1237 {
1238         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
1239                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
1240
1241         return __pEdit->GetGuideTextColor();
1242 }
1243
1244 result
1245 _SearchBar::SetGuideTextColor(const Color& color)
1246 {
1247         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
1248                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
1249
1250         __isUserGuideTextColor = true;
1251         return __pEdit->SetGuideTextColor(color);
1252 }
1253
1254 int
1255 _SearchBar::GetCursorPosition(void) const
1256 {
1257         SysTryReturn(NID_UI_CTRL, __pEdit, -1, E_SYSTEM,
1258                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
1259
1260         return __pEdit->GetCursorPosition();
1261 }
1262
1263 result
1264 _SearchBar::SetCursorPosition(int index)
1265 {
1266         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
1267                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
1268         SysTryReturn(NID_UI_CTRL, index > -1, E_OUT_OF_RANGE, E_OUT_OF_RANGE,
1269                      "[E_OUT_OF_RANGE] index(%d) is out of range.", GetErrorMessage(E_OUT_OF_RANGE), index);
1270
1271         int textLength = -1;
1272         textLength = __pEdit->GetTextLength();
1273
1274         SysTryReturn(NID_UI_CTRL, (index > -1 && index <= textLength), E_OUT_OF_RANGE, E_OUT_OF_RANGE,
1275                      "[E_OUT_OF_RANGE] index(%d) is out of range.", index);
1276
1277         return __pEdit->SetCursorPosition(index);
1278 }
1279
1280 bool
1281 _SearchBar::IsLowerCaseModeEnabled(void) const
1282 {
1283         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
1284                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
1285
1286         return __pEdit->IsLowerCaseModeEnabled();
1287 }
1288
1289 void
1290 _SearchBar::SetLowerCaseModeEnabled(bool enable)
1291 {
1292         SysTryReturnVoidResult(NID_UI_CTRL, __pEdit, E_SYSTEM,
1293                                "[E_SYSTEM] A system error has occurred. The edit instance is null.");
1294
1295         __pEdit->SetLowerCaseModeEnabled(enable);
1296 }
1297
1298 EllipsisPosition
1299 _SearchBar::GetEllipsisPosition(void) const
1300 {
1301         SysTryReturn(NID_UI_CTRL, __pEdit, ELLIPSIS_POSITION_START, E_SYSTEM,
1302                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
1303
1304         return __pEdit->GetEllipsisPosition();
1305 }
1306
1307 result
1308 _SearchBar::SetEllipsisPosition(EllipsisPosition position)
1309 {
1310         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
1311                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
1312         __pEdit->SetEllipsisPosition(position);
1313
1314         return E_SUCCESS;
1315 }
1316
1317 CoreKeypadAction
1318 _SearchBar::GetKeypadAction(void) const
1319 {
1320         return __keypadAction;
1321 }
1322
1323 bool
1324 _SearchBar::IsTextPredictionEnabled(void) const
1325 {
1326         SysTryReturn(NID_UI_CTRL, __pEdit, false, E_SYSTEM,
1327                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
1328         return __pEdit->IsTextPredictionEnabled();
1329 }
1330
1331 result
1332 _SearchBar::SetTextPredictionEnabled(bool enable)
1333 {
1334         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
1335                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
1336         return __pEdit->SetTextPredictionEnabled(enable);
1337 }
1338
1339 result
1340 _SearchBar::SetCurrentLanguage(LanguageCode languageCode)
1341 {
1342         return __pEdit->SetCurrentLanguage(languageCode);
1343 }
1344
1345 result
1346 _SearchBar::GetCurrentLanguage(LanguageCode& language) const
1347 {
1348         return __pEdit->GetCurrentLanguage(language);
1349 }
1350
1351 result
1352 _SearchBar::AddActionEventListener(const _IActionEventListener& listener)
1353 {
1354         result r = E_SUCCESS;
1355
1356         if (__pActionEvent == null)
1357         {
1358                 __pActionEvent = _ActionEvent::CreateInstanceN(*this);
1359                 r = GetLastResult();
1360                 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
1361
1362                 __pActionEvent->AddListener(listener);
1363         }
1364
1365         return r;
1366 }
1367
1368 result
1369 _SearchBar::RemoveActionEventListener(const _IActionEventListener& listener)
1370 {
1371         SysTryReturn(NID_UI_CTRL, __pActionEvent, E_SYSTEM, E_SYSTEM,
1372                      "[E_SYSTEM] A system error has occurred. The action event instance is null.");
1373         result r = E_SUCCESS;
1374
1375         r = __pActionEvent->RemoveListener(listener);
1376         SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
1377
1378         return r;
1379 }
1380
1381 result
1382 _SearchBar::AddKeypadEventListener(const _IKeypadEventListener& listener)
1383 {
1384         result r = E_SUCCESS;
1385
1386         if (__pKeypadEvent == null)
1387         {
1388                 __pKeypadEvent = _KeypadEvent::CreateInstanceN(*this);
1389                 r = GetLastResult();
1390                 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
1391
1392                 r = __pKeypadEvent->AddListener(listener);
1393                 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
1394         }
1395
1396         return r;
1397 }
1398
1399 result
1400 _SearchBar::RemoveKeypadEventListener(const _IKeypadEventListener& listener)
1401 {
1402         SysTryReturn(NID_UI_CTRL, __pKeypadEvent, E_SYSTEM, E_SYSTEM,
1403                      "[E_SYSTEM] A system error has occurred. The keypad event instance is null.");
1404         result r = E_SUCCESS;
1405
1406         r = __pKeypadEvent->RemoveListener(listener);
1407         SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
1408
1409         return r;
1410 }
1411
1412 result
1413 _SearchBar::AddTextBlockEventListener(const _ITextBlockEventListener& listener)
1414 {
1415         result r = E_SUCCESS;
1416
1417         if (__pTextBlockEvent == null)
1418         {
1419                 __pTextBlockEvent = _TextBlockEvent::CreateInstanceN(*this);
1420                 r = GetLastResult();
1421                 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
1422
1423                 r = __pTextBlockEvent->AddListener(listener);
1424                 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
1425
1426         }
1427
1428         return r;
1429 }
1430
1431 result
1432 _SearchBar::RemoveTextBlockEventListener(const _ITextBlockEventListener& listener)
1433 {
1434         SysTryReturn(NID_UI_CTRL, __pTextBlockEvent, E_SYSTEM, E_SYSTEM,
1435                      "[E_SYSTEM] A system error has occurred. The text block event instance is null.");
1436         result r = E_SUCCESS;
1437
1438         r = __pTextBlockEvent->RemoveListener(listener);
1439         SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
1440
1441         return r;
1442 }
1443
1444
1445 result
1446 _SearchBar::AddTextEventListener(const _ITextEventListener& listener)
1447 {
1448         result r = E_SUCCESS;
1449
1450         if (__pTextEvent == null)
1451         {
1452                 __pTextEvent = _TextEvent::CreateInstanceN(*this);
1453                 r = GetLastResult();
1454                 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
1455
1456                 r = __pTextEvent->AddListener(listener);
1457                 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
1458         }
1459
1460         return r;
1461 }
1462
1463 result
1464 _SearchBar::RemoveTextEventListener(const _ITextEventListener& listener)
1465 {
1466         SysTryReturn(NID_UI_CTRL, __pTextEvent, E_SYSTEM, E_SYSTEM,
1467                      "[E_SYSTEM] A system error has occurred. The text event instance is null.");
1468         result r = E_SUCCESS;
1469
1470         r = __pTextEvent->RemoveListener(listener);
1471         SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
1472
1473         return r;
1474 }
1475
1476 result
1477 _SearchBar::AddSearchBarEventListener(const _ISearchBarEventListener& listener)
1478 {
1479         result r = E_SUCCESS;
1480
1481         if (__pSearchBarEvent == null)
1482         {
1483                 __pSearchBarEvent = _SearchBarEvent::CreateInstanceN(*this);
1484                 r = GetLastResult();
1485                 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
1486
1487                 r = __pSearchBarEvent->AddListener(listener);
1488                 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
1489         }
1490
1491         return r;
1492 }
1493
1494 result
1495 _SearchBar::RemoveSearchBarEventListener(const _ISearchBarEventListener& listener)
1496 {
1497         SysTryReturn(NID_UI_CTRL, __pSearchBarEvent, E_SYSTEM, E_SYSTEM,
1498                      "[E_SYSTEM] A system error has occurred. The searchbar event instance is null.");
1499         result r = E_SUCCESS;
1500
1501         r = __pSearchBarEvent->RemoveListener(listener);
1502         SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
1503
1504         return r;
1505 }
1506
1507 result
1508 _SearchBar::AddLanguageEventListener(const _ILanguageEventListener& listener)
1509 {
1510         result r = E_SUCCESS;
1511
1512         if (__pLanguageEvent == null)
1513         {
1514                 __pLanguageEvent = _LanguageEvent::CreateInstanceN(*this);
1515                 r = GetLastResult();
1516                 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
1517
1518                 r = __pLanguageEvent->AddListener(listener);
1519                 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
1520         }
1521
1522         return r;
1523 }
1524
1525 result
1526 _SearchBar::RemoveLanguageEventListener(const _ILanguageEventListener& listener)
1527 {
1528         SysTryReturn(NID_UI_CTRL, __pLanguageEvent, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] This instance isn't constructed.");
1529         result r = E_SUCCESS;
1530
1531         __pLanguageEvent->RemoveListener(listener);
1532         SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
1533
1534         return r;
1535 }
1536
1537 void
1538 _SearchBar::OnBoundsChanged(void)
1539 {
1540         if (__pSearchBarPresenter != null)
1541         {
1542                 __isupdateContentBounds = true;
1543                 __pSearchBarPresenter->OnBoundsChanged();
1544         }
1545
1546         if (__pAccessibilitySearchBarElement)
1547         {
1548                 __pAccessibilitySearchBarElement->SetBounds(FloatRectangle(0.0f, 0.0f, GetBoundsF().width, GetBoundsF().height));
1549         }
1550         return;
1551 }
1552
1553 void
1554 _SearchBar::OnChangeLayout(_ControlOrientation orientation)
1555 {
1556         __isupdateContentBounds = true;
1557         return;
1558 }
1559
1560 void
1561 _SearchBar::OnDraw(void)
1562 {
1563         if (!__isUserGuideTextColor)
1564         {
1565                 SearchFieldStatus status = GetCurrentStatus();
1566                 __pEdit->SetGuideTextColor(__guideTextColor[status]);
1567         }
1568
1569         if (__isupdateContentBounds)
1570         {
1571                 SetContentsArea();
1572                 __isupdateContentBounds = false;
1573         }
1574         __pSearchBarPresenter->Draw();
1575         return;
1576 }
1577
1578 _UiTouchEventDelivery
1579 _SearchBar::OnPreviewTouchReleased(const _Control& source, const _TouchInfo& touchinfo)
1580 {
1581         _Edit* pEdit = dynamic_cast <_Edit*>(const_cast <_Control*>(&source));
1582         if (pEdit == null)
1583         {
1584                 return _UI_TOUCH_EVENT_DELIVERY_YES;
1585         }
1586
1587         if (GetMode() == SEARCH_BAR_MODE_INPUT)
1588         {
1589                 return _UI_TOUCH_EVENT_DELIVERY_YES;
1590         }
1591
1592         SetMode(SEARCH_BAR_MODE_INPUT);
1593
1594         return _UI_TOUCH_EVENT_DELIVERY_YES;
1595 }
1596
1597 void
1598 _SearchBar::OnActionPerformed(const _Control& source, int actionId)
1599 {
1600         if (__actionId == actionId)
1601         {
1602                 __isCancelActionInProgress = true;
1603                 SetMode(SEARCH_BAR_MODE_NORMAL);
1604
1605                 if (__pActionEvent)
1606                 {
1607                         IEventArg* pEventArg = _ActionEvent::CreateActionEventArgN(__actionId);
1608                         result r = GetLastResult();
1609                         SysTryReturnVoidResult(NID_UI_CTRL, pEventArg, r, "[%s] Propagating.", GetErrorMessage(r));
1610
1611                         __pActionEvent->Fire(*pEventArg);
1612                 }
1613                 __isCancelActionInProgress = false;
1614         }
1615         return;
1616 }
1617
1618 // Keypad callbacks
1619 void
1620 _SearchBar::OnKeypadWillOpen(void)
1621 {
1622         if (!__isKeypadOpening)
1623         {
1624                 if (__pKeypadEvent)
1625                 {
1626                         IEventArg* pEventArg = _KeypadEvent::CreateKeypadEventArgN(CORE_KEYPAD_ACTION_SEARCH, CORE_KEYPAD_EVENT_STATUS_CREATED);
1627                         result r = GetLastResult();
1628                         SysTryReturnVoidResult(NID_UI_CTRL, pEventArg, r, "[%s] Propagating.", GetErrorMessage(r));
1629
1630                         __pKeypadEvent->Fire(*pEventArg);
1631                 }
1632         }
1633
1634         __isKeypadOpening = true;
1635         return;
1636 }
1637
1638 void
1639 _SearchBar::OnKeypadOpened(void)
1640 {
1641         if (__pKeypadEvent)
1642         {
1643                 IEventArg* pEventArg = _KeypadEvent::CreateKeypadEventArgN(CORE_KEYPAD_ACTION_SEARCH, CORE_KEYPAD_EVENT_STATUS_OPEN);
1644                 result r = GetLastResult();
1645                 SysTryReturnVoidResult(NID_UI_CTRL, pEventArg, r, "[%s] Propagating.", GetErrorMessage(r));
1646
1647                 __pKeypadEvent->Fire(*pEventArg);
1648         }
1649
1650         __isKeypadOpening = false;
1651         SetContentsArea();
1652         return;
1653 }
1654
1655 void
1656 _SearchBar::OnKeypadClosed(void)
1657 {
1658         if (__pKeypadEvent)
1659         {
1660                 IEventArg* pEventArg = _KeypadEvent::CreateKeypadEventArgN(CORE_KEYPAD_ACTION_SEARCH, CORE_KEYPAD_EVENT_STATUS_CLOSE);
1661                 result r = GetLastResult();
1662                 SysTryReturnVoidResult(NID_UI_CTRL, pEventArg, r, "[%s] Propagating.", GetErrorMessage(r));
1663
1664                 __pKeypadEvent->Fire(*pEventArg);
1665         }
1666
1667         SetContentsArea();
1668         return;
1669 }
1670
1671 void
1672 _SearchBar::OnKeypadBoundsChanged(void)
1673 {
1674         if (__pKeypadEvent)
1675         {
1676                 IEventArg* pEventArg = _KeypadEvent::CreateKeypadEventArgN(CORE_KEYPAD_ACTION_SEARCH, CORE_KEYPAD_EVENT_STATUS_BOUNDS_CHANGED);
1677                 result r = GetLastResult();
1678                 SysTryReturnVoidResult(NID_UI_CTRL, pEventArg, r, "[%s] Propagating.", GetErrorMessage(r));
1679
1680                 __pKeypadEvent->Fire(*pEventArg);
1681         }
1682
1683         SetContentsArea();
1684         return;
1685 }
1686
1687 void
1688 _SearchBar::OnKeypadActionPerformed(CoreKeypadAction keypadAction)
1689 {
1690         if (__pKeypadEvent)
1691         {
1692                 IEventArg* pEventArg = _KeypadEvent::CreateKeypadEventArgN(keypadAction, CORE_KEYPAD_EVENT_STATUS_ENTERACTION);
1693                 result r = GetLastResult();
1694                 SysTryReturnVoidResult(NID_UI_CTRL, pEventArg, r, "[%s] Propagating.", GetErrorMessage(r));
1695
1696                 __pKeypadEvent->Fire(*pEventArg);
1697         }
1698         return;
1699 }
1700
1701 // TextBlock callbacks
1702 void
1703 _SearchBar::OnTextBlockSelected(_Control& source, int start, int end)
1704 {
1705         if (__pTextBlockEvent)
1706         {
1707                 IEventArg* pEventArg = _TextBlockEvent::CreateTextBlockEventArgN(start, end);
1708                 result r = GetLastResult();
1709                 SysTryReturnVoidResult(NID_UI_CTRL, pEventArg, r, "[%s] Propagating.", GetErrorMessage(r));
1710
1711                 __pTextBlockEvent->Fire(*pEventArg);
1712         }
1713         return;
1714 }
1715
1716 // Text callbacks
1717 void
1718 _SearchBar::OnTextValueChanged(const _Control& source)
1719 {
1720         if (!__isCancelActionInProgress)
1721         {
1722                 SetContentDimming();
1723                 if (__pTextEvent != null)
1724                 {
1725                         IEventArg* pEventArg = _TextEvent::CreateTextEventArgN(CORE_TEXT_EVENT_CHANGED);
1726                         result r = GetLastResult();
1727                         SysTryReturnVoidResult(NID_UI_CTRL, pEventArg, r, "[%s] Propagating.", GetErrorMessage(r));
1728
1729                         __pTextEvent->Fire(*pEventArg);
1730                 }
1731         }
1732         return;
1733 }
1734
1735 void
1736 _SearchBar::OnTextValueChangeCanceled(const _Control& source)
1737 {
1738         if (__pTextEvent != null)
1739         {
1740                 IEventArg* pEventArg = _TextEvent::CreateTextEventArgN(CORE_TEXT_EVENT_CANCELED);
1741                 result r = GetLastResult();
1742                 SysTryReturnVoidResult(NID_UI_CTRL, pEventArg, r, "[%s] Propagating.", GetErrorMessage(r));
1743
1744                 __pTextEvent->Fire(*pEventArg);
1745         }
1746         return;
1747 }
1748
1749 result
1750 _SearchBar::OnAttachedToMainTree(void)
1751 {
1752         SetContentsArea();
1753         return E_SUCCESS;
1754 }
1755
1756 void
1757 _SearchBar::OnFontChanged(Font* pFont)
1758 {
1759         __pCancelButton->SetFont(pFont->GetFaceName());
1760         __pEdit->SetFont(*pFont);
1761         return;
1762 }
1763
1764 void
1765 _SearchBar::OnFontInfoRequested(unsigned long& style, int& size)
1766 {
1767         style = FONT_STYLE_PLAIN;
1768         size = __pCancelButton->GetTextSize();
1769
1770         return;
1771 }
1772
1773 bool
1774 _SearchBar::OnFocusGained(const _Control& source)
1775 {
1776         SetMode(SEARCH_BAR_MODE_INPUT);
1777         __pEdit->SetFocused();
1778         return false;
1779 }
1780
1781 bool
1782 _SearchBar::OnFocusLost(const _Control& source)
1783 {
1784         return false;
1785 }
1786
1787 bool
1788 _SearchBar::OnKeyPressed(const _Control& source, const _KeyInfo& keyInfo)
1789 {
1790         if (!__pEdit->IsUsbKeyboardConnected())
1791         {
1792                 return false;
1793         }
1794
1795         _KeyCode keyCode = keyInfo.GetKeyCode();
1796
1797         if (keyCode == _KEY_RIGHT)
1798         {
1799                 if (__isButtonEnabled)
1800                 {
1801                         __pEdit->SetFocused(false);
1802                         __pCancelButton->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
1803                         __pCancelButton->SetFocused();
1804                         __pCancelButton->Invalidate(true);
1805                 }
1806
1807                 return true;
1808         }
1809
1810         if (keyCode == _KEY_LEFT)
1811         {
1812                 if (__pCancelButton->GetButtonStatus() == _BUTTON_STATUS_HIGHLIGHTED)
1813                 {
1814                         __pCancelButton->SetButtonStatus(_BUTTON_STATUS_NORMAL);
1815                         __pCancelButton->SetFocused(false);
1816                         __pCancelButton->Invalidate();
1817
1818                 }
1819
1820                 if (__pCancelButton->GetButtonStatus() == _BUTTON_STATUS_DISABLED)      //Searchbar Button is disabled, left arrow key is pressed
1821                 {
1822                         __pCancelButton->SetButtonStatus(_BUTTON_STATUS_NORMAL);
1823                         SetButtonEnabled(false);
1824                 }
1825
1826                 __pEdit->SetFocused();
1827
1828                 return true;
1829         }
1830
1831         return false;
1832 }
1833
1834 bool
1835 _SearchBar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
1836 {
1837         return false;
1838 }
1839
1840 _Control*
1841 _SearchBar::GetParentForm(void) const
1842 {
1843         _Form* pForm = null;
1844         _Control* pControlCore = GetParent();
1845
1846         while (true)
1847         {
1848                 if (pControlCore == null)
1849                 {
1850                         SysLog(NID_UI_CTRL,"[E_SYSTEM] The parent form is null.");
1851
1852                         return null;
1853                 }
1854
1855                 pForm = dynamic_cast <_Form*>(pControlCore);
1856
1857                 if (pForm != null)
1858                 {
1859                         break;
1860                 }
1861
1862                 pControlCore = pControlCore->GetParent();
1863         }
1864
1865         return pControlCore;
1866 }
1867
1868 _Button*
1869 _SearchBar::GetSearchBarButton(void) const
1870 {
1871         return __pCancelButton;
1872 }
1873
1874 _Edit*
1875 _SearchBar::GetSearchField(void)
1876 {
1877         return __pEdit;
1878 }
1879
1880 _Control*
1881 _SearchBar::GetSearchBarContainer(void) const
1882 {
1883         return __pContainer;
1884 }
1885
1886 _Control*
1887 _SearchBar::GetClippedGroupControl(void) const
1888 {
1889         return __pClippedGroupControl;
1890 }
1891
1892 bool
1893 _SearchBar::IsUsableCancelButton(void) const
1894 {
1895         return __isUsableCancelButton;
1896 }
1897
1898 EditStatus
1899 _SearchBar::ConvertSearchBarStatus(SearchFieldStatus status)
1900 {
1901         EditStatus editStatus = EDIT_STATUS_NORMAL;
1902         switch (status)
1903         {
1904         case SEARCH_FIELD_STATUS_NORMAL:
1905                 editStatus = EDIT_STATUS_NORMAL;
1906                 break;
1907
1908         case SEARCH_FIELD_STATUS_DISABLED:
1909                 editStatus = EDIT_STATUS_DISABLED;
1910                 break;
1911
1912         case SEARCH_FIELD_STATUS_HIGHLIGHTED:
1913                 editStatus = EDIT_STATUS_HIGHLIGHTED;
1914                 break;
1915         default:
1916                 break;
1917         }
1918
1919         return editStatus;
1920 }
1921
1922 _ButtonStatus
1923 _SearchBar::ConvertSearchBarButtonStatus(SearchBarButtonStatus status)
1924 {
1925         _ButtonStatus buttonStatus = _BUTTON_STATUS_NORMAL;
1926
1927         switch (status)
1928         {
1929         case SEARCH_BAR_BUTTON_STATUS_NORMAL:
1930                 buttonStatus = _BUTTON_STATUS_NORMAL;
1931                 break;
1932
1933         case SEARCH_BAR_BUTTON_STATUS_PRESSED:
1934                 buttonStatus = _BUTTON_STATUS_PRESSED;
1935                 break;
1936
1937         case SEARCH_BAR_BUTTON_STATUS_HIGHLIGHTED:
1938                 buttonStatus = _BUTTON_STATUS_HIGHLIGHTED;
1939                 break;
1940
1941         case SEARCH_BAR_BUTTON_STATUS_DISABLED:
1942                 buttonStatus = _BUTTON_STATUS_DISABLED;
1943                 break;
1944         default:
1945                 break;
1946         }
1947
1948         return buttonStatus;
1949 }
1950
1951 result
1952 _SearchBar::SendSearchBarEvent(_SearchBarEventStatus status)
1953 {
1954         result r = E_SUCCESS;
1955         if (__pSearchBarEvent)
1956         {
1957                 IEventArg* pEventArg = _SearchBarEvent::CreateSearchBarEventArgN(status);
1958                 r = GetLastResult();
1959                 SysTryReturn(NID_UI_CTRL, pEventArg, r, r, "[%s] Propagating.", GetErrorMessage(r));
1960
1961                 if (IsContentAreaVisible() == false)
1962                 {
1963                         SetContentAreaVisible(false);
1964                 }
1965
1966                 __pSearchBarEvent->Fire(*pEventArg);
1967         }
1968
1969         return E_SUCCESS;
1970 }
1971
1972 void
1973 _SearchBar::SetHeaderVisibleState(bool visible)
1974 {
1975         if (__pSearchBarPresenter != null)
1976         {
1977                 __pSearchBarPresenter->SetHeaderVisibleState(visible);
1978         }
1979         return;
1980 }
1981
1982 result
1983 _SearchBar::SetPropertyButtonActionId(const Variant& actionId)
1984 {
1985         SysTryReturn(NID_UI_CTRL, __pCancelButton, E_SYSTEM, E_SYSTEM,
1986                      "[E_SYSTEM] A system error has occurred. The cancel button instance is null.");
1987         SysTryReturn(NID_UI_CTRL, actionId.ToInt() > -1, E_INVALID_ARG, E_INVALID_ARG,
1988                      "[E_INVALID_ARG] Invalid argument(s) is used. actionId.ToInt() = %d", actionId.ToInt());
1989
1990         result r = E_SUCCESS;
1991
1992         r = __pCancelButton->SetPropertyActionId(actionId);
1993         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
1994                      "[%s] A system error has occurred. Failed to set actionId.", GetErrorMessage(E_SYSTEM));
1995
1996         __actionId = actionId.ToInt();
1997
1998         return r;
1999 }
2000
2001 Variant
2002 _SearchBar::GetPropertyButtonActionId(void) const
2003 {
2004         SysTryReturn(NID_UI_CTRL, __pCancelButton, Variant(-1), E_SYSTEM,
2005                      "[E_SYSTEM] A system error has occurred. The cancel button instance is null.");
2006
2007         return Variant(__actionId);
2008 }
2009
2010 result
2011 _SearchBar::SetPropertyButtonDisabledColor(const Variant& color)
2012 {
2013         SysTryReturn(NID_UI_CTRL, __pCancelButton, E_SYSTEM, E_SYSTEM,
2014                      "[E_SYSTEM] A system error has occurred. The cancel button instance is null.");
2015
2016         result r = E_SUCCESS;
2017
2018         r = __pCancelButton->SetPropertyDisabledColor(color);
2019         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
2020                      "[E_SYSTEM] A system error has occurred. Failed to set button color.");
2021
2022         __buttonColor[SEARCH_BAR_BUTTON_STATUS_DISABLED] = color.ToColor();
2023
2024         return r;
2025 }
2026
2027 Variant
2028 _SearchBar::GetPropertyButtonDisabledColor(void) const
2029 {
2030         SysTryReturn(NID_UI_CTRL, __pCancelButton, Variant(Color()), E_SYSTEM,
2031                      "[E_SYSTEM] A system error has occurred. The cancel button instance is null.");
2032
2033         return Variant(__buttonColor[SEARCH_BAR_BUTTON_STATUS_DISABLED]);
2034 }
2035
2036 result
2037 _SearchBar::SetPropertyButtonHighlightedColor(const Variant& color)
2038 {
2039         SysTryReturn(NID_UI_CTRL, __pCancelButton, E_SYSTEM, E_SYSTEM,
2040                      "[E_SYSTEM] A system error has occurred. The cancel button instance is null.");
2041
2042         result r = E_SUCCESS;
2043
2044         r = __pCancelButton->SetPropertyHighlightedColor(color);
2045         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
2046                      "[E_SYSTEM] A system error has occurred. Failed to set button color.");
2047
2048         __buttonColor[SEARCH_BAR_BUTTON_STATUS_HIGHLIGHTED] = color.ToColor();
2049
2050         return r;
2051 }
2052
2053 Variant
2054 _SearchBar::GetPropertyButtonHighlightedColor(void) const
2055 {
2056         SysTryReturn(NID_UI_CTRL, __pCancelButton, Variant(Color()), E_SYSTEM,
2057                      "[E_SYSTEM] A system error has occurred. The cancel button instance is null.");
2058
2059         return Variant(__buttonColor[SEARCH_BAR_BUTTON_STATUS_HIGHLIGHTED]);
2060 }
2061
2062 result
2063 _SearchBar::SetPropertyButtonNormalColor(const Variant& color)
2064 {
2065         SysTryReturn(NID_UI_CTRL, __pCancelButton, E_SYSTEM, E_SYSTEM,
2066                      "[E_SYSTEM] A system error has occurred. The cancel button instance is null.");
2067
2068         result r = E_SUCCESS;
2069
2070         r = __pCancelButton->SetPropertyNormalColor(color);
2071         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
2072                      "[E_SYSTEM] A system error has occurred. Failed to set button color.");
2073
2074         __buttonColor[SEARCH_BAR_BUTTON_STATUS_NORMAL] = color.ToColor();
2075
2076         return r;
2077 }
2078
2079 Variant
2080 _SearchBar::GetPropertyButtonNormalColor(void) const
2081 {
2082         SysTryReturn(NID_UI_CTRL, __pCancelButton, Variant(Color()), E_SYSTEM,
2083                      "[E_SYSTEM] A system error has occurred. The cancel button instance is null.");
2084
2085         return Variant(__buttonColor[SEARCH_BAR_BUTTON_STATUS_NORMAL]);
2086 }
2087
2088 result
2089 _SearchBar::SetPropertyButtonPressedColor(const Variant& color)
2090 {
2091         SysTryReturn(NID_UI_CTRL, __pCancelButton, E_SYSTEM, E_SYSTEM,
2092                      "[E_SYSTEM] A system error has occurred. The cancel button instance is null.");
2093
2094         result r = E_SUCCESS;
2095
2096         r = __pCancelButton->SetPropertyPressedColor(color);
2097         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
2098                      "[E_SYSTEM] A system error has occurred. Failed to set button color.");
2099
2100         __buttonColor[SEARCH_BAR_BUTTON_STATUS_PRESSED] = color.ToColor();
2101
2102         return r;
2103 }
2104
2105 Variant
2106 _SearchBar::GetPropertyButtonPressedColor(void) const
2107 {
2108         SysTryReturn(NID_UI_CTRL, __pCancelButton, Variant(Color()), E_SYSTEM,
2109                      "[E_SYSTEM] A system error has occurred. The cancel button instance is null.");
2110
2111         return Variant(__buttonColor[SEARCH_BAR_BUTTON_STATUS_PRESSED]);
2112 }
2113
2114 result
2115 _SearchBar::SetPropertyButtonDisabledTextColor(const Variant& textColor)
2116 {
2117         SysTryReturn(NID_UI_CTRL, __pCancelButton, E_SYSTEM, E_SYSTEM,
2118                      "[E_SYSTEM] A system error has occurred. The cancel button instance is null.");
2119
2120         result r = E_SUCCESS;
2121
2122         r = __pCancelButton->SetPropertyDisabledTextColor(textColor);
2123         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
2124                      "[E_SYSTEM] A system error has occurred. Failed to set button text color.");
2125
2126         __buttonTextColor[SEARCH_BAR_BUTTON_STATUS_DISABLED] = textColor.ToColor();
2127
2128         return r;
2129 }
2130
2131 Variant
2132 _SearchBar::GetPropertyButtonDisabledTextColor(void) const
2133 {
2134         SysTryReturn(NID_UI_CTRL, __pCancelButton, Variant(Color()), E_SYSTEM,
2135                      "[E_SYSTEM] A system error has occurred. The cancel button instance is null.");
2136
2137         return Variant(__buttonTextColor[SEARCH_BAR_BUTTON_STATUS_DISABLED]);
2138 }
2139
2140 result
2141 _SearchBar::SetPropertyButtonHighlightedTextColor(const Variant& textColor)
2142 {
2143         SysTryReturn(NID_UI_CTRL, __pCancelButton, E_SYSTEM, E_SYSTEM,
2144                      "[E_SYSTEM]] A system error has occurred. The cancel button instance is null.");
2145
2146         result r = E_SUCCESS;
2147
2148         r = __pCancelButton->SetPropertyHighlightedTextColor(textColor);
2149         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
2150                      "[E_SYSTEM] A system error has occurred. Failed to set button text color.");
2151
2152         __buttonTextColor[SEARCH_BAR_BUTTON_STATUS_HIGHLIGHTED] = textColor.ToColor();
2153
2154         return r;
2155 }
2156
2157 Variant
2158 _SearchBar::GetPropertyButtonHighlightedTextColor(void) const
2159 {
2160         SysTryReturn(NID_UI_CTRL, __pCancelButton, Variant(Color()), E_SYSTEM,
2161                      "[E_SYSTEM] A system error has occurred. The cancel button instance is null.");
2162
2163         return Variant(__buttonTextColor[SEARCH_BAR_BUTTON_STATUS_HIGHLIGHTED]);
2164 }
2165
2166 result
2167 _SearchBar::SetPropertyButtonNormalTextColor(const Variant& textColor)
2168 {
2169         SysTryReturn(NID_UI_CTRL, __pCancelButton, E_SYSTEM, E_SYSTEM,
2170                      "[E_SYSTEM] A system error has occurred. The cancel button instance is null.");
2171
2172         result r = E_SUCCESS;
2173
2174         r = __pCancelButton->SetPropertyNormalTextColor(textColor);
2175         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
2176                      "[E_SYSTEM] A system error has occurred. Failed to set button text color.");
2177
2178         __buttonTextColor[SEARCH_BAR_BUTTON_STATUS_NORMAL] = textColor.ToColor();
2179
2180         return r;
2181 }
2182
2183 Variant
2184 _SearchBar::GetPropertyButtonNormalTextColor(void) const
2185 {
2186         SysTryReturn(NID_UI_CTRL, __pCancelButton, Variant(Color()), E_SYSTEM,
2187                      "[E_SYSTEM] A system error has occurred. The cancel button instance is null.");
2188
2189         return Variant(__buttonTextColor[SEARCH_BAR_BUTTON_STATUS_NORMAL]);
2190 }
2191
2192 result
2193 _SearchBar::SetPropertyButtonPressedTextColor(const Variant& textColor)
2194 {
2195         SysTryReturn(NID_UI_CTRL, __pCancelButton, E_SYSTEM, E_SYSTEM,
2196                      "[E_SYSTEM] A system error has occurred. The cancel button instance is null.");
2197
2198         result r = E_SUCCESS;
2199
2200         r = __pCancelButton->SetPropertyPressedTextColor(textColor);
2201         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
2202                      "[E_SYSTEM] A system error has occurred. Failed to set button text color.");
2203
2204         __buttonTextColor[SEARCH_BAR_BUTTON_STATUS_PRESSED] = textColor.ToColor();
2205
2206         return r;
2207 }
2208
2209 Variant
2210 _SearchBar::GetPropertyButtonPressedTextColor(void) const
2211 {
2212         SysTryReturn(NID_UI_CTRL, __pCancelButton, Variant(Color()), E_SYSTEM,
2213                      "[E_SYSTEM] A system error has occurred. The cancel button instance is null.");
2214
2215         return Variant(__buttonTextColor[SEARCH_BAR_BUTTON_STATUS_PRESSED]);
2216 }
2217
2218 result
2219 _SearchBar::SetPropertySearchFieldDisabledColor(const Variant& color)
2220 {
2221         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
2222                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
2223
2224         result r = E_SUCCESS;
2225
2226         r = __pEdit->SetPropertyDisabledColor(color);
2227         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
2228                      "[E_SYSTEM] A system error has occurred. Failed to set the edit disabled color.");
2229
2230         __color[SEARCH_FIELD_STATUS_DISABLED] = color.ToColor();
2231
2232         return r;
2233 }
2234
2235 Variant
2236 _SearchBar::GetPropertySearchFieldDisabledColor(void) const
2237 {
2238         SysTryReturn(NID_UI_CTRL, __pEdit, Variant(Color()), E_SYSTEM,
2239                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
2240
2241         return Variant(__color[SEARCH_FIELD_STATUS_DISABLED]);
2242 }
2243
2244 result
2245 _SearchBar::SetPropertySearchFieldHighlightedColor(const Variant& color)
2246 {
2247         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
2248                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
2249
2250         result r = E_SUCCESS;
2251
2252         r = __pEdit->SetPropertyHighlightedColor(color);
2253         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
2254                      "[E_SYSTEM] A system error has occurred. Failed to set the edit highlighted color.");
2255
2256         __color[SEARCH_FIELD_STATUS_HIGHLIGHTED] = color.ToColor();
2257
2258         return r;
2259 }
2260
2261 Variant
2262 _SearchBar::GetPropertySearchFieldHighlightedColor(void) const
2263 {
2264         SysTryReturn(NID_UI_CTRL, __pEdit, Variant(Color()), E_SYSTEM,
2265                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
2266
2267         return Variant(__color[SEARCH_FIELD_STATUS_HIGHLIGHTED]);
2268 }
2269
2270 result
2271 _SearchBar::SetPropertySearchFieldNormalColor(const Variant& color)
2272 {
2273         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
2274                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
2275
2276         result r = E_SUCCESS;
2277
2278         r = __pEdit->SetPropertyNormalColor(color);
2279         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
2280                      "[E_SYSTEM] A system error has occurred. Failed to set edit normal color.");
2281
2282         __color[SEARCH_FIELD_STATUS_NORMAL] = color.ToColor();
2283
2284         return r;
2285 }
2286
2287 Variant
2288 _SearchBar::GetPropertySearchFieldNormalColor(void) const
2289 {
2290         SysTryReturn(NID_UI_CTRL, __pEdit, Variant(Color()), E_SYSTEM,
2291                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
2292
2293         return Variant(__color[SEARCH_FIELD_STATUS_NORMAL]);
2294 }
2295
2296 result
2297 _SearchBar::SetPropertySearchFieldDisabledTextColor(const Variant& textColor)
2298 {
2299         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
2300                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
2301
2302         result r = E_SUCCESS;
2303
2304         r = __pEdit->SetPropertyDisabledTextColor(textColor);
2305         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
2306                      "[E_SYSTEM] A system error has occurred. Failed to set edit disabled text color.");
2307
2308         __textColor[SEARCH_FIELD_STATUS_DISABLED] = textColor.ToColor();
2309
2310         return r;
2311 }
2312
2313 Variant
2314 _SearchBar::GetPropertySearchFieldDisabledTextColor(void) const
2315 {
2316         SysTryReturn(NID_UI_CTRL, __pEdit, Variant(Color()), E_SYSTEM,
2317                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
2318
2319         return Variant(__textColor[SEARCH_FIELD_STATUS_DISABLED]);
2320 }
2321
2322 result
2323 _SearchBar::SetPropertySearchFieldHighlightedTextColor(const Variant& textColor)
2324 {
2325         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
2326                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
2327
2328         result r = E_SUCCESS;
2329
2330         r = __pEdit->SetPropertyHighlightedTextColor(textColor);
2331         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
2332                      "[E_SYSTEM] A system error has occurred. Failed to set edit highlighted text color.");
2333
2334         __textColor[SEARCH_FIELD_STATUS_HIGHLIGHTED] = textColor.ToColor();
2335
2336         return r;
2337 }
2338
2339 Variant
2340 _SearchBar::GetPropertySearchFieldHighlightedTextColor(void) const
2341 {
2342         SysTryReturn(NID_UI_CTRL, __pEdit, Variant(Color()), E_SYSTEM,
2343                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
2344
2345         return Variant(__textColor[SEARCH_FIELD_STATUS_HIGHLIGHTED]);
2346 }
2347
2348 result
2349 _SearchBar::SetPropertySearchFieldNormalTextColor(const Variant& textColor)
2350 {
2351         SysTryReturn(NID_UI_CTRL, __pEdit, E_SYSTEM, E_SYSTEM,
2352                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
2353
2354         result r = E_SUCCESS;
2355
2356         r = __pEdit->SetPropertyNormalTextColor(textColor);
2357         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
2358                      "[E_SYSTEM] A system error has occurred. Failed to set edit normal text color.");
2359
2360         __textColor[SEARCH_FIELD_STATUS_NORMAL] = textColor.ToColor();
2361
2362         return r;
2363 }
2364
2365 Variant
2366 _SearchBar::GetPropertySearchFieldNormalTextColor(void) const
2367 {
2368         SysTryReturn(NID_UI_CTRL, __pEdit, Variant(Color()), E_SYSTEM,
2369                      "[E_SYSTEM] A system error has occurred. The edit instance is null.");
2370
2371         return Variant(__textColor[SEARCH_FIELD_STATUS_NORMAL]);
2372 }
2373
2374 result
2375 _SearchBar::SetPropertyColor(const Variant& color)
2376 {
2377         __backgroundColor = color.ToColor();
2378
2379         return E_SUCCESS;
2380 }
2381
2382 Variant
2383 _SearchBar::GetPropertyColor(void) const
2384 {
2385         return Variant(__backgroundColor);
2386 }
2387
2388 result
2389 _SearchBar::SetPropertyContentAreaSize(const Variant& size)
2390 {
2391         FloatDimension contentAreaSize = size.ToFloatDimension();
2392         SysTryReturn(NID_UI_CTRL, contentAreaSize.width >= 0 && contentAreaSize.height >= 0, E_INVALID_ARG, E_INVALID_ARG,
2393                      "[E_INVALID_ARG] Invalid argument(s) is used. contentAreaSize.width = %f, contenAreaSize.height = %f",
2394                      contentAreaSize.width, contentAreaSize.height);
2395
2396         result r = E_SUCCESS;
2397
2398         // Todo
2399         FloatRectangle bounds = GetBoundsF();
2400         FloatRectangle contentAreaBounds(0.0f, 0.0f, 0.0f, 0.0f);
2401
2402         contentAreaBounds.x = 0.0f;
2403         contentAreaBounds.y = bounds.height;
2404         contentAreaBounds.width = contentAreaSize.width;
2405         contentAreaBounds.height = contentAreaSize.height;
2406
2407         __contentAreaBounds = contentAreaBounds;
2408         __isUserContainerBounds = true;
2409
2410         // set bounds
2411         if (__pContainer)
2412         {
2413                 r = __pContainer->SetBounds(__contentAreaBounds);
2414                 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
2415         }
2416
2417         return r;
2418 }
2419
2420 Variant
2421 _SearchBar::GetPropertyContentAreaSize(void) const
2422 {
2423         FloatDimension contentAreaSize(__contentAreaBounds.width, __contentAreaBounds.height);
2424
2425         return Variant(contentAreaSize);
2426 }
2427
2428 result
2429 _SearchBar::CreateClippedGroupControl(void)
2430 {
2431         result r = E_SUCCESS;
2432         FloatRectangle clippedGroupControlBounds(FloatPoint(0.0f, 0.0f), GetSizeF());
2433         __pClippedGroupControl = _Control::CreateControlN();
2434         r = GetLastResult();
2435         SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
2436
2437         r = AttachChild(*__pClippedGroupControl);
2438         SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , E_SYSTEM,
2439                     "[E_SYSTEM] A system error has occurred. Failed to attach the parent of clipped control.");
2440
2441         r = __pClippedGroupControl->SetBounds(clippedGroupControlBounds);
2442         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2443
2444         __pClippedGroupControl->SetBackgroundColor(Color(0));
2445
2446         __pClippedGroupControl->SetClipChildrenEnabled(true);
2447
2448         return r;
2449
2450 CATCH:
2451         delete __pClippedGroupControl;
2452         __pClippedGroupControl = null;
2453
2454         return r;
2455
2456 }
2457
2458 void
2459 _SearchBar::CreateAccessibilityElement(void)
2460 {
2461         if (__pAccessibilitySearchBarElement != null)
2462         {
2463                 return;
2464         }
2465         _AccessibilityContainer* pContainer = null;
2466         pContainer = GetAccessibilityContainer();
2467
2468         if (pContainer)
2469         {
2470                 __pAccessibilitySearchBarElement = new (std::nothrow) _AccessibilityElement(true);
2471                 SysTryReturnVoidResult(NID_UI_CTRL, __pAccessibilitySearchBarElement, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to allocate memory.");
2472                 __pAccessibilitySearchBarElement->SetBounds(FloatRectangle(0.0f, 0.0f, GetBoundsF().width, GetBoundsF().height));
2473                 __pAccessibilitySearchBarElement->SetTrait(ACCESSIBILITY_TRAITS_NONE);
2474                 __pAccessibilitySearchBarElement->SetName("SearchBar");
2475                 pContainer->AddElement(*__pAccessibilitySearchBarElement);
2476          }
2477
2478         return;
2479 }
2480
2481 void
2482 _SearchBar::SetContentDimming(void)
2483 {
2484         if (__pContainer != NULL)
2485         {
2486                 if (!GetTextLength())
2487                 {
2488                         __contentColor.SetAlpha(_SEARCH_CONTENT_DIM_OPACITY);
2489                 }
2490                 else
2491                 {
2492                         __contentColor.SetAlpha(0);
2493                 }
2494                 __pContainer->SetBackgroundColor(__contentColor);
2495         }
2496         return;
2497 }
2498
2499 bool
2500 _SearchBar::IsContentAttachable(const _Control* pContent)
2501 {
2502         const _Window* pWindow = dynamic_cast <const _Window*>(pContent);
2503         const _ColorPicker* pColorPicker = dynamic_cast <const _ColorPicker*>(pContent);
2504         const _Form* pForm = dynamic_cast <const _Form*>(pContent);
2505         const _Keypad* pKeypad = dynamic_cast <const _Keypad*>(pContent);
2506         const _OverlayPanel* pOverlayPanel = dynamic_cast <const _OverlayPanel*>(pContent);
2507
2508         bool isContentAttachable = true;
2509
2510         isContentAttachable = ((pWindow == null) && (pColorPicker == null) &&
2511                                (pForm == null) && (pKeypad == null) && (pOverlayPanel == null));
2512         return isContentAttachable;
2513 }
2514
2515 result
2516 _SearchBar::ResizeCancelButton(void)
2517 {
2518         result r = E_SUCCESS;
2519
2520         float horizontalMargin = 0.0f;
2521         float buttonLeftMargin = 0.0f;
2522         float buttonRightMargin = 0.0f;
2523         float buttonMinWidth = 0.0f;
2524         float searchFieldMinWidth = 0.0f;
2525         float buttonVerticalMargin = 0.0f;
2526         float searchBarMinHeight = 0.0f;
2527         float buttonWidth = 0.0f;
2528         float buttonHeight = 0.0f;
2529
2530         FloatRectangle cancelButtonBounds;
2531         FloatRectangle searchBarBounds = GetBoundsF();
2532
2533         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
2534
2535         GET_SHAPE_CONFIG(SEARCHBAR::HORIZONTAL_MARGIN, orientation, horizontalMargin);
2536         GET_SHAPE_CONFIG(SEARCHBAR::BUTTON_LEFT_MARGIN, orientation, buttonLeftMargin);
2537         GET_SHAPE_CONFIG(SEARCHBAR::BUTTON_RIGHT_MARGIN, orientation, buttonRightMargin);
2538         GET_SHAPE_CONFIG(SEARCHBAR::BUTTON_WIDTH, orientation, buttonWidth);
2539         GET_SHAPE_CONFIG(SEARCHBAR::BUTTON_HEIGHT, orientation, buttonHeight);
2540         GET_SHAPE_CONFIG(SEARCHBAR::BUTTON_MIN_WIDTH, orientation, buttonMinWidth);
2541         GET_SHAPE_CONFIG(SEARCHBAR::SEARCH_FIELD_MIN_WIDTH, orientation, searchFieldMinWidth);
2542         GET_SHAPE_CONFIG(SEARCHBAR::VERTICAL_MARGIN, orientation, buttonVerticalMargin);
2543         GET_SHAPE_CONFIG(SEARCHBAR::MIN_HEIGHT, orientation, searchBarMinHeight);
2544
2545         cancelButtonBounds.width = buttonWidth;
2546         cancelButtonBounds.height = buttonHeight;
2547
2548         float buttonResizableSearchBarWidth = (horizontalMargin + searchFieldMinWidth +
2549                                              cancelButtonBounds.width + buttonLeftMargin + buttonRightMargin);
2550
2551         if (searchBarBounds.width < buttonResizableSearchBarWidth)
2552         {
2553                 cancelButtonBounds.width = searchBarBounds.width -(searchFieldMinWidth + buttonLeftMargin
2554                                                                    + buttonRightMargin + horizontalMargin);
2555         }
2556
2557         cancelButtonBounds.x = searchBarBounds.width - cancelButtonBounds.width - buttonRightMargin;
2558         cancelButtonBounds.y = (searchBarBounds.height - cancelButtonBounds.height)/2.0f;
2559
2560         cancelButtonBounds.y = cancelButtonBounds.y < 0.0f ? 0.0f:cancelButtonBounds.y;
2561
2562         if (cancelButtonBounds.width < buttonMinWidth)
2563         {
2564                 cancelButtonBounds.width = buttonMinWidth;
2565         }
2566
2567         cancelButtonBounds.width = (cancelButtonBounds.width > 0.0f) ? cancelButtonBounds.width : 0.0f;
2568         cancelButtonBounds.height = (cancelButtonBounds.height > 0.0f) ? cancelButtonBounds.height : 0.0f;
2569         r = __pCancelButton->SetBounds(cancelButtonBounds);
2570
2571         return r;
2572 }
2573
2574 void
2575 _SearchBar::RecalculateButtonBounds(void)
2576 {
2577         result r = E_SUCCESS;
2578
2579         float horizontalMargin = 0.0f;
2580         float verticalMargin = 0.0f;
2581         float buttonLeftMargin = 0.0f;
2582         float buttonRightMargin = 0.0f;
2583         float buttonMinWidth = 0.0f;
2584         float searchFieldMinWidth = 0.0f;
2585         float buttonVerticalMargin = 0.0f;
2586         float searchBarMinHeight = 0.0f;
2587         float buttonWidth = 0.0f;
2588         float buttonHeight = 0.0f;
2589         float cancelButtonWidth = 0.0f;
2590
2591         FloatRectangle cancelButtonBounds;
2592         FloatRectangle editBounds;
2593         FloatRectangle searchBarBounds = GetBoundsF();
2594
2595         _ControlOrientation orientation = _ControlManager::GetInstance()->GetOrientation();
2596
2597         GET_SHAPE_CONFIG(SEARCHBAR::HORIZONTAL_MARGIN, orientation, horizontalMargin);
2598         GET_SHAPE_CONFIG(SEARCHBAR::VERTICAL_MARGIN, orientation, verticalMargin);
2599         GET_SHAPE_CONFIG(SEARCHBAR::BUTTON_LEFT_MARGIN, orientation, buttonLeftMargin);
2600         GET_SHAPE_CONFIG(SEARCHBAR::BUTTON_RIGHT_MARGIN, orientation, buttonRightMargin);
2601         GET_SHAPE_CONFIG(SEARCHBAR::BUTTON_WIDTH, orientation, buttonWidth);
2602         GET_SHAPE_CONFIG(SEARCHBAR::BUTTON_HEIGHT, orientation, buttonHeight);
2603         GET_SHAPE_CONFIG(SEARCHBAR::BUTTON_MIN_WIDTH, orientation, buttonMinWidth);
2604         GET_SHAPE_CONFIG(SEARCHBAR::SEARCH_FIELD_MIN_WIDTH, orientation, searchFieldMinWidth);
2605         GET_SHAPE_CONFIG(SEARCHBAR::VERTICAL_MARGIN, orientation, buttonVerticalMargin);
2606         GET_SHAPE_CONFIG(SEARCHBAR::MIN_HEIGHT, orientation, searchBarMinHeight);
2607
2608         cancelButtonBounds.height = buttonHeight;
2609
2610         float searchFieldMinHeight = searchBarMinHeight - (verticalMargin * 2.0f);
2611         cancelButtonWidth = __pCancelButton->GetTextExtentSizeF() + __pCancelButton->GetRightTouchMarginF() + __pCancelButton->GetLeftTouchMarginF() + __pCancelButton->GetRightMarginF() + __pCancelButton->GetLeftMarginF();
2612         editBounds.x = horizontalMargin;
2613
2614         if (searchBarBounds.height < searchBarMinHeight)
2615         {
2616                 verticalMargin = (searchBarBounds.height - searchFieldMinHeight)/2.0f;
2617                 if (verticalMargin < 0.0f)
2618                 {
2619                         verticalMargin = 0.0f;
2620                 }
2621         }
2622
2623         editBounds.y = verticalMargin;
2624         editBounds.height = searchBarBounds.height - (editBounds.y * 2.0f);
2625
2626         editBounds.height = (editBounds.height > searchFieldMinHeight) ? editBounds.height : searchFieldMinHeight;
2627
2628         editBounds.width = searchBarBounds.width - cancelButtonWidth - horizontalMargin - buttonLeftMargin - buttonRightMargin;
2629
2630         if (editBounds.width < searchFieldMinWidth)
2631         {
2632                 editBounds.width = searchFieldMinWidth;
2633         }
2634
2635         cancelButtonBounds.x = editBounds.width + horizontalMargin + buttonLeftMargin;
2636         cancelButtonBounds.y = (searchBarBounds.height - cancelButtonBounds.height)/2.0f;
2637
2638         cancelButtonBounds.y = cancelButtonBounds.y < 0.0f ? 0.0f:cancelButtonBounds.y;
2639
2640         float remainingWidth = searchBarBounds.width - editBounds.width - horizontalMargin - buttonLeftMargin - buttonRightMargin;
2641
2642         if (remainingWidth < buttonMinWidth)
2643         {
2644                 cancelButtonBounds.width = buttonMinWidth;
2645         }
2646         else
2647         {
2648                 cancelButtonBounds.width = searchBarBounds.width - cancelButtonBounds.x - buttonRightMargin;
2649         }
2650
2651         cancelButtonBounds.width = (cancelButtonBounds.width > 0.0f) ? cancelButtonBounds.width : 0.0f;
2652         cancelButtonBounds.height = (cancelButtonBounds.height > 0.0f) ? cancelButtonBounds.height : 0.0f;
2653
2654         r = __pCancelButton->SetBounds(cancelButtonBounds);
2655         SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
2656         r = __pEdit->SetBounds(editBounds);
2657         SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
2658
2659         return;
2660 }
2661
2662 SearchFieldStatus
2663 _SearchBar::GetCurrentStatus(void)
2664 {
2665         SearchFieldStatus searchFieldStatus = SEARCH_FIELD_STATUS_NORMAL;
2666
2667         if (IsEnabled())
2668         {
2669                 if (__pEdit->IsFocused())
2670                 {
2671                         searchFieldStatus = SEARCH_FIELD_STATUS_HIGHLIGHTED;
2672                 }
2673         }
2674         else
2675         {
2676                 searchFieldStatus = SEARCH_FIELD_STATUS_DISABLED;
2677         }
2678
2679         return searchFieldStatus;
2680 }
2681
2682 void
2683 _SearchBar::SetEditTextFilter(IEditTextFilter* pFilter)
2684 {
2685         SysTryReturnVoidResult(NID_UI_CTRL, __pEdit, E_SYSTEM,
2686                                "[E_SYSTEM] A system error has occurred. The edit instance is null.");
2687
2688         __pEdit->SetEditTextFilter(pFilter);
2689
2690         return;
2691 }
2692
2693 void
2694 _SearchBar::SendOpaqueCommand(const String& command)
2695 {
2696         SysTryReturnVoidResult(NID_UI_CTRL, __pEdit, E_SYSTEM,
2697                                "[E_SYSTEM] A system error has occurred. The edit instance is null.");
2698
2699         __pEdit->SendOpaqueCommand(command);
2700
2701         return;
2702 }
2703
2704 }}} // Tizen::Ui::Controls