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.
18 * @file FUiCtrl_ProgressPresenter.cpp
19 * @brief This is the implementation file for the _ProgressPresenter class.
22 #include <FBaseErrorDefine.h>
23 #include <FBaseSysLog.h>
24 #include <FGrp_BitmapImpl.h>
25 #include "FUi_ResourceManager.h"
26 #include "FUiCtrl_ProgressPresenter.h"
27 #include "FUiCtrl_ProgressModel.h"
28 #include "FUiCtrl_Progress.h"
30 using namespace Tizen::Graphics;
32 namespace Tizen { namespace Ui { namespace Controls
35 _ProgressPresenter::_ProgressPresenter(void)
37 , __pProgressModel(null)
38 , __pResourceBitmap(null)
39 , __pBarResourceEffectBitmap(null)
40 , __pBarBgResourceEffectBitmap(null)
41 , __pBarColorReplacementBitmap(null)
42 , __pBarBgColorReplacementBitmap(null)
46 _ProgressPresenter::~_ProgressPresenter(void)
48 delete __pProgressModel;
49 __pProgressModel = null;
51 delete __pResourceBitmap;
52 __pResourceBitmap = null;
54 delete __pBarResourceEffectBitmap;
55 __pBarResourceEffectBitmap = null;
57 delete __pBarBgResourceEffectBitmap;
58 __pBarBgResourceEffectBitmap = null;
60 delete __pBarColorReplacementBitmap;
61 __pBarColorReplacementBitmap = null;
63 delete __pBarBgColorReplacementBitmap;
64 __pBarBgColorReplacementBitmap = null;
68 _ProgressPresenter::CreateInstanceN(const _Progress& progress)
71 _ProgressPresenter* pProgressPresenter = new (std::nothrow) _ProgressPresenter;
72 SysTryReturn(NID_UI_CTRL, pProgressPresenter != null, null, E_OUT_OF_MEMORY,
73 "[E_OUT_OF_MEMORY] Memory allocation failed.");
75 pProgressPresenter->__pProgress = const_cast <_Progress*>(&progress);
76 SysTryCatch(NID_UI_CTRL, pProgressPresenter->__pProgress != null, , E_SYSTEM,
77 "[E_SYSTEM] A system error has occurred. The Progress control core is null");
79 pProgressPresenter->__pProgressModel = new (std::nothrow) _ProgressModel;
80 SysTryCatch(NID_UI_CTRL, pProgressPresenter->__pProgressModel != null, , E_OUT_OF_MEMORY,
81 "[E_OUT_OF_MEMORY] Memory allocation failed.");
83 r = pProgressPresenter->LoadResource();
84 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] A system error has occurred. The loading of resource failed");
86 return pProgressPresenter;
89 delete pProgressPresenter;
90 pProgressPresenter = null;
96 _ProgressPresenter::SetValue(int value)
98 int maxValue = __pProgressModel->GetMaxValue();
99 int minValue = __pProgressModel->GetMinValue();
101 if (value > maxValue)
105 else if (value < minValue)
110 __pProgressModel->SetValue(value);
116 _ProgressPresenter::SetMinValue(int minValue)
118 __pProgressModel->SetMinValue(minValue);
120 if (__pProgressModel->GetValue() < minValue)
122 __pProgressModel->SetValue(minValue);
129 _ProgressPresenter::SetMaxValue(int maxValue)
131 __pProgressModel->SetMaxValue(maxValue);
133 if (__pProgressModel->GetValue() > maxValue)
135 __pProgressModel->SetValue(maxValue);
141 _ProgressPresenter::GetValue(void) const
143 return __pProgressModel->GetValue();
147 _ProgressPresenter::GetMinValue(void) const
149 return __pProgressModel->GetMinValue();
153 _ProgressPresenter::GetMaxValue(void) const
155 return __pProgressModel->GetMaxValue();
159 _ProgressPresenter::GetPercentComplete(void) const
161 int percentValue = 0;
162 int span = __pProgressModel->GetMaxValue() - __pProgressModel->GetMinValue();
166 percentValue = (int) ((((double) __pProgressModel->GetValue() - __pProgressModel->GetMinValue()) / span) * 100);
173 _ProgressPresenter::LoadResource(void)
175 result r = E_SUCCESS;
182 r = GET_COLOR_CONFIG(SLIDER::BAR_BG_NORMAL, bgColor);
183 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
185 r = GET_COLOR_CONFIG(SLIDER::BAR_NORMAL, barColor);
186 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
188 r = GET_BITMAP_CONFIG_N(SLIDER::BAR_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pResourceBitmap);
189 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
191 __pBarBgColorReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBitmap,Color::GetColor(COLOR_ID_MAGENTA), bgColor);
193 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
195 delete __pResourceBitmap;
196 __pResourceBitmap = null;
198 r = GET_BITMAP_CONFIG_N(SLIDER::PROGRESS_BAR_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pResourceBitmap);
199 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
201 __pBarColorReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBitmap,Color::GetColor(COLOR_ID_MAGENTA), barColor);
203 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
205 r = GET_BITMAP_CONFIG_N(SLIDER::BAR_BG_EFFECT, BITMAP_PIXEL_FORMAT_ARGB8888, __pBarBgResourceEffectBitmap);
206 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
208 r = GET_BITMAP_CONFIG_N(SLIDER::PROGRESS_BAR_EFFECT, BITMAP_PIXEL_FORMAT_ARGB8888, __pBarResourceEffectBitmap);
209 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS), , r, "[%s] Propagating.", GetErrorMessage(r));
211 opacity = barColor.GetAlpha();
212 __pBarColorReplacementBitmap->SetAlphaConstant(opacity);
214 __currentBarColor = barColor;
220 delete __pResourceBitmap;
221 __pResourceBitmap = null;
223 delete __pBarResourceEffectBitmap;
224 __pBarResourceEffectBitmap = null;
226 delete __pBarBgResourceEffectBitmap;
227 __pBarBgResourceEffectBitmap = null;
229 delete __pBarColorReplacementBitmap;
230 __pBarColorReplacementBitmap = null;
232 delete __pBarBgColorReplacementBitmap;
233 __pBarBgColorReplacementBitmap = null;
239 _ProgressPresenter::DrawBitmap(Canvas& canvas, const Rectangle& bounds, Bitmap* pBitmap)
241 result r = E_SUCCESS;
243 if (pBitmap->IsNinePatchedBitmap())
245 r = canvas.DrawNinePatchedBitmap(bounds, *pBitmap);
246 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
250 r = canvas.DrawBitmap(bounds, *pBitmap);
251 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
257 _ProgressPresenter::Draw(void)
259 result r = E_SUCCESS;
261 Rectangle bounds = __pProgress->GetBounds();
262 Canvas* pCanvas = __pProgress->GetCanvasN();
263 SysTryReturn(NID_UI_CTRL, pCanvas != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] Failed to get a canvas.");
265 int minValue = __pProgressModel->GetMinValue();
266 int maxValue = __pProgressModel->GetMaxValue();
272 int minimumWidth = 0;
273 int minimumHeight = 0;
275 Bitmap* pReplacementBitmap = null;
277 GET_SHAPE_CONFIG(SLIDER::BAR_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, height);
278 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
280 GET_SHAPE_CONFIG(SLIDER::BAR_LEFT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, leftMargin);
281 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
283 r = GET_SHAPE_CONFIG(SLIDER::MINIMUM_SIZE_WITHOUT_ICON, _CONTROL_ORIENTATION_PORTRAIT, minimumWidth);
284 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
286 r = GET_SHAPE_CONFIG(SLIDER::BAR_TOP_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, topMargin);
287 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
289 r = GET_SHAPE_CONFIG(SLIDER::BAR_OFFSET, _CONTROL_ORIENTATION_PORTRAIT, offset);
290 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
292 minimumHeight = 2 * topMargin + height;
294 if (bounds.width < minimumWidth)
296 bounds.width = minimumWidth;
299 if (bounds.height < minimumHeight)
301 bounds.height = minimumHeight;
304 pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
307 width = bounds.width - (2 * leftMargin) - (2 * offset);
308 if (maxValue == __pProgressModel->GetValue())
310 width = bounds.width - (2 * leftMargin) - (2 * offset);
314 width = (width) * ((__pProgressModel->GetValue() - minValue) * 100 / (maxValue - minValue)) / 100;
317 if (__pProgress->IsEnabled() == false) // disabled
319 __pBarBgColorReplacementBitmap->SetAlphaConstant(0x4C);
323 opacity = __pProgress->GetBarColor().GetAlpha();
324 __pBarBgColorReplacementBitmap->SetAlphaConstant(opacity);
327 r = DrawBitmap(*pCanvas, Rectangle(leftMargin, (bounds.height - height) / 2, (bounds.width - (2 * leftMargin)), height), __pBarBgColorReplacementBitmap);
328 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
330 r = DrawBitmap(*pCanvas, Rectangle(leftMargin, (bounds.height - height) / 2, (bounds.width - (2 * leftMargin)), height), __pBarBgResourceEffectBitmap);
331 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
335 if (__pProgress->GetBarColor() != __currentBarColor)
337 pReplacementBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pResourceBitmap, Color::GetColor(COLOR_ID_MAGENTA), __pProgress->GetBarColor());
339 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Failed to get replacement color.", GetErrorMessage(r));
340 delete __pBarColorReplacementBitmap;
341 __pBarColorReplacementBitmap = null;
343 __pBarColorReplacementBitmap = pReplacementBitmap;
344 __currentBarColor = __pProgress->GetBarColor();
346 if (__pProgress->IsEnabled() == false) // disabled
348 __pBarColorReplacementBitmap->SetAlphaConstant(0x4C);
352 opacity = __pProgress->GetBarColor().GetAlpha();
353 __pBarColorReplacementBitmap->SetAlphaConstant(opacity);
356 r = DrawBitmap(*pCanvas, Rectangle((leftMargin + offset), (bounds.height - height) / 2, width, height), __pBarColorReplacementBitmap);
357 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
359 r = DrawBitmap(*pCanvas, Rectangle((leftMargin + offset), (bounds.height - height) / 2, width, height), __pBarResourceEffectBitmap);
360 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
377 }}} // Tizen::Ui::Controls