Add ColorPickerView 48/114748/9
authorjh5.cho <jh5.cho@samsung.com>
Wed, 15 Feb 2017 02:15:50 +0000 (11:15 +0900)
committerjh5.cho <jh5.cho@samsung.com>
Thu, 2 Mar 2017 05:21:13 +0000 (14:21 +0900)
    RFC: http://suprem.sec.samsung.net/confluence/display/SPTDTLC/%5BFormsTizen%5D+RFC+16+-+ColorPickerControl
    - This is the initial version of ColorPickerView

Change-Id: Ic11126d6a87ab2299cd958f9d3f92aa3c5f15f16

Tizen.Xamarin.Forms.Extension.Renderer/ColorPickerViewRenderer.cs [new file with mode: 0755]
Tizen.Xamarin.Forms.Extension.Renderer/Tizen.Xamarin.Forms.Extension.Renderer.csproj
Tizen.Xamarin.Forms.Extension/ColorChangedEventArgs.cs [new file with mode: 0755]
Tizen.Xamarin.Forms.Extension/ColorPickerView.cs [new file with mode: 0755]
Tizen.Xamarin.Forms.Extension/Tizen.Xamarin.Forms.Extension.csproj

diff --git a/Tizen.Xamarin.Forms.Extension.Renderer/ColorPickerViewRenderer.cs b/Tizen.Xamarin.Forms.Extension.Renderer/ColorPickerViewRenderer.cs
new file mode 100755 (executable)
index 0000000..c81d1c2
--- /dev/null
@@ -0,0 +1,59 @@
+using System.ComponentModel;
+using Tizen.Xamarin.Forms.Extension;
+using Tizen.Xamarin.Forms.Extension.Renderer;
+using Xamarin.Forms;\r
+using Xamarin.Forms.Platform.Tizen;
+using EColorSelector = ElmSharp.ColorSelector;
+using TForms = Xamarin.Forms.Platform.Tizen.Forms;
+\r
+[assembly: ExportRenderer(typeof(ColorPickerView), typeof(ColorPickerViewRenderer))]
+namespace Tizen.Xamarin.Forms.Extension.Renderer
+{
+    public class ColorPickerViewRenderer : ViewRenderer<ColorPickerView, EColorSelector>
+    {\r
+        public ColorPickerViewRenderer()
+        {
+        }
+
+        protected override void OnElementChanged(ElementChangedEventArgs<ColorPickerView> e)
+        {
+            if (Control == null)\r
+            {\r
+                var _colorSelector = new EColorSelector(TForms.Context.MainWindow);\r
+                SetNativeControl(_colorSelector);
+            }
+
+            if (e.OldElement != null)\r
+            {\r
+                Control.ColorChanged -= ColorChangedHandler;\r
+            }
+
+            if (e.NewElement != null)\r
+            {\r
+                UpdateSelectedColor();\r
+                Control.ColorChanged += ColorChangedHandler;\r
+            }
+            base.OnElementChanged(e);
+        }\r
+\r
+        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
+        {\r
+            if (e.PropertyName == ColorPickerView.SelectedColorProperty.PropertyName)
+            {\r
+                UpdateSelectedColor();
+            }
+            base.OnElementPropertyChanged(sender, e);
+        }\r
+\r
+        void UpdateSelectedColor()
+        {
+            Control.SelectedColor = Element.SelectedColor.ToNative();
+        }\r
+\r
+        void ColorChangedHandler(object sender, ElmSharp.ColorChangedEventArgs e)\r
+        {\r
+            var color = Control.SelectedColor;\r
+            Element.SelectedColor = Color.FromRgba(color.R, color.G, color.B, color.A);\r
+        }\r
+    }
+}
index 6c07bec..97b46a6 100755 (executable)
@@ -36,6 +36,7 @@
     <WarningLevel>4</WarningLevel>\r
   </PropertyGroup>\r
   <ItemGroup>\r
+    <Compile Include="ColorPickerViewRenderer.cs" />\r
     <Compile Include="BackgroundRenderer.cs" />\r
     <Compile Include="Cells\DoubleLabelCellRenderer.cs" />\r
     <Compile Include="Cells\GridViewCellRenderer.cs" />\r
     <None Include="Tizen.Xamarin.Forms.Extension.Renderer.project.json" />\r
   </ItemGroup>\r
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />\r
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
-               Other similar extension points exist, see Microsoft.Common.targets.
-       <Target Name="BeforeBuild">
-       </Target>
-       <Target Name="AfterBuild">
-       </Target>
-       -->\r
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\r
+    Other similar extension points exist, see Microsoft.Common.targets.\r
+  <Target Name="BeforeBuild">\r
+  </Target>\r
+  <Target Name="AfterBuild">\r
+  </Target>\r
+  -->\r
   <ItemGroup>\r
     <ProjectReference Include="..\Tizen.Xamarin.Forms.Extension\Tizen.Xamarin.Forms.Extension.csproj">\r
       <Project>{62531FB2-271B-4669-804E-7287A744CFD0}</Project>\r
     </ProjectReference>\r
   </ItemGroup>\r
   <PropertyGroup>\r
-    <!-- https://github.com/dotnet/corefxlab/tree/master/samples/NetCoreSample and
-                        https://docs.microsoft.com/en-us/dotnet/articles/core/tutorials/target-dotnetcore-with-msbuild
-               -->\r
-    <!-- We don't use any of MSBuild's resolution logic for resolving the framework, so just set these two
-                        properties to any folder that exists to skip the GetReferenceAssemblyPaths task (not target) and
-                        to prevent it from outputting a warning (MSB3644).
-               -->\r
+    <!-- https://github.com/dotnet/corefxlab/tree/master/samples/NetCoreSample and\r
+       https://docs.microsoft.com/en-us/dotnet/articles/core/tutorials/target-dotnetcore-with-msbuild\r
+    -->\r
+    <!-- We don't use any of MSBuild's resolution logic for resolving the framework, so just set these two\r
+       properties to any folder that exists to skip the GetReferenceAssemblyPaths task (not target) and\r
+       to prevent it from outputting a warning (MSB3644).\r
+    -->\r
     <_TargetFrameworkDirectories>$(MSBuildThisFileDirectory)</_TargetFrameworkDirectories>\r
     <_FullFrameworkReferenceAssemblyPaths>$(MSBuildThisFileDirectory)</_FullFrameworkReferenceAssemblyPaths>\r
     <AutoUnifyAssemblyReferences>true</AutoUnifyAssemblyReferences>\r
diff --git a/Tizen.Xamarin.Forms.Extension/ColorChangedEventArgs.cs b/Tizen.Xamarin.Forms.Extension/ColorChangedEventArgs.cs
new file mode 100755 (executable)
index 0000000..98d57cc
--- /dev/null
@@ -0,0 +1,19 @@
+using System;\r
+using Xamarin.Forms;\r
+\r
+namespace Tizen.Xamarin.Forms.Extension\r
+{\r
+    public class ColorChangedEventArgs : EventArgs\r
+    {\r
+        public ColorChangedEventArgs(Color oldColor, Color newColor)\r
+        {\r
+            OldColor = oldColor;\r
+            NewColor = newColor;\r
+        }\r
+\r
+        public Color OldColor { get; private set; }\r
+\r
+        public Color NewColor { get; private set; }\r
+\r
+    }\r
+}
\ No newline at end of file
diff --git a/Tizen.Xamarin.Forms.Extension/ColorPickerView.cs b/Tizen.Xamarin.Forms.Extension/ColorPickerView.cs
new file mode 100755 (executable)
index 0000000..1606d52
--- /dev/null
@@ -0,0 +1,46 @@
+using System;\r
+using System.Collections.Generic;\r
+using System.Collections.ObjectModel;\r
+using Xamarin.Forms;
+
+namespace Tizen.Xamarin.Forms.Extension
+{\r
+    /// <summary>\r
+    /// The ColorPickerView class allows the user to select a color.\r
+    /// </summary>
+    /// <example>
+    /// <code>
+    /// ColorPickerView colorPickerView = new ColorPickerView();\r
+    /// colorPickerView.ColorChanged += (s, e) =>\r
+    /// {\r
+    ///         Debug.WriteLine("Old Color: " + e.OldColor);\r
+    ///         Debug.WriteLine("New Color: " + e.NewColor);\r
+    /// };\r
+    /// </code>
+    /// </example>
+    public class ColorPickerView : View
+    {
+        public static readonly BindableProperty SelectedColorProperty = BindableProperty.Create("SelectedColor", typeof(Color), typeof(ColorPickerView), Color.Default, propertyChanged: OnSelectedColorChanged );\r
+\r
+        /// <summary>\r
+        /// Get or set current selected color from ColorPickerView\r
+        /// Default value is Color.Default\r
+        /// </summary>\r
+        public Color SelectedColor
+        {
+            get { return (Color)GetValue(SelectedColorProperty); }
+            set { SetValue(SelectedColorProperty, value); }
+        }
+
+        /// <summary>\r
+        /// Occurs when the SelectedColor value changes\r
+        /// </summary>
+        public event EventHandler<ColorChangedEventArgs> ColorChanged;\r
+\r
+        static void OnSelectedColorChanged(BindableObject bindable, object oldValue, object newValue)\r
+        {\r
+            var colorSelector = bindable as ColorPickerView;\r
+            colorSelector.ColorChanged?.Invoke(colorSelector, new ColorChangedEventArgs(((Color)oldValue), (Color)newValue));\r
+        }\r
+    }
+}
index 5269638..e11d819 100755 (executable)
@@ -53,6 +53,8 @@
     </NoWarn>\r
   </PropertyGroup>\r
   <ItemGroup>\r
+    <Compile Include="ColorChangedEventArgs.cs" />\r
+    <Compile Include="ColorPickerView.cs" />\r
     <Compile Include="Background.cs" />\r
     <Compile Include="BackgroundOptions.cs" />\r
     <Compile Include="Cells\GridViewCell.cs" />\r