Changed indicator bg color.
[platform/framework/native/uifw.git] / src / ui / controls / FUiCtrl_OptionMenuImpl.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
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
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0/
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 /**
19  * @file                FUiCtrl_OptionMenuImpl.cpp
20  * @brief               This is the implementation file for the _OptionMenuImpl class.
21  */
22
23 #include <FBaseSysLog.h>
24 #include <FBaseResult.h>
25
26 #include "FUi_ResourceManager.h"
27 #include "FUiCtrl_OptionMenuImpl.h"
28 #include "FUiCtrl_PublicActionEvent.h"
29
30 using namespace Tizen::Base;
31 using namespace Tizen::Base::Runtime;
32 using namespace Tizen::Ui;
33 using namespace Tizen::Graphics;
34
35 namespace Tizen { namespace Ui { namespace Controls
36 {
37
38 _OptionMenuImpl*
39 _OptionMenuImpl::GetInstance(OptionMenu& optionMenu)
40 {
41         return static_cast<_OptionMenuImpl*>(optionMenu._pControlImpl);
42 }
43
44 const _OptionMenuImpl*
45 _OptionMenuImpl::GetInstance(const OptionMenu& optionMenu)
46 {
47         return static_cast<const _OptionMenuImpl*>(optionMenu._pControlImpl);
48 }
49
50 _OptionMenuImpl::_OptionMenuImpl(OptionMenu* pPublic, _OptionMenu* pCore)
51         : _WindowImpl(pPublic, pCore)
52         , __pPublicActionEvent(null)
53 {
54 }
55
56 _OptionMenuImpl*
57 _OptionMenuImpl::CreateOptionMenuImplN(OptionMenu& control)
58 {
59         ClearLastResult();
60
61         _OptionMenu* pCore = _OptionMenu::CreateOptionMenuN();
62         result r = GetLastResult();
63         SysTryReturn(NID_UI_CTRL, (pCore != null), null, r, "[%s] Propagating.", GetErrorMessage(r));
64
65         int itemMaxCount = 0;
66         GET_SHAPE_CONFIG(OPTIONMENU::ITEM_MAX_COUNT, _CONTROL_ORIENTATION_PORTRAIT, itemMaxCount);
67         pCore->SetShowItemCount(itemMaxCount);
68
69         _OptionMenuImpl* pImpl = new (std::nothrow) _OptionMenuImpl(&control, pCore);
70         r = CheckConstruction(pCore, pImpl);
71         SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), null, r, "[%s] Propagating.", GetErrorMessage(r));
72
73         pImpl->__pPublicActionEvent = _PublicActionEvent::CreateInstanceN(control);
74         r = GetLastResult();
75         SysTryCatch(NID_UI_CTRL, (pImpl->__pPublicActionEvent != null), , r,
76                         "[%s] Propagating.", GetErrorMessage(r));
77
78         r = pCore->AddActionEventListener(*pImpl);
79         SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
80
81         return pImpl;
82
83 CATCH:
84         delete pImpl;
85         return null;
86 }
87
88 _OptionMenuImpl::~_OptionMenuImpl(void)
89 {
90         if (__pPublicActionEvent != null)
91         {
92                 delete __pPublicActionEvent;
93                 __pPublicActionEvent = null;
94         }
95 }
96
97 result
98 _OptionMenuImpl::AddActionEventListener(IActionEventListener& listener)
99 {
100         ClearLastResult();
101
102         return __pPublicActionEvent->AddListener(listener);
103 }
104
105 result
106 _OptionMenuImpl::RemoveActionEventListener(IActionEventListener& listener)
107 {
108         ClearLastResult();
109
110         return __pPublicActionEvent->RemoveListener(listener);
111 }
112
113 result
114 _OptionMenuImpl::AddItem(const String& text, int actionId, const Bitmap* pNormalBitmap,
115                 const Bitmap* pPressedBitmap, const Bitmap* pHighlightedBitmap)
116 {
117         ClearLastResult();
118
119         return GetCore().AddItem(text, actionId, pNormalBitmap, pPressedBitmap, pHighlightedBitmap);
120 }
121
122 result
123 _OptionMenuImpl::InsertItemAt(int mainIndex, const String& text, int actionId, const Bitmap* normalBitmap,
124                 const Bitmap* pPressedBitmap, const Bitmap *pHighlightedBitmap)
125 {
126         ClearLastResult();
127         SysTryReturn(NID_UI_CTRL, (mainIndex >= 0 && mainIndex <= GetItemCount()), E_INVALID_ARG, E_INVALID_ARG,
128                         "[E_INVALID_ARG] The specified main index (%d) is invalid.", mainIndex);
129
130         return GetCore().InsertItemAt(mainIndex, text, actionId, normalBitmap, pPressedBitmap, pHighlightedBitmap);
131 }
132
133 result
134 _OptionMenuImpl::SetItemAt(int mainIndex, const String& text, int actionId, const Bitmap* normalBitmap,
135                 const Bitmap* pPressedBitmap, const Bitmap *pHighlightedBitmap)
136 {
137         ClearLastResult();
138         SysTryReturn(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetItemCount()), E_INVALID_ARG, E_INVALID_ARG,
139                         "[E_INVALID_ARG] The specified main index (%d) is invalid.", mainIndex);
140
141         return GetCore().SetItemAt(mainIndex, text, actionId, normalBitmap, pPressedBitmap, pHighlightedBitmap);
142 }
143
144 result
145 _OptionMenuImpl::RemoveItemAt(int mainIndex)
146 {
147         ClearLastResult();
148     SysTryReturn(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetItemCount()), E_INVALID_ARG, E_INVALID_ARG,
149             "[E_INVALID_ARG] The specified main index (%d) is invalid.", mainIndex);
150
151         return GetCore().RemoveItemAt(mainIndex);
152 }
153
154 void
155 _OptionMenuImpl::RemoveAllItems(void)
156 {
157         ClearLastResult();
158
159         GetCore().RemoveAllItems();
160
161         return;
162 }
163
164 int
165 _OptionMenuImpl::GetItemCount(void) const
166 {
167         ClearLastResult();
168
169         return GetCore().GetItemCount();
170 }
171
172 int
173 _OptionMenuImpl::GetItemIndexFromActionId(int actionId) const
174 {
175         ClearLastResult();
176
177         return GetCore().GetItemIndexAt(actionId);
178 }
179
180 int
181 _OptionMenuImpl::GetItemActionIdAt(int mainIndex) const
182 {
183         ClearLastResult();
184         SysTryReturn(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetItemCount()), E_INVALID_ARG, E_INVALID_ARG,
185                         "[E_INVALID_ARG] The specified main index (%d) is invalid.", mainIndex);
186
187         return GetCore().GetItemActionIdAt(mainIndex);
188 }
189
190 result
191 _OptionMenuImpl::AddSubItem(int mainIndex, const String& text, int actionId)
192 {
193         ClearLastResult();
194         SysTryReturn(NID_UI_CTRL, (mainIndex >= 0), E_INVALID_ARG, E_INVALID_ARG,
195                         "[E_INVALID_ARG] The specified main index (%d) is negative.", mainIndex);
196
197         return GetCore().AddSubItem(mainIndex, text, actionId);
198 }
199
200 result
201 _OptionMenuImpl::InsertSubItemAt(int mainIndex, int subIndex, const String& text, int actionId)
202 {
203         ClearLastResult();
204         SysTryReturn(NID_UI_CTRL, (mainIndex >= 0), E_INVALID_ARG, E_INVALID_ARG,
205                         "[E_INVALID_ARG] The specified main index (%d) is negative.", mainIndex);
206         SysTryReturn(NID_UI_CTRL, (subIndex >= 0), E_INVALID_ARG, E_INVALID_ARG,
207                         "[E_INVALID_ARG] The specified sub index (%d) is negative.", subIndex);
208
209         return GetCore().InsertSubItemAt(mainIndex, subIndex, text, actionId);
210 }
211
212 result
213 _OptionMenuImpl::SetSubItemAt(int mainIndex, int subIndex, const String& text, int actionId)
214 {
215         ClearLastResult();
216         SysTryReturn(NID_UI_CTRL, (mainIndex >= 0), E_INVALID_ARG, E_INVALID_ARG,
217                         "[E_INVALID_ARG] The specified main index (%d) is negative.", mainIndex);
218         SysTryReturn(NID_UI_CTRL, (subIndex >= 0), E_INVALID_ARG, E_INVALID_ARG,
219                         "[E_INVALID_ARG] The specified sub index (%d) is negative.", subIndex);
220
221         return GetCore().SetSubItemAt(mainIndex, subIndex, text, actionId);
222 }
223
224 result
225 _OptionMenuImpl::RemoveSubItemAt(int mainIndex, int subIndex)
226 {
227         ClearLastResult();
228         SysTryReturn(NID_UI_CTRL, (mainIndex >= 0), E_INVALID_ARG, E_INVALID_ARG,
229                         "[E_INVALID_ARG] The specified main index (%d) is negative.", mainIndex);
230         SysTryReturn(NID_UI_CTRL, (subIndex >= 0), E_INVALID_ARG, E_INVALID_ARG,
231                         "[E_INVALID_ARG] The specified sub index (%d) is negative.", subIndex);
232
233         return GetCore().RemoveSubItemAt(mainIndex, subIndex);
234 }
235
236 int
237 _OptionMenuImpl::GetSubItemCount(int mainIndex) const
238 {
239         ClearLastResult();
240         SysTryReturn(NID_UI_CTRL, (mainIndex >= 0), E_INVALID_ARG, E_INVALID_ARG,
241                         "[E_INVALID_ARG] The specified main index (%d) is negative.", mainIndex);
242
243         return GetCore().GetSubItemCount(mainIndex);
244 }
245
246 int
247 _OptionMenuImpl::GetSubItemIndexFromActionId(int actionId) const
248 {
249         ClearLastResult();
250
251         return GetCore().GetSubItemIndexFromActionId(actionId);
252 }
253
254 int
255 _OptionMenuImpl::GetSubItemActionIdAt(int mainIndex, int subIndex) const
256 {
257         ClearLastResult();
258         SysTryReturn(NID_UI_CTRL, (mainIndex >= 0), E_INVALID_ARG, E_INVALID_ARG,
259                         "[E_INVALID_ARG] The specified main index (%d) is negative.", mainIndex);
260         SysTryReturn(NID_UI_CTRL, (subIndex >= 0), E_INVALID_ARG, E_INVALID_ARG,
261                         "[E_INVALID_ARG] The specified sub index (%d) is negative.", subIndex);
262
263         return GetCore().GetSubItemActionIdAt(mainIndex, subIndex);
264 }
265
266 result
267 _OptionMenuImpl::SetItemTextColor(OptionMenuItemStatus status, const Color& color)
268 {
269         ClearLastResult();
270
271         result r = E_SUCCESS;
272
273         switch (status)
274         {
275         case OPTION_MENU_ITEM_STATUS_NORMAL:
276                 r = GetCore().SetTextColor(OPTION_MENU_CORE_ITEM_STATUS_NORMAL, color);
277                 break;
278
279         case OPTION_MENU_ITEM_STATUS_PRESSED:
280                 r = GetCore().SetTextColor(OPTION_MENU_CORE_ITEM_STATUS_PRESSED, color);
281                 break;
282
283         case OPTION_MENU_ITEM_STATUS_HIGHLIGHTED:
284                 r = GetCore().SetTextColor(OPTION_MENU_CORE_ITEM_STATUS_HIGHLIGHTED, color);
285                 break;
286
287         default:
288                 SysLogException(NID_UI_CTRL, E_INVALID_ARG, "Invalid argument at OptionMenuItemStatus.");
289                 r = E_INVALID_ARG;
290                 break;
291         }
292
293         return r;
294 }
295
296 Color
297 _OptionMenuImpl::GetItemTextColor(OptionMenuItemStatus status) const
298 {
299         ClearLastResult();
300
301         Tizen::Graphics::Color color(0, 0, 0, 0);
302
303         switch (status)
304         {
305         case OPTION_MENU_ITEM_STATUS_NORMAL:
306                 color = GetCore().GetTextColor(OPTION_MENU_CORE_ITEM_STATUS_NORMAL);
307                 break;
308
309         case OPTION_MENU_ITEM_STATUS_PRESSED:
310                 color = GetCore().GetTextColor(OPTION_MENU_CORE_ITEM_STATUS_PRESSED);
311                 break;
312
313         case OPTION_MENU_ITEM_STATUS_HIGHLIGHTED:
314                 color = GetCore().GetTextColor(OPTION_MENU_CORE_ITEM_STATUS_HIGHLIGHTED);
315                 break;
316
317         default:
318                 SysLogException(NID_UI_CTRL, E_SYSTEM, "Invalid argument at OptionMenuItemStatus.");
319                 break;
320         }
321
322         return color;
323 }
324
325 result
326 _OptionMenuImpl::SetItemColor(OptionMenuItemStatus status, const Color& color)
327 {
328         ClearLastResult();
329
330         result r = E_SUCCESS;
331
332         switch (status)
333         {
334         //The item color for OPTION_MENU_ITEM_STATUS_NORMAL is not supported.
335         //case OPTION_MENU_ITEM_STATUS_NORMAL:
336
337         case OPTION_MENU_ITEM_STATUS_PRESSED:
338                 r = GetCore().SetItemColor(OPTION_MENU_CORE_ITEM_STATUS_PRESSED, color);
339                 break;
340
341         case OPTION_MENU_ITEM_STATUS_HIGHLIGHTED:
342                 r = GetCore().SetItemColor(OPTION_MENU_CORE_ITEM_STATUS_HIGHLIGHTED, color);
343                 break;
344
345         default:
346                 SysLogException(NID_UI_CTRL, E_INVALID_ARG, "Invalid argument at OptionMenuItemStatus.");
347                 r = E_INVALID_ARG;
348                 break;
349         }
350
351         return r;
352 }
353
354 Color
355 _OptionMenuImpl::GetItemColor(OptionMenuItemStatus status) const
356 {
357         ClearLastResult();
358
359         Tizen::Graphics::Color color(0, 0, 0, 0);
360
361         switch (status)
362         {
363         case OPTION_MENU_ITEM_STATUS_NORMAL:
364                 color = GetCore().GetItemColor(OPTION_MENU_CORE_ITEM_STATUS_NORMAL);
365                 break;
366
367         case OPTION_MENU_ITEM_STATUS_PRESSED:
368                 color = GetCore().GetItemColor(OPTION_MENU_CORE_ITEM_STATUS_PRESSED);
369                 break;
370
371         case OPTION_MENU_ITEM_STATUS_HIGHLIGHTED:
372                 color = GetCore().GetItemColor(OPTION_MENU_CORE_ITEM_STATUS_HIGHLIGHTED);
373                 break;
374
375         default:
376                 SysLogException(NID_UI_CTRL, E_SYSTEM, "Invalid argument at OptionMenuItemStatus.");
377                 break;
378         }
379
380         return color;
381 }
382
383 result
384 _OptionMenuImpl::SetColor(const Color& color)
385 {
386         ClearLastResult();
387
388         return GetCore().SetColor(color);
389 }
390
391 Color
392 _OptionMenuImpl::GetColor(void) const
393 {
394         ClearLastResult();
395
396         return GetCore().GetColor();
397 }
398
399 result
400 _OptionMenuImpl::SetMaxVisibleItemsCount(int maxItemsCount)
401 {
402         ClearLastResult();
403
404         return GetCore().SetMaxVisibleItemsCount(maxItemsCount);
405 }
406
407 int
408 _OptionMenuImpl::GetMaxVisibleItemsCount(void) const
409 {
410         ClearLastResult();
411         return GetCore().GetPropertyMaxVisibleItemsCount().ToInt();
412 }
413
414 result
415 _OptionMenuImpl::OnAttachedToMainTree(void)
416 {
417         SysTryReturn(NID_UI_CTRL, (GetCore().GetItemCount() > 0), E_INVALID_OPERATION, E_INVALID_OPERATION,
418                         "[E_INVALID_OPERATION] There is no item to show.");
419
420         return _WindowImpl::OnAttachedToMainTree();;
421 }
422
423 const char*
424 _OptionMenuImpl::GetPublicClassName(void) const
425 {
426         return "Tizen::Ui::Controls::OptionMenu";
427 }
428
429 const OptionMenu&
430 _OptionMenuImpl::GetPublic(void) const
431 {
432         return static_cast <const OptionMenu&>(_ControlImpl::GetPublic());
433 }
434
435 OptionMenu&
436 _OptionMenuImpl::GetPublic(void)
437 {
438         return static_cast <OptionMenu&>(_ControlImpl::GetPublic());
439 }
440
441 const _OptionMenu&
442 _OptionMenuImpl::GetCore(void) const
443 {
444         return static_cast <const _OptionMenu&>(_ControlImpl::GetCore());
445 }
446
447 _OptionMenu&
448 _OptionMenuImpl::GetCore(void)
449 {
450         return static_cast <_OptionMenu&>(_ControlImpl::GetCore());
451 }
452
453 void
454 _OptionMenuImpl::OnActionPerformed(const _Control& source, int actionId)
455 {
456         if (__pPublicActionEvent != null)
457         {
458                 IEventArg* pEventArg = _PublicActionEvent::CreateActionEventArgN(actionId);
459                 if (pEventArg == null)
460                 {
461                         return;
462                 }
463
464                 __pPublicActionEvent->Fire(*pEventArg);
465         }
466 }
467
468 }}} // Tizen::Ui::Controls