2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
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
9 // http://www.apache.org/licenses/LICENSE-2.0/
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.
19 * @file FUi_UiBuilderControl.cpp
20 * @brief This is the implementation file for _UiBuilderControl class.
25 #include <FUiIOrientationEventListener.h>
26 #include<FAppAppResource.h>
27 #include <FBaseSysLog.h>
28 #include <FBase_StringConverter.h>
29 #include "FUi_UiBuilder.h"
30 #include "FUi_UiBuilderControl.h"
32 using namespace Tizen::App;
33 using namespace Tizen::Base;
34 using namespace Tizen::Base::Collection;
35 using namespace Tizen::Ui;
37 namespace Tizen { namespace Ui
39 _UiBuilderControl::_UiBuilderControl(void)
45 , __pUiBuilderControlElementList(null)
46 , __pUiBuilderControlItemList(null)
49 _UiBuilderControl::~_UiBuilderControl(void)
51 if (__pUiBuilderControlElementList)
53 _UiBuilderControlElement* pUiBuilderControlElement = null;
54 int controlCount = __pUiBuilderControlElementList->GetCount();
55 for (int i = 0; i < controlCount; i++)
57 __pUiBuilderControlElementList->GetAt(i, pUiBuilderControlElement);
58 delete pUiBuilderControlElement;
60 __pUiBuilderControlElementList->RemoveAll();
61 delete __pUiBuilderControlElementList;
62 __pUiBuilderControlElementList = null;
65 if (__pUiBuilderControlItemList)
67 _UiBuilderControlItem* pUiBuilderControlItem = null;
68 int controlCount = __pUiBuilderControlItemList->GetCount();
69 for (int i = 0; i < controlCount; i++)
71 __pUiBuilderControlItemList->GetAt(i, pUiBuilderControlItem);
72 delete pUiBuilderControlItem;
74 __pUiBuilderControlItemList->RemoveAll();
75 delete __pUiBuilderControlItemList;
76 __pUiBuilderControlItemList = null;
81 _UiBuilderControl::Construct(const Tizen::Base::String& type)
83 if (__pUiBuilderControlElementList == null)
85 __pUiBuilderControlElementList = new (std::nothrow) ArrayListT<_UiBuilderControlElement*>;
87 if (__pUiBuilderControlItemList == null)
89 __pUiBuilderControlItemList = new (std::nothrow) ArrayListT<_UiBuilderControlItem*>;
92 if (type.Equals(L"Map", false))
97 if (type.Equals(L"Web", false))
99 __pHandle = dlopen("libosp-web.so", RTLD_LAZY | RTLD_GLOBAL);
100 if (__pHandle == null)
102 SysLog(NID_UI, "Failed to libosp-web.so");
109 _UiBuilderControl::SetId(const Tizen::Base::String& id)
115 _UiBuilderControl::SetType(const Tizen::Base::String& type)
121 _UiBuilderControl::SetParentWin(const Tizen::Base::String& parent)
127 _UiBuilderControl::SetElement(int index, const Tizen::Base::String& elementName, const Tizen::Base::String& elementValue)
129 _UiBuilderControlElement* pUiBuilderControlElement = null;
130 pUiBuilderControlElement = new (std::nothrow) _UiBuilderControlElement;
131 if (pUiBuilderControlElement != null)
133 pUiBuilderControlElement->SetName(elementName);
134 pUiBuilderControlElement->SetValue(elementValue);
135 __pUiBuilderControlElementList->Add(pUiBuilderControlElement);
139 SysLogException(NID_UI, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Unable to create _UiBuilderControlElement.");
144 _UiBuilderControl::SetItemName(const Tizen::Base::String& name)
146 _UiBuilderControlItem* pUiBuilderControlItem = null;
147 __pUiBuilderControlItemList->GetAt(__itemCount, pUiBuilderControlItem);
148 SysTryReturnVoidResult(NID_UI, pUiBuilderControlItem != null, GetLastResult(), "Failed to get _UiBuilderControlItem");
150 pUiBuilderControlItem->SetItemName(name);
155 _UiBuilderControl::SetItemElement(int index, const Tizen::Base::String& name, const Tizen::Base::String& value)
158 _UiBuilderControlItem* pUiBuilderControlItem = null;
161 pUiBuilderControlItem = new (std::nothrow) _UiBuilderControlItem;
162 pUiBuilderControlItem->SetItemElement(index, name, value);
163 __pUiBuilderControlItemList->Add(pUiBuilderControlItem);
167 __pUiBuilderControlItemList->GetAt(__itemCount, pUiBuilderControlItem);
168 SysTryReturnVoidResult(NID_UI, pUiBuilderControlItem != null, GetLastResult(), "Failed to get _UiBuilderControlItem");
169 pUiBuilderControlItem->SetItemElement(index, name, value);
174 _UiBuilderControl::GetItemElement(int index, const Tizen::Base::String& elementName, Tizen::Base::String& elementOutValue)
176 bool findElement = false;
178 _UiBuilderControlItem* pUiBuilderControlItem = null;
179 __pUiBuilderControlItemList->GetAt(index, pUiBuilderControlItem);
180 if (pUiBuilderControlItem == null)
182 SysLogException(NID_UI, GetLastResult(), "Failed to get _UiBuilderControlItem");
187 Tizen::Base::Collection::ArrayListT<_UiBuilderControlElement*>* pItemPropertyList = pUiBuilderControlItem->GetItemProperty();
189 IEnumeratorT<_UiBuilderControlElement*>* pEnum = pItemPropertyList->GetEnumeratorN();
190 SysTryReturn(NID_UI, pEnum != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Unable to get IEnumerator.");
191 _UiBuilderControlElement* pUiBuilderControlElement = null;
193 while (pEnum->MoveNext() == E_SUCCESS)
195 pEnum->GetCurrent(pUiBuilderControlElement);
196 if (pUiBuilderControlElement->GetName().Equals(elementName, false) && pUiBuilderControlElement->GetValue().IsEmpty() == false)
198 elementOutValue = pUiBuilderControlElement->GetValue();
212 if (IsSpecialChar(elementOutValue))
214 ConvertSpecialChar(elementOutValue);
217 if (elementOutValue[0] == ':' && elementOutValue[1] == ':')
219 result r = E_SUCCESS;
220 AppResource* pAppResource = AppResource::GetInstance();
221 if (pAppResource == null)
226 String getStringValue;
227 elementOutValue.SubString(2, elementOutValue.GetLength() - 2, subStr);
228 elementOutValue = subStr;
229 r = pAppResource->GetString(elementOutValue, getStringValue);
230 elementOutValue = getStringValue;
237 _UiBuilderControl::GetElement(const Tizen::Base::String& elementName, Tizen::Base::String& elementOutValue)
239 bool findElement = false;
240 IEnumeratorT<_UiBuilderControlElement*>* pEnum = __pUiBuilderControlElementList->GetEnumeratorN();
241 SysTryReturn(NID_UI, pEnum != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Unable to get IEnumerator.");
242 _UiBuilderControlElement* pUiBuilderControlElement = null;
244 while (pEnum->MoveNext() == E_SUCCESS)
246 pEnum->GetCurrent(pUiBuilderControlElement);
247 if (pUiBuilderControlElement->GetName().Equals(elementName, false) && pUiBuilderControlElement->GetValue().IsEmpty() == false)
249 elementOutValue = pUiBuilderControlElement->GetValue();
256 if (findElement == false)
263 if (IsSpecialChar(elementOutValue))
265 ConvertSpecialChar(elementOutValue);
269 if (elementOutValue[0] == ':' && elementOutValue[1] == ':')
271 result r = E_SUCCESS;
272 AppResource* pAppResource = AppResource::GetInstance();
273 if (pAppResource == null)
278 String getStringValue;
279 elementOutValue.SubString(2, elementOutValue.GetLength() - 2, subStr);
280 elementOutValue = subStr;
282 r = pAppResource->GetString(elementOutValue, getStringValue);
283 elementOutValue = getStringValue;
291 _UiBuilderControl::GetItemCount(void) const
297 _UiBuilderControl::GetId(void) const
303 _UiBuilderControl::GetType(void) const
309 _UiBuilderControl::GetParentWin(void) const
315 _UiBuilderControl::GetItemName(int index) const
317 _UiBuilderControlItem* pUiBuilderControlItem = null;
318 __pUiBuilderControlItemList->GetAt(index, pUiBuilderControlItem);
319 SysTryReturn(NID_UI, pUiBuilderControlItem != null, L"", GetLastResult(), "Failed to get _UiBuilderControlItem");
321 return pUiBuilderControlItem->GetItemName();
324 _UiBuilderControlLayout*
325 _UiBuilderControl::GetAttribute(int mode) const
327 return const_cast<_UiBuilderControlLayout*>(&__layout[mode]);
331 _UiBuilderControl::IsSpecialChar(const Tizen::Base::String& string) const
333 if (string.IsEmpty())
337 if (string.Contains(L"<") ||string.Contains(L"&")
338 || string.Contains(L">") || string.Contains(L"'")
339 || string.Contains(L""") || string.Contains(L"\\"))
350 _UiBuilderControl::ConvertSpecialChar(Tizen::Base::String& string) const
352 int len = string.GetLength();
353 wchar_t* stringPointer = const_cast<wchar_t*>(string.GetPointer());
359 if (stringPointer[i] == '\\')
361 if (stringPointer[i + 1] == 'n')
363 stringPointer[j] = '\n';
367 else if (stringPointer[i + 1] == 't')
369 stringPointer[j] = '\t';
375 stringPointer[j] = '\\';
380 else if ((stringPointer[i] == '&') && (stringPointer[i + 1] == 'l') && (stringPointer[i + 2] == 't') && (stringPointer[i + 3] == ';'))
382 stringPointer[j] = '<';
386 else if ((stringPointer[i] == '&') && (stringPointer[i + 1] == 'g') && (stringPointer[i + 2] == 't') && (stringPointer[i + 3] == ';'))
388 stringPointer[j] = '>';
392 else if ((stringPointer[i] == '&') && (stringPointer[i + 1] == 'a') && (stringPointer[i + 2] == 'm') && (stringPointer[i + 3] == 'p') && (stringPointer[i + 4] == ';'))
394 stringPointer[j] = '&';
398 else if ((stringPointer[i] == '&') && (stringPointer[i + 1] == 'a') && (stringPointer[i + 2] == 'p') && (stringPointer[i + 3] == 'o') && (stringPointer[i + 4] == 's') &&
399 (stringPointer[i + 5] == ';'))
401 stringPointer[j] = 39; // '
405 else if ((stringPointer[i] == '&') && (stringPointer[i + 1] == 'q') && (stringPointer[i + 2] == 'u') && (stringPointer[i + 3] == 'o') && (stringPointer[i + 4] == 't') &&
406 (stringPointer[i + 5] == ';'))
408 stringPointer[j] = 34; // "
414 stringPointer[j] = stringPointer[i];
420 stringPointer[j] = '\0';