2 * Copyright (c) 2024 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-depth-index-ranges.h>
23 #include <dali-toolkit/devel-api/controls/control-devel.h>
24 #include <dali-toolkit/devel-api/visual-factory/visual-base.h>
25 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
26 #include <dali-toolkit/devel-api/visuals/arc-visual-properties-devel.h>
27 #include <dali-toolkit/internal/controls/control/control-data-impl.h>
28 #include <dali-toolkit/internal/visuals/visual-base-impl.h>
29 #include <dali-toolkit/internal/visuals/visual-string-constants.h>
30 #include <dali-toolkit/public-api/align-enumerations.h>
31 #include <dali-toolkit/public-api/visuals/color-visual-properties.h>
32 #include <dali-toolkit/public-api/visuals/image-visual-properties.h>
33 #include <dali-toolkit/public-api/visuals/text-visual-properties.h>
34 #include <dali-toolkit/public-api/visuals/visual-properties.h>
35 #include <dali/public-api/math/math-utils.h>
36 #include <dali/public-api/object/type-registry-helper.h>
37 #include <dali/public-api/size-negotiation/relayout-container.h>
39 #include <cstring> // for strcmp
42 #include <dali/integration-api/debug.h>
50 namespace // Unnamed namespace
54 return Dali::Toolkit::ProgressBar::New();
58 // Setup properties, signals and actions using the type-registry.
59 DALI_TYPE_REGISTRATION_BEGIN(Toolkit::ProgressBar, Toolkit::Control, Create)
61 DALI_PROPERTY_REGISTRATION(Toolkit, ProgressBar, "progressValue", FLOAT, PROGRESS_VALUE )
62 DALI_PROPERTY_REGISTRATION(Toolkit, ProgressBar, "secondaryProgressValue", FLOAT, SECONDARY_PROGRESS_VALUE )
63 DALI_PROPERTY_REGISTRATION(Toolkit, ProgressBar, "indeterminate", BOOLEAN, INDETERMINATE )
64 DALI_PROPERTY_REGISTRATION(Toolkit, ProgressBar, "trackVisual", MAP, TRACK_VISUAL )
65 DALI_PROPERTY_REGISTRATION(Toolkit, ProgressBar, "progressVisual", MAP, PROGRESS_VISUAL )
66 DALI_PROPERTY_REGISTRATION(Toolkit, ProgressBar, "secondaryProgressVisual", MAP, SECONDARY_PROGRESS_VISUAL )
67 DALI_PROPERTY_REGISTRATION(Toolkit, ProgressBar, "indeterminateVisual", MAP, INDETERMINATE_VISUAL )
68 DALI_PROPERTY_REGISTRATION(Toolkit, ProgressBar, "indeterminateVisualAnimation", ARRAY, INDETERMINATE_VISUAL_ANIMATION)
69 DALI_PROPERTY_REGISTRATION(Toolkit, ProgressBar, "labelVisual", MAP, LABEL_VISUAL )
71 DALI_SIGNAL_REGISTRATION(Toolkit, ProgressBar, "valueChanged", SIGNAL_VALUE_CHANGED)
73 DALI_TYPE_REGISTRATION_END()
76 struct ProgressDepthIndex
78 // Enum to make sure the visual order
81 TRACK_VISUAL = Toolkit::DepthIndex::CONTENT,
82 SECONDARY_PROGRESS_VISUAL,
89 float DEFAULT_VALUE = 0.0f;
90 float DEFAULT_LOWER_BOUND = 0.0f;
91 float DEFAULT_UPPER_BOUND = 1.0f;
92 float DEFAULT_FONT_SIZE = 12.0f;
93 const char* CIRCULAR_PROGRESS_BAR_STYLE_NAME = "CircularProgressBar";
95 void BackupVisualProperties(const Control* control, Property::Index index, Property::Map& map)
97 Toolkit::Visual::Base visual = DevelControl::GetVisual(*control, index);
102 visual.CreatePropertyMap(map);
106 void RestoreVisualProperties(Control* control, Property::Index index, Property::Map& map, int depth)
110 Toolkit::Visual::Base visual = DevelControl::GetVisual(*control, index);
112 Visual::Base& visualImpl = Toolkit::GetImplementation(visual);
114 visualImpl.SetProperties(map);
116 DevelControl::UnregisterVisual(*control, index);
118 DevelControl::RegisterVisual(*control, index, visual, true, depth);
122 } // Unnamed namespace
124 ///////////////////////////////////////////////////////////////////////////////////////////////////
126 ///////////////////////////////////////////////////////////////////////////////////////////////////
128 Dali::Toolkit::ProgressBar ProgressBar::New(DevelProgressBar::Style progressBarStyle)
130 // Create the implementation
131 ProgressBarPtr progressBar(new ProgressBar());
133 Dali::Toolkit::ProgressBar handle(*progressBar);
135 switch(progressBarStyle)
137 case DevelProgressBar::Style::CIRCULAR:
139 progressBar->SetStyleName(CIRCULAR_PROGRESS_BAR_STYLE_NAME);
148 // Second-phase init of the implementation
149 // This can only be done after the CustomActor connection has been made...
150 progressBar->Initialize();
155 ProgressBar::ProgressBar()
156 : Control(ControlBehaviour(CONTROL_BEHAVIOUR_DEFAULT)),
157 mProgressValue(DEFAULT_VALUE),
158 mSecondaryProgressValue(DEFAULT_VALUE),
159 mIndeterminate(false)
163 ProgressBar::~ProgressBar()
167 void ProgressBar::OnInitialize()
170 Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::PROGRESS_BAR);
171 Self().SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
174 DevelControl::ControlAccessible* ProgressBar::CreateAccessibleObject()
176 return new ProgressBarAccessible(Self());
179 void ProgressBar::OnRelayout(const Vector2& size, RelayoutContainer& container)
181 Vector2 trackSize(size);
182 mDomain = CalcDomain(size);
184 trackSize.width = std::max(0.0f, size.width); // Ensure we don't go negative
186 Toolkit::Visual::Base trackVisual = DevelControl::GetVisual(*this, Toolkit::ProgressBar::Property::TRACK_VISUAL);
187 Toolkit::Visual::Base labelVisual = DevelControl::GetVisual(*this, Toolkit::ProgressBar::Property::LABEL_VISUAL);
188 Toolkit::Visual::Base indeterminateVisual = DevelControl::GetVisual(*this, Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL);
192 Property::Map visualTransform;
194 visualTransform.Add(Toolkit::Visual::Transform::Property::SIZE, trackSize)
195 .Add(Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE))
196 .Add(Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE));
198 trackVisual.SetTransformAndSize(visualTransform, trackSize);
201 ApplyProgressToVisualTransform(mSecondaryProgressValue, trackSize, Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL);
203 ApplyProgressToVisualTransform(mProgressValue, trackSize, Toolkit::ProgressBar::Property::PROGRESS_VISUAL);
207 Property::Map visualTransform;
209 visualTransform.Add(Toolkit::Visual::Transform::Property::SIZE, trackSize)
210 .Add(Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE))
211 .Add(Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE));
212 labelVisual.SetTransformAndSize(visualTransform, trackSize);
215 if(indeterminateVisual)
217 Property::Map visualTransform;
219 visualTransform.Add(Toolkit::Visual::Transform::Property::SIZE, trackSize)
220 .Add(Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE))
221 .Add(Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE));
222 indeterminateVisual.SetTransformAndSize(visualTransform, trackSize);
226 Vector3 ProgressBar::GetNaturalSize()
228 // Return the bigger size after comparing trackVisual naturalSize and labelVisual naturalSize
229 Toolkit::Visual::Base trackVisual = DevelControl::GetVisual(*this, Toolkit::ProgressBar::Property::TRACK_VISUAL);
230 Toolkit::Visual::Base labelVisual = DevelControl::GetVisual(*this, Toolkit::ProgressBar::Property::LABEL_VISUAL);
237 trackVisual.GetNaturalSize(trackSize);
241 labelVisual.GetNaturalSize(labelSize);
245 naturalSize.width = (trackSize.width > labelSize.width) ? trackSize.width : labelSize.width;
246 naturalSize.height = (trackSize.height > labelSize.height) ? trackSize.height : labelSize.height;
251 ProgressBar::Domain ProgressBar::CalcDomain(const Vector2& currentSize)
253 return Domain(Vector2(0.0f, 0.0f), currentSize);
256 Toolkit::ProgressBar::ValueChangedSignalType& ProgressBar::ValueChangedSignal()
258 return mValueChangedSignal;
261 void ProgressBar::SetProgressValue(float value)
263 // update the progress bar value (taking float precision errors into account)
264 // TODO : it seems 0.0f cannot into this statement.
265 if((!Equals(mProgressValue, value)) &&
266 ((value >= DEFAULT_LOWER_BOUND) || (Equals(value, DEFAULT_LOWER_BOUND))) &&
267 ((value <= DEFAULT_UPPER_BOUND) || (Equals(value, DEFAULT_UPPER_BOUND))))
269 mProgressValue = Clamp(value, DEFAULT_LOWER_BOUND, DEFAULT_UPPER_BOUND);
271 ApplyProgressToVisual(mProgressValue, Toolkit::ProgressBar::Property::PROGRESS_VISUAL, ProgressDepthIndex::PROGRESS_VISUAL);
273 Toolkit::ProgressBar self = Toolkit::ProgressBar::DownCast(Self());
274 mValueChangedSignal.Emit(self, mProgressValue, mSecondaryProgressValue);
276 auto accessible = GetAccessibleObject();
277 if(DALI_LIKELY(accessible) && accessible->IsHighlighted())
279 accessible->Emit(Dali::Accessibility::ObjectPropertyChangeEvent::VALUE);
285 float ProgressBar::GetProgressValue() const
287 return mProgressValue;
290 void ProgressBar::SetSecondaryProgressValue(float value)
292 // update the progress bar value (taking float precision errors into account)
293 // TODO : it seems 0.0f cannot into this statement.
294 if((!Equals(mSecondaryProgressValue, value)) &&
295 ((value >= DEFAULT_LOWER_BOUND) || (Equals(value, DEFAULT_LOWER_BOUND))) &&
296 ((value <= DEFAULT_UPPER_BOUND) || (Equals(value, DEFAULT_UPPER_BOUND))))
298 mSecondaryProgressValue = Clamp(value, DEFAULT_LOWER_BOUND, DEFAULT_UPPER_BOUND);
300 ApplyProgressToVisual(mSecondaryProgressValue, Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, ProgressDepthIndex::SECONDARY_PROGRESS_VISUAL);
302 Toolkit::ProgressBar self = Toolkit::ProgressBar::DownCast(Self());
303 mValueChangedSignal.Emit(self, mProgressValue, mSecondaryProgressValue);
309 float ProgressBar::GetSecondaryProgressValue() const
311 return mSecondaryProgressValue;
314 void ProgressBar::SetIndeterminate(bool value)
316 mIndeterminate = value;
317 DevelControl::EnableVisual(*this, Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL, mIndeterminate);
322 if(mIndeterminateVisualTransition)
324 PlayIndeterminateVisualTransition();
329 if(mIndeterminateVisualAni)
331 mIndeterminateVisualAni.Stop();
334 // Restore previous visual data after animation finished.
335 RestoreVisualProperties(this, Toolkit::ProgressBar::Property::TRACK_VISUAL, mTrackVisualMap, ProgressDepthIndex::TRACK_VISUAL);
336 RestoreVisualProperties(this, Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, mSecondaryProgressVisualMap, ProgressDepthIndex::SECONDARY_PROGRESS_VISUAL);
337 RestoreVisualProperties(this, Toolkit::ProgressBar::Property::PROGRESS_VISUAL, mProgressVisualMap, ProgressDepthIndex::PROGRESS_VISUAL);
343 bool ProgressBar::GetIndeterminate() const
345 return mIndeterminate;
348 void ProgressBar::SetIndeterminateVisualTransition(Toolkit::TransitionData transition)
350 mIndeterminateVisualTransition = transition;
353 PlayIndeterminateVisualTransition();
357 void ProgressBar::PlayIndeterminateVisualTransition()
359 // Store current visual data before animation changes it.
360 BackupVisualProperties(this, Toolkit::ProgressBar::Property::TRACK_VISUAL, mTrackVisualMap);
361 BackupVisualProperties(this, Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, mSecondaryProgressVisualMap);
362 BackupVisualProperties(this, Toolkit::ProgressBar::Property::PROGRESS_VISUAL, mProgressVisualMap);
364 if(mIndeterminateVisualAni)
366 mIndeterminateVisualAni.Stop();
367 mIndeterminateVisualAni.Clear();
370 mIndeterminateVisualAni = DevelControl::CreateTransition(*this, mIndeterminateVisualTransition);
372 if(mIndeterminate && mIndeterminateVisualAni)
374 mIndeterminateVisualAni.SetLooping(true);
375 mIndeterminateVisualAni.Play();
379 Toolkit::TransitionData ProgressBar::ConvertPropertyToTransition(const Property::Value& value)
381 Toolkit::TransitionData transitionData;
383 if(value.GetType() == Property::ARRAY)
385 transitionData = Toolkit::TransitionData::New(*value.GetArray());
387 else if(value.GetType() == Property::MAP)
389 transitionData = Toolkit::TransitionData::New(*value.GetMap());
392 return transitionData;
396 * Create Visual for given index from a property map or url.
397 * 1) Check if value passed in is a url and create visual
398 * 2) Create visual from map if step (1) is false
399 * 3) Register visual with control with false for enable flag.
400 * 4) Unregister visual if empty map was provided. This is the method to remove a visual
403 void ProgressBar::CreateVisualsForComponent(Property::Index index, const Property::Value& value, const int visualDepth)
405 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
406 Toolkit::Visual::Base progressVisual;
408 std::string imageUrl;
409 if(value.Get(imageUrl))
411 if(!imageUrl.empty())
413 progressVisual = visualFactory.CreateVisual(imageUrl, ImageDimensions());
416 else // Does this code make text-visual can be accepted as visual?
418 // if its not a string then get a Property::Map from the property if possible.
419 const Property::Map* map = value.GetMap();
420 if(map && !map->Empty()) // Empty map results in current visual removal.
422 progressVisual = visualFactory.CreateVisual(*map);
428 if(index == Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL)
430 DevelControl::RegisterVisual(*this, index, progressVisual, mIndeterminate, visualDepth);
434 DevelControl::RegisterVisual(*this, index, progressVisual, true, visualDepth);
439 DevelControl::UnregisterVisual(*this, index);
443 bool ProgressBar::GetPropertyMapForVisual(Property::Index visualIndex, Property::Map& retreivedMap) const
445 bool success = false;
446 Toolkit::Visual::Base visual = DevelControl::GetVisual(*this, visualIndex);
450 visual.CreatePropertyMap(retreivedMap);
457 void ProgressBar::ApplyProgressToVisual(float progress, Property::Index index, int depth)
459 Toolkit::Visual::Base visual = DevelControl::GetVisual(*this, index);
461 if(visual && static_cast<DevelVisual::Type>(visual.GetType()) == DevelVisual::ARC && !mIndeterminate)
463 Visual::Base& visualImpl = Toolkit::GetImplementation(visual);
467 map[Toolkit::DevelArcVisual::Property::SWEEP_ANGLE] = Property::Value(360.0f * progress);
469 visualImpl.SetProperties(map);
471 DevelControl::UnregisterVisual(*this, index);
472 DevelControl::RegisterVisual(*this, index, visual, true, depth);
476 void ProgressBar::ApplyProgressToVisualTransform(float progress, Vector2 trackSize, Property::Index index)
478 Toolkit::Visual::Base visual = DevelControl::GetVisual(*this, index);
482 Property::Map visualTransform;
484 if(static_cast<DevelVisual::Type>(visual.GetType()) != DevelVisual::ARC)
486 visualTransform.Add(Toolkit::Visual::Transform::Property::SIZE, Vector2(mDomain.from.x + progress * (mDomain.to.x - mDomain.from.x), trackSize.height))
487 .Add(Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE))
488 .Add(Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE))
489 .Add(Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN)
490 .Add(Toolkit::Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::TOP_BEGIN);
493 visual.SetTransformAndSize(visualTransform, trackSize);
497 // Static class method to support script connecting signals
498 bool ProgressBar::DoConnectSignal(BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor)
500 Dali::BaseHandle handle(object);
502 bool connected = true;
503 Toolkit::ProgressBar ProgressBar = Toolkit::ProgressBar::DownCast(handle);
505 if(0 == strcmp(signalName.c_str(), SIGNAL_VALUE_CHANGED))
507 ProgressBar.ValueChangedSignal().Connect(tracker, functor);
511 // signalName does not match any signal
518 void ProgressBar::SetProperty(BaseObject* object, Property::Index propertyIndex, const Property::Value& value)
520 Toolkit::ProgressBar progressBar = Toolkit::ProgressBar::DownCast(Dali::BaseHandle(object));
524 ProgressBar& progressBarImpl(GetImpl(progressBar));
526 switch(propertyIndex)
528 case Toolkit::ProgressBar::Property::TRACK_VISUAL:
530 progressBarImpl.CreateVisualsForComponent(propertyIndex, value, ProgressDepthIndex::TRACK_VISUAL);
534 case Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL:
536 progressBarImpl.CreateVisualsForComponent(propertyIndex, value, ProgressDepthIndex::SECONDARY_PROGRESS_VISUAL);
537 progressBarImpl.ApplyProgressToVisual(progressBarImpl.mSecondaryProgressValue, propertyIndex, ProgressDepthIndex::SECONDARY_PROGRESS_VISUAL);
541 case Toolkit::ProgressBar::Property::PROGRESS_VISUAL:
543 progressBarImpl.CreateVisualsForComponent(propertyIndex, value, ProgressDepthIndex::PROGRESS_VISUAL);
544 progressBarImpl.ApplyProgressToVisual(progressBarImpl.mProgressValue, propertyIndex, ProgressDepthIndex::PROGRESS_VISUAL);
548 case Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL:
550 progressBarImpl.CreateVisualsForComponent(propertyIndex, value, ProgressDepthIndex::INDETERMINATE_VISUAL);
554 case Toolkit::ProgressBar::Property::LABEL_VISUAL:
557 std::string textString;
559 if(value.Get(textString))
561 // set new text string as TEXT property
562 Property::Map newTextMap;
563 Toolkit::Visual::Base label = DevelControl::GetVisual(progressBarImpl, Toolkit::ProgressBar::Property::LABEL_VISUAL);
567 label.CreatePropertyMap(map);
570 // if LABEL_VISUAL doesn't set before, add Visual property "TYPE" to create new text Visual
573 newTextMap.Add(Toolkit::Visual::Property::TYPE, Toolkit::Visual::TEXT);
574 newTextMap.Add(Toolkit::TextVisual::Property::POINT_SIZE, DEFAULT_FONT_SIZE);
576 newTextMap.Add(Toolkit::TextVisual::Property::TEXT, textString);
578 map.Merge(newTextMap);
587 progressBarImpl.CreateVisualsForComponent(propertyIndex, map, ProgressDepthIndex::LABEL_VISUAL);
592 case Toolkit::ProgressBar::Property::PROGRESS_VALUE:
594 progressBarImpl.SetProgressValue(value.Get<float>());
598 case Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VALUE:
600 progressBarImpl.SetSecondaryProgressValue(value.Get<float>());
604 case Toolkit::ProgressBar::Property::INDETERMINATE:
606 progressBarImpl.SetIndeterminate(value.Get<bool>());
610 case Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL_ANIMATION:
612 progressBarImpl.SetIndeterminateVisualTransition(progressBarImpl.ConvertPropertyToTransition(value));
619 Property::Value ProgressBar::GetProperty(BaseObject* object, Property::Index propertyIndex)
621 Property::Value value;
623 Toolkit::ProgressBar progressBar = Toolkit::ProgressBar::DownCast(Dali::BaseHandle(object));
627 ProgressBar& progressBarImpl(GetImpl(progressBar));
629 switch(propertyIndex)
631 case Toolkit::ProgressBar::Property::TRACK_VISUAL:
632 case Toolkit::ProgressBar::Property::PROGRESS_VISUAL:
633 case Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL:
634 case Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL:
635 case Toolkit::ProgressBar::Property::LABEL_VISUAL:
637 Property::Map visualProperty;
638 if(progressBarImpl.GetPropertyMapForVisual(propertyIndex, visualProperty))
640 value = visualProperty;
645 case Toolkit::ProgressBar::Property::PROGRESS_VALUE:
647 value = progressBarImpl.GetProgressValue();
651 case Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VALUE:
653 value = progressBarImpl.GetSecondaryProgressValue();
657 case Toolkit::ProgressBar::Property::INDETERMINATE:
659 value = progressBarImpl.GetIndeterminate();
663 case Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL_ANIMATION:
665 //TODO: Return INDETERMINATE_VISUAL_TRANSITION;
673 void ProgressBar::OnSceneConnection(int depth)
675 // Chain up first (ensures visuals are ready to draw)
676 Control::OnSceneConnection(depth);
680 PlayIndeterminateVisualTransition();
684 double ProgressBar::ProgressBarAccessible::GetMinimum() const
686 return DEFAULT_LOWER_BOUND;
689 double ProgressBar::ProgressBarAccessible::GetCurrent() const
691 auto self = Toolkit::ProgressBar::DownCast(Self());
692 return self.GetProperty(Toolkit::ProgressBar::Property::PROGRESS_VALUE).Get<float>();
695 std::string ProgressBar::ProgressBarAccessible::GetValueText() const
697 return {}; // Text mode is not used at the moment
700 double ProgressBar::ProgressBarAccessible::GetMaximum() const
702 return DEFAULT_UPPER_BOUND;
705 bool ProgressBar::ProgressBarAccessible::SetCurrent(double current)
707 if(current < GetMinimum() || current > GetMaximum())
712 auto self = Toolkit::ProgressBar::DownCast(Self());
713 self.SetProperty(Toolkit::ProgressBar::Property::PROGRESS_VALUE, static_cast<float>(current));
717 double ProgressBar::ProgressBarAccessible::GetMinimumIncrement() const
722 } // namespace Internal
724 } // namespace Toolkit