2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 // Licensed under the Flora License, Version 1.1 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://floralicense.org/license/
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an AS IS BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
18 * @file CtContactSelectorForm.cpp
19 * @brief This is the implementation file for the ContactSelectorForm class.
24 #include "CtContactsApp.h"
25 #include "CtContactSelectorForm.h"
26 #include "CtContactListItem.h"
27 #include "CtContactListPresentationModel.h"
28 #include "CtResourceManager.h"
29 #include "CtSceneRegister.h"
30 #include "CtSearchListEventListener.h"
31 #include "CtSearchListItem.h"
34 using namespace Tizen::App;
35 using namespace Tizen::Base;
36 using namespace Tizen::Base::Collection;
37 using namespace Tizen::Graphics;
38 using namespace Tizen::Ui;
39 using namespace Tizen::Ui::Controls;
40 using namespace Tizen::Ui::Scenes;
41 using namespace Tizen::Social;
43 static const int IDA_FOOTER_DONE = 0;
44 static const int IDA_FOOTER_CANCEL = 1;
45 static const int IDA_CHECK_SELECT_ALL_CHECKED = 10;
46 static const int IDA_CHECK_SELECT_ALL_UNCHECKED = 11;
48 static const int H_SEARCHBAR = 86;
49 static const int H_SELECT_ALL = 112;
50 static const int H_GROUP_ITEM = 76;
51 static const int H_BOTTOM_LABEL = 48;
52 static const int X_LIST_ITEM_TEXT_MARGIN = 32;
53 static const int H_CHECK_LABEL = 72;
54 static const int Y_CHECK_LABEL = 20;
56 static const int FONT_SIZE_BOTTOM_LABEL = 32;
58 static const unsigned int COLOR_BOTTOM_LABEL_BG = Color32<68, 68, 68>::Value;
59 static const unsigned int COLOR_BOTTOM_LABEL_FONT = Color32<255, 255, 255>::Value;
60 static const unsigned int COLOR_CHECK_LABEL_BG = Color32<220, 218, 211>::Value;
62 ContactSelectorForm::ContactSelectorForm(void)
63 : __pPresentationModel(null)
66 , __pSearchListView(null)
68 , __pBottomLabel(null)
70 , __pSearchListEvent(null)
74 ContactSelectorForm::~ContactSelectorForm(void)
79 ContactSelectorForm::Initialize(void)
81 Construct(FORM_STYLE_NORMAL | FORM_STYLE_INDICATOR | FORM_STYLE_HEADER | FORM_STYLE_FOOTER);
85 ContactSelectorForm::OnInitializing(void)
87 Header* pHeader = GetHeader();
88 pHeader->SetTitleText(ResourceManager::GetString(L"IDS_PB_HEADER_SELECT_CONTACTS"));
90 SetFormBackEventListener(this);
94 __pPresentationModel = ContactListPresentationModel::GetInstance();
96 __pCheckLabel = new (std::nothrow) Label();
97 __pCheckLabel->Construct(Rectangle(0, H_SEARCHBAR + Y_CHECK_LABEL, GetClientAreaBounds().width, H_CHECK_LABEL), L"");
98 __pCheckLabel->SetBackgroundColor(COLOR_CHECK_LABEL_BG);
99 AddControl(__pCheckLabel);
101 __pSelectAll = new (std::nothrow) CheckButton();
102 __pSelectAll->Construct(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, H_SELECT_ALL), CHECK_BUTTON_STYLE_MARK, BACKGROUND_STYLE_NONE);
103 __pSelectAll->SetText(ResourceManager::GetString(L"IDS_COM_BODY_SELECT_ALL"));
104 __pSelectAll->SetActionId(IDA_CHECK_SELECT_ALL_CHECKED, IDA_CHECK_SELECT_ALL_UNCHECKED);
105 __pSelectAll->AddActionEventListener(*this);
106 AddControl(__pSelectAll);
108 __pListView = new (std::nothrow) GroupedListView();
109 __pListView->Construct(Rectangle(0, H_SELECT_ALL + H_SEARCHBAR, GetClientAreaBounds().width,
110 GetClientAreaBounds().height - (H_SEARCHBAR + H_SELECT_ALL + H_BOTTOM_LABEL)), GROUPED_LIST_VIEW_STYLE_INDEXED, true, true);
111 __pListView->SetItemProvider(*this);
112 __pListView->SetTextOfEmptyList(ResourceManager::GetString(L"IDS_PB_BODY_NO_CONTACTS"));
113 __pListView->AddFastScrollListener(*this);
114 __pListView->AddGroupedListViewItemEventListener(*this);
115 __pListView->AddTouchEventListener(*this);
116 AddControl(__pListView);
118 __pSearchBar = new (std::nothrow) SearchBar();
119 __pSearchBar->Construct(Rectangle(0, 0, GetClientAreaBounds().width, H_SEARCHBAR));
120 __pSearchBar->SetGuideText(ResourceManager::GetString(L"IDS_COM_BODY_SEARCH"));
121 __pSearchBar->AddSearchBarEventListener(*this);
122 __pSearchBar->AddTextEventListener(*this);
123 __pSearchBar->AddKeypadEventListener(*this);
124 __pSearchBar->SetContentAreaSize(Dimension(0, 0));
126 __pSearchListEvent = new (std::nothrow) SearchListEventListener(LIST_ANNEX_STYLE_MARK, __pPresentationModel);
127 AddControl(__pSearchBar);
129 __pSearchListView = new (std::nothrow) GroupedListView();
130 __pSearchListView->Construct(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR - H_BOTTOM_LABEL), GROUPED_LIST_VIEW_STYLE_INDEXED, true, false);
131 __pSearchListView->SetItemProvider(*__pSearchListEvent);
132 __pSearchListView->SetTextOfEmptyList(ResourceManager::GetString(L"IDS_PB_BODY_NO_CONTACTS"));
133 __pSearchListView->AddGroupedListViewItemEventListener(*this);
134 __pSearchListView->AddTouchEventListener(*this);
135 __pSearchListView->SetShowState(false);
136 AddControl(__pSearchListView);
138 __pBottomLabel = new (std::nothrow) Label();
139 __pBottomLabel->Construct(FloatRectangle(0, GetClientAreaBoundsF().height - H_BOTTOM_LABEL, GetClientAreaBoundsF().width, H_BOTTOM_LABEL),
140 ResourceManager::GetString(L"IDS_COM_POP_SELECTED") + INITIAL_SELECTED_COUNT);
141 __pBottomLabel->SetBackgroundColor(Color(COLOR_BOTTOM_LABEL_BG));
142 __pBottomLabel->SetTextColor(Color(COLOR_BOTTOM_LABEL_FONT));
143 __pBottomLabel->SetTextConfig(FONT_SIZE_BOTTOM_LABEL, LABEL_TEXT_STYLE_BOLD);
144 __pBottomLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
145 __pBottomLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
146 AddControl(__pBottomLabel);
152 ContactSelectorForm::OnTerminating(void)
154 result r = E_SUCCESS;
156 if (__pPresentationModel != null)
158 __pPresentationModel->RemoveContactChangeListener(*this);
161 if (__pSearchListEvent != null)
163 delete __pSearchListEvent;
169 ContactSelectorForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
171 SceneManager *pSceneManager = SceneManager::GetInstance();
172 pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
176 ContactSelectorForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
178 result r = E_SUCCESS;
180 SceneManager* pSceneManager = SceneManager::GetInstance();
184 case IDA_CHECK_SELECT_ALL_CHECKED:
186 for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
188 for (int itemIndex = 0; itemIndex < __pListView->GetItemCountAt(groupIndex); itemIndex++)
190 __pListView->SetItemChecked(groupIndex, itemIndex, true);
193 __pListView->Invalidate(true);
197 case IDA_CHECK_SELECT_ALL_UNCHECKED:
199 for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
201 for (int itemIndex = 0; itemIndex < __pListView->GetItemCountAt(groupIndex); itemIndex++)
203 __pListView->SetItemChecked(groupIndex, itemIndex, false);
206 __pListView->Invalidate(true);
210 case IDA_FOOTER_DONE:
212 ArrayList* contactIdList = new (std::nothrow) ArrayList();
213 contactIdList->Construct();
215 for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
217 for (int itemIndex = 0; itemIndex < __pListView->GetItemCountAt(groupIndex); itemIndex++)
219 bool isChecked = false;
220 isChecked = __pListView->IsItemChecked(groupIndex, itemIndex);
221 if (isChecked == true)
223 RecordId contactId = __pPresentationModel->GetContactId(groupIndex, itemIndex);
224 contactIdList->Add(*(new (std::nothrow) Integer(contactId)));
229 pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT), contactIdList);
232 case IDA_FOOTER_CANCEL:
234 r = pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
235 TryReturnVoid(r == E_SUCCESS, "[%s] Unable to go backward", GetErrorMessage(r));
244 ContactSelectorForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
248 __pPresentationModel->InitializeContactList(pArgs);
250 String fastScrollIndex;
251 for (int i = 0; i < __pPresentationModel->GetContactCount(); i++)
253 fastScrollIndex.Append(__pPresentationModel->GetKey(i));
256 __pListView->SetFastScrollIndex(fastScrollIndex, false);
258 Footer* pFooter = GetFooter();
259 pFooter->SetItemEnabled(1, false);
263 __pPresentationModel->AddContactChangeListener(*this);
267 ContactSelectorForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId)
269 __pPresentationModel->RemoveContactChangeListener(*this);
273 ContactSelectorForm::OnSearchBarModeChanged(Tizen::Ui::Controls::SearchBar& source, Tizen::Ui::Controls::SearchBarMode mode)
275 if (mode == SEARCH_BAR_MODE_NORMAL)
277 int count = __pPresentationModel->GetSearchedContactCount();
278 bool isChecked = true;
280 for (int i = 0; i < count; i++)
285 __pPresentationModel->GetItemMainIndex(i, groupIndex, itemIndex);
287 __pListView->SetItemChecked(groupIndex, itemIndex, __pSearchListView->IsItemChecked(0, i));
290 for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount() && isChecked == true; groupIndex++)
292 int itemCount = __pListView->GetItemCountAt(groupIndex);
293 for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
295 if (__pListView->IsItemChecked(groupIndex, itemIndex) == false)
303 __pListView->SetShowState(true);
304 __pListView->Invalidate(true);
305 __pCheckLabel->SetShowState(true);
306 __pSelectAll->SetShowState(true);
307 __pSelectAll->SetSelected(isChecked);
308 __pSearchListView->SetShowState(false);
309 __pPresentationModel->ResetSearchedContactList();
310 __pSearchListView->UpdateList();
317 ContactSelectorForm::OnTextValueChanged(const Tizen::Ui::Control& source)
319 String searchText = __pSearchBar->GetText();
322 __pPresentationModel->SetSearchText(searchText, SEARCH_TYPE_NORMAL);
324 if (searchText.GetLength() != 0)
326 __pCheckLabel->SetShowState(false);
327 __pSelectAll->SetShowState(false);
328 __pListView->SetShowState(false);
329 __pSearchListView->SetShowState(true);
331 __pSearchListView->UpdateList();
333 int count = __pPresentationModel->GetSearchedContactCount();
335 for (int index = 0; index < count; index++)
340 __pPresentationModel->GetItemMainIndex(index, groupIndex, itemIndex);
341 __pSearchListView->SetItemChecked(0, index, __pListView->IsItemChecked(groupIndex, itemIndex));
344 __pSearchListView->Invalidate(true);
348 __pCheckLabel->SetShowState(true);
349 __pSelectAll->SetShowState(true);
350 __pListView->SetShowState(true);
351 __pSearchListView->SetShowState(false);
353 int count = __pPresentationModel->GetSearchedContactCount();
354 bool isChecked = true;
356 for (int index = 0; index < count; index++)
361 __pPresentationModel->GetItemMainIndex(index, groupIndex, itemIndex);
362 __pListView->SetItemChecked(groupIndex, itemIndex, __pSearchListView->IsItemChecked(0, index));
365 for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount() && isChecked == true; groupIndex++)
367 int itemCount = __pListView->GetItemCountAt(groupIndex);
368 for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
370 if (__pListView->IsItemChecked(groupIndex, itemIndex) == false)
378 __pSelectAll->SetSelected(isChecked);
379 __pListView->Invalidate(true);
385 ContactSelectorForm::OnTextValueChangeCanceled(const Tizen::Ui::Control& source)
390 ContactSelectorForm::GetGroupCount(void)
392 return __pPresentationModel->GetKeyCount();
396 ContactSelectorForm::GetItemCount(int groupIndex)
398 int contactCount = __pPresentationModel->GetContactCount(groupIndex);
399 if (contactCount == 0)
407 Tizen::Ui::Controls::ListItemBase*
408 ContactSelectorForm::CreateItem(int groupIndex, int itemIndex, int itemWidth)
411 Bitmap* pThumbnail = null;
413 ContactsApp *pContactsApp = static_cast<ContactsApp*>(ContactsApp::GetInstance());
414 CustomItem* pItem = new (std::nothrow) CustomItem();
415 pItem->Construct(Dimension(itemWidth, pContactsApp->GetListItemSingleLineHeight()), LIST_ANNEX_STYLE_MARK);
417 __pPresentationModel->GetContactItemInfoN(groupIndex, itemIndex, name, pThumbnail);
418 ContactListItem* pCustomElement = new (std::nothrow) ContactListItem(name, pThumbnail);
419 pItem->AddElement(Rectangle(0, 0, itemWidth - (ListItemBase::GetAnnexWidth(LIST_ANNEX_STYLE_MARK) + X_LIST_ITEM_TEXT_MARGIN), pContactsApp->GetListItemSingleLineHeight()), 0, *(static_cast<ICustomElement *>(pCustomElement)));
424 Tizen::Ui::Controls::GroupItem*
425 ContactSelectorForm::CreateGroupItem(int groupIndex, int itemWidth)
427 GroupItem* pItem = new (std::nothrow) GroupItem();
428 pItem->Construct(Dimension(itemWidth, H_GROUP_ITEM));
429 pItem->SetElement(__pPresentationModel->GetKey(groupIndex), null);
435 ContactSelectorForm::DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth)
437 CustomItem* pCustomItem = static_cast<CustomItem *>(pItem);
438 pCustomItem->RemoveAllElements();
447 ContactSelectorForm::DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::GroupItem* pItem, int itemWidth)
456 ContactSelectorForm::OnGroupedListViewContextItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListContextItemStatus state)
461 ContactSelectorForm::OnGroupedListViewItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListItemStatus state)
463 if (&listView == __pListView)
465 if (listView.IsItemChecked(groupIndex, itemIndex) == true)
467 bool isChecked = true;
468 for (int groupIndex = 0; groupIndex < listView.GetGroupCount() && isChecked == true; groupIndex++)
470 for (int itemIndex = 0; itemIndex < listView.GetItemCountAt(groupIndex); itemIndex++)
472 if (listView.IsItemChecked(groupIndex, itemIndex) == false)
480 __pSelectAll->SetSelected(isChecked);
484 __pSelectAll->SetSelected(false);
487 else if (&listView == __pSearchListView)
489 int count = __pPresentationModel->GetSearchedContactCount();
491 for (int i = 0; i < count; i++)
496 __pPresentationModel->GetItemMainIndex(i, groupIndex, itemIndex);
498 __pListView->SetItemChecked(groupIndex, itemIndex, __pSearchListView->IsItemChecked(0, i));
506 ContactSelectorForm::OnGroupedListViewItemSwept(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, Tizen::Ui::Controls::SweepDirection direction)
511 ContactSelectorForm::OnContactsChanged(void)
513 result r = E_SUCCESS;
515 SceneManager* pSceneManager = SceneManager::GetInstance();
517 r = pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
518 TryReturnVoid(r == E_SUCCESS, "[%s] Unable to go backward", GetErrorMessage(r));
522 ContactSelectorForm::OnCategoriesChanged(void)
527 ContactSelectorForm::CreateFooterButton()
529 result r = E_SUCCESS;
531 Footer* pFooter = GetFooter();
532 pFooter->RemoveAllItems();
533 pFooter->AddActionEventListener(*this);
535 FooterItem footerItemCancel;
536 FooterItem footerItemDone;
538 footerItemCancel.Construct(IDA_FOOTER_CANCEL);
539 footerItemDone.Construct(IDA_FOOTER_DONE);
541 footerItemCancel.SetText(ResourceManager::GetString(L"IDS_PB_SK_CANCEL"));
542 footerItemDone.SetText(ResourceManager::GetString(L"IDS_COM_SK_DONE"));
544 pFooter->AddItem(footerItemCancel);
545 pFooter->AddItem(footerItemDone);
551 ContactSelectorForm::UpdateBottomLabel(void)
553 int selectedCount = 0;
554 for (int groupIndex = 0; groupIndex < __pListView->GetGroupCount(); groupIndex++)
556 for (int itemIndex = 0; itemIndex < __pListView->GetItemCountAt(groupIndex); itemIndex++)
558 if (__pListView->IsItemChecked(groupIndex, itemIndex) == true)
565 String string = ResourceManager::GetString(L"IDS_COM_POP_SELECTED");
566 string.Append(L" (");
567 string.Append(selectedCount);
569 __pBottomLabel->SetText(string);
570 __pBottomLabel->SetPosition(FloatPoint(0, GetClientAreaBoundsF().height - H_BOTTOM_LABEL));
571 __pBottomLabel->Invalidate(false);
573 Footer* pFooter = GetFooter();
574 if (selectedCount > 0 && __pBottomLabel->GetShowState() == false)
576 __pBottomLabel->SetShowState(true);
577 __pListView->SetSize(__pListView->GetSize().width, __pListView->GetSize().height - H_BOTTOM_LABEL);
578 __pSearchListView->SetSize(__pSearchListView->GetSize().width, __pSearchListView->GetSize().height - H_BOTTOM_LABEL);
579 pFooter->SetItemEnabled(1, true);
581 else if (selectedCount == 0 && __pBottomLabel->GetShowState() == true)
583 __pBottomLabel->SetShowState(false);
584 __pListView->SetSize(__pListView->GetSize().width, __pListView->GetSize().height + H_BOTTOM_LABEL);
585 __pSearchListView->SetSize(__pSearchListView->GetSize().width, __pSearchListView->GetSize().height + H_BOTTOM_LABEL);
586 pFooter->SetItemEnabled(1, false);
589 pFooter->Invalidate(true);
593 ContactSelectorForm::OnFastScrollIndexSelected(Tizen::Ui::Control& source, Tizen::Base::String& index)
595 __pListView->ScrollToItem(__pPresentationModel->GetKeyIndex(index), -1);
596 __pListView->Invalidate(false);
600 ContactSelectorForm::OnKeypadWillOpen(Tizen::Ui::Control& source)
605 ContactSelectorForm::OnKeypadOpened(Tizen::Ui::Control& source)
607 if (__pBottomLabel->GetShowState() == true)
609 __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR - H_BOTTOM_LABEL));
610 __pBottomLabel->SetPosition(FloatPoint(0, GetClientAreaBoundsF().height - H_BOTTOM_LABEL));
611 __pBottomLabel->Invalidate(true);
615 __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR));
620 ContactSelectorForm::OnKeypadClosed(Tizen::Ui::Control& source)
622 if (__pBottomLabel->GetShowState() == true)
624 __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR - H_BOTTOM_LABEL));
625 __pBottomLabel->SetPosition(FloatPoint(0, GetClientAreaBoundsF().height - H_BOTTOM_LABEL));
626 __pBottomLabel->Invalidate(true);
632 __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR));
637 ContactSelectorForm::OnKeypadBoundsChanged(Tizen::Ui::Control& source)
639 if (__pBottomLabel->GetShowState() == true)
641 __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR - H_BOTTOM_LABEL));
642 __pBottomLabel->SetPosition(FloatPoint(0, GetClientAreaBoundsF().height - H_BOTTOM_LABEL));
643 __pBottomLabel->Invalidate(true);
647 __pSearchListView->SetBounds(Rectangle(0, H_SEARCHBAR, GetClientAreaBounds().width, GetClientAreaBounds().height - H_SEARCHBAR));
652 ContactSelectorForm::OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction)
654 if (keypadAction == KEYPAD_ACTION_SEARCH)
656 __pSearchBar->HideKeypad();
661 ContactSelectorForm::OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo & touchInfo)
663 GroupedListView* pList = static_cast<GroupedListView*>(&const_cast<Control&>(source));
671 ContactSelectorForm::OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
676 ContactSelectorForm::OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
681 ContactSelectorForm::OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
686 ContactSelectorForm::OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)