2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 using System.Collections.Generic;
19 using System.Runtime.InteropServices;
21 using Tizen.Internals;
26 /// It represents the GenGrid or GenList item class definition field details.
27 /// It has some display styles, such as "default", "full", and "group_index".
29 /// <since_tizen> preview </since_tizen>
30 [Obsolete("This has been deprecated in API12")]
31 public class GenItemClass : IDisposable
33 static Dictionary<IntPtr, EvasObject> s_HandleToEvasObject = new Dictionary<IntPtr, EvasObject>();
36 /// The delegate to define <see cref="GetTextHandler"/>.
38 /// <param name="data">The item data.</param>
39 /// <param name="part">The part where the data should be shown.</param>
40 /// <returns>Return string that should be shown.</returns>
41 /// <since_tizen> preview </since_tizen>
42 [Obsolete("This has been deprecated in API12")]
43 public delegate string GetTextDelegate(object data, string part);
46 /// The delegate to define <see cref="GetContentHandler"/>.
48 /// <param name="data">The item data.</param>
49 /// <param name="part">The part where the data should be shown.</param>
50 /// <returns>Return content that should be shown.</returns>
51 /// <since_tizen> preview </since_tizen>
52 [Obsolete("This has been deprecated in API12")]
53 public delegate EvasObject GetContentDelegate(object data, string part);
56 /// The delegate to define <see cref="DeleteHandler"/>.
58 /// <param name="data">The item data.</param>
59 /// <since_tizen> preview </since_tizen>
60 [Obsolete("This has been deprecated in API12")]
61 public delegate void DeleteDelegate(object data);
64 /// The delegate to define <see cref="ReusableContentHandler"/>.
66 /// <param name="data">The item data.</param>
67 /// <param name="part">The part where the data should be shown.</param>
68 /// <param name="old">The content that has been added in gengrid.</param>
69 /// <returns>Return content that should be shown.</returns>
70 /// <since_tizen> preview </since_tizen>
71 [Obsolete("This has been deprecated in API12")]
72 public delegate EvasObject GetReusableContentDelegate(object data, string part, EvasObject old);
75 IntPtr _unmanagedPtr = IntPtr.Zero;
79 /// Creates and initializes a new instance of the GenItemClass.
81 /// <param name="style">The item display style.</param>
82 /// <since_tizen> preview </since_tizen>
83 [Obsolete("This has been deprecated in API12")]
84 public GenItemClass(string style)
87 IntPtr unmanaged = CreateItemClass();
89 _itemClass = Marshal.PtrToStructure<ItemClass>(unmanaged);
90 _itemClass.itemStyle = style;
91 _itemClass.textCallback = GetTextCallback;
92 _itemClass.contentCallback = GetContentCallback;
93 _itemClass.stateCallback = null;
94 _itemClass.delCallback = DelCallback;
95 _itemClass.reusableContentCallback = GetReusableContentCallback;
97 ReleaseItemClass(unmanaged);
101 /// Destroys the GenItemClass object.
109 /// Gets the item style.
111 /// <since_tizen> preview </since_tizen>
112 [Obsolete("This has been deprecated in API12")]
113 public string ItemStyle { get { return _style; } }
116 /// Gets or sets the callback that defines how to display the item text.
117 /// If get, return <see cref="GetTextDelegate"/>.
119 /// <since_tizen> preview </since_tizen>
120 [Obsolete("This has been deprecated in API12")]
121 public GetTextDelegate GetTextHandler { get; set; }
124 /// Gets or sets the callback that defines how to display the item content.
125 /// If get, return <see cref="GetContentDelegate"/>.
127 /// <since_tizen> preview </since_tizen>
128 [Obsolete("This has been deprecated in API12")]
129 public GetContentDelegate GetContentHandler { get; set; }
132 /// Gets or sets the callback that defines how to delete the item text and content.
133 /// If get, return <see cref="DeleteDelegate"/>.
135 /// <since_tizen> preview </since_tizen>
136 [Obsolete("This has been deprecated in API12")]
137 public DeleteDelegate DeleteHandler { get; set; }
140 /// Gets or sets the callback that defines how to reuse the item content.
141 /// If get, return <see cref="GetReusableContentDelegate"/>.
143 /// <since_tizen> preview </since_tizen>
144 [Obsolete("This has been deprecated in API12")]
145 public GetReusableContentDelegate ReusableContentHandler { get; set; }
147 internal IntPtr UnmanagedPtr
151 if (_unmanagedPtr == IntPtr.Zero)
153 _unmanagedPtr = Marshal.AllocHGlobal(Marshal.SizeOf(_itemClass));
154 Marshal.StructureToPtr(_itemClass, _unmanagedPtr, false);
156 return _unmanagedPtr;
161 /// Releases all the resources currently used by this instance.
163 /// <param name="disposing">
164 /// true if the managed resources should be disposed,
167 /// <since_tizen> preview </since_tizen>
168 [Obsolete("This has been deprecated in API12")]
169 protected virtual void Dispose(bool disposing)
171 if (_unmanagedPtr != IntPtr.Zero)
173 Marshal.FreeHGlobal(_unmanagedPtr);
174 _unmanagedPtr = IntPtr.Zero;
179 /// Destroys the current object.
181 /// <since_tizen> preview </since_tizen>
182 [Obsolete("This has been deprecated in API12")]
183 public void Dispose()
186 GC.SuppressFinalize(this);
189 internal void SendItemDeleted(object data)
191 // data is user inserted value with GenItem
192 DeleteHandler?.Invoke(data);
196 /// Creates a new GenList item class in a given GenList widget.
198 /// <returns>The new item class object.</returns>
199 /// <since_tizen> preview </since_tizen>
200 [Obsolete("This has been deprecated in API12")]
201 protected virtual IntPtr CreateItemClass()
203 return Interop.Elementary.elm_genlist_item_class_new();
207 /// Removes an item class in a given GenList widget.
209 /// <param name="unmanagedPtr">The object to be removed.</param>
210 /// <since_tizen> preview </since_tizen>
211 [Obsolete("This has been deprecated in API12")]
212 protected virtual void ReleaseItemClass(IntPtr unmanagedPtr)
214 Interop.Elementary.elm_genlist_item_class_free(unmanagedPtr);
217 string GetTextCallback(IntPtr data, IntPtr obj, IntPtr part)
219 GenItem item = ItemObject.GetItemById((int)data) as GenItem;
220 return GetTextHandler?.Invoke(item?.Data, Marshal.PtrToStringAnsi(part));
223 IntPtr GetContentCallback(IntPtr data, IntPtr obj, IntPtr part)
225 GenItem item = ItemObject.GetItemById((int)data) as GenItem;
226 EvasObject evasObject = GetContentHandler?.Invoke(item?.Data, Marshal.PtrToStringAnsi(part));
227 if (evasObject != null)
229 s_HandleToEvasObject[evasObject.Handle] = evasObject;
230 evasObject.Deleted += EvasObjectDeleted;
235 void EvasObjectDeleted(object sender, EventArgs e)
237 if (sender is EvasObject evasObject)
238 s_HandleToEvasObject.Remove(evasObject);
241 IntPtr GetReusableContentCallback(IntPtr data, IntPtr obj, IntPtr part, IntPtr old)
243 IntPtr reusedHandle = IntPtr.Zero;
244 GenItem item = ItemObject.GetItemById((int)data) as GenItem;
245 if (s_HandleToEvasObject.ContainsKey(old))
247 reusedHandle = ReusableContentHandler?.Invoke(item?.Data, Marshal.PtrToStringAnsi(part), s_HandleToEvasObject[old]);
252 void DelCallback(IntPtr data, IntPtr obj)
254 // We can't use this callback
255 // because, when item was deleted
256 // First, ItemObject deleted callback was called
257 // and We need to clean up ItemObject related objects
258 // This callback was called after ItemObject deleted callback was completed.
259 // So, We can't get resource reletated with ItemObject
264 /// It represents the gengrid item class definition field details.
266 /// <since_tizen> preview </since_tizen>
267 [Obsolete("This has been deprecated in API12")]
268 public class GenGridItemClass : GenItemClass
271 /// Create the GenGridItemClass instance.
273 /// <param name="style">The item display style.</param>
274 /// <since_tizen> preview </since_tizen>
275 [Obsolete("This has been deprecated in API12")]
276 public GenGridItemClass(string style) : base(style)
281 /// Adds a new gengrid item class in a given GenGrid widget.
283 /// <returns>The new instance.</returns>
284 /// <since_tizen> preview </since_tizen>
285 [Obsolete("This has been deprecated in API12")]
286 protected override IntPtr CreateItemClass()
288 return Interop.Elementary.elm_gengrid_item_class_new();
292 /// Removes the item class in a given GenGrid widget.
294 /// <param name="unmanagedPtr">The object to be removed.</param>
295 /// <since_tizen> preview </since_tizen>
296 [Obsolete("This has been deprecated in API12")]
297 protected override void ReleaseItemClass(IntPtr unmanagedPtr)
299 Interop.Elementary.elm_gengrid_item_class_free(unmanagedPtr);
303 [NativeStruct("Elm_Gen_Item_Class", Include = "Elementary.h", PkgConfig = "elementary")]
304 [StructLayout(LayoutKind.Sequential)]
305 internal class ItemClass
307 /// <since_tizen> preview </since_tizen>
308 [Obsolete("This has been deprecated in API12")]
309 public delegate string GetTextCallback(IntPtr data, IntPtr obj, IntPtr part);
311 /// <since_tizen> preview </since_tizen>
312 [Obsolete("This has been deprecated in API12")]
313 public delegate IntPtr GetContentCallback(IntPtr data, IntPtr obj, IntPtr part);
315 /// <since_tizen> preview </since_tizen>
316 [Obsolete("This has been deprecated in API12")]
317 public delegate int GetStateCallback(IntPtr data, IntPtr obj, IntPtr part);
319 /// <since_tizen> preview </since_tizen>
320 [Obsolete("This has been deprecated in API12")]
321 public delegate void DelCallback(IntPtr data, IntPtr obj);
323 /// <since_tizen> preview </since_tizen>
324 [Obsolete("This has been deprecated in API12")]
325 public delegate int FilterCallback(IntPtr data, IntPtr obj, IntPtr key);
327 /// <since_tizen> preview </since_tizen>
328 [Obsolete("This has been deprecated in API12")]
329 public delegate IntPtr GetReusableContentCallback(IntPtr data, IntPtr obj, IntPtr part, IntPtr old);
332 public uint refCount;
334 public string itemStyle;
335 public readonly string decorateItemStyle;
336 public readonly string decorateAllItemStyle;
337 public GetTextCallback textCallback;
338 public GetContentCallback contentCallback;
339 public GetStateCallback stateCallback;
340 public DelCallback delCallback;
341 public FilterCallback filterCallback;
342 public GetReusableContentCallback reusableContentCallback;