Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / controls / FUiCtrl_ListItemEvent.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Flora License, Version 1.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://floralicense.org/license/
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_ListItemEvent.cpp
20  * @brief       This is the implementation file for _ListItemEvent class.
21  *
22  * This file contains the implementation of _ListItemEvent class.
23  */
24
25 #include <FUiCtrlIListViewItemEventListener.h>
26 #include <FUiCtrlIGroupedListViewItemEventListener.h>
27 #include <FUiCtrlListView.h>
28 #include <FUiCtrlGroupedListView.h>
29 #include <FBaseSysLog.h>
30 #include "FUiCtrl_ListItemEvent.h"
31 #include "FUiCtrl_ListItemEventArg.h"
32
33 // using namespace
34 using namespace Tizen::Base;
35 using namespace Tizen::Base::Runtime;
36
37 namespace Tizen { namespace Ui { namespace Controls
38 {
39
40 _ListItemEvent::_ListItemEvent(void)
41         : __pSource(null)
42         , __invokeListViewItemCallback(true)
43         , __invokeGroupedListViewItemCallback(true)
44         , __className(CLASSNAME_NONE)
45 {
46         // nothing
47 }
48
49 _ListItemEvent::~_ListItemEvent(void)
50 {
51         // nothing
52 }
53
54 result
55 _ListItemEvent::Construct(Control& source, ListClassName name)
56 {
57         // set event source
58         __pSource = &source;
59         __className = name;
60
61         return E_SUCCESS;
62 }
63
64 Control*
65 _ListItemEvent::GetSource(void) const
66 {
67         return __pSource;
68 }
69
70 ListClassName
71 _ListItemEvent::GetListClassName(void) const
72 {
73         return __className;
74 }
75
76 void
77 _ListItemEvent::FireImpl(IEventListener& listener, const IEventArg& arg)
78 {
79         // cast to _ItemEventArg
80         _ListItemEventArg* pEventArg = dynamic_cast<_ListItemEventArg*>(const_cast<IEventArg*>(&arg));
81         SysTryReturnVoidResult(NID_UI_CTRL, pEventArg != null, E_INVALID_ARG,
82                                 ("[E_INVALID_ARG] event argument is invalid type."));
83
84         int index1 = -1;
85         int index2 = -1;
86         int index3 = -1;
87         int index4 = -1;
88
89         pEventArg->GetEventArgs(index1, index2, index3, index4);
90
91         bool tempInvokeListViewItemCallback = __invokeListViewItemCallback;
92         __invokeListViewItemCallback = true;
93
94         bool tempInvokeGroupedListViewItemCallback = __invokeGroupedListViewItemCallback;
95         __invokeGroupedListViewItemCallback = true;
96
97         if (__className == CLASSNAME_LISTVIEW) // ListView
98         {
99                 IListViewItemEventListener* pItemListener = dynamic_cast<IListViewItemEventListener*>(&listener);
100                 SysTryReturnVoidResult(NID_UI_CTRL, pItemListener != null, E_INVALID_ARG,
101                                 ("[E_INVALID_ARG] invalid listener type."));
102
103                 ListView* pListView = dynamic_cast<ListView*>(GetSource());
104                 SysAssertf(pListView != null, "Not yet constructed. Construct() should be called before use.");
105
106                 if (index2 < 0)
107                 {
108                         index2 = -1;
109                 }
110
111                 switch (pEventArg->GetNotifyType())
112                 {
113                 case NOTIFY_TYPE_SELECTED_ITEM:
114                         if (tempInvokeListViewItemCallback == true)
115                         {
116                                 pItemListener->OnListViewItemStateChanged(*pListView, index1, index2, LIST_ITEM_STATUS_SELECTED);
117                         }
118                         break;
119
120                 case NOTIFY_TYPE_HIGHLIGHED_ITEM:
121                         if (tempInvokeListViewItemCallback == true)
122                         {
123                                 pItemListener->OnListViewItemStateChanged(*pListView, index1, index2, LIST_ITEM_STATUS_HIGHLIGHTED);
124                         }
125                         break;
126
127                 case NOTIFY_TYPE_ANNEX_CHECK:
128                         if (tempInvokeListViewItemCallback == true)
129                         {
130                                 pItemListener->OnListViewItemStateChanged(*pListView, index1, index2, LIST_ITEM_STATUS_CHECKED);
131                         }
132                         break;
133
134                 case NOTIFY_TYPE_ANNEX_UNCHECK:
135                         if (tempInvokeListViewItemCallback == true)
136                         {
137                                 pItemListener->OnListViewItemStateChanged(*pListView, index1, index2, LIST_ITEM_STATUS_UNCHECKED);
138                         }
139                         break;
140
141                 case NOTIFY_TYPE_ANNEX_MORE:
142                         if (tempInvokeListViewItemCallback == true)
143                         {
144                                 pItemListener->OnListViewItemStateChanged(*pListView, index1, index2, LIST_ITEM_STATUS_MORE);
145                         }
146                         break;
147
148                 case NOTIFY_TYPE_SELCTED_CONTEXT_ITEM:
149                         if (tempInvokeListViewItemCallback == true)
150                         {
151                                 pItemListener->OnListViewContextItemStateChanged(*pListView, index1, index2, LIST_CONTEXT_ITEM_STATUS_SELECTED);
152                         }
153                         break;
154
155                 case NOTIFY_TYPE_SWEPT_ITEM:
156                         if (tempInvokeListViewItemCallback == true)
157                         {
158                                 if (index2 == SWEEP_DIRECTION_LEFT)
159                                 {
160                                         pItemListener->OnListViewItemSwept(*pListView, index1, SWEEP_DIRECTION_LEFT);
161                                 }
162                                 else
163                                 {
164                                         pItemListener->OnListViewItemSwept(*pListView, index1, SWEEP_DIRECTION_RIGHT);
165                                 }
166                         }
167                         break;
168
169                 case NOTIFY_TYPE_LONG_PRESSED_ITEM:
170                         pItemListener->OnListViewItemLongPressed(*pListView, index1, index2, __invokeListViewItemCallback);
171                         break;
172
173                 case NOTIFY_TYPE_REORDERED_ITEM:
174                         if (tempInvokeListViewItemCallback == true)
175                         {
176                                 pItemListener->OnListViewItemReordered(*pListView, index1, index2);
177                         }
178                         break;
179
180                 default:
181                         return;
182                 }
183
184         }
185         else if (__className == CLASSNAME_GROUPEDLISTVIEW) // GroupedListView
186         {
187                 IGroupedListViewItemEventListener* pItemListener = dynamic_cast<IGroupedListViewItemEventListener*>(&listener);
188                 SysTryReturnVoidResult(NID_UI_CTRL, pItemListener != null, E_INVALID_ARG,
189                                 ("[E_INVALID_ARG] invalid listener type."));
190
191                 GroupedListView* pGroupedListView = dynamic_cast<GroupedListView*>(GetSource());
192                 SysAssertf(pGroupedListView != null, "Not yet constructed. Construct() should be called before use.");
193
194                 if (index3 < 0)
195                 {
196                         index3 = -1;
197                 }
198
199                 switch (pEventArg->GetNotifyType())
200                 {
201                 case NOTIFY_TYPE_SELECTED_ITEM:
202                         if (tempInvokeGroupedListViewItemCallback == true)
203                         {
204                                 if (index2 == -1)
205                                 {
206                                         pItemListener->OnGroupedListViewGroupItemSelected(*pGroupedListView, index1);
207                                         break;
208                                 }
209
210                                 pItemListener->OnGroupedListViewItemStateChanged(*pGroupedListView, index1, index2, index3, LIST_ITEM_STATUS_SELECTED);
211                         }
212                         break;
213
214                 case NOTIFY_TYPE_HIGHLIGHED_ITEM:
215                         if (tempInvokeGroupedListViewItemCallback == true)
216                         {
217                                 pItemListener->OnGroupedListViewItemStateChanged(*pGroupedListView, index1, index2, index3, LIST_ITEM_STATUS_HIGHLIGHTED);
218                         }
219                         break;
220
221                 case NOTIFY_TYPE_ANNEX_CHECK:
222                         if (tempInvokeGroupedListViewItemCallback == true)
223                         {
224                                 pItemListener->OnGroupedListViewItemStateChanged(*pGroupedListView, index1, index2, index3, LIST_ITEM_STATUS_CHECKED);
225                         }
226                         break;
227
228                 case NOTIFY_TYPE_ANNEX_UNCHECK:
229                         if (tempInvokeGroupedListViewItemCallback == true)
230                         {
231                                 pItemListener->OnGroupedListViewItemStateChanged(*pGroupedListView, index1, index2, index3, LIST_ITEM_STATUS_UNCHECKED);
232                         }
233                         break;
234
235                 case NOTIFY_TYPE_ANNEX_MORE:
236                         if (tempInvokeGroupedListViewItemCallback == true)
237                         {
238                                 pItemListener->OnGroupedListViewItemStateChanged(*pGroupedListView, index1, index2, index3, LIST_ITEM_STATUS_MORE);
239                         }
240                         break;
241
242                 case NOTIFY_TYPE_SELCTED_CONTEXT_ITEM:
243                         if (tempInvokeGroupedListViewItemCallback == true)
244                         {
245                                 pItemListener->OnGroupedListViewContextItemStateChanged(*pGroupedListView, index1, index2, index3, LIST_CONTEXT_ITEM_STATUS_SELECTED);
246                         }
247                         break;
248
249                 case NOTIFY_TYPE_SWEPT_ITEM:
250                         if (tempInvokeGroupedListViewItemCallback == true)
251                         {
252                                 if (index3 == SWEEP_DIRECTION_LEFT)
253                                 {
254                                         pItemListener->OnGroupedListViewItemSwept(*pGroupedListView, index1, index2, SWEEP_DIRECTION_LEFT);
255                                 }
256                                 else
257                                 {
258                                         pItemListener->OnGroupedListViewItemSwept(*pGroupedListView, index1, index2, SWEEP_DIRECTION_RIGHT);
259                                 }
260                         }
261                         break;
262
263                 case NOTIFY_TYPE_LONG_PRESSED_ITEM:
264                         if (index2 != -1)
265                         {
266                                 pItemListener->OnGroupedListViewItemLongPressed(*pGroupedListView, index1, index2, index3, __invokeGroupedListViewItemCallback);
267                         }
268                         break;
269
270                 case NOTIFY_TYPE_REORDERED_ITEM:
271                         if (tempInvokeListViewItemCallback == true)
272                         {
273                                 pItemListener->OnGroupedListViewItemReordered(*pGroupedListView, index1, index2, index3, index4);
274                         }
275                         break;
276
277                 default:
278                         return;
279                 }
280         }
281 }
282
283 }}} // Tizen::Ui::Controls
284