add patch
[framework/osp/web.git] / src / controls / FWebCtrl_WebManager.cpp
1 //\r
2 // Open Service Platform\r
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.\r
4 //\r
5 // Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0\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 /**\r
19  * @file                FWebCtrl_WebManager.cpp\r
20  * @brief               The file contains the definition of _WebManager class.\r
21  *\r
22  * The file contains the definition of _WebManager class.\r
23  */\r
24 \r
25 #include <FBaseSysLog.h>\r
26 #include <FUiControl.h>\r
27 #include <FUiCtrl_FormImpl.h>\r
28 #include "FWebCtrl_WebImpl.h"\r
29 #include "FWebCtrl_WebManager.h"\r
30 #include "FWebCtrl_WebPopup.h"\r
31 \r
32 using namespace Tizen::Base;\r
33 using namespace Tizen::Base::Collection;\r
34 using namespace Tizen::Ui;\r
35 using namespace Tizen::Ui::Controls;\r
36 \r
37 namespace Tizen { namespace Web { namespace Controls\r
38 {\r
39 \r
40 _WebManager::_WebManager(void)\r
41         : __pWebList(null)\r
42         , __pCallbackList(null)\r
43         , __pActiveWeb(null)\r
44         , __pActivePopup(null)\r
45 {\r
46 }\r
47 \r
48 _WebManager::~_WebManager(void)\r
49 {\r
50 }\r
51 \r
52 _WebManager*\r
53 _WebManager::GetInstance(void)\r
54 {\r
55         result r = E_SUCCESS;\r
56         static _WebManager* pWebMgr = null;\r
57 \r
58         if (pWebMgr == null)\r
59         {\r
60                 pWebMgr = new (std::nothrow) _WebManager();\r
61                 SysTryReturn(NID_WEB_CTRL, pWebMgr != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] _WebManager allocation failed.");\r
62 \r
63                 r = pWebMgr->Construct();\r
64                 SysTryCatch(NID_WEB_CTRL, !IsFailed(r), , r, "[%s] _WebManager construction failed.", GetErrorMessage(r));\r
65         }\r
66 \r
67         return pWebMgr;\r
68 \r
69 CATCH:\r
70         delete pWebMgr;\r
71         pWebMgr = null;\r
72 \r
73         return null;\r
74 }\r
75 \r
76 result\r
77 _WebManager::Construct(void)\r
78 {\r
79         result r = E_SUCCESS;\r
80 \r
81         std::unique_ptr<ArrayListT< int> > pWebList(new (std::nothrow) ArrayListT< int >());\r
82         SysTryReturnResult(NID_WEB_CTRL, pWebList.get(), E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");\r
83         r = pWebList->Construct();\r
84         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
85 \r
86         std::unique_ptr<MultiHashMapT< int, int > > pCallbackList(new (std::nothrow) MultiHashMapT< int, int >());\r
87         SysTryReturnResult(NID_WEB_CTRL, pCallbackList.get(), E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");\r
88         r = pCallbackList->Construct();\r
89         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
90 \r
91         __pWebList = std::move(pWebList);\r
92         __pCallbackList = std::move(pCallbackList);\r
93 \r
94         return E_SUCCESS;\r
95 }\r
96 \r
97 result\r
98 _WebManager::AddWeb(int webAdress)\r
99 {\r
100         result r = E_SUCCESS;\r
101 \r
102         r = __pWebList->Add(webAdress);\r
103         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
104 \r
105         return E_SUCCESS;\r
106 }\r
107 \r
108 result\r
109 _WebManager::RemoveWeb(int webAdress)\r
110 {\r
111         result r = E_SUCCESS;\r
112 \r
113         r = __pWebList->Remove(webAdress);\r
114         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
115 \r
116         r = __pCallbackList->Remove(webAdress);\r
117         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
118 \r
119         return E_SUCCESS;\r
120 }\r
121 \r
122 bool\r
123 _WebManager::IsValidWeb(int webAdress) const\r
124 {\r
125         return __pWebList->Contains(webAdress);\r
126 }\r
127 \r
128 \r
129 result\r
130 _WebManager::AddCallback(int callerAdress, int callbackAdress)\r
131 {\r
132         result r = E_SUCCESS;\r
133 \r
134         r = __pCallbackList->Add(callerAdress, callbackAdress);\r
135         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
136 \r
137         return E_SUCCESS;\r
138 }\r
139 \r
140 result\r
141 _WebManager::RemoveCallback(int callerAdress, int callbackAdress)\r
142 {\r
143         result r = E_SUCCESS;\r
144 \r
145         r = __pCallbackList->Remove(callerAdress, callbackAdress);\r
146         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
147 \r
148         return E_SUCCESS;\r
149 }\r
150 \r
151 bool\r
152 _WebManager::IsValidCallback(int callerAdress, int callbackAdress) const\r
153 {\r
154         bool ret = true;\r
155 \r
156         result r = __pCallbackList->Contains(callerAdress, callbackAdress, ret);\r
157         SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, true, r, "[%s] Propagating.", GetErrorMessage(r));\r
158 \r
159         return ret;\r
160 }\r
161 \r
162 void\r
163 _WebManager::SetActiveWeb(Tizen::Web::Controls::_WebImpl* pWebAddress)\r
164 {\r
165         if (__pActiveWeb == null)\r
166         {\r
167                 __pActiveWeb = pWebAddress;\r
168         }\r
169         else\r
170         {\r
171                 if (__pActiveWeb->IsVisible() == true)\r
172                 {\r
173                         return;\r
174                 }\r
175                 __pActiveWeb = pWebAddress;\r
176         }\r
177 \r
178         if (__pActivePopup != null)\r
179         {\r
180                 __pActivePopup->SetShowState(false);\r
181 \r
182                 _FormImpl* pFormImpl = __pActiveWeb->GetParentFormImpl(__pActiveWeb);\r
183 \r
184                 if (pFormImpl != null)\r
185                 {\r
186                         __pActivePopup->SetOwner(&pFormImpl->GetPublic());\r
187                 }\r
188                 else\r
189                 {\r
190                         __pActivePopup->SetOwner(&__pActiveWeb->GetPublic());\r
191                 }\r
192 \r
193                 __pActivePopup->SetShowState(true);\r
194                 __pActivePopup->Show();\r
195         }\r
196 }\r
197 \r
198 void\r
199 _WebManager::RemoveActiveWeb(Tizen::Web::Controls::_WebImpl* pWebAddress)\r
200 {\r
201         if (__pActiveWeb == pWebAddress)\r
202         {\r
203                 __pActiveWeb = null;\r
204         }\r
205 }\r
206 \r
207 void\r
208 _WebManager::SetActivePopup(Tizen::Web::Controls::_WebPopup* pPopupAddress)\r
209 {\r
210         __pActivePopup = pPopupAddress;\r
211 }\r
212 \r
213 void\r
214 _WebManager::RemoveActivePopup(Tizen::Web::Controls::_WebPopup* pPopupAddress)\r
215 {\r
216         if (__pActivePopup == pPopupAddress)\r
217         {\r
218                 __pActivePopup = null;\r
219         }\r
220 }\r
221 \r
222 } } }\r