Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / controls / FUiCtrl_ColorPickerImpl.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
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
8 //
9 //     http://floralicense.org/license/
10 //
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.
16 //
17 /**
18 * @file                 FUiCtrl_ColorPickerImpl.cpp
19 * @brief                This file contains implementation of _ColorPickerImpl class
20 *
21 * This file contains implementation of _ColorPickerImpl class.
22 */
23
24 #include "FUi_ResourceManager.h"
25 #include "FUi_ResourceSizeInfo.h"
26 #include "FUi_UiBuilder.h"
27 #include "FUiCtrl_ColorPickerImpl.h"
28 #include "FUiCtrl_ColorPickerPresenter.h"
29 #include "FUiCtrl_PublicColorChangeEvent.h"
30
31 using namespace Tizen::Graphics;
32
33 namespace Tizen { namespace Ui { namespace Controls
34 {
35
36 Dimension
37 _ColorPickerImpl::ColorPickerSizeInfo::GetDefaultMaximumSize(_ControlOrientation orientation) const
38 {
39         result r = E_SUCCESS;
40         Dimension colorPickerMaxSize;
41
42         r = GET_DIMENSION_CONFIG(COLORPICKER::DEFAULT_SIZE, orientation, colorPickerMaxSize);
43         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, colorPickerMaxSize, r, "[%s] Propagating.", GetErrorMessage(r));
44
45         return colorPickerMaxSize;
46 }
47
48 Dimension
49 _ColorPickerImpl::ColorPickerSizeInfo::GetDefaultMinimumSize(_ControlOrientation orientation) const
50 {
51         result r = E_SUCCESS;
52         Dimension colorPickerMinSize;
53
54         r = GET_DIMENSION_CONFIG(COLORPICKER::DEFAULT_SIZE, orientation, colorPickerMinSize);
55         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, colorPickerMinSize, r, "[%s] Propagating.", GetErrorMessage(r));
56
57         return colorPickerMinSize;
58 }
59
60 _ColorPickerImpl*
61 _ColorPickerImpl::GetInstance(ColorPicker& colorPicker)
62 {
63         return static_cast<_ColorPickerImpl*>(colorPicker._pControlImpl);
64 }
65
66 const _ColorPickerImpl*
67 _ColorPickerImpl::GetInstance(const ColorPicker& colorPicker)
68 {
69         return static_cast<const _ColorPickerImpl*>(colorPicker._pControlImpl);
70 }
71
72 _ColorPickerImpl::_ColorPickerImpl(ColorPicker& pPublic, _ColorPicker& pCore)
73         : _ControlImpl(&pPublic, &pCore)
74         , __pPublicColorChangeEvent(null)
75 {
76         __pPublicColorChangeEvent = _PublicColorChangeEvent::CreateInstanceN(pPublic);
77         pCore.AddColorChangeEventListener(*this);
78 }
79
80 _ColorPickerImpl::~_ColorPickerImpl(void)
81 {
82         if (__pPublicColorChangeEvent != null)
83         {
84                 delete __pPublicColorChangeEvent;
85                 __pPublicColorChangeEvent = null;
86         }
87 }
88
89 _ColorPickerImpl*
90 _ColorPickerImpl::CreateColorPickerImplN(ColorPicker& control)
91 {
92         ClearLastResult();
93         _ColorPicker* pCore = _ColorPicker::CreateColorPickerN();
94         if (pCore == null)
95         {
96                 return null;
97         }
98
99         _ColorPickerImpl* pImpl = new (std::nothrow) _ColorPickerImpl(control, *pCore);
100         result r = CheckConstruction(pCore, pImpl);
101         if (r != E_SUCCESS)
102         {
103                 return null;
104         }
105
106         Dimension defaultSize;
107         r = GET_DIMENSION_CONFIG(COLORPICKER::DEFAULT_SIZE, pCore->GetOrientation(), defaultSize);
108         if (r != E_SUCCESS)
109         {
110                 goto CATCH;
111         }
112
113         r = pImpl->InitializeBoundsProperties(GET_SIZE_INFO(ColorPicker), defaultSize, pCore->GetOrientation());
114         if (r != E_SUCCESS)
115         {
116                 goto CATCH;
117         }
118
119         return pImpl;
120 CATCH:
121         delete pImpl;
122         return null;
123 }
124
125 const Tizen::Graphics::Color
126 _ColorPickerImpl::GetColor(void) const
127 {
128         ClearLastResult();
129
130         return GetCore().GetPropertyColor().ToColor();
131 }
132
133 const int
134 _ColorPickerImpl::GetHue(void) const
135 {
136         ClearLastResult();
137
138         return GetCore().GetPropertyHue().ToInt();
139 }
140
141 const int
142 _ColorPickerImpl::GetSaturation(void) const
143 {
144         ClearLastResult();
145
146         return GetCore().GetPropertySaturation().ToInt();
147 }
148
149 const int
150 _ColorPickerImpl::GetLuminance(void) const
151 {
152         ClearLastResult();
153
154         return GetCore().GetPropertyLuminance().ToInt();
155 }
156
157 result
158 _ColorPickerImpl::SetColor(const Tizen::Graphics::Color& color)
159 {
160         ClearLastResult();
161         Variant varColor(color);
162
163         return GetCore().SetPropertyColor(varColor);
164 }
165
166 result
167 _ColorPickerImpl::SetHue(int hue)
168 {
169         ClearLastResult();
170         Variant varHue(hue);
171
172         return GetCore().SetPropertyHue(varHue);
173 }
174
175 result
176 _ColorPickerImpl::SetSaturation(int saturation)
177 {
178         ClearLastResult();
179         Variant varSaturation(saturation);
180
181         return GetCore().SetPropertySaturation(varSaturation);
182 }
183
184 result
185 _ColorPickerImpl::SetLuminance(int luminance)
186 {
187         ClearLastResult();
188         Variant varLuminance(luminance);
189
190         return GetCore().SetPropertyLuminance(varLuminance);
191 }
192
193 result
194 _ColorPickerImpl::AddColorChangeEventListener(Tizen::Ui::IColorChangeEventListener& listener)
195 {
196         ClearLastResult();
197         result r = E_SUCCESS;
198
199         SysTryReturnResult(NID_UI_CTRL, (__pPublicColorChangeEvent != null), E_SYSTEM, "A system error has occurred. The _PublicColorChangeEvent instance is null.");
200
201         r = __pPublicColorChangeEvent->AddListener(listener);
202
203         SysTryReturnResult(NID_UI_CTRL, (r != E_OBJ_ALREADY_EXIST), E_SYSTEM,
204                         "A system error has occurred. The IColorChangeEventListener instance already exists in the event listener list.");
205
206         return r;
207 }
208
209 result
210 _ColorPickerImpl::RemoveColorChangeEventListener(Tizen::Ui::IColorChangeEventListener& listener)
211 {
212         ClearLastResult();
213         result r = E_SUCCESS;
214
215         SysTryReturnResult(NID_UI_CTRL, __pPublicColorChangeEvent != null, E_SYSTEM, "A system error has occurred. The _PublicColorChangeEvent instance is null.");
216
217         r = __pPublicColorChangeEvent->RemoveListener(listener);
218
219         SysTryReturnResult(NID_UI_CTRL, (r != E_OBJ_NOT_FOUND), E_SYSTEM,
220                         "A system error has occurred. The IColorChangeEventListener instance does not exist in the event listener list.");
221
222         return r;
223 }
224
225 ColorPicker&
226 _ColorPickerImpl::GetPublic(void)
227 {
228         return static_cast <ColorPicker&>(_ControlImpl::GetPublic());
229 }
230
231 const ColorPicker&
232 _ColorPickerImpl::GetPublic(void) const
233 {
234         return static_cast <const ColorPicker&>(_ControlImpl::GetPublic());
235 }
236
237 _ColorPicker&
238 _ColorPickerImpl::GetCore(void)
239 {
240         return static_cast <_ColorPicker&>(_ControlImpl::GetCore());
241 }
242
243 const _ColorPicker&
244 _ColorPickerImpl::GetCore(void) const
245 {
246         return static_cast <const _ColorPicker&>(_ControlImpl::GetCore());
247 }
248
249 const char*
250 _ColorPickerImpl::GetPublicClassName(void) const
251 {
252         return "Tizen::Ui::Controls::ColorPicker";
253 }
254
255 void
256 _ColorPickerImpl::OnColorChanged(const Tizen::Ui::_Control& source, const Tizen::Graphics::Color& color)
257 {
258         Tizen::Base::Runtime::IEventArg * pColorChangeEventArg = _PublicColorChangeEvent::CreateColorChangeEventArgN(color);
259         if (pColorChangeEventArg == null)
260         {
261                 return;
262         }
263
264         __pPublicColorChangeEvent->Fire(*pColorChangeEventArg);
265
266         return;
267 }
268
269 class _ColorPickerMaker
270         : public _UiBuilderControlMaker
271 {
272 public:
273         _ColorPickerMaker(_UiBuilder* pUibuilder)
274                 : _UiBuilderControlMaker(pUibuilder)
275         {
276         }
277
278         virtual ~_ColorPickerMaker(void)
279         {
280         }
281
282         static _UiBuilderControlMaker*
283         GetInstance(_UiBuilder* uibuilder)
284         {
285                 _ColorPickerMaker* pColorPickerMaker = new (std::nothrow) _ColorPickerMaker(uibuilder);
286                 return pColorPickerMaker;
287         }
288
289 protected:
290         virtual Control*
291         Make(_UiBuilderControl* pControl)
292         {
293                 result r = E_SUCCESS;
294                 _UiBuilderControlLayout* pControlProperty = null;
295                 ColorPicker* pColorPicker = null;
296                 Point point;
297                 Rectangle rect;
298
299                 GetProperty(pControl, &pControlProperty);
300                 SysTryReturn(NID_UI_CTRL, (pControlProperty != null), null, E_SYSTEM,
301                                         "[E_SYSTEM] A system error has occurred. Failed to read the attributes.");
302
303                 pColorPicker = new (std::nothrow) ColorPicker;
304                 SysTryReturn(NID_UI_CTRL, (pColorPicker != null), null, E_OUT_OF_MEMORY,
305                                         "[E_OUT_OF_MEMORY] Memory allocation failed.");
306
307                 rect = pControlProperty->GetRect();
308
309                 point.x = rect.x;
310                 point.y = rect.y;
311
312                 r = pColorPicker->Construct(point);
313                 if (r != E_SUCCESS)
314                 {
315                         delete pColorPicker;
316                         return null;
317                 }
318
319                 return pColorPicker;
320         }
321 };
322
323 _ColorPickerRegister::_ColorPickerRegister(void)
324 {
325         _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
326         pUiBuilderControlTableManager->RegisterControl(L"ColorPicker", _ColorPickerMaker::GetInstance);
327 }
328
329 _ColorPickerRegister::~_ColorPickerRegister(void)
330 {
331         _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
332         pUiBuilderControlTableManager->UnregisterControl(L"ColorPicker");
333 }
334
335 static _ColorPickerRegister ColorPickerRegisterToUiBuilder;
336 }}} // Tizen::Ui::Controls