2 using System.Collections.Generic;
5 using System.Threading.Tasks;
9 public class ItemObject
11 private static Dictionary<int, ItemObject> s_IdToItemTable = new Dictionary<int, ItemObject>();
12 private static Dictionary<IntPtr, ItemObject> s_HandleToItemTable = new Dictionary<IntPtr, ItemObject>();
13 private static int s_globalId = 0;
15 Interop.Evas.SmartCallback _deleteCallback;
16 IntPtr _handle = IntPtr.Zero;
18 protected ItemObject(IntPtr handle)
20 _deleteCallback = DeleteCallbackHandler;
22 s_IdToItemTable[Id] = this;
26 // C# Finalizer was called on GC thread
27 // So, We can't access to EFL object
28 // And When Finalizer was called, Field can be already released.
31 // if (Handle != IntPtr.Zero)
32 // Interop.Elementary.elm_object_item_del(Handle);
35 public int Id { get; private set; }
39 get { return !Interop.Elementary.elm_object_item_disabled_get(Handle); }
40 set { Interop.Elementary.elm_object_item_disabled_set(Handle, !value); }
43 internal IntPtr Handle
54 if (_handle != IntPtr.Zero)
56 UnsetDeleteCallback();
60 s_HandleToItemTable[Handle] = this;
64 public event EventHandler Deleted;
68 Interop.Elementary.elm_object_item_del(Handle);
69 _handle = IntPtr.Zero;
72 public void SetPartContent(string part, EvasObject content)
74 SetPartContent(part, content, false);
77 public void SetPartContent(string part, EvasObject content, bool preserveOldContent)
79 if (preserveOldContent)
81 Interop.Elementary.elm_object_item_part_content_unset(Handle, part);
83 Interop.Elementary.elm_object_item_part_content_set(Handle, part, content);
86 public void SetPartText(string part, string text)
88 Interop.Elementary.elm_object_item_part_text_set(Handle, part, text);
91 public string GetPartText(string part)
93 return Interop.Elementary.elm_object_item_part_text_get(Handle, part);
96 public static implicit operator IntPtr(ItemObject obj)
103 protected virtual void OnInvalidate() { }
105 internal static ItemObject GetItemById(int id)
108 s_IdToItemTable.TryGetValue(id, out value);
112 internal static ItemObject GetItemByHandle(IntPtr handle)
115 s_HandleToItemTable.TryGetValue(handle, out value);
119 void DeleteCallbackHandler(IntPtr data, IntPtr obj, IntPtr info)
121 Deleted?.Invoke(this, EventArgs.Empty);
123 if (s_IdToItemTable.ContainsKey(Id))
125 s_IdToItemTable.Remove(Id);
127 if (s_HandleToItemTable.ContainsKey(_handle))
129 s_HandleToItemTable.Remove(_handle);
131 _handle = IntPtr.Zero;
134 void UnsetDeleteCallback()
136 Interop.Elementary.elm_object_item_del_cb_set(Handle, null);
139 void SetDeleteCallback()
141 if (Handle != IntPtr.Zero)
142 Interop.Elementary.elm_object_item_del_cb_set(Handle, _deleteCallback);
145 static int GetNextId()