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