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_GroupContainerImpl.cpp
20 * @brief This is the implementation file for the _GroupContainerImpl class.
24 #include <FBaseErrors.h>
25 #include <FBaseSysLog.h>
26 #include <FBase_LocalizedNumParser.h>
27 #include "FUiCtrl_GroupContainerImpl.h"
28 #include "FUi_CoordinateSystemUtils.h"
29 #include "FUi_UiBuilder.h"
31 using namespace Tizen::Graphics;
32 using namespace Tizen::Base;
34 namespace Tizen { namespace Ui { namespace Controls
36 _GroupContainerImpl::_GroupContainerImpl(Control* pPublic, _Control* pCore)
37 : _ContainerImpl(pPublic, pCore)
42 _GroupContainerImpl::~_GroupContainerImpl(void)
48 _GroupContainerImpl::CreateGroupContainerImplN(GroupContainer* pControl, const Rectangle& rect, int rowCount, int columnCount, int lineWidth)
52 _GroupContainerImpl* pImpl = null;
53 _GroupContainer* pCore = null;
55 FloatRectangle floatBounds = _CoordinateSystemUtils::ConvertToFloat(rect);
56 float floatLineWidth = _CoordinateSystemUtils::ConvertToFloat(lineWidth);
58 pCore = _GroupContainer::CreateGroupContainerN(floatBounds, rowCount, columnCount, floatLineWidth);
59 result r = GetLastResult();
60 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
62 pImpl = new (std::nothrow) _GroupContainerImpl(pControl, pCore);
63 r = CheckConstruction(pCore, pImpl);
64 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
70 _GroupContainerImpl::CreateGroupContainerImplFN(GroupContainer* pControl, const FloatRectangle& rect, int rowCount, int columnCount, float lineWidth)
74 _GroupContainerImpl* pImpl = null;
75 _GroupContainer* pCore = null;
77 pCore = _GroupContainer::CreateGroupContainerN(rect, rowCount, columnCount, lineWidth);
78 result r = GetLastResult();
79 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
81 pImpl = new (std::nothrow) _GroupContainerImpl(pControl, pCore);
82 r = CheckConstruction(pCore, pImpl);
83 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
89 _GroupContainerImpl::Initialize(void)
91 GetCore().SetImpl(this);
94 const _GroupContainerImpl*
95 _GroupContainerImpl::GetInstance(const GroupContainer& grpContainer)
97 return static_cast<const _GroupContainerImpl*>(_ControlImpl::GetInstance(grpContainer));
101 _GroupContainerImpl::GetInstance(GroupContainer& grpContainer)
103 return static_cast<_GroupContainerImpl*>(_ControlImpl::GetInstance(grpContainer));
107 _GroupContainerImpl::GetPublicClassName(void) const
109 return "Tizen::Ui::Controls::GroupContainer";
112 const GroupContainer&
113 _GroupContainerImpl::GetPublic(void) const
115 return static_cast <const GroupContainer&>(_ControlImpl::GetPublic());
119 _GroupContainerImpl::GetPublic(void)
121 return static_cast <GroupContainer&>(_ControlImpl::GetPublic());
124 const _GroupContainer&
125 _GroupContainerImpl::GetCore(void) const
127 return static_cast <const _GroupContainer&>(_ControlImpl::GetCore());
131 _GroupContainerImpl::GetCore(void)
133 return static_cast <_GroupContainer&>(_ControlImpl::GetCore());
137 _GroupContainerImpl::AddControlAt(Control &control, int rowIndex, int rolumnIndex)
139 result r = GetCore().AddControlAt(control, rowIndex, rolumnIndex);
140 SetLastResultReturn(r);
144 _GroupContainerImpl::GetControlAt(int rowIndex, int columnIndex)
148 return GetCore().GetControlAt(rowIndex, columnIndex);
152 _GroupContainerImpl::RemoveControlAt(int rowIndex, int columnIndex)
154 result r = GetCore().RemoveControlAt(rowIndex, columnIndex);
155 SetLastResultReturn(r);
159 _GroupContainerImpl::SetColumnWidth(int columnIndex, int width)
161 float floatWidth = _CoordinateSystemUtils::ConvertToFloat(width);
162 result r = GetCore().SetColumnWidth(columnIndex, floatWidth);
163 SetLastResultReturn(r);
167 _GroupContainerImpl::SetColumnWidth(int columnIndex, float width)
169 result r = GetCore().SetColumnWidth(columnIndex, width);
170 SetLastResultReturn(r);
174 _GroupContainerImpl::GetColumnWidth(int columnIndex)
178 int width = _CoordinateSystemUtils::ConvertToInteger(GetCore().GetColumnWidth(columnIndex));
183 _GroupContainerImpl::GetColumnWidthF(int columnIndex)
187 return GetCore().GetColumnWidth(columnIndex);
191 _GroupContainerImpl::SetRowHeight(int rowIndex, int height)
193 float floatHeight = _CoordinateSystemUtils::ConvertToFloat(height);
194 result r = GetCore().SetRowHeight(rowIndex, floatHeight);
195 SetLastResultReturn(r);
199 _GroupContainerImpl::SetRowHeight(int rowIndex, float height)
201 result r = GetCore().SetRowHeight(rowIndex, height);
202 SetLastResultReturn(r);
206 _GroupContainerImpl::GetRowHeight(int rowIndex)
210 return _CoordinateSystemUtils::ConvertToInteger(GetCore().GetRowHeight(rowIndex));
214 _GroupContainerImpl::GetRowHeightF(int rowIndex)
218 return GetCore().GetRowHeight(rowIndex);
222 _GroupContainerImpl::Merge(int rowStartIndex, int columnStartIndex, int rowCount, int columnCount)
224 result r = GetCore().Merge(rowStartIndex, columnStartIndex, rowCount, columnCount);
226 SetLastResultReturn(r);
230 _GroupContainerImpl::SetChildResizingEnabled(int rowIndex, int columnIndex, bool enable)
232 result r = GetCore().SetChildResizingEnabled(rowIndex, columnIndex, enable);
233 SetLastResultReturn(r);
237 _GroupContainerImpl::SetMargin(int rowIndex, int columnIndex, int leftMargin, int rightMargin, int topMargin, int bottomMargin)
239 float floatLeftMargin = _CoordinateSystemUtils::ConvertToFloat(leftMargin);
240 float floatRightMargin = _CoordinateSystemUtils::ConvertToFloat(rightMargin);
241 float floatTopMargin = _CoordinateSystemUtils::ConvertToFloat(topMargin);
242 float floatBottomMargin = _CoordinateSystemUtils::ConvertToFloat(bottomMargin);
244 result r = GetCore().SetMargin(rowIndex, columnIndex, floatLeftMargin, floatRightMargin, floatTopMargin, floatBottomMargin);
245 SetLastResultReturn(r);
249 _GroupContainerImpl::SetMargin(int rowIndex, int columnIndex, float leftMargin, float rightMargin, float topMargin, float bottomMargin)
251 result r = GetCore().SetMargin(rowIndex, columnIndex, leftMargin, rightMargin, topMargin, bottomMargin);
252 SetLastResultReturn(r);
256 _GroupContainerImpl::Split(int rowIndex, int columnIndex)
258 result r = GetCore().Split(rowIndex, columnIndex);
259 SetLastResultReturn(r);
263 _GroupContainerImpl::GetBoundsAt(int rowIndex, int columnIndex) const
267 return _CoordinateSystemUtils::ConvertToInteger(GetCore().GetBoundsAt(rowIndex, columnIndex));
271 _GroupContainerImpl::GetBoundsAtF(int rowIndex, int columnIndex) const
275 return GetCore().GetBoundsAt(rowIndex, columnIndex);
279 _GroupContainerImpl::SetColumnStretchable(int columnIndex, bool stretchable)
281 result r = GetCore().SetColumnStretchable(columnIndex, stretchable);
282 SetLastResultReturn(r);
286 _GroupContainerImpl::IsColumnStretchable(int columnIndex)
290 return GetCore().IsColumnStretchable(columnIndex);
294 _GroupContainerImpl::SetRowStretchable(int rowIndex, bool stretchable)
296 result r = GetCore().SetRowStretchable(rowIndex, stretchable);
297 SetLastResultReturn(r);
301 _GroupContainerImpl::IsRowStretchable(int rowIndex)
305 return GetCore().IsRowStretchable(rowIndex);
309 _GroupContainerImpl::SetLineColor(const Color& color)
313 GetCore().SetLineColor(color);
319 _GroupContainerImpl::GetLineColor(void)
323 return GetCore().GetLineColor();
326 class _GroupContainerMaker
327 : public _UiBuilderControlMaker
330 _GroupContainerMaker(_UiBuilder* pUiBuilder)
331 : _UiBuilderControlMaker(pUiBuilder){};
332 virtual ~_GroupContainerMaker(void){};
334 static _UiBuilderControlMaker*
335 GetInstance(_UiBuilder* pUiBuilder)
337 _GroupContainerMaker* pGroupContainerMaker = new (std::nothrow) _GroupContainerMaker(pUiBuilder);
338 SysTryReturn(NID_UI_CTRL, pGroupContainerMaker, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
340 return pGroupContainerMaker;
345 Make(_UiBuilderControl* pControl)
348 _UiBuilderControlLayout* pControlProperty = null;
349 GroupContainer* pGroupContainer = null;
350 FloatRectangle rect(0.0f, 0.0f, 0.0f, 0.0f);
351 String elementString = L"";
354 float lineWidth = 1.0f;
355 Color backgroundColor(0, 0, 0, 0);
356 Color lineColor(0, 0, 0, 0);
358 GetProperty(pControl, &pControlProperty);
360 if (pControlProperty == null)
365 if (pControl->GetElement("rowCount", elementString))
367 Integer::Parse(elementString, rowCount);
370 if (pControl->GetElement("columnCount", elementString))
372 Integer::Parse(elementString, columnCount);
375 if (pControl->GetElement("lineWidth", elementString))
377 lineWidth = _LocalizedNumParser::ToDouble(elementString, "C");
380 rect = pControlProperty->GetRectF();
382 pGroupContainer = new (std::nothrow) GroupContainer();
383 SysTryReturn(NID_UI_CTRL, pGroupContainer, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
386 r = pGroupContainer->Construct(rect, rowCount, columnCount, lineWidth);
390 SysLog(NID_UI_CTRL, "Failed to create GroupContainer.");
392 delete pGroupContainer;
393 pGroupContainer = null;
398 if (pControl->GetElement(L"backgroundColor", elementString))
400 ConvertStringToColor(elementString, backgroundColor);
401 pGroupContainer->SetBackgroundColor(backgroundColor);
404 if (pControl->GetElement(L"lineColor", elementString))
406 ConvertStringToColor(elementString, lineColor);
407 pGroupContainer->SetBackgroundColor(lineColor);
410 return pGroupContainer;
412 }; // _GroupContainerMaker
414 _GroupContainerRegister::_GroupContainerRegister(void)
416 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
417 if (pUiBuilderControlTableManager)
419 pUiBuilderControlTableManager->RegisterControl(L"GroupContainer", _GroupContainerMaker::GetInstance);
423 _GroupContainerRegister::~_GroupContainerRegister(void)
425 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
426 if (pUiBuilderControlTableManager)
428 pUiBuilderControlTableManager->UnregisterControl(L"GroupContainer");
431 static _GroupContainerRegister GroupContainerRegisterToUiBuilder;
432 }}} //Tizen::Ui::Controls