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 FUiCtrl_PanelImpl.cpp
20 * @brief This is the implementation file for the %_PanelImpl class.
24 #include <FBaseErrors.h>
25 #include <FUiLayout.h>
26 #include <FBaseSysLog.h>
27 #include "FUi_LayoutImpl.h"
28 #include "FUi_LayoutLayoutMaker.h"
29 #include "FUi_DataBindingContextImpl.h"
30 #include "FUi_UiBuilder.h"
31 #include "FUiCtrl_PanelImpl.h"
32 #include "FUiCtrl_FormImpl.h"
34 using namespace Tizen::Graphics;
36 namespace Tizen { namespace Ui { namespace Controls
39 _PanelImpl::_PanelImpl(Control* pPublic, _Control* pCore, Layout* pPublicPortraitLayout, Layout* pPublicLandscapeLayout)
40 : _ContainerImpl(pPublic, pCore, pPublicPortraitLayout, pPublicLandscapeLayout)
45 _PanelImpl::~_PanelImpl(void)
51 _PanelImpl::CreatePanelImplN(Panel* pControl, const FloatRectangle& rect, GroupStyle groupStyle, Layout* pPublicPortraitLayout, Layout* pPublicLandscapeLayout)
55 _PanelImpl* pImpl = null;
58 if (pPublicPortraitLayout != null)
60 _LayoutImpl* pPortraitLayoutImpl = _LayoutImpl::GetInstance(*pPublicPortraitLayout);
61 SysTryReturn(NID_UI_CTRL, pPortraitLayoutImpl != null, null, E_INVALID_ARG, "[%s] Portrait layout is invalid object.", GetErrorMessage(E_INVALID_ARG));
64 if (pPublicLandscapeLayout != null)
66 _LayoutImpl* pLandscapeLayoutImpl = _LayoutImpl::GetInstance(*pPublicLandscapeLayout);
67 SysTryReturn(NID_UI_CTRL, pLandscapeLayoutImpl != null, null, E_INVALID_ARG, "[%s] Landscape layout is invalid object", GetErrorMessage(E_INVALID_ARG));
70 pCore = _Panel::CreatePanelN(rect, groupStyle);
71 result r = GetLastResult();
72 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
74 pImpl = new (std::nothrow) _PanelImpl(pControl, pCore, pPublicPortraitLayout, pPublicLandscapeLayout);
75 r = CheckConstruction(pCore, pImpl);
76 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
82 _PanelImpl::GetInstance(const Panel& panel)
84 return static_cast<const _PanelImpl*>(_ControlImpl::GetInstance(panel));
88 _PanelImpl::GetInstance(Panel& panel)
90 return static_cast<_PanelImpl*>(_ControlImpl::GetInstance(panel));
94 _PanelImpl::GetPublicClassName(void) const
96 return "Tizen::Ui::Controls::Panel";
100 _PanelImpl::GetPublic(void) const
102 return static_cast <const Panel&>(_ControlImpl::GetPublic());
106 _PanelImpl::GetPublic(void)
108 return static_cast <Panel&>(_ControlImpl::GetPublic());
112 _PanelImpl::GetCore(void) const
114 return static_cast <const _Panel&>(_ControlImpl::GetCore());
118 _PanelImpl::GetCore(void)
120 return static_cast <_Panel&>(_ControlImpl::GetCore());
124 _PanelImpl::SetBackgroundColor(const Tizen::Graphics::Color& color)
128 GetCore().SetBackgroundColor(color);
133 color.GetColorComponents(r, g, b, a);
134 GetCore().SetBackgroundColor(Color(r*a/ 255, g*a/255, b*a/ 255, 255));
139 _PanelImpl::IsCompositeEnabled(void) const
146 _PanelImpl::SetCompositeEnabled(bool enabled)
155 SysLogException(NID_UI, E_SYSTEM, "[%s] This method is not supported.", GetErrorMessage(E_SYSTEM));
160 _PanelImpl::OnAttachedToMainTree(void)
164 FloatRectangle builderBounds;
165 _ControlOrientation controlOrientation = _CONTROL_ORIENTATION_PORTRAIT;
166 bool exist = GetBuilderBoundsF(controlOrientation, builderBounds);
170 _ContainerImpl* pContainerImpl = this;
171 _FormImpl* pParentImpl = null;
173 while(pContainerImpl)
175 pParentImpl = dynamic_cast<_FormImpl*>(pContainerImpl->GetParent());
177 if (pParentImpl != null)
183 pContainerImpl = pContainerImpl->GetParent();
189 OrientationStatus orientation = pParentImpl->GetOrientationStatus();
190 if (orientation == ORIENTATION_STATUS_LANDSCAPE
191 || orientation == ORIENTATION_STATUS_LANDSCAPE_REVERSE)
193 controlOrientation = _CONTROL_ORIENTATION_LANDSCAPE;
194 GetBuilderBoundsF(controlOrientation, builderBounds);
196 result r = SetBounds(builderBounds);
199 SysLogException(NID_UI_CTRL, r, "[%s] SetBounds failed", GetErrorMessage(r));
202 SetChildBuilderBounds(this, controlOrientation);
206 _ContainerImpl::OnAttachedToMainTree();
212 _PanelImpl::SetChildBuilderBounds(_ContainerImpl* pContainerImpl, _ControlOrientation controlOrientation)
214 FloatRectangle builderBounds;
215 _ContainerImpl* pTempContainerImpl;
216 for(int i = 0; i < pContainerImpl->GetChildCount(); i++)
218 _ControlImpl* pControlImpl = pContainerImpl->GetChild(i);
219 bool exist = pControlImpl->GetBuilderBoundsF(controlOrientation, builderBounds);
225 pControlImpl->SetBounds(builderBounds);
226 pTempContainerImpl = dynamic_cast<_ContainerImpl*>(pControlImpl);
227 if (pTempContainerImpl != null)
229 SetChildBuilderBounds(pTempContainerImpl, controlOrientation);
237 _PanelImpl::GetDataBindingContextN(void) const
239 return _DataBindingContextImpl::GetDataBindingContextN(*this);
243 : public _UiBuilderControlMaker
246 _PanelMaker(_UiBuilder* uibuilder)
247 : _UiBuilderControlMaker(uibuilder){};
248 virtual ~_PanelMaker(void){};
249 static _UiBuilderControlMaker*
250 GetInstance(_UiBuilder* uibuilder)
252 _PanelMaker* pPanelMaker = new (std::nothrow) _PanelMaker(uibuilder);
253 SysTryReturn(NID_UI_CTRL, pPanelMaker != null, null, E_OUT_OF_MEMORY, "[%s] The memory is insufficient.", GetErrorMessage(E_OUT_OF_MEMORY));
259 Make(_UiBuilderControl* pControl)
262 _UiBuilderControlLayout* pControlProperty = null;
263 Panel* pPanel = null;
265 Tizen::Base::String elementString;
268 GroupStyle panelGroupStyle = GROUP_STYLE_NONE;
270 GetProperty(pControl, &pControlProperty);
271 if (pControlProperty == null)
276 if(pControl->GetParentWin().IsEmpty())
278 pPanel = static_cast<Panel*> (GetContainer());
282 pPanel = new (std::nothrow) Panel();
284 SysTryReturn(NID_UI_CTRL, pPanel != null, null, E_OUT_OF_MEMORY, "[%s] UiBuilder failed to create Panel object.", GetErrorMessage(E_OUT_OF_MEMORY));
285 rect = pControlProperty->GetRectF();
287 if (pControl->GetElement(L"groupStyle", elementString) || pControl->GetElement(L"GroupStyle", elementString))
289 if (elementString.Equals(L"GROUP_STYLE_NONE", false))
291 panelGroupStyle = GROUP_STYLE_NONE;
293 if (elementString.Equals(L"GROUP_STYLE_SINGLE", false))
295 panelGroupStyle = GROUP_STYLE_SINGLE;
297 if (elementString.Equals(L"GROUP_STYLE_TOP", false))
299 panelGroupStyle = GROUP_STYLE_TOP;
301 if (elementString.Equals(L"GROUP_STYLE_MIDDLE", false))
303 panelGroupStyle = GROUP_STYLE_MIDDLE;
305 if (elementString.Equals(L"GROUP_STYLE_BOTTOM", false))
307 panelGroupStyle = GROUP_STYLE_BOTTOM;
312 _UiBuilderLayoutType layoutType = UIBUILDER_LAYOUT_NONE;
313 __pLayoutMaker->GetLayoutType(pControlProperty, layoutType);
314 if (layoutType == UIBUILDER_LAYOUT_NONE)
316 r = pPanel->Construct(rect, panelGroupStyle);
320 Layout* pPortraitLayout = null;
321 Layout* pLandscapeLayout = null;
322 result tempResult = E_SUCCESS;
323 tempResult = __pLayoutMaker->GetLayoutN(pControl, pPortraitLayout, pLandscapeLayout);
324 if (E_SUCCESS == tempResult)
326 r = pPanel->Construct(*pPortraitLayout, *pLandscapeLayout, rect, panelGroupStyle);
332 _UiBuilderLayoutType layoutType = UIBUILDER_LAYOUT_NONE;
334 if (__pLayoutMaker->GetLayoutType(pControlProperty, layoutType) == false)
340 if ( layoutType == UIBUILDER_LAYOUT_GRID)
342 for (int i = 0; i < UIBUILDER_ATTRIBUTE_NUM; i++)
344 GridLayout* pGridLayout = null;
345 pControlProperty = pControl->GetAttribute(i);
347 if ( i == UIBUILDER_ATTRIBUTE_PORTRAIT)
349 pGridLayout = dynamic_cast<GridLayout*>(pPortraitLayout);
353 pGridLayout = dynamic_cast<GridLayout*>(pLandscapeLayout);
355 __pLayoutMaker->SetGridLayoutContainerProperty(pGridLayout, pControlProperty);
358 delete pPortraitLayout;
359 if (pPortraitLayout != pLandscapeLayout)
361 delete pLandscapeLayout;
363 //CONSTRUCT_WITH_LAYOUT_ARG2(pPanel, rect, gStyle);
371 if (pControl->GetElement(L"backgroundOpacity", elementString) || pControl->GetElement(L"BGColorOpacity", elementString) || pControl->GetElement(L"backgroundColorOpacity", elementString))
373 Base::Integer::Parse(elementString, opacity);
375 if (pControl->GetElement(L"backgroundColor", elementString) || pControl->GetElement(L"BGColor", elementString))
377 ConvertStringToColor32(elementString, opacity, color);
378 pPanel->SetBackgroundColor(color);
382 color = pPanel->GetBackgroundColor();
383 color.SetAlpha(ConvertOpacity100to255(opacity));
384 pPanel->SetBackgroundColor(color);
387 // set composite mode
388 if (pControl->GetElement(L"compositeEnabled", elementString))
390 if (elementString.Equals(L"false", false))
392 pPanel->SetCompositeEnabled(false);
403 _PanelRegister::_PanelRegister(void)
405 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
406 pUiBuilderControlTableManager->RegisterControl(L"Panel", _PanelMaker::GetInstance);
408 _PanelRegister::~_PanelRegister(void)
410 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
411 pUiBuilderControlTableManager->UnregisterControl(L"Panel");
413 static _PanelRegister PanelRegisterToUiBuilder;
414 }}} //Tizen::Ui::Controls