[NUI] Add Enabled property to Slider and Progress
authorSeoyeon Kim <seoyeon2.kim@samsung.com>
Fri, 16 Jul 2021 08:51:21 +0000 (17:51 +0900)
committerdongsug-song <35130733+dongsug-song@users.noreply.github.com>
Wed, 21 Jul 2021 06:41:03 +0000 (15:41 +0900)
Signed-off-by: Seoyeon Kim <seoyeon2.kim@samsung.com>
- Added `IsEnabled` property in Slider and Progress components

src/Tizen.NUI.Components/Controls/Progress.cs
src/Tizen.NUI.Components/Controls/Slider.Internal.cs
src/Tizen.NUI.Components/Controls/Slider.cs

index 5468ef9..acd2853 100755 (executable)
@@ -131,6 +131,26 @@ namespace Tizen.NUI.Components
             return instance.state;
         });
 
+        /// <summary>
+        /// IsEnabledProperty
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public static readonly BindableProperty IsEnabledProperty = BindableProperty.Create(nameof(IsEnabled), typeof(bool), typeof(Progress), true, propertyChanged: (bindable, oldValue, newValue) =>
+        {
+            var instance = (Progress)bindable;
+            if (newValue != null)
+            {
+                bool newEnabled = (bool)newValue;
+                if (instance.isEnabled != newEnabled)
+                {
+                    instance.isEnabled = newEnabled;
+                    instance.Sensitive = newEnabled;
+                    instance.UpdateStates();
+                }
+            }
+        },
+        defaultValueCreator: (bindable) => ((Progress)bindable).isEnabled);
+
         /// This needs to be considered more if public-open is necessary.
         private ProgressStatusType state = ProgressStatusType.Determinate;
 
@@ -145,6 +165,7 @@ namespace Tizen.NUI.Components
         private float currentValue = 0;
         private float bufferValue = 0;
         private Animation indeterminateAnimation = null;
+        bool isEnabled = true;
 
         static Progress() { }
         /// <summary>
@@ -177,48 +198,6 @@ namespace Tizen.NUI.Components
         }
 
         /// <summary>
-        /// Prevents from showing child widgets in AT-SPI tree.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override bool AccessibilityShouldReportZeroChildren()
-        {
-            return true;
-        }
-
-        /// <summary>
-        /// Minimum value.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override double AccessibilityGetMinimum()
-        {
-            if (this.ProgressState == Components.Progress.ProgressStatusType.Determinate)
-                return (double)MinValue;
-            else return 0.0;
-        }
-
-        /// <summary>
-        /// Current value.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override double AccessibilityGetCurrent()
-        {
-            if (this.ProgressState == Components.Progress.ProgressStatusType.Determinate)
-                return (double)CurrentValue;
-            else return 0.0;
-        }
-
-        /// <summary>
-        /// Maximum value.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override double AccessibilityGetMaximum()
-        {
-            if (this.ProgressState == Components.Progress.ProgressStatusType.Determinate)
-                return (double)MaxValue;
-            else return 0.0;
-        }
-
-        /// <summary>
         /// The status type of the Progress.
         /// </summary>
         /// <since_tizen> 6 </since_tizen>
@@ -427,6 +406,22 @@ namespace Tizen.NUI.Components
             }
         }
 
+        /// <summary>
+        /// Flag to decide enable or disable in Progress.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public bool IsEnabled
+        {
+            get
+            {
+                return (bool)GetValue(IsEnabledProperty);
+            }
+            set
+            {
+                SetValue(IsEnabledProperty, value);
+            }
+        }
+
         /// <inheritdoc/>
         [EditorBrowsable(EditorBrowsableState.Never)]
         public override void OnInitialize()
@@ -467,6 +462,63 @@ namespace Tizen.NUI.Components
         }
 
         /// <summary>
+        /// Prevents from showing child widgets in AT-SPI tree.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        protected override bool AccessibilityShouldReportZeroChildren()
+        {
+            return true;
+        }
+
+        /// <summary>
+        /// Gets minimum value for Accessibility.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        protected override double AccessibilityGetMinimum()
+        {
+            if (this.ProgressState == Progress.ProgressStatusType.Determinate)
+            {
+                return (double)MinValue;
+            }
+            else
+            {
+                return 0.0;
+            }
+        }
+
+        /// <summary>
+        /// Gets the current value for Accessibility.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        protected override double AccessibilityGetCurrent()
+        {
+            if (this.ProgressState == Progress.ProgressStatusType.Determinate)
+            {
+                return (double)CurrentValue;
+            }
+            else
+            {
+                return 0.0;
+            }
+        }
+
+        /// <summary>
+        /// Gets maximum value for Accessibility.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        protected override double AccessibilityGetMaximum()
+        {
+            if (this.ProgressState == Progress.ProgressStatusType.Determinate)
+            {
+                return (double)MaxValue;
+            }
+            else
+            {
+                return 0.0;
+            }
+        }
+
+        /// <summary>
         /// Dispose Progress and all children on it.
         /// </summary>
         /// <param name="type">Dispose type.</param>
@@ -590,6 +642,22 @@ namespace Tizen.NUI.Components
         /// <param name="statusType">New status type</param>
         protected void ChangeImageState(ProgressStatusType statusType)
         {
+            if (!IsEnabled)
+            {
+                ControlState = ControlState.Disabled;
+
+                indeterminateAnimation?.Stop();
+                indeterminateAnimation = null;
+
+                if (null != indeterminateImage)
+                {
+                    indeterminateImage.Opacity = 0.0f;
+                }
+                progressImage.Hide();
+                bufferImage.Hide();
+                return;
+            }
+
             if (statusType == ProgressStatusType.Buffering)
             {
                 indeterminateAnimation?.Stop();
index 50530c2..c391769 100755 (executable)
@@ -95,6 +95,7 @@ namespace Tizen.NUI.Components
 
         bool isFocused = false;
         bool isPressed = false;
+        bool isEnabled = true;
 
         private void Initialize()
         {
index acac7c0..306fec9 100755 (executable)
@@ -190,6 +190,26 @@ namespace Tizen.NUI.Components
             }
         );
 
+        /// <summary>
+        /// IsEnabledProperty
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public static readonly BindableProperty IsEnabledProperty = BindableProperty.Create(nameof(IsEnabled), typeof(bool), typeof(Slider), true, propertyChanged: (bindable, oldValue, newValue) =>
+        {
+            var instance = (Slider)bindable;
+            if (newValue != null)
+            {
+                bool newEnabled = (bool)newValue;
+                if (instance.isEnabled != newEnabled)
+                {
+                    instance.isEnabled = newEnabled;
+                    instance.Sensitive = newEnabled;
+                    instance.UpdateValue();
+                }
+            }
+        },
+        defaultValueCreator: (bindable) => ((Slider)bindable).isEnabled);
+
         static Slider() { }
 
         /// <summary>
@@ -957,6 +977,22 @@ namespace Tizen.NUI.Components
             }
         }
 
+        /// <summary>
+        /// Flag to decide enable or disable in Slider.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public bool IsEnabled
+        {
+            get
+            {
+                return (bool)GetValue(IsEnabledProperty);
+            }
+            set
+            {
+                SetValue(IsEnabledProperty, value);
+            }
+        }
+
         private Extents spaceBetweenTrackAndIndicator
         {
             get
@@ -1105,8 +1141,7 @@ namespace Tizen.NUI.Components
         [EditorBrowsable(EditorBrowsableState.Never)]
         public override bool OnKey(Key key)
         {
-            // TODO : Add IsEnabled conditional later.
-            if (null == key)
+            if (!IsEnabled || null == key)
             {
                 return false;
             }
@@ -1408,6 +1443,11 @@ namespace Tizen.NUI.Components
 
         private bool OnTouchEventForTrack(object source, TouchEventArgs e)
         {
+            if (!IsEnabled)
+            {
+                return false;
+            }
+
             PointStateType state = e.Touch.GetState(0);
             if (state == PointStateType.Down)
             {
@@ -1512,7 +1552,18 @@ namespace Tizen.NUI.Components
             isFocused = isFocusedNew;
             isPressed = isPressedNew;
 
-            if (!isFocused && !isPressed)
+            if(!IsEnabled) // Disabled
+            {
+                ControlState = ControlState.Disabled;
+
+                if (stateChangedHandler != null)
+                {
+                    StateChangedArgs args = new StateChangedArgs();
+                    args.CurrentState = (ControlStates)ControlStates.Disabled;
+                    stateChangedHandler(this, args);
+                }
+            }
+            else if (!isFocused && !isPressed)
             {
                 ControlState = ControlState.Normal;