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