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