2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Flora License, Version 1.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://floralicense.org/license/
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_DataBindingContextImpl.h"
29 #include "FUi_UiBuilder.h"
30 #include "FUiCtrl_PanelImpl.h"
31 #include "FUiCtrl_FormImpl.h"
33 using namespace Tizen::Graphics;
35 namespace Tizen { namespace Ui { namespace Controls
38 _PanelImpl::_PanelImpl(Control* pPublic, _Control* pCore, Layout* pPublicPortraitLayout, Layout* pPublicLandscapeLayout)
39 : _ContainerImpl(pPublic, pCore, pPublicPortraitLayout, pPublicLandscapeLayout)
44 _PanelImpl::~_PanelImpl(void)
50 _PanelImpl::CreatePanelImplN(Panel* pControl, const Rectangle& rect, GroupStyle groupStyle, Layout* pPublicPortraitLayout, Layout* pPublicLandscapeLayout)
54 _PanelImpl* pImpl = null;
57 if (pPublicPortraitLayout != null)
59 _LayoutImpl* pPortraitLayoutImpl = _LayoutImpl::GetInstance(*pPublicPortraitLayout);
60 SysTryReturn(NID_UI_CTRL, pPortraitLayoutImpl != null, null, E_INVALID_ARG, "[%s] Portrait layout is invalid object.", GetErrorMessage(E_INVALID_ARG));
63 if (pPublicLandscapeLayout != null)
65 _LayoutImpl* pLandscapeLayoutImpl = _LayoutImpl::GetInstance(*pPublicLandscapeLayout);
66 SysTryReturn(NID_UI_CTRL, pLandscapeLayoutImpl != null, null, E_INVALID_ARG, "[%s] Landscape layout is invalid object", GetErrorMessage(E_INVALID_ARG));
69 pCore = _Panel::CreatePanelN(rect, groupStyle);
70 result r = GetLastResult();
71 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
73 pImpl = new (std::nothrow) _PanelImpl(pControl, pCore, pPublicPortraitLayout, pPublicLandscapeLayout);
74 r = CheckConstruction(pCore, pImpl);
75 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
77 r = pImpl->SetBounds(rect);
78 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
90 _PanelImpl::GetInstance(const Panel& panel)
92 return static_cast<const _PanelImpl*>(_ControlImpl::GetInstance(panel));
96 _PanelImpl::GetInstance(Panel& panel)
98 return static_cast<_PanelImpl*>(_ControlImpl::GetInstance(panel));
102 _PanelImpl::GetPublicClassName(void) const
104 return "Tizen::Ui::Controls::Panel";
108 _PanelImpl::GetPublic(void) const
110 return static_cast <const Panel&>(_ControlImpl::GetPublic());
114 _PanelImpl::GetPublic(void)
116 return static_cast <Panel&>(_ControlImpl::GetPublic());
120 _PanelImpl::GetCore(void) const
122 return static_cast <const _Panel&>(_ControlImpl::GetCore());
126 _PanelImpl::GetCore(void)
128 return static_cast <_Panel&>(_ControlImpl::GetCore());
132 _PanelImpl::SetBackgroundColor(const Tizen::Graphics::Color& color)
136 GetCore().SetBackgroundColor(color);
141 color.GetColorComponents(r, g, b, a);
142 GetCore().SetBackgroundColor(Color(r*a/ 255, g*a/255, b*a/ 255, 255));
147 _PanelImpl::IsCompositeEnabled(void) const
154 _PanelImpl::SetCompositeEnabled(bool enabled)
163 SysLogException(NID_UI, E_SYSTEM, "[%s] This method is not supported.", GetErrorMessage(E_SYSTEM));
168 _PanelImpl::OnAttachedToMainTree(void)
172 Rectangle builderBounds;
173 _ControlOrientation controlOrientation = _CONTROL_ORIENTATION_PORTRAIT;
174 bool exist = GetBuilderBounds(controlOrientation, builderBounds);
178 _ContainerImpl* pContainerImpl = this;
179 _FormImpl* pParentImpl = null;
181 while(pContainerImpl)
183 pParentImpl = dynamic_cast<_FormImpl*>(pContainerImpl->GetParent());
185 if (pParentImpl != null)
191 pContainerImpl = pContainerImpl->GetParent();
197 OrientationStatus orientation = pParentImpl->GetOrientationStatus();
198 if (orientation == ORIENTATION_STATUS_LANDSCAPE
199 || orientation == ORIENTATION_STATUS_LANDSCAPE_REVERSE)
201 controlOrientation = _CONTROL_ORIENTATION_LANDSCAPE;
202 GetBuilderBounds(controlOrientation, builderBounds);
204 SetBounds(builderBounds);
205 SetChildBuilderBouds(this, controlOrientation);
209 _ContainerImpl::OnAttachedToMainTree();
215 _PanelImpl::SetChildBuilderBouds(_ContainerImpl* pContainerImpl, _ControlOrientation controlOrientation)
217 Rectangle builderBounds;
218 _ContainerImpl* pTempContainerImpl;
219 for(int i = 0; i < pContainerImpl->GetChildCount(); i++)
221 _ControlImpl* pControlImpl = pContainerImpl->GetChild(i);
222 pControlImpl->GetBuilderBounds(controlOrientation, builderBounds);
223 pControlImpl->SetBounds(builderBounds);
224 pTempContainerImpl = dynamic_cast<_ContainerImpl*>(pControlImpl);
225 if (pTempContainerImpl != null)
227 SetChildBuilderBouds(pTempContainerImpl, controlOrientation);
235 _PanelImpl::GetDataBindingContextN(void) const
237 return _DataBindingContextImpl::GetDataBindingContextN(*this);
241 : public _UiBuilderControlMaker
244 _PanelMaker(_UiBuilder* uibuilder)
245 : _UiBuilderControlMaker(uibuilder){};
246 virtual ~_PanelMaker(void){};
247 static _UiBuilderControlMaker*
248 GetInstance(_UiBuilder* uibuilder)
250 _PanelMaker* pPanelMaker = new (std::nothrow) _PanelMaker(uibuilder);
251 SysTryReturn(NID_UI_CTRL, pPanelMaker != null, null, E_OUT_OF_MEMORY, "[%s] The memory is insufficient.", GetErrorMessage(E_OUT_OF_MEMORY));
257 Make(_UiBuilderControl* pControl)
260 _UiBuilderControlLayout* pControlProperty = null;
261 Panel* pPanel = null;
263 Tizen::Base::String elementString;
266 GroupStyle panelGroupStyle = GROUP_STYLE_NONE;
268 GetProperty(pControl, &pControlProperty);
269 if (pControlProperty == null)
274 if(pControl->GetParentWin().IsEmpty())
276 pPanel = static_cast<Panel*> (GetContainer());
280 pPanel = new (std::nothrow) Panel();
282 SysTryReturn(NID_UI_CTRL, pPanel != null, null, E_OUT_OF_MEMORY, "[%s] UiBuilder failed to create Panel object.", GetErrorMessage(E_OUT_OF_MEMORY));
283 rect = pControlProperty->GetRect();
285 if (pControl->GetElement(L"groupStyle", elementString) || pControl->GetElement(L"GroupStyle", elementString))
287 if (elementString.Equals(L"GROUP_STYLE_NONE", false))
289 panelGroupStyle = GROUP_STYLE_NONE;
291 if (elementString.Equals(L"GROUP_STYLE_SINGLE", false))
293 panelGroupStyle = GROUP_STYLE_SINGLE;
295 if (elementString.Equals(L"GROUP_STYLE_TOP", false))
297 panelGroupStyle = GROUP_STYLE_TOP;
299 if (elementString.Equals(L"GROUP_STYLE_MIDDLE", false))
301 panelGroupStyle = GROUP_STYLE_MIDDLE;
303 if (elementString.Equals(L"GROUP_STYLE_BOTTOM", false))
305 panelGroupStyle = GROUP_STYLE_BOTTOM;
310 _UiBuilderLayoutType layoutType = UIBUILDER_LAYOUT_NONE;
311 GetLayoutType(pControlProperty, layoutType);
312 if (layoutType == UIBUILDER_LAYOUT_NONE)
314 r = pPanel->Construct(rect, panelGroupStyle);
318 Layout* pPortraitLayout = null;
319 Layout* pLandscapeLayout = null;
320 result tempResult = E_SUCCESS;
321 tempResult = GetLayoutN(pControl, pPortraitLayout, pLandscapeLayout);
322 if (E_SUCCESS == tempResult)
324 r = pPanel->Construct(*pPortraitLayout, *pLandscapeLayout, rect, panelGroupStyle);
330 _UiBuilderLayoutType layoutType = UIBUILDER_LAYOUT_NONE;
332 if (GetLayoutType(pControlProperty, layoutType) == false)
338 if ( layoutType == UIBUILDER_LAYOUT_GRID)
340 for (int i = 0; i < UIBUILDER_ATTRIBUTE_NUM; i++)
342 GridLayout* pGridLayout = null;
343 pControlProperty = pControl->GetAttribute(i);
345 if ( i == UIBUILDER_ATTRIBUTE_PORTRAIT)
347 pGridLayout = dynamic_cast<GridLayout*>(pPortraitLayout);
351 pGridLayout = dynamic_cast<GridLayout*>(pLandscapeLayout);
353 SetGridLayoutContainerProperty(pGridLayout, pControlProperty);
356 delete pPortraitLayout;
357 if (pPortraitLayout != pLandscapeLayout)
359 delete pLandscapeLayout;
361 //CONSTRUCT_WITH_LAYOUT_ARG2(pPanel, rect, gStyle);
369 if (pControl->GetElement(L"backgroundOpacity", elementString) || pControl->GetElement(L"BGColorOpacity", elementString) || pControl->GetElement(L"backgroundColorOpacity", elementString))
371 Base::Integer::Parse(elementString, opacity);
373 if (pControl->GetElement(L"backgroundColor", elementString) || pControl->GetElement(L"BGColor", elementString))
375 ConvertStringToColor32(elementString, opacity, color);
376 pPanel->SetBackgroundColor(color);
380 color = pPanel->GetBackgroundColor();
381 color.SetAlpha(ConvertOpacity100to255(opacity));
382 pPanel->SetBackgroundColor(color);
385 // set composite mode
386 if (pControl->GetElement(L"compositeEnabled", elementString))
388 if (elementString.Equals(L"false", false))
390 pPanel->SetCompositeEnabled(false);
401 _PanelRegister::_PanelRegister(void)
403 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
404 pUiBuilderControlTableManager->RegisterControl(L"Panel", _PanelMaker::GetInstance);
406 _PanelRegister::~_PanelRegister(void)
408 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
409 pUiBuilderControlTableManager->UnregisterControl(L"Panel");
411 static _PanelRegister PanelRegisterToUiBuilder;
412 }}} //Tizen::Ui::Controls