Fixed Coding Idioms Violations
[platform/framework/native/uifw.git] / src / ui / controls / FUiCtrl_SearchBarImpl.cpp
old mode 100755 (executable)
new mode 100644 (file)
index c6ea90b..d1b00d1
@@ -2,14 +2,14 @@
 // Open Service Platform
 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
 //
-// Licensed under the Flora License, Version 1.0 (the License);
+// Licensed under the Apache License, Version 2.0 (the License);
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
-//     http://floralicense.org/license/
+//     http://www.apache.org/licenses/LICENSE-2.0/
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an AS IS BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
  * @brief      This is the implementation file for _SearchBarImpl class.
  */
 
-#include <FApp_AppInfo.h>
 #include <FBaseSysLog.h>
 #include <FLclLocale.h>
 #include <FUiAccessibilityContainer.h>
 #include <FUiAccessibilityElement.h>
+#include <FBase_LocalizedNumParser.h>
+#include <FApp_AppInfo.h>
 #include "FUi_ResourceSizeInfo.h"
 #include "FUi_ResourceManager.h"
 #include "FUi_UiBuilder.h"
+#include "FUi_CoordinateSystemUtils.h"
 #include "FUiCtrl_PublicActionEvent.h"
 #include "FUiCtrl_PublicTextBlockEvent.h"
 #include "FUiCtrl_PublicTextEvent.h"
 #include "FUiCtrl_SearchBarImpl.h"
-#include "FUi_CoordinateSystemUtils.h"
+#include "FUiCtrl_EditFieldImpl.h"
+#include "FUiCtrl_ButtonImpl.h"
 
 using namespace Tizen::App;
 using namespace Tizen::Base;
@@ -47,6 +50,8 @@ namespace Tizen { namespace Ui { namespace Controls
 _SearchBarImpl::_SearchBarImpl(SearchBar* pPublic, _SearchBar* pCore)
        : _ControlImpl(pPublic, pCore)
        , __pSearchBar(pCore)
+       , __pEditField(null)
+       , __pButton(null)
        , __pContentControl(null)
        , __pPublicActionEvent(null)
        , __pPublicKeypadEvent(null)
@@ -54,46 +59,49 @@ _SearchBarImpl::_SearchBarImpl(SearchBar* pPublic, _SearchBar* pCore)
        , __pPublicTextEvent(null)
        , __pPublicSearchBarEvent(null)
        , __pPublicLanguageEvent(null)
+       , __pPublicFocusEventListeners(null)
 {
        ClearLastResult();
 }
 
 _SearchBarImpl::~_SearchBarImpl(void)
 {
-       if (__pSearchBar)
+       if (__pSearchBar != null)
        {
                SetContent(null);
+               if (__pSearchBar->GetClippedGroupControl())
+               {
+                       _Control* pControl = __pSearchBar->GetClippedGroupControl();
+                       pControl->DetachAllChildren();
+               }
        }
 
-       if (__pPublicActionEvent)
-       {
-               delete __pPublicActionEvent;
-               __pPublicActionEvent = null;
-       }
+       delete __pEditField;
+       __pEditField = null;
 
-       if (__pPublicKeypadEvent)
-       {
-               delete __pPublicKeypadEvent;
-               __pPublicKeypadEvent = null;
-       }
+       delete __pButton;
+       __pButton = null;
 
-       if (__pPublicTextBlockEvent)
-       {
-               delete __pPublicTextBlockEvent;
-               __pPublicTextBlockEvent = null;
-       }
+       delete __pPublicActionEvent;
+       __pPublicActionEvent = null;
 
-       if (__pPublicTextEvent)
-       {
-               delete __pPublicTextEvent;
-               __pPublicTextEvent = null;
-       }
+       delete __pPublicKeypadEvent;
+       __pPublicKeypadEvent = null;
 
-       if (__pPublicSearchBarEvent)
-       {
-               delete __pPublicSearchBarEvent;
-               __pPublicSearchBarEvent = null;
-       }
+       delete __pPublicTextBlockEvent;
+       __pPublicTextBlockEvent = null;
+
+       delete __pPublicTextEvent;
+       __pPublicTextEvent = null;
+
+       delete __pPublicSearchBarEvent;
+       __pPublicSearchBarEvent = null;
+
+       delete __pPublicLanguageEvent;
+       __pPublicLanguageEvent = null;
+
+       delete __pPublicFocusEventListeners;
+       __pPublicFocusEventListeners = null;
 }
 
 _SearchBarImpl*
@@ -104,7 +112,7 @@ _SearchBarImpl::CreateSearchBarImplN(SearchBar* pControl, const Rectangle& bound
 
        r = GET_SIZE_INFO(SearchBar).CheckInitialSizeValid(Dimension(bounds.width, bounds.height), _CONTROL_ORIENTATION_PORTRAIT);
        SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, E_INVALID_ARG,
-                    "[E_INVALID_ARG] Invalid argument(s) is used. The given size is not valid.");
+                        "[%s] Invalid argument(s) is used. The given size is not valid.", GetErrorMessage(E_INVALID_ARG));
 
        _SearchBar* pCore = _SearchBar::CreateSearchBarN();
        r = GetLastResult();
@@ -124,6 +132,7 @@ _SearchBarImpl::CreateSearchBarImplN(SearchBar* pControl, const Rectangle& bound
        return pImpl;
 CATCH:
        delete pImpl;
+       SetLastResult(r);
        return null;
 }
 
@@ -135,7 +144,7 @@ _SearchBarImpl::CreateSearchBarImplFN(SearchBar* pControl, const FloatRectangle&
 
        r = GET_SIZE_INFO(SearchBar).CheckInitialSizeValidF(FloatDimension(bounds.width, bounds.height), _CONTROL_ORIENTATION_PORTRAIT);
        SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, E_INVALID_ARG,
-                    "[E_INVALID_ARG] Invalid argument(s) is used. The given size is not valid.");
+                        "[%s] Invalid argument(s) is used. The given size is not valid.", GetErrorMessage(E_INVALID_ARG));
 
        _SearchBar* pCore = _SearchBar::CreateSearchBarN();
        r = GetLastResult();
@@ -155,6 +164,7 @@ _SearchBarImpl::CreateSearchBarImplFN(SearchBar* pControl, const FloatRectangle&
        return pImpl;
 CATCH:
        delete pImpl;
+       SetLastResult(r);
        return null;
 }
 
@@ -251,51 +261,87 @@ _SearchBarImpl::Initialize(bool enableSearchBarButton, KeypadAction keypadAction
                break;
        }
 
+       __pEditField = new (std::nothrow) EditField();
+       SysTryReturnResult(NID_UI_CTRL, __pEditField != null, E_OUT_OF_MEMORY, "Memory allocation failed.");
+
+       r = __pEditField->Construct(GetBoundsF(), EDIT_FIELD_STYLE_NORMAL, INPUT_STYLE_OVERLAY, EDIT_FIELD_TITLE_STYLE_NONE, true);
+       SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
+
+       __pEditField->AddFocusEventListener(*this);
+       SysTryReturnResult(NID_UI_CTRL, GetLastResult() == E_SUCCESS, GetLastResult(), "Propagating.");
+
+       __pEditField->AddKeyEventListener(*this);
+       SysTryReturnResult(NID_UI_CTRL, GetLastResult() == E_SUCCESS, GetLastResult(), "Propagating.");
+
+       __pEditFieldImpl = _EditFieldImpl::GetInstance(*__pEditField);
+       SysTryReturnResult(NID_UI_CTRL, __pEditFieldImpl != null, E_SYSTEM,
+                          "A system error has occurred. Failed to get _EditFieldImpl instance.");
+
+       String cancelButtonText;
+       GET_STRING_CONFIG(IDS_TPLATFORM_BUTTON_CANCEL_ABB, cancelButtonText);
+
+       __pButton = new (std::nothrow) Button();
+       SysTryReturnResult(NID_UI_CTRL, __pButton != null, E_OUT_OF_MEMORY, "Memory allocation failed.");
+
+       r = __pButton->Construct(GetBoundsF(), cancelButtonText);
+       SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
+
+       __pButton->AddFocusEventListener(*this);
+       SysTryReturnResult(NID_UI_CTRL, GetLastResult() == E_SUCCESS, GetLastResult(), "Propagating.");
+
+       __pButtonImpl = _ButtonImpl::GetInstance(*__pButton);
+       SysTryReturnResult(NID_UI_CTRL, __pButtonImpl != null, E_SYSTEM,
+                          "A system error has occurred. Failed to get _ButtonImpl instance.");
+
        r = __pSearchBar->Initialize(enableSearchBarButton, coreKeypadAction);
        SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
 
        __pPublicActionEvent = _PublicActionEvent::CreateInstanceN(GetPublic());
        r = GetLastResult();
-       SysTryReturn(NID_UI_CTRL, __pPublicActionEvent, r, r, "[%s] Propagating.", GetErrorMessage(r));
+       SysTryReturn(NID_UI_CTRL, __pPublicActionEvent != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
        r = __pSearchBar->AddActionEventListener(*this);
        SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
        __pPublicKeypadEvent = _PublicKeypadEvent::CreateInstanceN(GetPublic());
        r = GetLastResult();
-       SysTryReturn(NID_UI_CTRL, __pPublicKeypadEvent, r, r, "[%s] Propagating.", GetErrorMessage(r));
+       SysTryReturn(NID_UI_CTRL, __pPublicKeypadEvent != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
        r = __pSearchBar->AddKeypadEventListener(*this);
        SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
        __pPublicTextBlockEvent = _PublicTextBlockEvent::CreateInstanceN(GetPublic());
        r = GetLastResult();
-       SysTryReturn(NID_UI_CTRL, __pPublicTextBlockEvent, r, r, "[%s] Propagating.", GetErrorMessage(r));
+       SysTryReturn(NID_UI_CTRL, __pPublicTextBlockEvent != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
        r = __pSearchBar->AddTextBlockEventListener(*this);
        SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
        __pPublicTextEvent = _PublicTextEvent::CreateInstanceN(GetPublic());
        r = GetLastResult();
-       SysTryReturn(NID_UI_CTRL, __pPublicTextEvent, r, r, "[%s] Propagating.", GetErrorMessage(r));
+       SysTryReturn(NID_UI_CTRL, __pPublicTextEvent != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
        r = __pSearchBar->AddTextEventListener(*this);
        SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
        __pPublicSearchBarEvent = _PublicSearchBarEvent::CreateInstanceN(GetPublic());
        r = GetLastResult();
-       SysTryReturn(NID_UI_CTRL, __pPublicSearchBarEvent, r, r, "[%s] Propagating.", GetErrorMessage(r));
+       SysTryReturn(NID_UI_CTRL, __pPublicSearchBarEvent != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
        r = __pSearchBar->AddSearchBarEventListener(*this);
        SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
        __pPublicLanguageEvent = _PublicLanguageEvent::CreateInstanceN(GetPublic());
        r = GetLastResult();
-       SysTryReturn(NID_UI_CTRL, __pPublicLanguageEvent, r, r, "[%s] Propagating.", GetErrorMessage(r));
+       SysTryReturn(NID_UI_CTRL, __pPublicLanguageEvent != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
        r = __pSearchBar->AddLanguageEventListener(*this);
        SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
+       __pPublicFocusEventListeners = CreatePublicEventListenerListN();
+       r = GetLastResult();
+       SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
        return r;
 }
 
@@ -318,7 +364,7 @@ _SearchBarImpl::SetContent(const Control* pContent)
                const _Control& content = _ControlImpl::GetInstance(*pContent)->GetCore();
                bool isContentAttachable = __pSearchBar->IsContentAttachable(&content);
                SysTryReturn(NID_UI_CTRL, isContentAttachable, E_INVALID_ARG, E_INVALID_ARG,
-                            "[E_INVALID_ARG] Invalid argument(s) is used. The content cannot be set.");
+                                "[%s] Invalid argument(s) is used. The content cannot be set.", GetErrorMessage(E_INVALID_ARG));
        }
 
        if (pContent != null && __pContentControl == null)
@@ -345,7 +391,7 @@ _SearchBarImpl::SetContentAreaVisible(bool visible)
 {
        ClearLastResult();
 
-       return __pSearchBar->SetContentAreaVisible(visible);
+       return __pSearchBar->SetContentAreaVisible(visible, true);
 }
 
 bool
@@ -417,7 +463,7 @@ _SearchBarImpl::SetMode(SearchBarMode mode)
 {
        ClearLastResult();
 
-       return __pSearchBar->SetMode(mode);
+       return __pSearchBar->SetMode(mode, true);
 }
 
 result
@@ -639,7 +685,7 @@ _SearchBarImpl::Clear(void)
        r = __pSearchBar->Clear();
 
        SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM,
-                          "[E_SYSTEM] A system error has occured. Failed to clear the text.");
+                          "A system error has occurred. Failed to clear the text.");
        return r;
 }
 
@@ -763,7 +809,7 @@ _SearchBarImpl::RemoveTextBlock(void)
        ClearLastResult();
        result r = __pSearchBar->RemoveTextBlock();
        SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
-                    "[E_SYSTEM] A system error has occured. Unable to remove the text block.")
+                        "[%s] A system error has occurred. Unable to remove the text block.", GetErrorMessage(E_SYSTEM));
 
        return r;
 }
@@ -808,7 +854,7 @@ _SearchBarImpl::GetSearchFieldTextColor(SearchFieldStatus status) const
 
        Color color;
        _Edit* pEdit = __pSearchBar->GetSearchField();
-       if (pEdit)
+       if (pEdit != null)
        {
                switch (status)
                {
@@ -879,7 +925,7 @@ _SearchBarImpl::SetSearchFieldTextColor(SearchFieldStatus status, const Color& c
 
        result r = E_SUCCESS;
        _Edit* pEdit = __pSearchBar->GetSearchField();
-       if (pEdit)
+       if (pEdit != null)
        {
                switch (status)
                {
@@ -1020,8 +1066,8 @@ _SearchBarImpl::AddActionEventListener(IActionEventListener& listener)
 {
        ClearLastResult();
 
-       SysTryReturn(NID_UI_CTRL, __pPublicActionEvent, E_SYSTEM, E_SYSTEM,
-                    "[E_SYSTEM] A system error has occurred.");
+       SysTryReturn(NID_UI_CTRL, __pPublicActionEvent != null, E_SYSTEM, E_SYSTEM,
+                        "[%s] A system error has occurred.", GetErrorMessage(E_SYSTEM));
 
        result r = __pPublicActionEvent->AddListener(listener);
        SysTryReturnResult(NID_UI_CTRL, r != E_OBJ_ALREADY_EXIST, E_SYSTEM,
@@ -1034,7 +1080,7 @@ _SearchBarImpl::RemoveActionEventListener(IActionEventListener& listener)
 {
        ClearLastResult();
 
-       SysTryReturn(NID_UI_CTRL, __pPublicActionEvent, E_SYSTEM, E_SYSTEM,
+       SysTryReturn(NID_UI_CTRL, __pPublicActionEvent != null, E_SYSTEM, E_SYSTEM,
                     "[E_SYSTEM] A system error has occurred.");
 
        result r = __pPublicActionEvent->RemoveListener(listener);
@@ -1048,8 +1094,8 @@ _SearchBarImpl::AddKeypadEventListener(IKeypadEventListener& listener)
 {
        ClearLastResult();
 
-       SysTryReturn(NID_UI_CTRL, __pPublicKeypadEvent, E_SYSTEM, E_SYSTEM,
-                    "[E_SYSTEM] A system error has occurred.");
+       SysTryReturn(NID_UI_CTRL, __pPublicKeypadEvent != null, E_SYSTEM, E_SYSTEM,
+                        "[%s] A system error has occurred.", GetErrorMessage(E_SYSTEM));
 
        result r = __pPublicKeypadEvent->AddListener(listener);
        SysTryReturnResult(NID_UI_CTRL, r != E_OBJ_ALREADY_EXIST, E_SYSTEM,
@@ -1058,14 +1104,13 @@ _SearchBarImpl::AddKeypadEventListener(IKeypadEventListener& listener)
        return r;
 }
 
-
 result
 _SearchBarImpl::RemoveKeypadEventListener(IKeypadEventListener& listener)
 {
        ClearLastResult();
 
-       SysTryReturn(NID_UI_CTRL, __pPublicKeypadEvent, E_SYSTEM, E_SYSTEM,
-                    "[E_SYSTEM] A system error has occurred.");
+       SysTryReturn(NID_UI_CTRL, __pPublicKeypadEvent != null, E_SYSTEM, E_SYSTEM,
+                        "[%s] A system error has occurred.", GetErrorMessage(E_SYSTEM));
 
        result r = __pPublicKeypadEvent->RemoveListener(listener);
        SysTryReturnResult(NID_UI_CTRL, r != E_OBJ_NOT_FOUND, E_SYSTEM,
@@ -1079,8 +1124,8 @@ _SearchBarImpl::AddTextBlockEventListener(ITextBlockEventListener& listener)
 {
        ClearLastResult();
 
-       SysTryReturn(NID_UI_CTRL, __pPublicTextBlockEvent, E_SYSTEM, E_SYSTEM,
-                    "[E_SYSTEM] A system error has occurred.");
+       SysTryReturn(NID_UI_CTRL, __pPublicTextBlockEvent != null, E_SYSTEM, E_SYSTEM,
+                        "[%s] A system error has occurred.", GetErrorMessage(E_SYSTEM));
 
        result r = __pPublicTextBlockEvent->AddListener(listener);
        SysTryReturnResult(NID_UI_CTRL, r != E_OBJ_ALREADY_EXIST, E_SYSTEM,
@@ -1094,8 +1139,8 @@ _SearchBarImpl::RemoveTextBlockEventListener(ITextBlockEventListener& listener)
 {
        ClearLastResult();
 
-       SysTryReturn(NID_UI_CTRL, __pPublicTextBlockEvent, E_SYSTEM, E_SYSTEM,
-                    "[E_SYSTEM] A system error has occurred.");
+       SysTryReturn(NID_UI_CTRL, __pPublicTextBlockEvent != null, E_SYSTEM, E_SYSTEM,
+                        "[%s] A system error has occurred.", GetErrorMessage(E_SYSTEM));
 
        result r = __pPublicTextBlockEvent->RemoveListener(listener);
        SysTryReturnResult(NID_UI_CTRL, r != E_OBJ_NOT_FOUND, E_SYSTEM,
@@ -1110,8 +1155,8 @@ _SearchBarImpl::AddTextEventListener(ITextEventListener& listener)
 {
        ClearLastResult();
 
-       SysTryReturn(NID_UI_CTRL, __pPublicTextEvent, E_SYSTEM, E_SYSTEM,
-                    "[E_SYSTEM] A system error has occurred.");
+       SysTryReturn(NID_UI_CTRL, __pPublicTextEvent != null, E_SYSTEM, E_SYSTEM,
+                        "[%s] A system error has occurred.", GetErrorMessage(E_SYSTEM));
 
        result r = __pPublicTextEvent->AddListener(listener);
        SysTryReturnResult(NID_UI_CTRL, r != E_OBJ_ALREADY_EXIST, E_SYSTEM,
@@ -1125,8 +1170,8 @@ _SearchBarImpl::RemoveTextEventListener(ITextEventListener& listener)
 {
        ClearLastResult();
 
-       SysTryReturn(NID_UI_CTRL, __pPublicTextEvent, E_SYSTEM, E_SYSTEM,
-                    "[E_SYSTEM] A system error has occurred.");
+       SysTryReturn(NID_UI_CTRL, __pPublicTextEvent != null, E_SYSTEM, E_SYSTEM,
+                        "[%s] A system error has occurred.", GetErrorMessage(E_SYSTEM));
 
        result r = __pPublicTextEvent->RemoveListener(listener);
        SysTryReturnResult(NID_UI_CTRL, r != E_OBJ_NOT_FOUND, E_SYSTEM,
@@ -1140,8 +1185,8 @@ _SearchBarImpl::AddSearchBarEventListener(const ISearchBarEventListener& listene
 {
        ClearLastResult();
 
-       SysTryReturn(NID_UI_CTRL, __pPublicSearchBarEvent, E_SYSTEM, E_SYSTEM,
-                    "[E_SYSTEM] A system error has occurred.");
+       SysTryReturn(NID_UI_CTRL, __pPublicSearchBarEvent != null, E_SYSTEM, E_SYSTEM,
+                        "[%s] A system error has occurred.", GetErrorMessage(E_SYSTEM));
 
        result r = __pPublicSearchBarEvent->AddListener(listener);
        SysTryReturnResult(NID_UI_CTRL, r != E_OBJ_ALREADY_EXIST, E_SYSTEM,
@@ -1155,8 +1200,8 @@ _SearchBarImpl::RemoveSearchBarEventListener(const ISearchBarEventListener& list
 {
        ClearLastResult();
 
-       SysTryReturn(NID_UI_CTRL, __pPublicSearchBarEvent, E_SYSTEM, E_SYSTEM,
-                    "[E_SYSTEM] A system error has occurred.");
+       SysTryReturn(NID_UI_CTRL, __pPublicSearchBarEvent != null, E_SYSTEM, E_SYSTEM,
+                        "[%s] A system error has occurred.", GetErrorMessage(E_SYSTEM));
 
        result r = __pPublicSearchBarEvent->RemoveListener(listener);
        SysTryReturnResult(NID_UI_CTRL, r != E_OBJ_NOT_FOUND, E_SYSTEM,
@@ -1210,7 +1255,7 @@ _SearchBarImpl::OnActionPerformed(const _Control& source, int actionId)
        {
                IEventArg* pEventArg = _PublicActionEvent::CreateActionEventArgN(actionId);
                result r = GetLastResult();
-               SysTryReturnVoidResult(NID_UI_CTRL, pEventArg, r, "[%s] Propagating.", GetErrorMessage(r));
+               SysTryReturnVoidResult(NID_UI_CTRL, pEventArg != null, r, "[%s] Propagating.", GetErrorMessage(r));
 
                __pPublicActionEvent->Fire(*pEventArg);
        }
@@ -1227,7 +1272,7 @@ _SearchBarImpl::OnKeypadWillOpen(void)
                IEventArg* pEventArg = _PublicKeypadEvent::CreateKeypadEventArgN(
                        GetPublic(), KEYPAD_ACTION_SEARCH, KEYPAD_EVENT_STATUS_CREATED);
                result r = GetLastResult();
-               SysTryReturnVoidResult(NID_UI_CTRL, pEventArg, r, "[%s] Propagating.", GetErrorMessage(r));
+               SysTryReturnVoidResult(NID_UI_CTRL, pEventArg != null, r, "[%s] Propagating.", GetErrorMessage(r));
 
                __pPublicKeypadEvent->Fire(*pEventArg);
        }
@@ -1244,7 +1289,7 @@ _SearchBarImpl::OnKeypadOpened(void)
                IEventArg* pEventArg = _PublicKeypadEvent::CreateKeypadEventArgN(
                        GetPublic(), KEYPAD_ACTION_SEARCH, KEYPAD_EVENT_STATUS_OPEN);
                result r = GetLastResult();
-               SysTryReturnVoidResult(NID_UI_CTRL, pEventArg, r, "[%s] Propagating.", GetErrorMessage(r));
+               SysTryReturnVoidResult(NID_UI_CTRL, pEventArg != null, r, "[%s] Propagating.", GetErrorMessage(r));
 
                __pPublicKeypadEvent->Fire(*pEventArg);
        }
@@ -1262,7 +1307,7 @@ _SearchBarImpl::OnKeypadClosed(void)
                IEventArg* pEventArg = _PublicKeypadEvent::CreateKeypadEventArgN(
                        GetPublic(), KEYPAD_ACTION_SEARCH, KEYPAD_EVENT_STATUS_CLOSE);
                result r = GetLastResult();
-               SysTryReturnVoidResult(NID_UI_CTRL, pEventArg, r, "[%s] Propagating.", GetErrorMessage(r));
+               SysTryReturnVoidResult(NID_UI_CTRL, pEventArg != null, r, "[%s] Propagating.", GetErrorMessage(r));
 
                __pPublicKeypadEvent->Fire(*pEventArg);
        }
@@ -1279,7 +1324,7 @@ _SearchBarImpl::OnKeypadBoundsChanged(void)
                IEventArg* pEventArg = _PublicKeypadEvent::CreateKeypadEventArgN(
                        GetPublic(), KEYPAD_ACTION_SEARCH, KEYPAD_EVENT_STATUS_BOUNDS_CHANGED);
                result r = GetLastResult();
-               SysTryReturnVoidResult(NID_UI_CTRL, pEventArg, r, "[%s] Propagating.", GetErrorMessage(r));
+               SysTryReturnVoidResult(NID_UI_CTRL, pEventArg != null, r, "[%s] Propagating.", GetErrorMessage(r));
 
                __pPublicKeypadEvent->Fire(*pEventArg);
        }
@@ -1298,7 +1343,7 @@ _SearchBarImpl::OnKeypadActionPerformed(CoreKeypadAction keypadAction)
                IEventArg* pEventArg = _PublicKeypadEvent::CreateKeypadEventArgN(
                        GetPublic(), publicKeypadAction, KEYPAD_EVENT_STATUS_ENTERACTION);
                result r = GetLastResult();
-               SysTryReturnVoidResult(NID_UI_CTRL, pEventArg, r, "[%s] Propagating.", GetErrorMessage(r));
+               SysTryReturnVoidResult(NID_UI_CTRL, pEventArg != null, r, "[%s] Propagating.", GetErrorMessage(r));
 
                __pPublicKeypadEvent->Fire(*pEventArg);
        }
@@ -1314,7 +1359,7 @@ _SearchBarImpl::OnTextBlockSelected(_Control& source, int start, int end)
        {
                IEventArg* pEventArg = _PublicTextBlockEvent::CreateTextBlockEventArgN(start, end);
                result r = GetLastResult();
-               SysTryReturnVoidResult(NID_UI_CTRL, pEventArg, r, "[%s] Propagating.", GetErrorMessage(r));
+               SysTryReturnVoidResult(NID_UI_CTRL, pEventArg != null, r, "[%s] Propagating.", GetErrorMessage(r));
 
                __pPublicTextBlockEvent->Fire(*pEventArg);
        }
@@ -1330,7 +1375,7 @@ _SearchBarImpl::OnTextValueChanged(const _Control& source)
        {
                IEventArg* pEventArg = _PublicTextEvent::CreateTextEventArgN(TEXT_EVENT_CHANGED);
                result r = GetLastResult();
-               SysTryReturnVoidResult(NID_UI_CTRL, pEventArg, r, "[%s] Propagating.", GetErrorMessage(r));
+               SysTryReturnVoidResult(NID_UI_CTRL, pEventArg != null, r, "[%s] Propagating.", GetErrorMessage(r));
 
                __pPublicTextEvent->Fire(*pEventArg);
        }
@@ -1346,7 +1391,7 @@ _SearchBarImpl::OnTextValueChangeCanceled(const _Control& source)
        {
                IEventArg* pEventArg = _PublicTextEvent::CreateTextEventArgN(TEXT_EVENT_CANCELED);
                result r = GetLastResult();
-               SysTryReturnVoidResult(NID_UI_CTRL, pEventArg, r, "[%s] Propagating.", GetErrorMessage(r));
+               SysTryReturnVoidResult(NID_UI_CTRL, pEventArg != null, r, "[%s] Propagating.", GetErrorMessage(r));
 
                __pPublicTextEvent->Fire(*pEventArg);
        }
@@ -1375,7 +1420,7 @@ _SearchBarImpl::OnSearchBarModeChanged(_SearchBar& source, SearchBarMode mode)
        {
                IEventArg* pEventArg = _PublicSearchBarEvent::CreateSearchBarEventArgN(SEARCH_BAR_EVENT_MODE_CHANGE);
                result r = GetLastResult();
-               SysTryReturnVoidResult(NID_UI_CTRL, pEventArg, r, "[%s] Propagating.", GetErrorMessage(r));
+               SysTryReturnVoidResult(NID_UI_CTRL, pEventArg != null, r, "[%s] Propagating.", GetErrorMessage(r));
 
                __pPublicSearchBarEvent->Fire(*pEventArg);
        }
@@ -1385,11 +1430,11 @@ _SearchBarImpl::OnSearchBarModeChanged(_SearchBar& source, SearchBarMode mode)
 void
 _SearchBarImpl::OnLanguageChanged(LanguageCode oldLanguage, LanguageCode newLanguage)
 {
-       if (__pPublicLanguageEvent)
+       if (__pPublicLanguageEvent != null)
        {
                IEventArg* pKLanguageEventArg = _PublicLanguageEvent::CreateLanguageEventArgN(GetPublic(), oldLanguage, newLanguage);
                result r = GetLastResult();
-               SysTryReturnVoidResult(NID_UI_CTRL, pKLanguageEventArg, r, "[%s] Propagating.", GetErrorMessage(r));
+               SysTryReturnVoidResult(NID_UI_CTRL, pKLanguageEventArg != null, r, "[%s] Propagating.", GetErrorMessage(r));
 
                __pPublicLanguageEvent->Fire(*pKLanguageEventArg);
        }
@@ -1400,6 +1445,160 @@ _SearchBarImpl::OnLanguageChanged(LanguageCode oldLanguage, LanguageCode newLang
        return;
 }
 
+void
+_SearchBarImpl::OnFocusEventListenerAdded(IFocusEventListener& listener)
+{
+       ClearLastResult();
+       SysTryReturnVoidResult(NID_UI,
+                               __pPublicFocusEventListeners->Add(const_cast <IFocusEventListener*>(&listener)) == E_SUCCESS, E_SYSTEM,
+                               "[E_SYSTEM] A system error has occurred. Failed to add listener.");
+}
+
+void
+_SearchBarImpl::OnFocusEventListenerRemoved(IFocusEventListener& listener)
+{
+       ClearLastResult();
+       SysTryReturnVoidResult(NID_UI,
+                               __pPublicFocusEventListeners->Remove(&listener) == E_SUCCESS, E_SYSTEM,
+                               "[E_SYSTEM] A system error has occurred. Failed to remove listener.");
+}
+
+void
+_SearchBarImpl::OnFocusGained(const Tizen::Ui::Control& source)
+{
+       if (!__pSearchBar->IsFocusCallbackToBeFired())
+       {
+               return;
+       }
+
+       IEnumeratorT<IEventListener*>* pEnumerator = __pPublicFocusEventListeners->GetEnumeratorN();
+
+       if (pEnumerator != null)
+       {
+               while (pEnumerator->MoveNext() == E_SUCCESS)
+               {
+                       IEventListener* pListener = null;
+                       pEnumerator->GetCurrent(pListener);
+
+                       IFocusEventListener* pFocusEventListener = dynamic_cast <IFocusEventListener*>(pListener);
+
+                       if (pFocusEventListener != null)
+                       {
+                               pFocusEventListener->OnFocusGained(GetPublic());
+                       }
+               }
+
+               delete pEnumerator;
+       }
+
+       return;
+}
+
+void
+_SearchBarImpl::OnFocusLost(const Tizen::Ui::Control& source)
+{
+       if (!__pSearchBar->IsFocusCallbackToBeFired())
+       {
+               return;
+       }
+
+       IEnumeratorT<IEventListener*>* pEnumerator = __pPublicFocusEventListeners->GetEnumeratorN();
+       if (pEnumerator != null)
+       {
+               while (pEnumerator->MoveNext() == E_SUCCESS)
+               {
+                       IEventListener* pListener = null;
+                       pEnumerator->GetCurrent(pListener);
+
+                       IFocusEventListener* pFocusEventListener = dynamic_cast <IFocusEventListener*>(pListener);
+
+                       if (pFocusEventListener != null)
+                       {
+                               pFocusEventListener->OnFocusLost(GetPublic());
+                       }
+               }
+
+               delete pEnumerator;
+       }
+
+       return;
+}
+
+void
+_SearchBarImpl::OnKeyPressed(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode)
+{
+       IEnumeratorT<IEventListener*>* pEnumerator = GetKeyEventListener()->GetEnumeratorN();
+       if (pEnumerator != null)
+       {
+               while (pEnumerator->MoveNext() == E_SUCCESS)
+               {
+                       IEventListener* pListener = null;
+                       pEnumerator->GetCurrent(pListener);
+
+                       IKeyEventListener* pKeyEventListener = dynamic_cast <IKeyEventListener*>(pListener);
+
+                       if (pKeyEventListener != null)
+                       {
+                               pKeyEventListener->OnKeyPressed(GetPublic(), keyCode);
+                       }
+               }
+
+               delete pEnumerator;
+       }
+
+       return;
+}
+
+void
+_SearchBarImpl::OnKeyReleased(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode)
+{
+       IEnumeratorT<IEventListener*>* pEnumerator = GetKeyEventListener()->GetEnumeratorN();
+       if (pEnumerator != null)
+       {
+               while (pEnumerator->MoveNext() == E_SUCCESS)
+               {
+                       IEventListener* pListener = null;
+                       pEnumerator->GetCurrent(pListener);
+
+                       IKeyEventListener* pKeyEventListener = dynamic_cast <IKeyEventListener*>(pListener);
+
+                       if (pKeyEventListener != null)
+                       {
+                               pKeyEventListener->OnKeyReleased(GetPublic(), keyCode);
+                       }
+               }
+
+               delete pEnumerator;
+       }
+
+       return;
+}
+
+void
+_SearchBarImpl::OnKeyLongPressed(const Tizen::Ui::Control& source, Tizen::Ui::KeyCode keyCode)
+{
+       IEnumeratorT<IEventListener*>* pEnumerator = GetKeyEventListener()->GetEnumeratorN();
+       if (pEnumerator != null)
+       {
+               while (pEnumerator->MoveNext() == E_SUCCESS)
+               {
+                       IEventListener* pListener = null;
+                       pEnumerator->GetCurrent(pListener);
+
+                       IKeyEventListener* pKeyEventListener = dynamic_cast <IKeyEventListener*>(pListener);
+
+                       if (pKeyEventListener != null)
+                       {
+                               pKeyEventListener->OnKeyLongPressed(GetPublic(), keyCode);
+                       }
+               }
+
+               delete pEnumerator;
+       }
+
+       return;
+}
+
 KeypadAction
 _SearchBarImpl::ConvertKeypadAction(CoreKeypadAction keypadAction) const
 {
@@ -1449,6 +1648,18 @@ _SearchBarImpl::ConvertKeypadAction(CoreKeypadAction keypadAction) const
        return publicKeypadAction;
 }
 
+_EditFieldImpl*
+_SearchBarImpl::GetEditFieldImpl(void) const
+{
+       return __pEditFieldImpl;
+}
+
+_ButtonImpl*
+_SearchBarImpl::GetButtonImpl(void) const
+{
+       return __pButtonImpl;
+}
+
 class _SearchBarMaker
        : public _UiBuilderControlMaker
 {
@@ -1492,7 +1703,7 @@ protected:
                        return null;
                }
 
-               pSearchBar = new (std::nothrow) SearchBar;
+               pSearchBar = new (std::nothrow) SearchBar();
                if (pSearchBar == null)
                {
                        return null;
@@ -1579,9 +1790,9 @@ protected:
 
                if (pControl->GetElement("searchFieldTextSize", elementString))
                {
-                       Base::Float::Parse(elementString, searchFieldTextSize);
+                       searchFieldTextSize = _LocalizedNumParser::ToDouble(elementString, "C");
                        _ICoordinateSystemTransformer* pTransform = GetTransformer();
-                       if (pTransform)
+                       if (pTransform != null)
                        {
                                searchFieldTextSize = pTransform->Transform(searchFieldTextSize);
                        }
@@ -1741,10 +1952,10 @@ protected:
                if (pControl->GetElement(L"accessibilityHint", elementString))
                {
                        AccessibilityContainer* pContainer = pSearchBar->GetAccessibilityContainer();
-                       if (pContainer)
+                       if (pContainer != null)
                        {
                                AccessibilityElement* pElement = pContainer->GetElement(L"EditText");
-                               if (pElement)
+                               if (pElement != null)
                                {
                                        pElement->SetHint(elementString);
                                }