[NUI] Enable TextLabel's BindableProperties to be affected by Layout change
authordongsug.song <dongsug.song@samsung.com>
Fri, 9 Apr 2021 11:51:51 +0000 (20:51 +0900)
committerhuiyueun <35286162+huiyueun@users.noreply.github.com>
Tue, 20 Apr 2021 06:13:00 +0000 (15:13 +0900)
src/Tizen.NUI.Components/Controls/Slider.cs
src/Tizen.NUI/src/public/BaseComponents/TextLabel.cs
src/Tizen.NUI/src/public/BaseComponents/TextLabelBindableProperty.cs
test/NUITestSample/NUIXAMLTestSample/NUIXAMLTestSample.cs
test/NUITestSample/NUIXAMLTestSample/TextLayoutSample/TextLayoutPage.xaml.cs [new file with mode: 0644]
test/NUITestSample/NUIXAMLTestSample/TextLayoutSample/TextLayoutSample.cs [new file with mode: 0644]
test/NUITestSample/NUIXAMLTestSample/res/layout/TextLayoutPage.xaml [new file with mode: 0644]

index 7a31df3..871fa92 100755 (executable)
@@ -161,6 +161,35 @@ namespace Tizen.NUI.Components
             return instance.valueIndicatorText.Text;
         });
 
+        /// <summary>
+        /// Bindable property of CurrentValue
+        /// <remark>
+        /// Hidden API, used for NUI XAML data binding
+        /// </remark>
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public static readonly BindableProperty CurrentValueProperty = BindableProperty.Create(nameof(CurrentValue), typeof(float), typeof(Slider), 0.0f, BindingMode.TwoWay,
+            propertyChanged: (bindable, oldValue, newValue) =>
+            {
+                var instance = (Slider)bindable;
+
+                if (newValue != null)
+                {
+                    instance.curValue = (float)newValue;
+                    if (instance.IsHighlighted)
+                    {
+                        instance.EmitAccessibilityEvent(ObjectPropertyChangeEvent.Value);
+                    }
+                    instance.UpdateValue();
+                }
+            },
+            defaultValueCreator: (bindable) =>
+            {
+                var instance = (Slider)bindable;
+                return instance.curValue;
+            }
+        );
+
         static Slider() { }
 
         /// <summary>
@@ -421,16 +450,11 @@ namespace Tizen.NUI.Components
         {
             get
             {
-                return curValue;
+                return (float)GetValue(CurrentValueProperty);
             }
             set
             {
-                curValue = value;
-                if (IsHighlighted)
-                {
-                    EmitAccessibilityEvent(ObjectPropertyChangeEvent.Value);
-                }
-                UpdateValue();
+                SetValue(CurrentValueProperty, value);
             }
         }
 
@@ -1301,37 +1325,37 @@ namespace Tizen.NUI.Components
 
             if (currentSlidedOffset <= 0)
             {
-                curValue = minValue;
+                this.CurrentValue = minValue;
             }
             else if (currentSlidedOffset >= BgTrackLength())
             {
-                curValue = maxValue;
+                this.CurrentValue = maxValue;
             }
             else
             {
                 int bgTrackLength = BgTrackLength();
                 if (bgTrackLength != 0)
                 {
-                    curValue = ((currentSlidedOffset / (float)bgTrackLength) * (float)(maxValue - minValue)) + minValue;
+                    this.CurrentValue = ((currentSlidedOffset / (float)bgTrackLength) * (float)(maxValue - minValue)) + minValue;
                 }
             }
 
             if (IsDiscrete)
             {
-                curValue = CalculateDiscreteValue(curValue);
+                this.CurrentValue = CalculateDiscreteValue(this.CurrentValue);
             }
 
             if (valueChangedHandler != null)
             {
                 ValueChangedArgs args = new ValueChangedArgs();
-                args.CurrentValue = curValue;
+                args.CurrentValue = this.CurrentValue;
                 valueChangedHandler(this, args);
             }
 
             if (sliderValueChangedHandler != null)
             {
                 SliderValueChangedEventArgs args = new SliderValueChangedEventArgs();
-                args.CurrentValue = curValue;
+                args.CurrentValue = this.CurrentValue;
                 sliderValueChangedHandler(this, args);
             }
         }
@@ -1401,24 +1425,24 @@ namespace Tizen.NUI.Components
 
             if (bgTrackLength != 0)
             {
-                curValue = ((currentSlidedOffset / (float)bgTrackLength) * (maxValue - minValue)) + minValue;
+                this.CurrentValue = ((currentSlidedOffset / (float)bgTrackLength) * (maxValue - minValue)) + minValue;
 
                 if (IsDiscrete)
                 {
-                    curValue = CalculateDiscreteValue(curValue);
+                    this.CurrentValue = CalculateDiscreteValue(this.CurrentValue);
                 }
 
                 if (null != valueChangedHandler)
                 {
                     ValueChangedArgs args = new ValueChangedArgs();
-                    args.CurrentValue = curValue;
+                    args.CurrentValue = this.CurrentValue;
                     valueChangedHandler(this, args);
                 }
 
                 if (null != sliderValueChangedHandler)
                 {
                     SliderValueChangedEventArgs args = new SliderValueChangedEventArgs();
-                    args.CurrentValue = curValue;
+                    args.CurrentValue = this.CurrentValue;
                     sliderValueChangedHandler(this, args);
                 }
             }
index a083b83..dcc903c 100755 (executable)
@@ -235,8 +235,7 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(TextProperty, value);
-                selectorData?.Text?.Reset(this);
-                NotifyPropertyChangedAndRequestLayout();
+                NotifyPropertyChanged();
             }
         }
 
@@ -254,8 +253,7 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(FontFamilyProperty, value);
-                selectorData?.FontFamily?.Reset(this);
-                NotifyPropertyChangedAndRequestLayout();
+                NotifyPropertyChanged();
             }
         }
 
@@ -273,7 +271,7 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(FontStyleProperty, value);
-                NotifyPropertyChangedAndRequestLayout();
+                NotifyPropertyChanged();
             }
         }
 
@@ -291,8 +289,7 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(PointSizeProperty, value);
-                selectorData?.PointSize?.Reset(this);
-                NotifyPropertyChangedAndRequestLayout();
+                NotifyPropertyChanged();
             }
         }
 
@@ -310,7 +307,7 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(MultiLineProperty, value);
-                NotifyPropertyChangedAndRequestLayout();
+                NotifyPropertyChanged();
             }
         }
 
@@ -633,7 +630,7 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(LineSpacingProperty, value);
-                NotifyPropertyChangedAndRequestLayout();
+                NotifyPropertyChanged();
             }
         }
 
@@ -742,8 +739,7 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(PixelSizeProperty, value);
-                selectorData?.PixelSize?.Reset(this);
-                NotifyPropertyChangedAndRequestLayout();
+                NotifyPropertyChanged();
             }
         }
 
@@ -923,7 +919,7 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(MinLineSizeProperty, value);
-                NotifyPropertyChangedAndRequestLayout();
+                NotifyPropertyChanged();
             }
         }
 
@@ -969,7 +965,7 @@ namespace Tizen.NUI.BaseComponents
                 }
 
                 SetValue(FontSizeScaleProperty, newFontSizeScale);
-                NotifyPropertyChangedAndRequestLayout();
+                NotifyPropertyChanged();
             }
         }
 
@@ -1065,7 +1061,6 @@ namespace Tizen.NUI.BaseComponents
         {
             float newFontSizeScale = TextUtils.GetFontSizeScale(e.Value);
             SetValue(FontSizeScaleProperty, newFontSizeScale);
-            NotifyPropertyChangedAndRequestLayout();
         }
 
         private void addFontSizeChangedCallback()
@@ -1102,9 +1097,8 @@ namespace Tizen.NUI.BaseComponents
             }
         }
 
-        private void NotifyPropertyChangedAndRequestLayout()
+        private void RequestLayout()
         {
-            NotifyPropertyChanged();
             Layout?.RequestLayout();
         }
 
index ca559ce..e795e8e 100755 (executable)
@@ -53,6 +53,8 @@ namespace Tizen.NUI.BaseComponents
             if (newValue != null)
             {
                 Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)textLabel.SwigCPtr, TextLabel.Property.TEXT, new Tizen.NUI.PropertyValue((string)newValue));
+                textLabel.selectorData?.Text?.Reset(textLabel);
+                textLabel.RequestLayout();
             }
         }),
         defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
@@ -70,6 +72,8 @@ namespace Tizen.NUI.BaseComponents
             if (newValue != null)
             {
                 Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)textLabel.SwigCPtr, TextLabel.Property.FontFamily, new Tizen.NUI.PropertyValue((string)newValue));
+                textLabel.selectorData?.FontFamily?.Reset(textLabel);
+                textLabel.RequestLayout();
             }
         }),
         defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
@@ -87,6 +91,7 @@ namespace Tizen.NUI.BaseComponents
             if (newValue != null)
             {
                 Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)textLabel.SwigCPtr, TextLabel.Property.FontStyle, new Tizen.NUI.PropertyValue((PropertyMap)newValue));
+                textLabel.RequestLayout();
             }
         }),
         defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
@@ -104,6 +109,8 @@ namespace Tizen.NUI.BaseComponents
             if (newValue != null)
             {
                 Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)textLabel.SwigCPtr, TextLabel.Property.PointSize, new Tizen.NUI.PropertyValue((float)newValue));
+                textLabel.selectorData?.PointSize?.Reset(textLabel);
+                textLabel.RequestLayout();
             }
         }),
         defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
@@ -121,6 +128,7 @@ namespace Tizen.NUI.BaseComponents
             if (newValue != null)
             {
                 Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)textLabel.SwigCPtr, TextLabel.Property.MultiLine, new Tizen.NUI.PropertyValue((bool)newValue));
+                textLabel.RequestLayout();
             }
         }),
         defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
@@ -286,6 +294,7 @@ namespace Tizen.NUI.BaseComponents
             if (newValue != null)
             {
                 Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)textLabel.SwigCPtr, TextLabel.Property.LineSpacing, new Tizen.NUI.PropertyValue((float)newValue));
+                textLabel.RequestLayout();
             }
         }),
         defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
@@ -388,6 +397,8 @@ namespace Tizen.NUI.BaseComponents
             if (newValue != null)
             {
                 Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)textLabel.SwigCPtr, TextLabel.Property.PixelSize, new Tizen.NUI.PropertyValue((float)newValue));
+                textLabel.selectorData?.PixelSize?.Reset(textLabel);
+                textLabel.RequestLayout();
             }
         }),
         defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
@@ -532,6 +543,7 @@ namespace Tizen.NUI.BaseComponents
             if (newValue != null)
             {
                 Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)textLabel.SwigCPtr, TextLabel.Property.MinLineSize, new Tizen.NUI.PropertyValue((float)newValue));
+                textLabel.RequestLayout();
             }
         }),
         defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
@@ -551,6 +563,7 @@ namespace Tizen.NUI.BaseComponents
                 using (var property = new Tizen.NUI.PropertyValue((float)newValue))
                 {
                     Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)textLabel.SwigCPtr, TextLabel.Property.FontSizeScale, property);
+                    textLabel.RequestLayout();
                 }
             }
         }),
index 3cff637..bf0f88f 100755 (executable)
@@ -11,6 +11,7 @@ namespace NUIXAMLTestSample
         [STAThread]
         static void Main(string[] args)
         {
+            //new TextLayoutSample().Run(args);
             //new TempTest().Run(args);
             new LayoutSample().Run(args);
 
diff --git a/test/NUITestSample/NUIXAMLTestSample/TextLayoutSample/TextLayoutPage.xaml.cs b/test/NUITestSample/NUIXAMLTestSample/TextLayoutSample/TextLayoutPage.xaml.cs
new file mode 100644 (file)
index 0000000..77ed66b
--- /dev/null
@@ -0,0 +1,13 @@
+
+using Tizen.NUI.BaseComponents;
+
+namespace Tizen.NUI.Examples
+{
+    public partial class TextLayoutPage : View
+    {
+        public TextLayoutPage()
+        {
+            InitializeComponent();
+        }
+    }
+}
diff --git a/test/NUITestSample/NUIXAMLTestSample/TextLayoutSample/TextLayoutSample.cs b/test/NUITestSample/NUIXAMLTestSample/TextLayoutSample/TextLayoutSample.cs
new file mode 100644 (file)
index 0000000..2d07ec4
--- /dev/null
@@ -0,0 +1,48 @@
+
+using Tizen.NUI;
+
+namespace Tizen.NUI.Examples
+{
+    using log = Tizen.Log;
+    public class TextLayoutSample : NUIApplication
+    {
+        private const string tag = "NUITEST";
+        TextLayoutPage page;
+        protected override void OnCreate()
+        {
+            base.OnCreate();
+            Window window = Window.Instance;
+            window.BackgroundColor = Color.Cyan;
+            window.KeyEvent += OnKeyEvent;
+
+            page = new TextLayoutPage();
+            page.PositionUsesPivotPoint = true;
+            page.ParentOrigin = ParentOrigin.Center;
+            page.PivotPoint = PivotPoint.Center;
+            page.Size = new Size(720, 1280, 0);
+            window.Add(page);
+
+            //page.text.PropertyChanged += TextPropertyChanged;
+            //page.text2.PropertySet += TextPropertySet;
+        }
+
+        private void TextPropertySet(object sender, global::System.ComponentModel.PropertyChangedEventArgs e)
+        {
+            log.Debug(tag, $"TextPropertySet() name={e.PropertyName} ");
+        }
+
+        private void TextPropertyChanged(object sender, global::System.ComponentModel.PropertyChangedEventArgs e)
+        {
+            log.Debug(tag, $"TextPropertyChanged() name={e.PropertyName} ");
+        }
+
+        public void OnKeyEvent(object sender, Window.KeyEventArgs e)
+        {
+            //log.Debug(tag, $"OnKeyEvent() {e.Key.KeyPressedName}, page.slider.CurrentValue={page.slider.CurrentValue}");
+            if (e.Key.State == Key.StateType.Down && (e.Key.KeyPressedName == "XF86Back" || e.Key.KeyPressedName == "Escape"))
+            {
+                Exit();
+            }
+        }
+    }
+}
diff --git a/test/NUITestSample/NUIXAMLTestSample/res/layout/TextLayoutPage.xaml b/test/NUITestSample/NUIXAMLTestSample/res/layout/TextLayoutPage.xaml
new file mode 100644 (file)
index 0000000..3a6aebb
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<View x:Class="Tizen.NUI.Examples..TextLayoutPage"
+    xmlns="http://tizen.org/Tizen.NUI/2018/XAML"
+    xmlns:a="clr-namespace:Tizen.NUI;assembly=Tizen.NUI"
+    xmlns:b="clr-namespace:Tizen.NUI.BaseComponents;assembly=Tizen.NUI"
+    xmlns:c="clr-namespace:Tizen.NUI.Components;assembly=Tizen.NUI.Components"
+    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
+
+    <c:Slider x:Name="slider" Position2D="50,30" Size2D="500,50" BackgroundColor="Yellow" MaxValue="600" MinValue="100"/>
+
+    <b:View x:Name="view" SizeWidth="{Binding Source={x:Reference Name=slider}, Path=CurrentValue}" SizeHeight="500" Position2D="10,100" 
+            HeightSpecification="-2">
+
+        <b:View.Layout>
+            <a:GridLayout Rows="2" GridOrientation="Horizontal"/>
+        </b:View.Layout>
+
+        <b:TextLabel x:Name="text"  Text="this is text LineWrapMode=Character, Long loooooooooooooooooong!" BackgroundColor="Red"
+                TextColor="White" MultiLine="True" LineWrapMode="Character" WidthSpecification="-1" HeightSpecification="-2" />
+
+        <b:TextLabel x:Name="text2"  Text="this is text2 LineWrapMode=Word, Long loooooooooooooooooong!" BackgroundColor="Blue"
+                TextColor="White" MultiLine="True" LineWrapMode="Word"  WidthSpecification="-1" HeightSpecification="-2" />
+
+    </b:View>
+
+</View>