Add FloatingButton
authorsung-su.kim <sung-su.kim@samsung.com>
Wed, 1 Feb 2017 10:04:52 +0000 (19:04 +0900)
committersung-su.kim <sung-su.kim@samsung.com>
Fri, 10 Mar 2017 06:45:54 +0000 (15:45 +0900)
Change-Id: Iee5c56d4b31b5b8d17f63f1acb205b651093e5ea

src/ElmSharp/ElmSharp.csproj
src/ElmSharp/ElmSharp/FloatingButton.cs [changed mode: 0644->0755]
src/ElmSharp/Interop/Interop.Eext.FloatingButton.cs [new file with mode: 0755]
src/ElmSharp/Interop/Interop.Elementary.FloatingButton.cs [deleted file]
test/ElmSharp.Test/ElmSharp.Test.csproj
test/ElmSharp.Test/TC/FloatingButtonTest.cs [new file with mode: 0755]

index 4f35a2a..68e658f 100755 (executable)
     <Compile Include="ElmSharp\Widget.cs" />
     <Compile Include="ElmSharp\Window.cs" />
     <Compile Include="ElmSharp\WrapType.cs" />
+    <Compile Include="Interop\Interop.Eext.FloatingButton.cs" />
     <Compile Include="Interop\Interop.Eina.cs" />
     <Compile Include="Interop\Interop.Elementary.FlipSelector.cs" />
     <Compile Include="Interop\Interop.Eo.cs" />
     <Compile Include="Interop\Interop.Elementary.CtxPopup.cs" />
     <Compile Include="Interop\Interop.Elementary.DateTimePicker.cs" />
     <Compile Include="Interop\Interop.Elementary.Entry.cs" />
-    <Compile Include="Interop\Interop.Elementary.FloatingButton.cs" />
     <Compile Include="Interop\Interop.Elementary.GenGridView.cs" />
     <Compile Include="Interop\Interop.Elementary.GenListView.cs" />
     <Compile Include="Interop\Interop.Elementary.GestureLayer.cs" />
old mode 100644 (file)
new mode 100755 (executable)
index 368eef3..30ae31b
@@ -20,8 +20,46 @@ namespace ElmSharp
 {
     public class FloatingButton : Layout
     {
+        SmartEvent _clicked;
+
         public FloatingButton(EvasObject parent) : base(parent)
         {
+            _clicked = new SmartEvent(this, Handle, "clicked");
+            _clicked.On += (s, e) => Clicked?.Invoke(this, EventArgs.Empty);
+        }
+
+        public event EventHandler Clicked;
+
+        public FloatingButtonMode Mode
+        {
+            get
+            {
+                return (FloatingButtonMode)Interop.Eext.eext_floatingbutton_mode_get(Handle);
+            }
+            set
+            {
+                Interop.Eext.eext_floatingbutton_mode_set(Handle, (int)value);
+            }
+        }
+
+        public FloatingButtonPosition Position
+        {
+            get
+            {
+                return (FloatingButtonPosition)Interop.Eext.eext_floatingbutton_pos_get(Handle);
+            }
+        }
+
+        public bool MovementBlock
+        {
+            get
+            {
+                return Interop.Eext.eext_floatingbutton_movement_block_get(Handle);
+            }
+            set
+            {
+                Interop.Eext.eext_floatingbutton_movement_block_set(Handle, value);
+            }
         }
 
         public override int Opacity
@@ -37,9 +75,36 @@ namespace ElmSharp
             }
         }
 
+        public void SetPosition(FloatingButtonPosition position, bool animated)
+        {
+            if (animated)
+            {
+                Interop.Eext.eext_floatingbutton_pos_bring_in(Handle, (int)position);
+            }
+            else
+            {
+                Interop.Eext.eext_floatingbutton_pos_set(Handle, (int)position);
+            }
+        }
+
         protected override IntPtr CreateHandle(EvasObject parent)
         {
             return Interop.Eext.eext_floatingbutton_add(parent.Handle);
         }
+
+        public enum FloatingButtonMode
+        {
+            All,
+            LeftRightOnly,
+        }
+
+        public enum FloatingButtonPosition
+        {
+            LeftOut,
+            Left,
+            Center,
+            Right,
+            RightOut,
+        }
     }
-}
+}
\ No newline at end of file
diff --git a/src/ElmSharp/Interop/Interop.Eext.FloatingButton.cs b/src/ElmSharp/Interop/Interop.Eext.FloatingButton.cs
new file mode 100755 (executable)
index 0000000..7ecef6a
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class Eext
+    {
+        [DllImport(Libraries.Eext)]
+        internal static extern IntPtr eext_floatingbutton_add(IntPtr parent);
+
+        [DllImport(Libraries.Eext)]
+        internal static extern int eext_floatingbutton_mode_get(IntPtr floatingButton);
+
+        [DllImport(Libraries.Eext)]
+        internal static extern void eext_floatingbutton_mode_set(IntPtr floatingButton, int mode);
+
+        [DllImport(Libraries.Eext)]
+        internal static extern int eext_floatingbutton_pos_get(IntPtr floatingButton);
+
+        [DllImport(Libraries.Eext)]
+        internal static extern bool eext_floatingbutton_pos_set(IntPtr floatingButton, int position);
+
+        [DllImport(Libraries.Eext)]
+        internal static extern bool eext_floatingbutton_movement_block_get(IntPtr floatingButton);
+
+        [DllImport(Libraries.Eext)]
+        internal static extern void eext_floatingbutton_movement_block_set(IntPtr floatingButton, bool block);
+
+        [DllImport(Libraries.Eext)]
+        internal static extern bool eext_floatingbutton_pos_bring_in(IntPtr floatingButton, int posposition);
+    }
+}
\ No newline at end of file
diff --git a/src/ElmSharp/Interop/Interop.Elementary.FloatingButton.cs b/src/ElmSharp/Interop/Interop.Elementary.FloatingButton.cs
deleted file mode 100755 (executable)
index e65dafc..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System;
-using System.Runtime.InteropServices;
-
-internal static partial class Interop
-{
-    internal static partial class Eext
-    {
-        [DllImport(Libraries.Eext)]
-        internal static extern IntPtr eext_floatingbutton_add(IntPtr obj);
-    }
-}
index 219b24d..cba815e 100644 (file)
@@ -46,6 +46,7 @@
     <Compile Include="TC\DateTimeSelectorTest2.cs" />
     <Compile Include="TC\EntryTest2.cs" />
     <Compile Include="TC\FlipSelectorTest.cs" />
+    <Compile Include="TC\FloatingButtonTest.cs" />
     <Compile Include="TC\GenListTest9.cs" />
     <Compile Include="TC\FocusTest1.cs" />
     <Compile Include="TC\NaviframeTest3.cs" />
       </FlavorProperties>
     </VisualStudio>
   </ProjectExtensions>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/test/ElmSharp.Test/TC/FloatingButtonTest.cs b/test/ElmSharp.Test/TC/FloatingButtonTest.cs
new file mode 100755 (executable)
index 0000000..fe43eb2
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using ElmSharp;
+
+namespace ElmSharp.Test
+{
+    class FloatingButtonTest : TestCaseBase
+    {
+        public override string TestName => "FloatingButtonTest";
+        public override string TestDescription => "To test FloatingButton";
+
+        Button _RedButton = null;
+        Button _GreenButton = null;
+
+        public Button CreateButton(Window window, string text)
+        {
+            return new Button(window)
+            {
+                Text = text,
+                AlignmentY = -1,
+                AlignmentX = -1,
+            };
+        }
+
+        public override void Run(Window window)
+        {
+            Conformant conformant = new Conformant(window);
+            conformant.Show();
+            Box box = new Box(window)
+            {
+                AlignmentY = -1,
+                AlignmentX = -1,
+                WeightX = 1,
+                WeightY = 1,
+            };
+            box.Show();
+            conformant.SetContent(box);
+
+            FloatingButton floatingButton = new FloatingButton(window)
+            {
+                Mode = FloatingButton.FloatingButtonMode.All,
+                AlignmentY = -1,
+                AlignmentX = -1,
+                WeightX = 1,
+                WeightY = 1,
+            };
+            floatingButton.Show();
+            floatingButton.Resize(700, 700);
+            floatingButton.Move(0, 400);
+
+            Box backGround = new Box(window)
+            {
+                AlignmentY = -1,
+                AlignmentX = -1,
+                WeightX = 1,
+                WeightY = 1,
+            };
+            backGround.Show();
+
+            Button button1 = CreateButton(window, "Mode change to LeftRightOnly");
+            button1.Clicked += (s, e) => {
+                if (floatingButton.Mode == FloatingButton.FloatingButtonMode.All)
+                {
+                    floatingButton.Mode = FloatingButton.FloatingButtonMode.LeftRightOnly;
+                    button1.Text = "Mode change to All";
+                }
+                else
+                {
+                    floatingButton.Mode = FloatingButton.FloatingButtonMode.All;
+                    button1.Text = "Mode change to LeftRightOnly";
+                }
+            };
+            button1.Show();
+
+            Button button2 = CreateButton(window, "MovementBlock Set");
+            button2.Clicked += (s, e) => {
+                floatingButton.MovementBlock = !floatingButton.MovementBlock;
+                if (floatingButton.MovementBlock) button2.Text = "MovementBlock Unset";
+                else button2.Text = "MovementBlock Set";
+            };
+            button2.Show();
+
+            Button button3 = CreateButton(window, "RedButton Set");
+            button3.Clicked += (s, e) => {
+                if (_RedButton == null)
+                {
+                    _RedButton = CreateButton(window, "RedButton");
+                    _RedButton.BackgroundColor = Color.Red;
+                    floatingButton.SetPartContent("button1", _RedButton, true);
+                    button3.Text = "RedButton Unset";
+                }
+                else
+                {
+                    _RedButton.Unrealize();
+                    _RedButton = null;
+                    floatingButton.SetPartContent("button1", _RedButton, true);
+                    button3.Text = "RedButton Set";
+                }
+            };
+            button3.Show();
+
+            Button button4 = CreateButton(window, "GreenButton Set");
+            button4.Clicked += (s, e) => {
+                if (_GreenButton == null)
+                {
+                    _GreenButton = CreateButton(window, "GreenButton");
+                    _GreenButton.BackgroundColor = Color.Green;
+                    floatingButton.SetPartContent("button2", _GreenButton, true);
+                    button4.Text = "GreenButton Unset";
+                }
+                else
+                {
+                    _GreenButton.Unrealize();
+                    _GreenButton = null;
+                    floatingButton.SetPartContent("button2", _GreenButton, true);
+                    button4.Text = "GreenButton Unset";
+                }
+            };
+            button4.Show();
+
+            box.PackEnd(backGround);
+            box.PackEnd(button1);
+            box.PackEnd(button2);
+            box.PackEnd(button3);
+            box.PackEnd(button4);
+        }
+    }
+}
\ No newline at end of file