modify license, permission and remove ^M char
[platform/framework/native/uifw.git] / src / ui / FUi_TouchEventManagerImpl.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  * @file                FUi_TouchEventManagerImpl.cpp
19  * @brief               This is the implementation file for %_TouchEventManagerImpl class
20  * @version     2.0
21  *
22  * This file contains the implementation of %_TouchEventManagerImpl class.
23  *
24  */
25
26 #include <FBaseResult.h>
27 #include <FBaseColIEnumeratorT.h>
28 #include "FUi_TouchEventArg.h"
29 #include "FUi_TouchEventManagerImpl.h"
30 #include "FUi_TouchManager.h"
31
32 using namespace Tizen::Base::Collection;
33
34 namespace Tizen { namespace Ui
35 {
36
37 _TouchEventManagerImpl::_TouchEventManagerImpl(void)
38 {
39 }
40
41 _TouchEventManagerImpl::~_TouchEventManagerImpl(void)
42 {
43 }
44
45 IListT<TouchEventInfo*>*
46 _TouchEventManagerImpl::GetTouchInfoListN(void) const
47 {
48         _TouchManager* pTouchManager = _TouchManager::GetInstance();
49         SysTryReturn(NID_UI, pTouchManager, null, E_SYSTEM, "[E_SYSTEM] System error occurred.");
50
51         LinkedListT<TouchEventInfo*>* pTouchEventInfoList = new (std::nothrow) LinkedListT<TouchEventInfo*>;
52         SysTryReturn(NID_UI, pTouchEventInfoList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
53
54         Tizen::Base::Collection::IListT<_FingerInfo*>* pFingerInfoList = pTouchManager->GetMultiFingerInfoListN();
55         SysTryCatch(NID_UI, pFingerInfoList, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
56
57         for (int i = 0; i < pFingerInfoList->GetCount(); i++)
58         {
59                 _FingerInfo* pFingerInfo = null;
60                 pFingerInfoList->GetAt(i, pFingerInfo);
61
62                 if (pFingerInfo == null)
63                 {
64                         continue;
65                 }
66
67                 if (pFingerInfo->GetStatus() == _TOUCH_PRESSED || pFingerInfo->GetStatus() == _TOUCH_MOVED || pFingerInfo->GetStatus() == _TOUCH_CANCELED)
68                 {
69                         TouchEventInfo* pTouchEventInfo = new (std::nothrow) TouchEventInfo;
70                         SysTryCatch(NID_UI, pTouchEventInfo, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
71
72                         _Control* pControl = pTouchManager->GetTouchControlSource();
73                         if (pControl)
74                         {
75                                 _ControlImpl* pImpl = static_cast<_ControlImpl*>(pControl->GetUserData());
76
77                                 _TouchStatus touchStatus = pFingerInfo->GetStatus();
78                                 if (pFingerInfo->GetStatus() != _TOUCH_CANCELED)
79                                 {
80                                         touchStatus = _TOUCH_PRESSED;
81                                 }
82
83                                 _TouchEventArg touchEventArg(pImpl->GetPublic(), touchStatus);
84                                 touchEventArg.SetTouchPosition(pFingerInfo->GetPointId(), pFingerInfo->GetStartPoint().x, pFingerInfo->GetStartPoint().y, pFingerInfo->GetPoint().x, pFingerInfo->GetPoint().y);
85                                 pTouchEventInfo->Construct(touchEventArg);
86
87                                 pTouchEventInfoList->Add(pTouchEventInfo);
88                         }
89                 }
90         }
91
92         delete pFingerInfoList;
93         pFingerInfoList = null;
94
95         return pTouchEventInfoList;
96
97 CATCH:
98         if (pTouchEventInfoList)
99         {
100                 IEnumeratorT<TouchEventInfo*>* pEnumerator  = pTouchEventInfoList->GetEnumeratorN();
101                 if (pEnumerator)
102                 {
103                         while(pEnumerator->MoveNext() == E_SUCCESS)
104                         {
105                                 TouchEventInfo* pTouchEventInfo = null;
106                                 pEnumerator->GetCurrent(pTouchEventInfo);
107                                 if (!pTouchEventInfo)
108                                 {
109                                         continue;
110                                 }
111
112                                 delete pTouchEventInfo;
113                         }
114                         delete pEnumerator;
115                 }
116
117                 pTouchEventInfoList->RemoveAll();;
118                 delete pTouchEventInfoList;
119                 pTouchEventInfoList = null;
120         }
121
122         if (pFingerInfoList)
123         {
124                 delete pFingerInfoList;
125                 pFingerInfoList = null;
126         }
127
128         return null;
129 }
130
131 }} //Tizen::Ui