From 6375cb415b9c6863534ead9aa669fdd222ca67b7 Mon Sep 17 00:00:00 2001 From: "sung-su.kim" Date: Wed, 1 Feb 2017 19:04:52 +0900 Subject: [PATCH] Add FloatingButton Change-Id: Iee5c56d4b31b5b8d17f63f1acb205b651093e5ea --- src/ElmSharp/ElmSharp.csproj | 2 +- src/ElmSharp/ElmSharp/FloatingButton.cs | 67 +++++++++- .../Interop/Interop.Eext.FloatingButton.cs | 48 +++++++ .../Interop/Interop.Elementary.FloatingButton.cs | 27 ---- test/ElmSharp.Test/ElmSharp.Test.csproj | 3 +- test/ElmSharp.Test/TC/FloatingButtonTest.cs | 143 +++++++++++++++++++++ 6 files changed, 260 insertions(+), 30 deletions(-) mode change 100644 => 100755 src/ElmSharp/ElmSharp/FloatingButton.cs create mode 100755 src/ElmSharp/Interop/Interop.Eext.FloatingButton.cs delete mode 100755 src/ElmSharp/Interop/Interop.Elementary.FloatingButton.cs create mode 100755 test/ElmSharp.Test/TC/FloatingButtonTest.cs diff --git a/src/ElmSharp/ElmSharp.csproj b/src/ElmSharp/ElmSharp.csproj index 4f35a2a..68e658f 100755 --- a/src/ElmSharp/ElmSharp.csproj +++ b/src/ElmSharp/ElmSharp.csproj @@ -115,6 +115,7 @@ + @@ -128,7 +129,6 @@ - diff --git a/src/ElmSharp/ElmSharp/FloatingButton.cs b/src/ElmSharp/ElmSharp/FloatingButton.cs old mode 100644 new mode 100755 index 368eef3..30ae31b --- a/src/ElmSharp/ElmSharp/FloatingButton.cs +++ b/src/ElmSharp/ElmSharp/FloatingButton.cs @@ -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 index 0000000..7ecef6a --- /dev/null +++ b/src/ElmSharp/Interop/Interop.Eext.FloatingButton.cs @@ -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 index e65dafc..0000000 --- a/src/ElmSharp/Interop/Interop.Elementary.FloatingButton.cs +++ /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); - } -} diff --git a/test/ElmSharp.Test/ElmSharp.Test.csproj b/test/ElmSharp.Test/ElmSharp.Test.csproj index 219b24d..cba815e 100644 --- a/test/ElmSharp.Test/ElmSharp.Test.csproj +++ b/test/ElmSharp.Test/ElmSharp.Test.csproj @@ -46,6 +46,7 @@ + @@ -195,4 +196,4 @@ - \ No newline at end of file + diff --git a/test/ElmSharp.Test/TC/FloatingButtonTest.cs b/test/ElmSharp.Test/TC/FloatingButtonTest.cs new file mode 100755 index 0000000..fe43eb2 --- /dev/null +++ b/test/ElmSharp.Test/TC/FloatingButtonTest.cs @@ -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 -- 2.7.4