2 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <dali-toolkit/internal/controls/progress-bar/progress-bar-impl.h>
22 #include <dali-toolkit/devel-api/controls/control-devel.h>
23 #include <dali-toolkit/devel-api/visual-factory/visual-base.h>
24 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
25 #include <dali-toolkit/devel-api/visuals/arc-visual-properties-devel.h>
26 #include <dali-toolkit/internal/controls/control/control-data-impl.h>
27 #include <dali-toolkit/internal/visuals/visual-base-impl.h>
28 #include <dali-toolkit/internal/visuals/visual-string-constants.h>
29 #include <dali-toolkit/public-api/align-enumerations.h>
30 #include <dali-toolkit/public-api/visuals/color-visual-properties.h>
31 #include <dali-toolkit/public-api/visuals/image-visual-properties.h>
32 #include <dali-toolkit/public-api/visuals/text-visual-properties.h>
33 #include <dali-toolkit/public-api/visuals/visual-properties.h>
34 #include <dali/public-api/math/math-utils.h>
35 #include <dali/public-api/object/type-registry-helper.h>
36 #include <dali/public-api/size-negotiation/relayout-container.h>
38 #include <cstring> // for strcmp
41 #include <dali/integration-api/debug.h>
49 namespace // Unnamed namespace
53 return Dali::Toolkit::ProgressBar::New();
57 // Setup properties, signals and actions using the type-registry.
58 DALI_TYPE_REGISTRATION_BEGIN(Toolkit::ProgressBar, Toolkit::Control, Create)
60 DALI_PROPERTY_REGISTRATION(Toolkit, ProgressBar, "progressValue", FLOAT, PROGRESS_VALUE )
61 DALI_PROPERTY_REGISTRATION(Toolkit, ProgressBar, "secondaryProgressValue", FLOAT, SECONDARY_PROGRESS_VALUE )
62 DALI_PROPERTY_REGISTRATION(Toolkit, ProgressBar, "indeterminate", BOOLEAN, INDETERMINATE )
63 DALI_PROPERTY_REGISTRATION(Toolkit, ProgressBar, "trackVisual", MAP, TRACK_VISUAL )
64 DALI_PROPERTY_REGISTRATION(Toolkit, ProgressBar, "progressVisual", MAP, PROGRESS_VISUAL )
65 DALI_PROPERTY_REGISTRATION(Toolkit, ProgressBar, "secondaryProgressVisual", MAP, SECONDARY_PROGRESS_VISUAL )
66 DALI_PROPERTY_REGISTRATION(Toolkit, ProgressBar, "indeterminateVisual", MAP, INDETERMINATE_VISUAL )
67 DALI_PROPERTY_REGISTRATION(Toolkit, ProgressBar, "indeterminateVisualAnimation", ARRAY, INDETERMINATE_VISUAL_ANIMATION)
68 DALI_PROPERTY_REGISTRATION(Toolkit, ProgressBar, "labelVisual", MAP, LABEL_VISUAL )
70 DALI_SIGNAL_REGISTRATION(Toolkit, ProgressBar, "valueChanged", SIGNAL_VALUE_CHANGED)
72 DALI_TYPE_REGISTRATION_END()
75 struct ProgressDepthIndex
77 // Enum to make sure the visual order
81 SECONDARY_PROGRESS_VISUAL,
88 float DEFAULT_VALUE = 0.0f;
89 float DEFAULT_LOWER_BOUND = 0.0f;
90 float DEFAULT_UPPER_BOUND = 1.0f;
91 float DEFAULT_FONT_SIZE = 12.0f;
92 const char* CIRCULAR_PROGRESS_BAR_STYLE_NAME = "CircularProgressBar";
94 void BackupVisualProperties(const Control* control, Property::Index index, Property::Map& map)
96 Toolkit::Visual::Base visual = DevelControl::GetVisual(*control, index);
101 visual.CreatePropertyMap(map);
105 void RestoreVisualProperties(Control* control, Property::Index index, Property::Map& map, int depth)
109 Toolkit::Visual::Base visual = DevelControl::GetVisual(*control, index);
111 Visual::Base& visualImpl = Toolkit::GetImplementation(visual);
113 visualImpl.SetProperties(map);
115 DevelControl::UnregisterVisual(*control, index);
117 DevelControl::RegisterVisual(*control, index, visual, true, depth);
121 } // Unnamed namespace
123 ///////////////////////////////////////////////////////////////////////////////////////////////////
125 ///////////////////////////////////////////////////////////////////////////////////////////////////
127 Dali::Toolkit::ProgressBar ProgressBar::New(DevelProgressBar::Style progressBarStyle)
129 // Create the implementation
130 ProgressBarPtr progressBar(new ProgressBar());
132 Dali::Toolkit::ProgressBar handle(*progressBar);
134 switch(progressBarStyle)
136 case DevelProgressBar::Style::CIRCULAR:
138 progressBar->SetStyleName(CIRCULAR_PROGRESS_BAR_STYLE_NAME);
147 // Second-phase init of the implementation
148 // This can only be done after the CustomActor connection has been made...
149 progressBar->Initialize();
154 ProgressBar::ProgressBar()
155 : Control(ControlBehaviour(CONTROL_BEHAVIOUR_DEFAULT)),
156 mProgressValue(DEFAULT_VALUE),
157 mSecondaryProgressValue(DEFAULT_VALUE),
158 mIndeterminate(false)
162 ProgressBar::~ProgressBar()
166 void ProgressBar::OnInitialize()
169 Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::PROGRESS_BAR);
170 Self().SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
173 DevelControl::ControlAccessible* ProgressBar::CreateAccessibleObject()
175 return new ProgressBarAccessible(Self());
178 void ProgressBar::OnRelayout(const Vector2& size, RelayoutContainer& container)
180 Vector2 trackSize(size);
181 mDomain = CalcDomain(size);
183 trackSize.width = std::max(0.0f, size.width); // Ensure we don't go negative
185 Toolkit::Visual::Base trackVisual = DevelControl::GetVisual(*this, Toolkit::ProgressBar::Property::TRACK_VISUAL);
186 Toolkit::Visual::Base labelVisual = DevelControl::GetVisual(*this, Toolkit::ProgressBar::Property::LABEL_VISUAL);
187 Toolkit::Visual::Base indeterminateVisual = DevelControl::GetVisual(*this, Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL);
191 Property::Map visualTransform;
193 visualTransform.Add(Toolkit::Visual::Transform::Property::SIZE, trackSize)
194 .Add(Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE))
195 .Add(Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE));
197 trackVisual.SetTransformAndSize(visualTransform, trackSize);
200 ApplyProgressToVisualTransform(mSecondaryProgressValue, trackSize, Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL);
202 ApplyProgressToVisualTransform(mProgressValue, trackSize, Toolkit::ProgressBar::Property::PROGRESS_VISUAL);
206 Property::Map visualTransform;
208 visualTransform.Add(Toolkit::Visual::Transform::Property::SIZE, trackSize)
209 .Add(Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE))
210 .Add(Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE));
211 labelVisual.SetTransformAndSize(visualTransform, trackSize);
214 if(indeterminateVisual)
216 Property::Map visualTransform;
218 visualTransform.Add(Toolkit::Visual::Transform::Property::SIZE, trackSize)
219 .Add(Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE))
220 .Add(Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE));
221 indeterminateVisual.SetTransformAndSize(visualTransform, trackSize);
225 Vector3 ProgressBar::GetNaturalSize()
227 // Return the bigger size after comparing trackVisual naturalSize and labelVisual naturalSize
228 Toolkit::Visual::Base trackVisual = DevelControl::GetVisual(*this, Toolkit::ProgressBar::Property::TRACK_VISUAL);
229 Toolkit::Visual::Base labelVisual = DevelControl::GetVisual(*this, Toolkit::ProgressBar::Property::LABEL_VISUAL);
236 trackVisual.GetNaturalSize(trackSize);
240 labelVisual.GetNaturalSize(labelSize);
244 naturalSize.width = (trackSize.width > labelSize.width) ? trackSize.width : labelSize.width;
245 naturalSize.height = (trackSize.height > labelSize.height) ? trackSize.height : labelSize.height;
250 ProgressBar::Domain ProgressBar::CalcDomain(const Vector2& currentSize)
252 return Domain(Vector2(0.0f, 0.0f), currentSize);
255 Toolkit::ProgressBar::ValueChangedSignalType& ProgressBar::ValueChangedSignal()
257 return mValueChangedSignal;
260 void ProgressBar::SetProgressValue(float value)
262 // update the progress bar value (taking float precision errors into account)
263 // TODO : it seems 0.0f cannot into this statement.
264 if((mProgressValue != value) &&
265 ((value >= DEFAULT_LOWER_BOUND) || (Equals(value, DEFAULT_LOWER_BOUND))) &&
266 ((value <= DEFAULT_UPPER_BOUND) || (Equals(value, DEFAULT_UPPER_BOUND))))
268 mProgressValue = Clamp(value, DEFAULT_LOWER_BOUND, DEFAULT_UPPER_BOUND);
270 ApplyProgressToVisual(mProgressValue, Toolkit::ProgressBar::Property::PROGRESS_VISUAL, ProgressDepthIndex::PROGRESS_VISUAL);
272 Toolkit::ProgressBar self = Toolkit::ProgressBar::DownCast(Self());
273 mValueChangedSignal.Emit(self, mProgressValue, mSecondaryProgressValue);
274 if(Self() == Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor())
276 GetAccessibleObject()->Emit(Dali::Accessibility::ObjectPropertyChangeEvent::VALUE);
282 float ProgressBar::GetProgressValue() const
284 return mProgressValue;
287 void ProgressBar::SetSecondaryProgressValue(float value)
289 // update the progress bar value (taking float precision errors into account)
290 // TODO : it seems 0.0f cannot into this statement.
291 if((mSecondaryProgressValue != value) &&
292 ((value >= DEFAULT_LOWER_BOUND) || (Equals(value, DEFAULT_LOWER_BOUND))) &&
293 ((value <= DEFAULT_UPPER_BOUND) || (Equals(value, DEFAULT_UPPER_BOUND))))
295 mSecondaryProgressValue = Clamp(value, DEFAULT_LOWER_BOUND, DEFAULT_UPPER_BOUND);
297 ApplyProgressToVisual(mSecondaryProgressValue, Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, ProgressDepthIndex::SECONDARY_PROGRESS_VISUAL);
299 Toolkit::ProgressBar self = Toolkit::ProgressBar::DownCast(Self());
300 mValueChangedSignal.Emit(self, mProgressValue, mSecondaryProgressValue);
306 float ProgressBar::GetSecondaryProgressValue() const
308 return mSecondaryProgressValue;
311 void ProgressBar::SetIndeterminate(bool value)
313 mIndeterminate = value;
314 DevelControl::EnableVisual(*this, Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL, mIndeterminate);
319 if(mIndeterminateVisualTransition)
321 PlayIndeterminateVisualTransition();
326 if(mIndeterminateVisualAni)
328 mIndeterminateVisualAni.Stop();
331 // Restore previous visual data after animation finished.
332 RestoreVisualProperties(this, Toolkit::ProgressBar::Property::TRACK_VISUAL, mTrackVisualMap, ProgressDepthIndex::TRACK_VISUAL);
333 RestoreVisualProperties(this, Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, mSecondaryProgressVisualMap, ProgressDepthIndex::SECONDARY_PROGRESS_VISUAL);
334 RestoreVisualProperties(this, Toolkit::ProgressBar::Property::PROGRESS_VISUAL, mProgressVisualMap, ProgressDepthIndex::PROGRESS_VISUAL);
340 bool ProgressBar::GetIndeterminate() const
342 return mIndeterminate;
345 void ProgressBar::SetIndeterminateVisualTransition(Toolkit::TransitionData transition)
347 mIndeterminateVisualTransition = transition;
350 PlayIndeterminateVisualTransition();
354 void ProgressBar::PlayIndeterminateVisualTransition()
356 // Store current visual data before animation changes it.
357 BackupVisualProperties(this, Toolkit::ProgressBar::Property::TRACK_VISUAL, mTrackVisualMap);
358 BackupVisualProperties(this, Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, mSecondaryProgressVisualMap);
359 BackupVisualProperties(this, Toolkit::ProgressBar::Property::PROGRESS_VISUAL, mProgressVisualMap);
361 if(mIndeterminateVisualAni)
363 mIndeterminateVisualAni.Stop();
364 mIndeterminateVisualAni.Clear();
367 mIndeterminateVisualAni = DevelControl::CreateTransition(*this, mIndeterminateVisualTransition);
369 if(mIndeterminate && mIndeterminateVisualAni)
371 mIndeterminateVisualAni.SetLooping(true);
372 mIndeterminateVisualAni.Play();
376 Toolkit::TransitionData ProgressBar::ConvertPropertyToTransition(const Property::Value& value)
378 Toolkit::TransitionData transitionData;
380 if(value.GetType() == Property::ARRAY)
382 transitionData = Toolkit::TransitionData::New(*value.GetArray());
384 else if(value.GetType() == Property::MAP)
386 transitionData = Toolkit::TransitionData::New(*value.GetMap());
389 return transitionData;
393 * Create Visual for given index from a property map or url.
394 * 1) Check if value passed in is a url and create visual
395 * 2) Create visual from map if step (1) is false
396 * 3) Register visual with control with false for enable flag.
397 * 4) Unregister visual if empty map was provided. This is the method to remove a visual
400 void ProgressBar::CreateVisualsForComponent(Property::Index index, const Property::Value& value, const int visualDepth)
402 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
403 Toolkit::Visual::Base progressVisual;
405 std::string imageUrl;
406 if(value.Get(imageUrl))
408 if(!imageUrl.empty())
410 progressVisual = visualFactory.CreateVisual(imageUrl, ImageDimensions());
413 else // Does this code make text-visual can be accepted as visual?
415 // if its not a string then get a Property::Map from the property if possible.
416 const Property::Map* map = value.GetMap();
417 if(map && !map->Empty()) // Empty map results in current visual removal.
419 progressVisual = visualFactory.CreateVisual(*map);
425 if(index == Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL)
427 DevelControl::RegisterVisual(*this, index, progressVisual, mIndeterminate, visualDepth);
431 DevelControl::RegisterVisual(*this, index, progressVisual, true, visualDepth);
436 DevelControl::UnregisterVisual(*this, index);
440 bool ProgressBar::GetPropertyMapForVisual(Property::Index visualIndex, Property::Map& retreivedMap) const
442 bool success = false;
443 Toolkit::Visual::Base visual = DevelControl::GetVisual(*this, visualIndex);
447 visual.CreatePropertyMap(retreivedMap);
454 void ProgressBar::ApplyProgressToVisual(float progress, Property::Index index, int depth)
456 Toolkit::Visual::Base visual = DevelControl::GetVisual(*this, index);
458 if(visual && static_cast<DevelVisual::Type>(visual.GetType()) == DevelVisual::ARC && !mIndeterminate)
460 Visual::Base& visualImpl = Toolkit::GetImplementation(visual);
464 map[Toolkit::DevelArcVisual::Property::SWEEP_ANGLE] = Property::Value(360.0f * progress);
466 visualImpl.SetProperties(map);
468 DevelControl::UnregisterVisual(*this, index);
469 DevelControl::RegisterVisual(*this, index, visual, true, depth);
473 void ProgressBar::ApplyProgressToVisualTransform(float progress, Vector2 trackSize, Property::Index index)
475 Toolkit::Visual::Base visual = DevelControl::GetVisual(*this, index);
479 Property::Map visualTransform;
481 if(static_cast<DevelVisual::Type>(visual.GetType()) != DevelVisual::ARC)
483 visualTransform.Add(Toolkit::Visual::Transform::Property::SIZE, Vector2(mDomain.from.x + progress * (mDomain.to.x - mDomain.from.x), trackSize.height))
484 .Add(Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE))
485 .Add(Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE))
486 .Add(Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN)
487 .Add(Toolkit::Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::TOP_BEGIN);
490 visual.SetTransformAndSize(visualTransform, trackSize);
494 // Static class method to support script connecting signals
495 bool ProgressBar::DoConnectSignal(BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor)
497 Dali::BaseHandle handle(object);
499 bool connected = true;
500 Toolkit::ProgressBar ProgressBar = Toolkit::ProgressBar::DownCast(handle);
502 if(0 == strcmp(signalName.c_str(), SIGNAL_VALUE_CHANGED))
504 ProgressBar.ValueChangedSignal().Connect(tracker, functor);
508 // signalName does not match any signal
515 void ProgressBar::SetProperty(BaseObject* object, Property::Index propertyIndex, const Property::Value& value)
517 Toolkit::ProgressBar progressBar = Toolkit::ProgressBar::DownCast(Dali::BaseHandle(object));
521 ProgressBar& progressBarImpl(GetImpl(progressBar));
523 switch(propertyIndex)
525 case Toolkit::ProgressBar::Property::TRACK_VISUAL:
527 progressBarImpl.CreateVisualsForComponent(propertyIndex, value, ProgressDepthIndex::TRACK_VISUAL);
531 case Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL:
533 progressBarImpl.CreateVisualsForComponent(propertyIndex, value, ProgressDepthIndex::SECONDARY_PROGRESS_VISUAL);
534 progressBarImpl.ApplyProgressToVisual(progressBarImpl.mSecondaryProgressValue, propertyIndex, ProgressDepthIndex::SECONDARY_PROGRESS_VISUAL);
538 case Toolkit::ProgressBar::Property::PROGRESS_VISUAL:
540 progressBarImpl.CreateVisualsForComponent(propertyIndex, value, ProgressDepthIndex::PROGRESS_VISUAL);
541 progressBarImpl.ApplyProgressToVisual(progressBarImpl.mProgressValue, propertyIndex, ProgressDepthIndex::PROGRESS_VISUAL);
545 case Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL:
547 progressBarImpl.CreateVisualsForComponent(propertyIndex, value, ProgressDepthIndex::INDETERMINATE_VISUAL);
551 case Toolkit::ProgressBar::Property::LABEL_VISUAL:
554 std::string textString;
556 if(value.Get(textString))
558 // set new text string as TEXT property
559 Property::Map newTextMap;
560 Toolkit::Visual::Base label = DevelControl::GetVisual(progressBarImpl, Toolkit::ProgressBar::Property::LABEL_VISUAL);
564 label.CreatePropertyMap(map);
567 // if LABEL_VISUAL doesn't set before, add Visual property "TYPE" to create new text Visual
570 newTextMap.Add(Toolkit::Visual::Property::TYPE, Toolkit::Visual::TEXT);
571 newTextMap.Add(Toolkit::TextVisual::Property::POINT_SIZE, DEFAULT_FONT_SIZE);
573 newTextMap.Add(Toolkit::TextVisual::Property::TEXT, textString);
575 map.Merge(newTextMap);
584 progressBarImpl.CreateVisualsForComponent(propertyIndex, map, ProgressDepthIndex::LABEL_VISUAL);
589 case Toolkit::ProgressBar::Property::PROGRESS_VALUE:
591 progressBarImpl.SetProgressValue(value.Get<float>());
595 case Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VALUE:
597 progressBarImpl.SetSecondaryProgressValue(value.Get<float>());
601 case Toolkit::ProgressBar::Property::INDETERMINATE:
603 progressBarImpl.SetIndeterminate(value.Get<bool>());
607 case Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL_ANIMATION:
609 progressBarImpl.SetIndeterminateVisualTransition(progressBarImpl.ConvertPropertyToTransition(value));
616 Property::Value ProgressBar::GetProperty(BaseObject* object, Property::Index propertyIndex)
618 Property::Value value;
620 Toolkit::ProgressBar progressBar = Toolkit::ProgressBar::DownCast(Dali::BaseHandle(object));
624 ProgressBar& progressBarImpl(GetImpl(progressBar));
626 switch(propertyIndex)
628 case Toolkit::ProgressBar::Property::TRACK_VISUAL:
629 case Toolkit::ProgressBar::Property::PROGRESS_VISUAL:
630 case Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL:
631 case Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL:
632 case Toolkit::ProgressBar::Property::LABEL_VISUAL:
634 Property::Map visualProperty;
635 if(progressBarImpl.GetPropertyMapForVisual(propertyIndex, visualProperty))
637 value = visualProperty;
642 case Toolkit::ProgressBar::Property::PROGRESS_VALUE:
644 value = progressBarImpl.GetProgressValue();
648 case Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VALUE:
650 value = progressBarImpl.GetSecondaryProgressValue();
654 case Toolkit::ProgressBar::Property::INDETERMINATE:
656 value = progressBarImpl.GetIndeterminate();
660 case Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL_ANIMATION:
662 //TODO: Return INDETERMINATE_VISUAL_TRANSITION;
670 void ProgressBar::OnSceneConnection(int depth)
672 // Chain up first (ensures visuals are ready to draw)
673 Control::OnSceneConnection(depth);
677 PlayIndeterminateVisualTransition();
681 double ProgressBar::ProgressBarAccessible::GetMinimum() const
683 return DEFAULT_LOWER_BOUND;
686 double ProgressBar::ProgressBarAccessible::GetCurrent() const
688 auto self = Toolkit::ProgressBar::DownCast(Self());
689 return self.GetProperty(Toolkit::ProgressBar::Property::PROGRESS_VALUE).Get<float>();
692 double ProgressBar::ProgressBarAccessible::GetMaximum() const
694 return DEFAULT_UPPER_BOUND;
697 bool ProgressBar::ProgressBarAccessible::SetCurrent(double current)
699 if(current < GetMinimum() || current > GetMaximum())
704 auto self = Toolkit::ProgressBar::DownCast(Self());
705 self.SetProperty(Toolkit::ProgressBar::Property::PROGRESS_VALUE, static_cast<float>(current));
709 double ProgressBar::ProgressBarAccessible::GetMinimumIncrement() const
714 } // namespace Internal
716 } // namespace Toolkit