2 * Copyright (c) 2023 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((!Equals(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 auto accessible = GetAccessibleObject();
277 if(DALI_LIKELY(accessible))
279 accessible->Emit(Dali::Accessibility::ObjectPropertyChangeEvent::VALUE);
286 float ProgressBar::GetProgressValue() const
288 return mProgressValue;
291 void ProgressBar::SetSecondaryProgressValue(float value)
293 // update the progress bar value (taking float precision errors into account)
294 // TODO : it seems 0.0f cannot into this statement.
295 if((!Equals(mSecondaryProgressValue, value)) &&
296 ((value >= DEFAULT_LOWER_BOUND) || (Equals(value, DEFAULT_LOWER_BOUND))) &&
297 ((value <= DEFAULT_UPPER_BOUND) || (Equals(value, DEFAULT_UPPER_BOUND))))
299 mSecondaryProgressValue = Clamp(value, DEFAULT_LOWER_BOUND, DEFAULT_UPPER_BOUND);
301 ApplyProgressToVisual(mSecondaryProgressValue, Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, ProgressDepthIndex::SECONDARY_PROGRESS_VISUAL);
303 Toolkit::ProgressBar self = Toolkit::ProgressBar::DownCast(Self());
304 mValueChangedSignal.Emit(self, mProgressValue, mSecondaryProgressValue);
310 float ProgressBar::GetSecondaryProgressValue() const
312 return mSecondaryProgressValue;
315 void ProgressBar::SetIndeterminate(bool value)
317 mIndeterminate = value;
318 DevelControl::EnableVisual(*this, Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL, mIndeterminate);
323 if(mIndeterminateVisualTransition)
325 PlayIndeterminateVisualTransition();
330 if(mIndeterminateVisualAni)
332 mIndeterminateVisualAni.Stop();
335 // Restore previous visual data after animation finished.
336 RestoreVisualProperties(this, Toolkit::ProgressBar::Property::TRACK_VISUAL, mTrackVisualMap, ProgressDepthIndex::TRACK_VISUAL);
337 RestoreVisualProperties(this, Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, mSecondaryProgressVisualMap, ProgressDepthIndex::SECONDARY_PROGRESS_VISUAL);
338 RestoreVisualProperties(this, Toolkit::ProgressBar::Property::PROGRESS_VISUAL, mProgressVisualMap, ProgressDepthIndex::PROGRESS_VISUAL);
344 bool ProgressBar::GetIndeterminate() const
346 return mIndeterminate;
349 void ProgressBar::SetIndeterminateVisualTransition(Toolkit::TransitionData transition)
351 mIndeterminateVisualTransition = transition;
354 PlayIndeterminateVisualTransition();
358 void ProgressBar::PlayIndeterminateVisualTransition()
360 // Store current visual data before animation changes it.
361 BackupVisualProperties(this, Toolkit::ProgressBar::Property::TRACK_VISUAL, mTrackVisualMap);
362 BackupVisualProperties(this, Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, mSecondaryProgressVisualMap);
363 BackupVisualProperties(this, Toolkit::ProgressBar::Property::PROGRESS_VISUAL, mProgressVisualMap);
365 if(mIndeterminateVisualAni)
367 mIndeterminateVisualAni.Stop();
368 mIndeterminateVisualAni.Clear();
371 mIndeterminateVisualAni = DevelControl::CreateTransition(*this, mIndeterminateVisualTransition);
373 if(mIndeterminate && mIndeterminateVisualAni)
375 mIndeterminateVisualAni.SetLooping(true);
376 mIndeterminateVisualAni.Play();
380 Toolkit::TransitionData ProgressBar::ConvertPropertyToTransition(const Property::Value& value)
382 Toolkit::TransitionData transitionData;
384 if(value.GetType() == Property::ARRAY)
386 transitionData = Toolkit::TransitionData::New(*value.GetArray());
388 else if(value.GetType() == Property::MAP)
390 transitionData = Toolkit::TransitionData::New(*value.GetMap());
393 return transitionData;
397 * Create Visual for given index from a property map or url.
398 * 1) Check if value passed in is a url and create visual
399 * 2) Create visual from map if step (1) is false
400 * 3) Register visual with control with false for enable flag.
401 * 4) Unregister visual if empty map was provided. This is the method to remove a visual
404 void ProgressBar::CreateVisualsForComponent(Property::Index index, const Property::Value& value, const int visualDepth)
406 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
407 Toolkit::Visual::Base progressVisual;
409 std::string imageUrl;
410 if(value.Get(imageUrl))
412 if(!imageUrl.empty())
414 progressVisual = visualFactory.CreateVisual(imageUrl, ImageDimensions());
417 else // Does this code make text-visual can be accepted as visual?
419 // if its not a string then get a Property::Map from the property if possible.
420 const Property::Map* map = value.GetMap();
421 if(map && !map->Empty()) // Empty map results in current visual removal.
423 progressVisual = visualFactory.CreateVisual(*map);
429 if(index == Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL)
431 DevelControl::RegisterVisual(*this, index, progressVisual, mIndeterminate, visualDepth);
435 DevelControl::RegisterVisual(*this, index, progressVisual, true, visualDepth);
440 DevelControl::UnregisterVisual(*this, index);
444 bool ProgressBar::GetPropertyMapForVisual(Property::Index visualIndex, Property::Map& retreivedMap) const
446 bool success = false;
447 Toolkit::Visual::Base visual = DevelControl::GetVisual(*this, visualIndex);
451 visual.CreatePropertyMap(retreivedMap);
458 void ProgressBar::ApplyProgressToVisual(float progress, Property::Index index, int depth)
460 Toolkit::Visual::Base visual = DevelControl::GetVisual(*this, index);
462 if(visual && static_cast<DevelVisual::Type>(visual.GetType()) == DevelVisual::ARC && !mIndeterminate)
464 Visual::Base& visualImpl = Toolkit::GetImplementation(visual);
468 map[Toolkit::DevelArcVisual::Property::SWEEP_ANGLE] = Property::Value(360.0f * progress);
470 visualImpl.SetProperties(map);
472 DevelControl::UnregisterVisual(*this, index);
473 DevelControl::RegisterVisual(*this, index, visual, true, depth);
477 void ProgressBar::ApplyProgressToVisualTransform(float progress, Vector2 trackSize, Property::Index index)
479 Toolkit::Visual::Base visual = DevelControl::GetVisual(*this, index);
483 Property::Map visualTransform;
485 if(static_cast<DevelVisual::Type>(visual.GetType()) != DevelVisual::ARC)
487 visualTransform.Add(Toolkit::Visual::Transform::Property::SIZE, Vector2(mDomain.from.x + progress * (mDomain.to.x - mDomain.from.x), trackSize.height))
488 .Add(Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE))
489 .Add(Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE))
490 .Add(Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN)
491 .Add(Toolkit::Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::TOP_BEGIN);
494 visual.SetTransformAndSize(visualTransform, trackSize);
498 // Static class method to support script connecting signals
499 bool ProgressBar::DoConnectSignal(BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor)
501 Dali::BaseHandle handle(object);
503 bool connected = true;
504 Toolkit::ProgressBar ProgressBar = Toolkit::ProgressBar::DownCast(handle);
506 if(0 == strcmp(signalName.c_str(), SIGNAL_VALUE_CHANGED))
508 ProgressBar.ValueChangedSignal().Connect(tracker, functor);
512 // signalName does not match any signal
519 void ProgressBar::SetProperty(BaseObject* object, Property::Index propertyIndex, const Property::Value& value)
521 Toolkit::ProgressBar progressBar = Toolkit::ProgressBar::DownCast(Dali::BaseHandle(object));
525 ProgressBar& progressBarImpl(GetImpl(progressBar));
527 switch(propertyIndex)
529 case Toolkit::ProgressBar::Property::TRACK_VISUAL:
531 progressBarImpl.CreateVisualsForComponent(propertyIndex, value, ProgressDepthIndex::TRACK_VISUAL);
535 case Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL:
537 progressBarImpl.CreateVisualsForComponent(propertyIndex, value, ProgressDepthIndex::SECONDARY_PROGRESS_VISUAL);
538 progressBarImpl.ApplyProgressToVisual(progressBarImpl.mSecondaryProgressValue, propertyIndex, ProgressDepthIndex::SECONDARY_PROGRESS_VISUAL);
542 case Toolkit::ProgressBar::Property::PROGRESS_VISUAL:
544 progressBarImpl.CreateVisualsForComponent(propertyIndex, value, ProgressDepthIndex::PROGRESS_VISUAL);
545 progressBarImpl.ApplyProgressToVisual(progressBarImpl.mProgressValue, propertyIndex, ProgressDepthIndex::PROGRESS_VISUAL);
549 case Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL:
551 progressBarImpl.CreateVisualsForComponent(propertyIndex, value, ProgressDepthIndex::INDETERMINATE_VISUAL);
555 case Toolkit::ProgressBar::Property::LABEL_VISUAL:
558 std::string textString;
560 if(value.Get(textString))
562 // set new text string as TEXT property
563 Property::Map newTextMap;
564 Toolkit::Visual::Base label = DevelControl::GetVisual(progressBarImpl, Toolkit::ProgressBar::Property::LABEL_VISUAL);
568 label.CreatePropertyMap(map);
571 // if LABEL_VISUAL doesn't set before, add Visual property "TYPE" to create new text Visual
574 newTextMap.Add(Toolkit::Visual::Property::TYPE, Toolkit::Visual::TEXT);
575 newTextMap.Add(Toolkit::TextVisual::Property::POINT_SIZE, DEFAULT_FONT_SIZE);
577 newTextMap.Add(Toolkit::TextVisual::Property::TEXT, textString);
579 map.Merge(newTextMap);
588 progressBarImpl.CreateVisualsForComponent(propertyIndex, map, ProgressDepthIndex::LABEL_VISUAL);
593 case Toolkit::ProgressBar::Property::PROGRESS_VALUE:
595 progressBarImpl.SetProgressValue(value.Get<float>());
599 case Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VALUE:
601 progressBarImpl.SetSecondaryProgressValue(value.Get<float>());
605 case Toolkit::ProgressBar::Property::INDETERMINATE:
607 progressBarImpl.SetIndeterminate(value.Get<bool>());
611 case Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL_ANIMATION:
613 progressBarImpl.SetIndeterminateVisualTransition(progressBarImpl.ConvertPropertyToTransition(value));
620 Property::Value ProgressBar::GetProperty(BaseObject* object, Property::Index propertyIndex)
622 Property::Value value;
624 Toolkit::ProgressBar progressBar = Toolkit::ProgressBar::DownCast(Dali::BaseHandle(object));
628 ProgressBar& progressBarImpl(GetImpl(progressBar));
630 switch(propertyIndex)
632 case Toolkit::ProgressBar::Property::TRACK_VISUAL:
633 case Toolkit::ProgressBar::Property::PROGRESS_VISUAL:
634 case Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL:
635 case Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL:
636 case Toolkit::ProgressBar::Property::LABEL_VISUAL:
638 Property::Map visualProperty;
639 if(progressBarImpl.GetPropertyMapForVisual(propertyIndex, visualProperty))
641 value = visualProperty;
646 case Toolkit::ProgressBar::Property::PROGRESS_VALUE:
648 value = progressBarImpl.GetProgressValue();
652 case Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VALUE:
654 value = progressBarImpl.GetSecondaryProgressValue();
658 case Toolkit::ProgressBar::Property::INDETERMINATE:
660 value = progressBarImpl.GetIndeterminate();
664 case Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL_ANIMATION:
666 //TODO: Return INDETERMINATE_VISUAL_TRANSITION;
674 void ProgressBar::OnSceneConnection(int depth)
676 // Chain up first (ensures visuals are ready to draw)
677 Control::OnSceneConnection(depth);
681 PlayIndeterminateVisualTransition();
685 double ProgressBar::ProgressBarAccessible::GetMinimum() const
687 return DEFAULT_LOWER_BOUND;
690 double ProgressBar::ProgressBarAccessible::GetCurrent() const
692 auto self = Toolkit::ProgressBar::DownCast(Self());
693 return self.GetProperty(Toolkit::ProgressBar::Property::PROGRESS_VALUE).Get<float>();
696 std::string ProgressBar::ProgressBarAccessible::GetValueText() const
698 return {}; // Text mode is not used at the moment
701 double ProgressBar::ProgressBarAccessible::GetMaximum() const
703 return DEFAULT_UPPER_BOUND;
706 bool ProgressBar::ProgressBarAccessible::SetCurrent(double current)
708 if(current < GetMinimum() || current > GetMaximum())
713 auto self = Toolkit::ProgressBar::DownCast(Self());
714 self.SetProperty(Toolkit::ProgressBar::Property::PROGRESS_VALUE, static_cast<float>(current));
718 double ProgressBar::ProgressBarAccessible::GetMinimumIncrement() const
723 } // namespace Internal
725 } // namespace Toolkit