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);
275 auto accessible = GetAccessibleObject();
276 if(DALI_LIKELY(accessible) && accessible->IsHighlighted())
278 accessible->Emit(Dali::Accessibility::ObjectPropertyChangeEvent::VALUE);
284 float ProgressBar::GetProgressValue() const
286 return mProgressValue;
289 void ProgressBar::SetSecondaryProgressValue(float value)
291 // update the progress bar value (taking float precision errors into account)
292 // TODO : it seems 0.0f cannot into this statement.
293 if((!Equals(mSecondaryProgressValue, value)) &&
294 ((value >= DEFAULT_LOWER_BOUND) || (Equals(value, DEFAULT_LOWER_BOUND))) &&
295 ((value <= DEFAULT_UPPER_BOUND) || (Equals(value, DEFAULT_UPPER_BOUND))))
297 mSecondaryProgressValue = Clamp(value, DEFAULT_LOWER_BOUND, DEFAULT_UPPER_BOUND);
299 ApplyProgressToVisual(mSecondaryProgressValue, Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, ProgressDepthIndex::SECONDARY_PROGRESS_VISUAL);
301 Toolkit::ProgressBar self = Toolkit::ProgressBar::DownCast(Self());
302 mValueChangedSignal.Emit(self, mProgressValue, mSecondaryProgressValue);
308 float ProgressBar::GetSecondaryProgressValue() const
310 return mSecondaryProgressValue;
313 void ProgressBar::SetIndeterminate(bool value)
315 mIndeterminate = value;
316 DevelControl::EnableVisual(*this, Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL, mIndeterminate);
321 if(mIndeterminateVisualTransition)
323 PlayIndeterminateVisualTransition();
328 if(mIndeterminateVisualAni)
330 mIndeterminateVisualAni.Stop();
333 // Restore previous visual data after animation finished.
334 RestoreVisualProperties(this, Toolkit::ProgressBar::Property::TRACK_VISUAL, mTrackVisualMap, ProgressDepthIndex::TRACK_VISUAL);
335 RestoreVisualProperties(this, Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, mSecondaryProgressVisualMap, ProgressDepthIndex::SECONDARY_PROGRESS_VISUAL);
336 RestoreVisualProperties(this, Toolkit::ProgressBar::Property::PROGRESS_VISUAL, mProgressVisualMap, ProgressDepthIndex::PROGRESS_VISUAL);
342 bool ProgressBar::GetIndeterminate() const
344 return mIndeterminate;
347 void ProgressBar::SetIndeterminateVisualTransition(Toolkit::TransitionData transition)
349 mIndeterminateVisualTransition = transition;
352 PlayIndeterminateVisualTransition();
356 void ProgressBar::PlayIndeterminateVisualTransition()
358 // Store current visual data before animation changes it.
359 BackupVisualProperties(this, Toolkit::ProgressBar::Property::TRACK_VISUAL, mTrackVisualMap);
360 BackupVisualProperties(this, Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, mSecondaryProgressVisualMap);
361 BackupVisualProperties(this, Toolkit::ProgressBar::Property::PROGRESS_VISUAL, mProgressVisualMap);
363 if(mIndeterminateVisualAni)
365 mIndeterminateVisualAni.Stop();
366 mIndeterminateVisualAni.Clear();
369 mIndeterminateVisualAni = DevelControl::CreateTransition(*this, mIndeterminateVisualTransition);
371 if(mIndeterminate && mIndeterminateVisualAni)
373 mIndeterminateVisualAni.SetLooping(true);
374 mIndeterminateVisualAni.Play();
378 Toolkit::TransitionData ProgressBar::ConvertPropertyToTransition(const Property::Value& value)
380 Toolkit::TransitionData transitionData;
382 if(value.GetType() == Property::ARRAY)
384 transitionData = Toolkit::TransitionData::New(*value.GetArray());
386 else if(value.GetType() == Property::MAP)
388 transitionData = Toolkit::TransitionData::New(*value.GetMap());
391 return transitionData;
395 * Create Visual for given index from a property map or url.
396 * 1) Check if value passed in is a url and create visual
397 * 2) Create visual from map if step (1) is false
398 * 3) Register visual with control with false for enable flag.
399 * 4) Unregister visual if empty map was provided. This is the method to remove a visual
402 void ProgressBar::CreateVisualsForComponent(Property::Index index, const Property::Value& value, const int visualDepth)
404 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
405 Toolkit::Visual::Base progressVisual;
407 std::string imageUrl;
408 if(value.Get(imageUrl))
410 if(!imageUrl.empty())
412 progressVisual = visualFactory.CreateVisual(imageUrl, ImageDimensions());
415 else // Does this code make text-visual can be accepted as visual?
417 // if its not a string then get a Property::Map from the property if possible.
418 const Property::Map* map = value.GetMap();
419 if(map && !map->Empty()) // Empty map results in current visual removal.
421 progressVisual = visualFactory.CreateVisual(*map);
427 if(index == Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL)
429 DevelControl::RegisterVisual(*this, index, progressVisual, mIndeterminate, visualDepth);
433 DevelControl::RegisterVisual(*this, index, progressVisual, true, visualDepth);
438 DevelControl::UnregisterVisual(*this, index);
442 bool ProgressBar::GetPropertyMapForVisual(Property::Index visualIndex, Property::Map& retreivedMap) const
444 bool success = false;
445 Toolkit::Visual::Base visual = DevelControl::GetVisual(*this, visualIndex);
449 visual.CreatePropertyMap(retreivedMap);
456 void ProgressBar::ApplyProgressToVisual(float progress, Property::Index index, int depth)
458 Toolkit::Visual::Base visual = DevelControl::GetVisual(*this, index);
460 if(visual && static_cast<DevelVisual::Type>(visual.GetType()) == DevelVisual::ARC && !mIndeterminate)
462 Visual::Base& visualImpl = Toolkit::GetImplementation(visual);
466 map[Toolkit::DevelArcVisual::Property::SWEEP_ANGLE] = Property::Value(360.0f * progress);
468 visualImpl.SetProperties(map);
470 DevelControl::UnregisterVisual(*this, index);
471 DevelControl::RegisterVisual(*this, index, visual, true, depth);
475 void ProgressBar::ApplyProgressToVisualTransform(float progress, Vector2 trackSize, Property::Index index)
477 Toolkit::Visual::Base visual = DevelControl::GetVisual(*this, index);
481 Property::Map visualTransform;
483 if(static_cast<DevelVisual::Type>(visual.GetType()) != DevelVisual::ARC)
485 visualTransform.Add(Toolkit::Visual::Transform::Property::SIZE, Vector2(mDomain.from.x + progress * (mDomain.to.x - mDomain.from.x), trackSize.height))
486 .Add(Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE))
487 .Add(Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE))
488 .Add(Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN)
489 .Add(Toolkit::Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::TOP_BEGIN);
492 visual.SetTransformAndSize(visualTransform, trackSize);
496 // Static class method to support script connecting signals
497 bool ProgressBar::DoConnectSignal(BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor)
499 Dali::BaseHandle handle(object);
501 bool connected = true;
502 Toolkit::ProgressBar ProgressBar = Toolkit::ProgressBar::DownCast(handle);
504 if(0 == strcmp(signalName.c_str(), SIGNAL_VALUE_CHANGED))
506 ProgressBar.ValueChangedSignal().Connect(tracker, functor);
510 // signalName does not match any signal
517 void ProgressBar::SetProperty(BaseObject* object, Property::Index propertyIndex, const Property::Value& value)
519 Toolkit::ProgressBar progressBar = Toolkit::ProgressBar::DownCast(Dali::BaseHandle(object));
523 ProgressBar& progressBarImpl(GetImpl(progressBar));
525 switch(propertyIndex)
527 case Toolkit::ProgressBar::Property::TRACK_VISUAL:
529 progressBarImpl.CreateVisualsForComponent(propertyIndex, value, ProgressDepthIndex::TRACK_VISUAL);
533 case Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL:
535 progressBarImpl.CreateVisualsForComponent(propertyIndex, value, ProgressDepthIndex::SECONDARY_PROGRESS_VISUAL);
536 progressBarImpl.ApplyProgressToVisual(progressBarImpl.mSecondaryProgressValue, propertyIndex, ProgressDepthIndex::SECONDARY_PROGRESS_VISUAL);
540 case Toolkit::ProgressBar::Property::PROGRESS_VISUAL:
542 progressBarImpl.CreateVisualsForComponent(propertyIndex, value, ProgressDepthIndex::PROGRESS_VISUAL);
543 progressBarImpl.ApplyProgressToVisual(progressBarImpl.mProgressValue, propertyIndex, ProgressDepthIndex::PROGRESS_VISUAL);
547 case Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL:
549 progressBarImpl.CreateVisualsForComponent(propertyIndex, value, ProgressDepthIndex::INDETERMINATE_VISUAL);
553 case Toolkit::ProgressBar::Property::LABEL_VISUAL:
556 std::string textString;
558 if(value.Get(textString))
560 // set new text string as TEXT property
561 Property::Map newTextMap;
562 Toolkit::Visual::Base label = DevelControl::GetVisual(progressBarImpl, Toolkit::ProgressBar::Property::LABEL_VISUAL);
566 label.CreatePropertyMap(map);
569 // if LABEL_VISUAL doesn't set before, add Visual property "TYPE" to create new text Visual
572 newTextMap.Add(Toolkit::Visual::Property::TYPE, Toolkit::Visual::TEXT);
573 newTextMap.Add(Toolkit::TextVisual::Property::POINT_SIZE, DEFAULT_FONT_SIZE);
575 newTextMap.Add(Toolkit::TextVisual::Property::TEXT, textString);
577 map.Merge(newTextMap);
586 progressBarImpl.CreateVisualsForComponent(propertyIndex, map, ProgressDepthIndex::LABEL_VISUAL);
591 case Toolkit::ProgressBar::Property::PROGRESS_VALUE:
593 progressBarImpl.SetProgressValue(value.Get<float>());
597 case Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VALUE:
599 progressBarImpl.SetSecondaryProgressValue(value.Get<float>());
603 case Toolkit::ProgressBar::Property::INDETERMINATE:
605 progressBarImpl.SetIndeterminate(value.Get<bool>());
609 case Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL_ANIMATION:
611 progressBarImpl.SetIndeterminateVisualTransition(progressBarImpl.ConvertPropertyToTransition(value));
618 Property::Value ProgressBar::GetProperty(BaseObject* object, Property::Index propertyIndex)
620 Property::Value value;
622 Toolkit::ProgressBar progressBar = Toolkit::ProgressBar::DownCast(Dali::BaseHandle(object));
626 ProgressBar& progressBarImpl(GetImpl(progressBar));
628 switch(propertyIndex)
630 case Toolkit::ProgressBar::Property::TRACK_VISUAL:
631 case Toolkit::ProgressBar::Property::PROGRESS_VISUAL:
632 case Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL:
633 case Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL:
634 case Toolkit::ProgressBar::Property::LABEL_VISUAL:
636 Property::Map visualProperty;
637 if(progressBarImpl.GetPropertyMapForVisual(propertyIndex, visualProperty))
639 value = visualProperty;
644 case Toolkit::ProgressBar::Property::PROGRESS_VALUE:
646 value = progressBarImpl.GetProgressValue();
650 case Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VALUE:
652 value = progressBarImpl.GetSecondaryProgressValue();
656 case Toolkit::ProgressBar::Property::INDETERMINATE:
658 value = progressBarImpl.GetIndeterminate();
662 case Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL_ANIMATION:
664 //TODO: Return INDETERMINATE_VISUAL_TRANSITION;
672 void ProgressBar::OnSceneConnection(int depth)
674 // Chain up first (ensures visuals are ready to draw)
675 Control::OnSceneConnection(depth);
679 PlayIndeterminateVisualTransition();
683 double ProgressBar::ProgressBarAccessible::GetMinimum() const
685 return DEFAULT_LOWER_BOUND;
688 double ProgressBar::ProgressBarAccessible::GetCurrent() const
690 auto self = Toolkit::ProgressBar::DownCast(Self());
691 return self.GetProperty(Toolkit::ProgressBar::Property::PROGRESS_VALUE).Get<float>();
694 std::string ProgressBar::ProgressBarAccessible::GetValueText() const
696 return {}; // Text mode is not used at the moment
699 double ProgressBar::ProgressBarAccessible::GetMaximum() const
701 return DEFAULT_UPPER_BOUND;
704 bool ProgressBar::ProgressBarAccessible::SetCurrent(double current)
706 if(current < GetMinimum() || current > GetMaximum())
711 auto self = Toolkit::ProgressBar::DownCast(Self());
712 self.SetProperty(Toolkit::ProgressBar::Property::PROGRESS_VALUE, static_cast<float>(current));
716 double ProgressBar::ProgressBarAccessible::GetMinimumIncrement() const
721 } // namespace Internal
723 } // namespace Toolkit