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