From 9172a3e6647917e61607e2a0ad08c779a57c616c Mon Sep 17 00:00:00 2001 From: SungHyun Min Date: Thu, 25 May 2017 13:28:43 +0900 Subject: [PATCH] Add SetFormatCallback in MultiButtonEntry Change-Id: I7129eaeb28bd84205fc96ecf6474382672419c84 Signed-off-by: SungHyun Min --- src/ElmSharp/ElmSharp/MultiButtonEntry.cs | 40 +++++++- .../Interop/Interop.Elementary.MultiButtonEntry.cs | 8 +- test/ElmSharp.Test/ElmSharp.Test.csproj | 5 +- test/ElmSharp.Test/TC/MultibuttonEntryTest2.cs | 114 +++++++++++++++++++++ 4 files changed, 157 insertions(+), 10 deletions(-) mode change 100755 => 100644 test/ElmSharp.Test/ElmSharp.Test.csproj create mode 100644 test/ElmSharp.Test/TC/MultibuttonEntryTest2.cs diff --git a/src/ElmSharp/ElmSharp/MultiButtonEntry.cs b/src/ElmSharp/ElmSharp/MultiButtonEntry.cs index 475f01f..21d9a54 100755 --- a/src/ElmSharp/ElmSharp/MultiButtonEntry.cs +++ b/src/ElmSharp/ElmSharp/MultiButtonEntry.cs @@ -30,9 +30,11 @@ namespace ElmSharp { HashSet _children = new HashSet(); List> _filters = new List>(); + Func _formatFunc = null; Entry _entry = null; - Interop.Elementary.MultiButtonEntryItemFilterCallback _filtercallback; + Interop.Elementary.MultiButtonEntryItemFilterCallback _filterCallback; + Interop.Elementary.MultiButtonEntryFormatCallback _formatCallback; SmartEvent _clicked; SmartEvent _expanded; @@ -59,7 +61,8 @@ namespace ElmSharp _itemLongPressed = new SmartEvent(this, "item,longpressed", MultiButtonEntryItemEventArgs.CreateFromSmartEvent); _itemAdded = new SmartEvent(this, "item,added", MultiButtonEntryItemEventArgs.CreateAndAddFromSmartEvent); - _filtercallback = new Interop.Elementary.MultiButtonEntryItemFilterCallback(FilterCallbackHandler); + _filterCallback = new Interop.Elementary.MultiButtonEntryItemFilterCallback(FilterCallbackHandler); + _formatCallback = new Interop.Elementary.MultiButtonEntryFormatCallback(FormatCallbackHandler); _clicked.On += (sender, e) => Clicked?.Invoke(this, EventArgs.Empty); _expanded.On += (sender, e) => Expanded?.Invoke(this, EventArgs.Empty); @@ -263,6 +266,10 @@ namespace ElmSharp public void Clear() { Interop.Elementary.elm_multibuttonentry_clear(RealHandle); + foreach (var item in _children) + { + item.Deleted -= Item_Deleted; + } _children.Clear(); } @@ -275,7 +282,7 @@ namespace ElmSharp _filters.Add(func); if (_filters.Count == 1) { - Interop.Elementary.elm_multibuttonentry_item_filter_append(RealHandle, _filtercallback, IntPtr.Zero); + Interop.Elementary.elm_multibuttonentry_item_filter_append(RealHandle, _filterCallback, IntPtr.Zero); } } @@ -288,7 +295,7 @@ namespace ElmSharp _filters.Insert(0, func); if (_filters.Count == 1) { - Interop.Elementary.elm_multibuttonentry_item_filter_prepend(RealHandle, _filtercallback, IntPtr.Zero); + Interop.Elementary.elm_multibuttonentry_item_filter_prepend(RealHandle, _filterCallback, IntPtr.Zero); } } @@ -301,10 +308,33 @@ namespace ElmSharp _filters.Remove(func); if (_filters.Count == 0) { - Interop.Elementary.elm_multibuttonentry_item_filter_remove(RealHandle, _filtercallback, IntPtr.Zero); + Interop.Elementary.elm_multibuttonentry_item_filter_remove(RealHandle, _filterCallback, IntPtr.Zero); + } + } + + /// + /// Set a function to format the string that will be used to display the hidden items counter. + /// If func is NULL, the default format will be used, which is "+ 'the hidden items counter'". + /// + /// The function to return string to show + public void SetFormatCallback(Func func) + { + if (func == null) + { + Interop.Elementary.elm_multibuttonentry_format_function_set(RealHandle, null, IntPtr.Zero); + } + else + { + _formatFunc = func; + Interop.Elementary.elm_multibuttonentry_format_function_set(RealHandle, _formatCallback, IntPtr.Zero); } } + string FormatCallbackHandler(int count, IntPtr data) + { + return _formatFunc(count); + } + void Item_Deleted(object sender, EventArgs e) { var removed = sender as MultiButtonEntryItem; diff --git a/src/ElmSharp/Interop/Interop.Elementary.MultiButtonEntry.cs b/src/ElmSharp/Interop/Interop.Elementary.MultiButtonEntry.cs index cf9e0db..0fa7ca5 100644 --- a/src/ElmSharp/Interop/Interop.Elementary.MultiButtonEntry.cs +++ b/src/ElmSharp/Interop/Interop.Elementary.MultiButtonEntry.cs @@ -23,6 +23,8 @@ internal static partial class Interop { public delegate bool MultiButtonEntryItemFilterCallback(IntPtr obj, string label, IntPtr itemData, IntPtr data); + public delegate string MultiButtonEntryFormatCallback(int count, IntPtr data); + [DllImport(Libraries.Elementary)] internal static extern IntPtr elm_multibuttonentry_add(IntPtr obj); @@ -54,9 +56,6 @@ internal static partial class Interop internal static extern IntPtr elm_multibuttonentry_item_insert_after(IntPtr obj, IntPtr after, string label, Evas.SmartCallback func, IntPtr data); [DllImport(Libraries.Elementary)] - internal static extern IntPtr elm_multibuttonentry_items_get(IntPtr obj); //return list - - [DllImport(Libraries.Elementary)] internal static extern IntPtr elm_multibuttonentry_first_item_get(IntPtr obj); [DllImport(Libraries.Elementary)] @@ -81,6 +80,9 @@ internal static partial class Interop internal static extern IntPtr elm_multibuttonentry_item_next_get(IntPtr obj); [DllImport(Libraries.Elementary)] + internal static extern void elm_multibuttonentry_format_function_set(IntPtr obj, MultiButtonEntryFormatCallback callback, IntPtr data); + + [DllImport(Libraries.Elementary)] internal static extern void elm_multibuttonentry_item_filter_append(IntPtr obj, MultiButtonEntryItemFilterCallback callback, IntPtr data); [DllImport(Libraries.Elementary)] diff --git a/test/ElmSharp.Test/ElmSharp.Test.csproj b/test/ElmSharp.Test/ElmSharp.Test.csproj old mode 100755 new mode 100644 index e2d2cfd..68c9815 --- a/test/ElmSharp.Test/ElmSharp.Test.csproj +++ b/test/ElmSharp.Test/ElmSharp.Test.csproj @@ -1,4 +1,4 @@ - + Debug @@ -57,6 +57,7 @@ + @@ -206,4 +207,4 @@ - + \ No newline at end of file diff --git a/test/ElmSharp.Test/TC/MultibuttonEntryTest2.cs b/test/ElmSharp.Test/TC/MultibuttonEntryTest2.cs new file mode 100644 index 0000000..8639099 --- /dev/null +++ b/test/ElmSharp.Test/TC/MultibuttonEntryTest2.cs @@ -0,0 +1,114 @@ +/* + * 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.Collections.Generic; +using ElmSharp; + +namespace ElmSharp.Test +{ + class MultiButtonEntryTest2 : TestCaseBase + { + public override string TestName => "MultiButtonEntryTest2"; + public override string TestDescription => "To test basic operation of MultiButtonEntry"; + + bool _setCallback = false; + + public override void Run(Window window) + { + Background bg = new Background(window); + bg.Color = Color.White; + bg.Move(0, 0); + bg.Resize(window.ScreenSize.Width, window.ScreenSize.Height); + bg.Show(); + + MultiButtonEntry mbe = new MultiButtonEntry(window) + { + IsEditable = true, + IsExpanded = true, + Text = "To: " + }; + + mbe.Append("Append1"); + mbe.Append("Append2"); + mbe.Append("Append3"); + mbe.Append("Append4"); + mbe.Append("Append5"); + mbe.Append("Append6"); + mbe.Append("Append7"); + mbe.Append("Append8"); + mbe.Append("Append9"); + mbe.Append("Append10"); + mbe.Append("Append11"); + mbe.Append("Append12"); + + Label label1 = new Label(window) + { + Text = "MultiButtonEntry Test", + Color = Color.Blue + }; + + var expandButton = new Button(window) + { + Text = "IsExpanded", + AlignmentX = -1, + WeightX = 1, + }; + + var formatButton = new Button(window) + { + Text = "format", + AlignmentX = -1, + WeightX = 1, + }; + + expandButton.Clicked += (sender, e) => + { + mbe.IsExpanded = !mbe.IsExpanded; + }; + + formatButton.Clicked += (sender, e) => + { + if (_setCallback) + { + mbe.SetFormatCallback(null); + _setCallback = false; + } + else + { + mbe.SetFormatCallback((count) => { return "(" + count + ")"; }); + _setCallback = true; + } + }; + + label1.Resize(600, 100); + label1.Move(50, 50); + label1.Show(); + + mbe.Resize(600, 600); + mbe.Move(0, 100); + mbe.Show(); + + expandButton.Resize(200, 100); + expandButton.Move(50, 700); + expandButton.Show(); + + formatButton.Resize(200, 100); + formatButton.Move(300, 700); + formatButton.Show(); + } + } +} \ No newline at end of file -- 2.7.4