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_UiBuilderControlMaker.cpp
20 * @brief This is the implementation file for _UiBuilderControlMaker class.
24 #include <runtime_info.h>
25 #include <FAppApplication.h>
27 #include <FUiContainer.h>
28 #include <FBaseSysLog.h>
29 #include <FBaseInteger.h>
30 #include <FBase_StringConverter.h>
31 #include <FGrp_NonScale.h>
32 #include <FGrp_BitmapImpl.h>
33 #include "FUi_UiBuilderControlMaker.h"
34 #include "FUi_UiBuilder.h"
35 #include "FUi_LayoutLayoutMaker.h"
37 using namespace Tizen::Base;
38 using namespace Tizen::Ui;
39 using namespace Tizen::Ui::Controls;
40 using namespace Tizen::App;
41 using namespace Tizen::Graphics;
43 namespace Tizen { namespace Ui
45 _UiBuilderControlMaker::_UiBuilderControlMaker(_UiBuilder* pUibuilder)
46 : __pLayoutMaker(new(std::nothrow)_LayoutMaker(pUibuilder))
47 , __pUiBuilder(pUibuilder)
49 SysTryReturnVoidResult(NID_UI, __pLayoutMaker != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
51 _UiBuilderControlMaker::_UiBuilderControlMaker(void)
55 _UiBuilderControlMaker::~_UiBuilderControlMaker(void)
60 _UiBuilderControlMaker::MakeControl(_UiBuilderControl* pUiBuilderControl)
62 Tizen::Ui::Control* pControl = null;
64 if (pUiBuilderControl != null)
66 pControl = Make(pUiBuilderControl);
67 if ((pUiBuilderControl->GetType()).Equals(L"Header", false) || (pUiBuilderControl->GetType()).Equals(L"Footer", false))
73 pControl->SetName(pUiBuilderControl->GetId());
74 SetLayoutOrientation(pUiBuilderControl, pControl);
75 if (!(pUiBuilderControl->GetType().Equals(L"Form", false) || pUiBuilderControl->GetType().Equals(L"Popup", false)))
77 if (pUiBuilderControl->GetType().Equals(L"Panel", false) || pUiBuilderControl->GetType().Equals(L"ScrollPanel", false))
79 if (pUiBuilderControl->GetParentWin().IsEmpty())
85 AddControl(pUiBuilderControl, pControl);
86 result r = __pLayoutMaker->SetLayoutProperty(pUiBuilderControl, pControl);
89 return E_OPERATION_FAILED;
96 return E_OPERATION_FAILED;
100 _UiBuilderControlMaker::ConvertStringToColor(const Tizen::Base::String& colorString, Color& color)
105 const wchar_t* colorStringPointer = colorString.GetPointer();
107 unsigned long temp = 0;
109 len = colorString.GetLength();
117 for (index = 0; index < len + 1; index++)
119 ch = colorStringPointer[index];
120 if ((ch >= '0') && (ch <= '9'))
127 else if ((ch >= 'A') && (ch <= 'F'))
134 else if ((ch >= 'a') && (ch <= 'f'))
141 color.SetRGB32(temp, false);
145 _UiBuilderControlMaker::ConvertStringToColor32(const Tizen::Base::String& colorString, int opacity, Color& color)
151 const wchar_t* colorStringPointer = colorString.GetPointer();
153 unsigned long temp = 0;
155 len = colorString.GetLength();
159 SysLog(NID_UI, "String is empty");
165 for (index = 0; index < len + 1; index++)
167 ch = colorStringPointer[index];
168 if ((ch >= '0') && (ch <= '9'))
175 else if ((ch >= 'A') && (ch <= 'F'))
182 else if ((ch >= 'a') && (ch <= 'f'))
190 color.SetRGB32(temp, true);
191 alpha = ConvertOpacity100to255(opacity);
192 color.SetAlpha(alpha);
196 _UiBuilderControlMaker::ConvertOpacity100to255(int opacity)
198 return 255 * opacity / 100;
202 _UiBuilderControlMaker::ConvertHAlignToHorizontalAlignment(const Tizen::Base::String& align, HorizontalAlignment& alignment)
204 if (align.Equals(L"ALIGN_LEFT", false))
206 alignment = ALIGNMENT_LEFT;
208 else if (align.Equals(L"ALIGN_CENTER", false))
210 alignment = ALIGNMENT_CENTER;
212 else if (align.Equals(L"ALIGN_RIGHT", false))
214 alignment = ALIGNMENT_RIGHT;
225 _UiBuilderControlMaker::ConvertVAlignToVerticalAlignment(const Tizen::Base::String& align, VerticalAlignment& alignment)
227 if (align.Equals(L"ALIGN_TOP", false))
229 alignment = ALIGNMENT_TOP;
231 else if (align.Equals(L"ALIGN_MIDDLE", false))
233 alignment = ALIGNMENT_MIDDLE;
235 else if (align.Equals(L"ALIGN_BOTTOM", false))
237 alignment = ALIGNMENT_BOTTOM;
248 _UiBuilderControlMaker::ConvertSlideShowAnimation(const Tizen::Base::String& animationType, GalleryAnimation& animation)
250 if (animationType.Equals(L"GALLERY_ANIMATION_PAGE", false))
252 animation = GALLERY_ANIMATION_PAGE;
254 else if (animationType.Equals(L"GALLERY_ANIMATION_DISSOLVE", false))
256 animation = GALLERY_ANIMATION_DISSOLVE;
258 else if (animationType.Equals(L"GALLERY_ANIMATION_ZOOM", false))
260 animation = GALLERY_ANIMATION_ZOOM;
270 Tizen::Graphics::Bitmap*
271 _UiBuilderControlMaker::LoadBitmapN(const Tizen::Base::String& imagePath)
273 AppResource* pAppResource = Tizen::App::App::GetInstance()->GetAppResource();
274 if (pAppResource != null)
276 Tizen::Graphics::Bitmap* pBitmap = pAppResource->GetBitmapN(imagePath);
283 _UiBuilderControlMaker::GetProperty(_UiBuilderControl* pControl, _UiBuilderControlLayout** pControlProperty) const
285 // Form's orientation mode is AUTOMATIC
286 if (__pUiBuilder->GetUiBuilderRotateState() == UIBUIDER_SCREEN_NONE)
288 // Get device orientation
290 bool autoRotateLock = false;
291 int ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_AUTO_ROTATION_ENABLED, &autoRotateLock);
293 if (ret == RUNTIME_INFO_ERROR_NONE)
295 SysLog(NID_UI, "The flag of auto-rotate lock is %d.", autoRotateLock);
299 autoRotateLock = false;
300 SysLog(NID_UI, "It's failed to get the flag of auto-rotate.");
303 app_device_orientation_e deviceOrientation = app_get_device_orientation();
304 bool isHorizontal = (deviceOrientation == APP_DEVICE_ORIENTATION_90) || (deviceOrientation == APP_DEVICE_ORIENTATION_270);
306 if (isHorizontal && autoRotateLock == true)
308 __pUiBuilder->SetUiBuilderRotateState(UIBUIDER_SCREEN_HORIZONTAL);
312 __pUiBuilder->SetUiBuilderRotateState(UIBUIDER_SCREEN_VERTICAL);
316 if (__pUiBuilder->GetUiBuilderRotateState() == UIBUIDER_SCREEN_HORIZONTAL)
318 *pControlProperty = pControl->GetAttribute(UIBUILDER_ATTRIBUTE_LANDSCAPE);
322 *pControlProperty = pControl->GetAttribute(UIBUILDER_ATTRIBUTE_PORTRAIT);
329 _UiBuilderControlMaker::AddControl(_UiBuilderControl* pUiBuilderControl, Tizen::Ui::Control* pControl)
331 Tizen::Base::String panePosition;
332 Tizen::Ui::Container* pContainer = GetContainer();
333 Tizen::Ui::Control* pFindControl = null;
337 if (pContainer->GetName().Equals(pUiBuilderControl->GetParentWin()))
339 pFindControl = pContainer;
343 pFindControl = pContainer->GetControl(Tizen::Base::String(pUiBuilderControl->GetParentWin()), true);
346 //Add SplitPanel child
347 if (pUiBuilderControl->GetElement(L"controlPosition", panePosition))
350 Tizen::Ui::Controls::SplitPanel *pSplitPanel = dynamic_cast<SplitPanel*>(pFindControl);
353 if(panePosition.Equals(L"first", false))
355 pSplitPanel->SetPane(pControl, SPLIT_PANEL_PANE_ORDER_FIRST);
359 pSplitPanel->SetPane(pControl, SPLIT_PANEL_PANE_ORDER_SECOND);
365 Tizen::Ui::Container* pParent = dynamic_cast<Tizen::Ui::Container*>(pFindControl);
369 pParent->AddControl(*pControl);
373 Tizen::Ui::Container*
374 _UiBuilderControlMaker::GetContainer(void) const
376 return __pUiBuilder->GetContainer();
380 _UiBuilderControlMaker::SetLayoutOrientation(_UiBuilderControl* pUiBuilderCOntrol, Tizen::Ui::Control* pControl)
382 __pUiBuilder->SetLayoutOrientation(pUiBuilderCOntrol, pControl);
386 _UiBuilderControlMaker::SetUiBuilderRotateState(_UiBuilderScreenRotate rotate)
388 return __pUiBuilder->SetUiBuilderRotateState(rotate);
391 _UiBuilderScreenRotate
392 _UiBuilderControlMaker::GetUiBuilderRotateState(void)
394 return __pUiBuilder->GetUiBuilderRotateState();
397 Tizen::Graphics::_ICoordinateSystemTransformer*
398 _UiBuilderControlMaker::GetTransformer(void) const
400 return __pUiBuilder->GetTransformer();