[ACR-564] deprecate unused API
[platform/core/csapi/tizenfx.git] / src / ElmSharp / ElmSharp / GenItemClass.cs
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 using System;
18 using System.Collections.Generic;
19 using System.Runtime.InteropServices;
20
21 using Tizen.Internals;
22
23 namespace ElmSharp
24 {
25     /// <summary>
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".
28     /// </summary>
29     /// <since_tizen> preview </since_tizen>
30     [Obsolete("This has been deprecated in API12")]
31     public class GenItemClass : IDisposable
32     {
33         static Dictionary<IntPtr, EvasObject> s_HandleToEvasObject = new Dictionary<IntPtr, EvasObject>();
34
35         /// <summary>
36         /// The delegate to define <see cref="GetTextHandler"/>.
37         /// </summary>
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);
44
45         /// <summary>
46         /// The delegate to define <see cref="GetContentHandler"/>.
47         /// </summary>
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);
54
55         /// <summary>
56         /// The delegate to define <see cref="DeleteHandler"/>.
57         /// </summary>
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);
62
63         /// <summary>
64         /// The delegate to define <see cref="ReusableContentHandler"/>.
65         /// </summary>
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);
73
74         ItemClass _itemClass;
75         IntPtr _unmanagedPtr = IntPtr.Zero;
76         string _style;
77
78         /// <summary>
79         /// Creates and initializes a new instance of the GenItemClass.
80         /// </summary>
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)
85         {
86             _style = style;
87             IntPtr unmanaged = CreateItemClass();
88
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;
96
97             ReleaseItemClass(unmanaged);
98         }
99
100         /// <summary>
101         /// Destroys the GenItemClass object.
102         /// </summary>
103         ~GenItemClass()
104         {
105             Dispose(false);
106         }
107
108         /// <summary>
109         /// Gets the item style.
110         /// </summary>
111         /// <since_tizen> preview </since_tizen>
112         [Obsolete("This has been deprecated in API12")]
113         public string ItemStyle { get { return _style; } }
114
115         /// <summary>
116         /// Gets or sets the callback that defines how to display the item text.
117         /// If get, return <see cref="GetTextDelegate"/>.
118         /// </summary>
119         /// <since_tizen> preview </since_tizen>
120         [Obsolete("This has been deprecated in API12")]
121         public GetTextDelegate GetTextHandler { get; set; }
122
123         /// <summary>
124         /// Gets or sets the callback that defines how to display the item content.
125         /// If get, return <see cref="GetContentDelegate"/>.
126         /// </summary>
127         /// <since_tizen> preview </since_tizen>
128         [Obsolete("This has been deprecated in API12")]
129         public GetContentDelegate GetContentHandler { get; set; }
130
131         /// <summary>
132         /// Gets or sets the callback that defines how to delete the item text and content.
133         /// If get, return <see cref="DeleteDelegate"/>.
134         /// </summary>
135         /// <since_tizen> preview </since_tizen>
136         [Obsolete("This has been deprecated in API12")]
137         public DeleteDelegate DeleteHandler { get; set; }
138
139         /// <summary>
140         /// Gets or sets the callback that defines how to reuse the item content.
141         /// If get, return <see cref="GetReusableContentDelegate"/>.
142         /// </summary>
143         /// <since_tizen> preview </since_tizen>
144         [Obsolete("This has been deprecated in API12")]
145         public GetReusableContentDelegate ReusableContentHandler { get; set; }
146
147         internal IntPtr UnmanagedPtr
148         {
149             get
150             {
151                 if (_unmanagedPtr == IntPtr.Zero)
152                 {
153                     _unmanagedPtr = Marshal.AllocHGlobal(Marshal.SizeOf(_itemClass));
154                     Marshal.StructureToPtr(_itemClass, _unmanagedPtr, false);
155                 }
156                 return _unmanagedPtr;
157             }
158         }
159
160         /// <summary>
161         /// Releases all the resources currently used by this instance.
162         /// </summary>
163         /// <param name="disposing">
164         /// true if the managed resources should be disposed,
165         /// otherwise false.
166         /// </param>
167         /// <since_tizen> preview </since_tizen>
168         [Obsolete("This has been deprecated in API12")]
169         protected virtual void Dispose(bool disposing)
170         {
171             if (_unmanagedPtr != IntPtr.Zero)
172             {
173                 Marshal.FreeHGlobal(_unmanagedPtr);
174                 _unmanagedPtr = IntPtr.Zero;
175             }
176         }
177
178         /// <summary>
179         /// Destroys the current object.
180         /// </summary>
181         /// <since_tizen> preview </since_tizen>
182         [Obsolete("This has been deprecated in API12")]
183         public void Dispose()
184         {
185             Dispose(true);
186             GC.SuppressFinalize(this);
187         }
188
189         internal void SendItemDeleted(object data)
190         {
191             // data is user inserted value with GenItem
192             DeleteHandler?.Invoke(data);
193         }
194
195         /// <summary>
196         /// Creates a new GenList item class in a given GenList widget.
197         /// </summary>
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()
202         {
203             return Interop.Elementary.elm_genlist_item_class_new();
204         }
205
206         /// <summary>
207         /// Removes an item class in a given GenList widget.
208         /// </summary>
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)
213         {
214             Interop.Elementary.elm_genlist_item_class_free(unmanagedPtr);
215         }
216
217         string GetTextCallback(IntPtr data, IntPtr obj, IntPtr part)
218         {
219             GenItem item = ItemObject.GetItemById((int)data) as GenItem;
220             return GetTextHandler?.Invoke(item?.Data, Marshal.PtrToStringAnsi(part));
221         }
222
223         IntPtr GetContentCallback(IntPtr data, IntPtr obj, IntPtr part)
224         {
225             GenItem item = ItemObject.GetItemById((int)data) as GenItem;
226             EvasObject evasObject = GetContentHandler?.Invoke(item?.Data, Marshal.PtrToStringAnsi(part));
227             if (evasObject != null)
228             {
229                 s_HandleToEvasObject[evasObject.Handle] = evasObject;
230                 evasObject.Deleted += EvasObjectDeleted;
231             }
232             return evasObject;
233         }
234
235         void EvasObjectDeleted(object sender, EventArgs e)
236         {
237             if (sender is EvasObject evasObject)
238                 s_HandleToEvasObject.Remove(evasObject);
239         }
240
241         IntPtr GetReusableContentCallback(IntPtr data, IntPtr obj, IntPtr part, IntPtr old)
242         {
243             IntPtr reusedHandle = IntPtr.Zero;
244             GenItem item = ItemObject.GetItemById((int)data) as GenItem;
245             if (s_HandleToEvasObject.ContainsKey(old))
246             {
247                 reusedHandle = ReusableContentHandler?.Invoke(item?.Data, Marshal.PtrToStringAnsi(part), s_HandleToEvasObject[old]);
248             }
249             return reusedHandle;
250         }
251
252         void DelCallback(IntPtr data, IntPtr obj)
253         {
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
260         }
261     }
262
263     /// <summary>
264     /// It represents the gengrid item class definition field details.
265     /// </summary>
266     /// <since_tizen> preview </since_tizen>
267     [Obsolete("This has been deprecated in API12")]
268     public class GenGridItemClass : GenItemClass
269     {
270         /// <summary>
271         /// Create the GenGridItemClass instance.
272         /// </summary>
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)
277         {
278         }
279
280         /// <summary>
281         /// Adds a new gengrid item class in a given GenGrid widget.
282         /// </summary>
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()
287         {
288             return Interop.Elementary.elm_gengrid_item_class_new();
289         }
290
291         /// <summary>
292         /// Removes the item class in a given GenGrid widget.
293         /// </summary>
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)
298         {
299             Interop.Elementary.elm_gengrid_item_class_free(unmanagedPtr);
300         }
301     }
302
303     [NativeStruct("Elm_Gen_Item_Class", Include = "Elementary.h", PkgConfig = "elementary")]
304     [StructLayout(LayoutKind.Sequential)]
305     internal class ItemClass
306     {
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);
310
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);
314
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);
318
319         /// <since_tizen> preview </since_tizen>
320         [Obsolete("This has been deprecated in API12")]
321         public delegate void DelCallback(IntPtr data, IntPtr obj);
322
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);
326
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);
330
331         public int version;
332         public uint refCount;
333         public int deleteMe;
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;
343     }
344 }