From 5a720d1321a8a187a054f32cd1767f84709e3a7a Mon Sep 17 00:00:00 2001 From: Seungkeun Lee Date: Mon, 6 Feb 2017 16:44:01 +0900 Subject: [PATCH] Add FieldUpdate API in GenListItem - To update Height of Item without recreation Change-Id: I4a6dd30d7775b9d084f2ad601f9f1fe378f2c97a --- ElmSharp.Test/ElmSharp.Test.csproj | 3 +- ElmSharp.Test/TC/GenListTest9.cs | 111 +++++++++++++++++++++ ElmSharp/ElmSharp/GenListItem.cs | 15 +++ ElmSharp/Interop/Interop.Elementary.GenListView.cs | 3 + packaging/elm-sharp.spec | 2 +- 5 files changed, 132 insertions(+), 2 deletions(-) create mode 100644 ElmSharp.Test/TC/GenListTest9.cs diff --git a/ElmSharp.Test/ElmSharp.Test.csproj b/ElmSharp.Test/ElmSharp.Test.csproj index 69a6c69..f5600af 100644 --- a/ElmSharp.Test/ElmSharp.Test.csproj +++ b/ElmSharp.Test/ElmSharp.Test.csproj @@ -44,6 +44,7 @@ + @@ -190,4 +191,4 @@ - \ No newline at end of file + diff --git a/ElmSharp.Test/TC/GenListTest9.cs b/ElmSharp.Test/TC/GenListTest9.cs new file mode 100644 index 0000000..39a0325 --- /dev/null +++ b/ElmSharp.Test/TC/GenListTest9.cs @@ -0,0 +1,111 @@ +/* + * 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; +using System.Collections.Generic; + +namespace ElmSharp.Test +{ + class GenListTest9 : TestCaseBase + { + + public class ItemContext + { + public object Data; + public GenListItem Item; + public EvasObject Realized; + } + + Dictionary _cacheMap = new Dictionary(); + + Dictionary _realizedMap = new Dictionary(); + public override string TestName => "GenListTest9"; + public override string TestDescription => "To test FieldUpdate operation of GenList"; + + public override void Run(Window window) + { + Background bg = new Background(window) + { + Color = Color.White, + AlignmentX = -1, + AlignmentY = -1, + WeightX = 1, + WeightY = 1 + }; + bg.Show(); + bg.Lower(); + + window.AddResizeObject(bg); + Conformant conformant = new Conformant(window); + conformant.Show(); + Box box = new Box(window) + { + AlignmentX = -1, + AlignmentY = -1, + WeightX = 1, + WeightY = 1 + }; + GenList list = new GenList(window) + { + Homogeneous = false, + AlignmentX = -1, + AlignmentY = -1, + WeightX = 1, + WeightY = 1 + }; + + GenItemClass fullyCustomizeClass = new GenItemClass("full") + { + GetContentHandler = (obj, part) => + { + Console.WriteLine("{0} part create requested", part); + var btn = new Button(window) + { + AlignmentX = -1, + WeightX = 1, + Text = (string)(obj as ItemContext).Data + }; + btn.MinimumHeight = 100; + (obj as ItemContext).Realized = btn; + (obj as ItemContext).Item?.UpdateField("elm.swallow.content", GenListItemFieldType.None); + return btn; + }, + }; + + for (int i = 0; i < 100; i++) + { + var context = new ItemContext(); + context.Data = string.Format("{0} Item", i); + context.Item = list.Append(fullyCustomizeClass, context, GenListItemType.Normal); + } + + list.Show(); + list.ItemSelected += List_ItemSelected; ; + box.Show(); + box.PackEnd(list); + conformant.SetContent(box); + } + + private void List_ItemSelected(object sender, GenListItemEventArgs e) + { + var itemContext = e.Item.Data as ItemContext; + Console.WriteLine("{0} Item was selected", (string)(itemContext.Data)); + itemContext.Realized.MinimumHeight += 20; + e.Item.UpdateField("elm.swallow.content", GenListItemFieldType.None); + } + } +} diff --git a/ElmSharp/ElmSharp/GenListItem.cs b/ElmSharp/ElmSharp/GenListItem.cs index 2108292..af616e5 100644 --- a/ElmSharp/ElmSharp/GenListItem.cs +++ b/ElmSharp/ElmSharp/GenListItem.cs @@ -26,6 +26,16 @@ namespace ElmSharp DisplayOnly } + [Flags] + public enum GenListItemFieldType + { + All = 0, + Text = (1 << 0), + Content = (1 << 1), + State = (1 << 2), + None = (1 << 3) + }; + public class GenListItem : GenItem { internal GenListItem(object data, GenItemClass itemClass) @@ -50,6 +60,11 @@ namespace ElmSharp Interop.Elementary.elm_genlist_item_update(Handle); } + public void UpdateField(string part, GenListItemFieldType type) + { + Interop.Elementary.elm_genlist_item_fields_update(Handle, part, (uint)type); + } + public GenListSelectionMode SelectionMode { get diff --git a/ElmSharp/Interop/Interop.Elementary.GenListView.cs b/ElmSharp/Interop/Interop.Elementary.GenListView.cs index d25b624..75698da 100644 --- a/ElmSharp/Interop/Interop.Elementary.GenListView.cs +++ b/ElmSharp/Interop/Interop.Elementary.GenListView.cs @@ -132,5 +132,8 @@ internal static partial class Interop [DllImport(Libraries.Elementary)] internal static extern void elm_genlist_clear(IntPtr obj); + + [DllImport(Libraries.Elementary)] + internal static extern void elm_genlist_item_fields_update(IntPtr item, string part, uint type); } } diff --git a/packaging/elm-sharp.spec b/packaging/elm-sharp.spec index 9def293..b690ec0 100644 --- a/packaging/elm-sharp.spec +++ b/packaging/elm-sharp.spec @@ -1,4 +1,4 @@ -%define DEV_VERSION beta-009 +%define DEV_VERSION beta-010 Name: elm-sharp Summary: C# Binding for Elementary -- 2.7.4