Add SetFormatCallback in MultiButtonEntry 26/129126/3
authorSungHyun Min <shyun.min@samsung.com>
Thu, 25 May 2017 04:28:43 +0000 (13:28 +0900)
committerSungHyun Min <shyun.min@samsung.com>
Thu, 25 May 2017 04:40:23 +0000 (13:40 +0900)
Change-Id: I7129eaeb28bd84205fc96ecf6474382672419c84
Signed-off-by: SungHyun Min <shyun.min@samsung.com>
ElmSharp.Test/ElmSharp.Test.csproj [changed mode: 0755->0644]
ElmSharp.Test/TC/MultibuttonEntryTest2.cs [new file with mode: 0644]
ElmSharp/ElmSharp/MultiButtonEntry.cs
ElmSharp/Interop/Interop.Elementary.MultiButtonEntry.cs

old mode 100755 (executable)
new mode 100644 (file)
index e2d2cfd..68c9815
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -57,6 +57,7 @@
     <Compile Include="TC\GenListTest9.cs" />
     <Compile Include="TC\FocusTest1.cs" />
     <Compile Include="TC\HoverselTest1.cs" />
+    <Compile Include="TC\MultibuttonEntryTest2.cs" />
     <Compile Include="TC\NaviframeTest3.cs" />
     <Compile Include="TC\ScreenInformationTest.cs" />
     <Compile Include="TC\BoxLayoutTest1.cs" />
       </FlavorProperties>
     </VisualStudio>
   </ProjectExtensions>
-</Project>
+</Project>
\ No newline at end of file
diff --git a/ElmSharp.Test/TC/MultibuttonEntryTest2.cs b/ElmSharp.Test/TC/MultibuttonEntryTest2.cs
new file mode 100644 (file)
index 0000000..8639099
--- /dev/null
@@ -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
index 475f01f..21d9a54 100755 (executable)
@@ -30,9 +30,11 @@ namespace ElmSharp
     {
         HashSet<MultiButtonEntryItem> _children = new HashSet<MultiButtonEntryItem>();
         List<Func<string, bool>> _filters = new List<Func<string, bool>>();
+        Func<int, string> _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<MultiButtonEntryItemEventArgs>(this, "item,longpressed", MultiButtonEntryItemEventArgs.CreateFromSmartEvent);
             _itemAdded = new SmartEvent<MultiButtonEntryItemEventArgs>(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);
+            }
+        }
+
+        /// <summary>
+        /// 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'".
+        /// </summary>
+        /// <param name="func">The function to return string to show</param>
+        public void SetFormatCallback(Func<int, string> 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;
index cf9e0db..0fa7ca5 100644 (file)
@@ -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)]