Tizen 2.1 base
[sdk/ide/native-sample.git] / samples / native / partner / cpp / Sample / Tizen C++ / WifiDirectChat / WifiDirectChat / project / src / WifiDirectFormMgr.cpp
1 //\r
2 // Open Service Platform\r
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.\r
4 //\r
5 // Licensed under the Flora License, Version 1.0 (the License);\r
6 // you may not use this file except in compliance with the License.\r
7 // You may obtain a copy of the License at\r
8 //\r
9 //     http://www.tizenopensource.org/license\r
10 //\r
11 // Unless required by applicable law or agreed to in writing, software\r
12 // distributed under the License is distributed on an AS IS BASIS,\r
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
14 // See the License for the specific language governing permissions and\r
15 // limitations under the License.\r
16 //\r
17 \r
18 #include "WifiDirectFormMgr.h"\r
19 #include "WifiDirectMainForm.h"\r
20 #include "WifiDirectChatForm.h"\r
21 #include "WifiDirectGroupInfoForm.h"\r
22 #include "WifiDirectDeviceListForm.h"\r
23 #include "WifiDirectPortInfoForm.h"\r
24 #include "WifiDirectDeviceInfoForm.h"\r
25 #include "WifiDirectWpsModeForm.h"\r
26 \r
27 using namespace Osp::App;\r
28 using namespace Osp::Base;\r
29 using namespace Osp::Ui;\r
30 using namespace Osp::Ui::Controls;\r
31 \r
32 WifiDirectFormMgr::WifiDirectFormMgr(void) :\r
33         __pPreviousForm(null),\r
34         __pWifiDirectMainForm(null),\r
35         __pWifiDirectChatForm(null)\r
36 {\r
37 }\r
38 \r
39 WifiDirectFormMgr::~WifiDirectFormMgr(void)\r
40 {\r
41 }\r
42 \r
43 bool\r
44 WifiDirectFormMgr::Initialize()\r
45 {\r
46         result r = E_SUCCESS;\r
47 \r
48         r = Form::Construct(FORM_STYLE_NORMAL);\r
49         SetName(L"WifiDirectFormMgr");\r
50         return true;\r
51 }\r
52 \r
53 bool\r
54 WifiDirectFormMgr::SetStarterForm(RequestId requestId, Osp::Base::Collection::IList* pArgs)\r
55 {\r
56         Form *pCurrentForm = Application::GetInstance()->GetAppFrame()->GetFrame()->GetCurrentForm();\r
57 \r
58         if (pCurrentForm == this)\r
59                 SwitchToForm(requestId, pArgs);\r
60         else\r
61                 return false;\r
62 \r
63         return true;\r
64 }\r
65 \r
66 void\r
67 WifiDirectFormMgr::OnUserEventReceivedN(RequestId requestId, Osp::Base::Collection::IList* pArgs)\r
68 {\r
69         SwitchToForm(requestId, pArgs);\r
70 }\r
71 \r
72 void\r
73 WifiDirectFormMgr::SwitchToForm(RequestId requestId, Osp::Base::Collection::IList* pArgs)\r
74 {\r
75         Frame *pFrame = Application::GetInstance()->GetAppFrame()->GetFrame();\r
76         result r = E_SUCCESS;\r
77 \r
78         switch (requestId)\r
79         {\r
80         case REQUEST_MAIN_FORM:\r
81                 if (__pWifiDirectMainForm == null)\r
82                 {\r
83                         __pWifiDirectMainForm = new WifiDirectMainForm();\r
84                         TryReturnVoid(__pWifiDirectMainForm != null, "Not enough memory available");\r
85 \r
86                         if (!__pWifiDirectMainForm->Initialize())\r
87                         {\r
88                                 delete __pWifiDirectMainForm;\r
89                                 __pWifiDirectMainForm = null;\r
90                                 return;\r
91                         }\r
92 \r
93                         r = pFrame->AddControl(*__pWifiDirectMainForm);\r
94                         if (r != E_SUCCESS)\r
95                         {\r
96                                 delete __pWifiDirectMainForm;\r
97                                 __pWifiDirectMainForm = null;\r
98 \r
99                                 AppLog("AddControl Failed : %s", GetErrorMessage(r));\r
100                                 Osp::App::Application::GetInstance()->GetInstance()->Terminate();\r
101                                 return;\r
102                         }\r
103                 }\r
104 \r
105                 r = pFrame->SetCurrentForm(*__pWifiDirectMainForm);\r
106                 TryReturnVoid(r == E_SUCCESS, "Failed to set WifiDirectMainForm");\r
107 \r
108                 __pWifiDirectMainForm->Draw();\r
109 \r
110                 if (__pPreviousForm != null)\r
111                 {\r
112                         if (__pWifiDirectChatForm && ((Form*)__pWifiDirectChatForm != __pPreviousForm))\r
113                                 pFrame->RemoveControl(*(Form*)__pWifiDirectChatForm);\r
114 \r
115                         pFrame->RemoveControl(*__pPreviousForm);\r
116                         __pPreviousForm = null;\r
117                         __pWifiDirectChatForm = null;\r
118                 }\r
119                 break;\r
120 \r
121         case REQUEST_GROUPINFO_FORM:\r
122                 if (pArgs)\r
123                 {\r
124                         WifiDirectGroupInfoForm* pWifiDirectGroupInfoForm = new WifiDirectGroupInfoForm(pArgs);\r
125                         TryReturnVoid(pWifiDirectGroupInfoForm != null, "Not enough memory available");\r
126 \r
127                         r = pFrame->AddControl(*pWifiDirectGroupInfoForm);\r
128                         if (r != E_SUCCESS)\r
129                         {\r
130                                 delete pWifiDirectGroupInfoForm;\r
131                                 AppLog("AddControl Failed : %s", GetErrorMessage(r));\r
132                                 return;\r
133                         }\r
134 \r
135                         if (!pWifiDirectGroupInfoForm->Initialize())\r
136             {\r
137                 delete pWifiDirectGroupInfoForm;\r
138                 return;\r
139             }\r
140 \r
141                         r = pFrame->SetCurrentForm(*pWifiDirectGroupInfoForm);\r
142                         TryReturnVoid(r == E_SUCCESS, "Failed to set WifiDirectGroupInfoForm");\r
143 \r
144                         __pPreviousForm = pWifiDirectGroupInfoForm;\r
145 \r
146                         pWifiDirectGroupInfoForm->Draw();\r
147 \r
148                         delete pArgs;\r
149                 }\r
150                 break;\r
151 \r
152         case REQUEST_DEVICELIST_FORM:\r
153                 if (pArgs)\r
154                 {\r
155                         RequestId requestId;\r
156 \r
157                         if (__pWifiDirectChatForm)\r
158                                 requestId = REQUEST_CHAT_FORM;\r
159                         else\r
160                                 requestId = REQUEST_MAIN_FORM;\r
161 \r
162                         WifiDirectDeviceListForm* pWifiDirectDeviceListForm = new WifiDirectDeviceListForm(pArgs, requestId);\r
163                         TryReturnVoid(pWifiDirectDeviceListForm != null, "Not enough memory available");\r
164 \r
165                         if (!pWifiDirectDeviceListForm->Initialize())\r
166                         {\r
167                                 delete pWifiDirectDeviceListForm;\r
168                                 return;\r
169                         }\r
170 \r
171                         r = pFrame->AddControl(*pWifiDirectDeviceListForm);\r
172                         if (r != E_SUCCESS)\r
173                         {\r
174                                 delete pWifiDirectDeviceListForm;\r
175                                 AppLog("AddControl Failed : %s", GetErrorMessage(r));\r
176                                 return;\r
177                         }\r
178 \r
179                         r = pFrame->SetCurrentForm(*pWifiDirectDeviceListForm);\r
180                         TryReturnVoid(r == E_SUCCESS, "Failed to set WifiDirectDeviceListForm");\r
181 \r
182                         __pPreviousForm = pWifiDirectDeviceListForm;\r
183 \r
184                         pWifiDirectDeviceListForm->Draw();\r
185                 }\r
186                 break;\r
187 \r
188         case REQUEST_CHAT_FORM:\r
189                 if (__pWifiDirectChatForm == null)\r
190                 {\r
191                         __pWifiDirectChatForm = new WifiDirectChatForm(pArgs);\r
192                         TryReturnVoid(__pWifiDirectChatForm != null, "Not enough memory available");\r
193 \r
194                         if (!__pWifiDirectChatForm->Initialize())\r
195                         {\r
196                                 delete __pWifiDirectChatForm;\r
197                                 __pWifiDirectChatForm = null;\r
198                                 return;\r
199                         }\r
200 \r
201                         r = pFrame->AddControl(*__pWifiDirectChatForm);\r
202                         if (r != E_SUCCESS)\r
203                         {\r
204                                 delete __pWifiDirectChatForm;\r
205                                 __pWifiDirectChatForm = null;\r
206                                 AppLog("AddControl Failed : %s", GetErrorMessage(r));\r
207                                 return;\r
208                         }\r
209                         delete pArgs;\r
210                 }\r
211 \r
212                 r = pFrame->SetCurrentForm(*__pWifiDirectChatForm);\r
213                 TryReturnVoid(r == E_SUCCESS, "Failed to set ChatForm");\r
214 \r
215                 __pWifiDirectChatForm->Draw();\r
216 \r
217                 if (__pPreviousForm != null)\r
218                 {\r
219                         pFrame->RemoveControl(*__pPreviousForm);\r
220                         __pPreviousForm = null;\r
221                 }\r
222 \r
223                 __pPreviousForm = __pWifiDirectChatForm;\r
224                 break;\r
225 \r
226         case REQUEST_PORTINFO_FORM:\r
227                 if (pArgs)\r
228                 {\r
229                         WifiDirectPortInfoForm* pWifiDirectPortInfoForm = new WifiDirectPortInfoForm(pArgs);\r
230                         TryReturnVoid(pWifiDirectPortInfoForm != null, "Not enough memory available");\r
231 \r
232                         if (!pWifiDirectPortInfoForm->Initialize())\r
233                         {\r
234                                 delete pWifiDirectPortInfoForm;\r
235                                 return;\r
236                         }\r
237 \r
238                         r = pFrame->AddControl(*pWifiDirectPortInfoForm);\r
239                         if (r != E_SUCCESS)\r
240                         {\r
241                                 delete pWifiDirectPortInfoForm;\r
242                                 AppLog("AddControl Failed : %s", GetErrorMessage(r));\r
243                                 return;\r
244                         }\r
245 \r
246                         r = pFrame->SetCurrentForm(*pWifiDirectPortInfoForm);\r
247                         TryReturnVoid(r == E_SUCCESS, "Failed to set WifiDirectPortInfoForm");\r
248 \r
249                         __pPreviousForm = pWifiDirectPortInfoForm;\r
250 \r
251                         pWifiDirectPortInfoForm->Draw();\r
252 \r
253                         delete pArgs;\r
254                 }\r
255                 break;\r
256 \r
257         case REQUEST_DEVICEINFO_FORM:\r
258                 if (pArgs)\r
259                 {\r
260                         WifiDirectDeviceInfoForm* pWifiDirectDeviceInfoForm = new WifiDirectDeviceInfoForm(pArgs);\r
261                         TryReturnVoid(pWifiDirectDeviceInfoForm != null, "Not enough memory available");\r
262 \r
263                         if (!pWifiDirectDeviceInfoForm->Initialize())\r
264                         {\r
265                                 delete pWifiDirectDeviceInfoForm;\r
266                                 return;\r
267                         }\r
268 \r
269                         r = pFrame->AddControl(*pWifiDirectDeviceInfoForm);\r
270                         if (r != E_SUCCESS)\r
271                         {\r
272                                 delete pWifiDirectDeviceInfoForm;\r
273                                 AppLog("AddControl Failed : %s", GetErrorMessage(r));\r
274                                 return;\r
275                         }\r
276 \r
277                         r = pFrame->SetCurrentForm(*pWifiDirectDeviceInfoForm);\r
278                         TryReturnVoid(r == E_SUCCESS, "Failed to set WifiDirectPortInfoForm");\r
279 \r
280                         __pPreviousForm = pWifiDirectDeviceInfoForm;\r
281 \r
282                         pWifiDirectDeviceInfoForm->Draw();\r
283 \r
284                         delete pArgs;\r
285                 }\r
286                 break;\r
287 \r
288         case REQUEST_SETWPS_FORM:\r
289                 if (pArgs)\r
290                 {\r
291                         WifiDirectSetWpsForm* pWifiDirectSetWpsForm = new WifiDirectSetWpsForm(pArgs);\r
292                         TryReturnVoid(pWifiDirectSetWpsForm != null, "Not enough memory available");\r
293 \r
294                         if (!pWifiDirectSetWpsForm->Initialize())\r
295                         {\r
296                                 delete pWifiDirectSetWpsForm;\r
297                                 return;\r
298                         }\r
299 \r
300                         r = pFrame->AddControl(*pWifiDirectSetWpsForm);\r
301                         if (r != E_SUCCESS)\r
302                         {\r
303                                 delete pWifiDirectSetWpsForm;\r
304                                 AppLog("AddControl Failed : %s", GetErrorMessage(r));\r
305                                 return;\r
306                         }\r
307 \r
308                         r = pFrame->SetCurrentForm(*pWifiDirectSetWpsForm);\r
309                         TryReturnVoid(r == E_SUCCESS, "Failed to set WifiDirectSetWpsForm");\r
310 \r
311                         __pPreviousForm = pWifiDirectSetWpsForm;\r
312 \r
313                         pWifiDirectSetWpsForm->Draw();\r
314 \r
315                         delete pArgs;\r
316                 }\r
317                 break;\r
318 \r
319         default:\r
320 \r
321                 break;\r
322         }\r
323 }\r