1 /** Copyright (c) 2017 Samsung Electronics Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
7 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
17 using System.Reflection;
21 using Tizen.NUI.BaseComponents;
22 internal class ItemFactory : global::System.IDisposable
24 private global::System.Runtime.InteropServices.HandleRef swigCPtr;
25 protected bool swigCMemOwn;
27 internal ItemFactory(global::System.IntPtr cPtr, bool cMemoryOwn)
29 swigCMemOwn = cMemoryOwn;
30 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
33 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(ItemFactory obj)
35 return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
38 //A Flag to check who called Dispose(). (By User or DisposeQueue)
39 private bool isDisposeQueued = false;
40 //A Flat to check if it is already disposed.
41 protected bool disposed = false;
48 isDisposeQueued = true;
49 DisposeQueue.Instance.Add(this);
55 //Throw excpetion if Dispose() is called in separate thread.
56 if (!Window.IsInstalled())
58 throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
63 Dispose(DisposeTypes.Implicit);
67 Dispose(DisposeTypes.Explicit);
68 System.GC.SuppressFinalize(this);
72 protected virtual void Dispose(DisposeTypes type)
79 if (type == DisposeTypes.Explicit)
82 //Release your own managed resources here.
83 //You should release all of your own disposable objects here.
87 //Release your own unmanaged resources here.
88 //You should not access any managed member here except static instance.
89 //because the execution order of Finalizes is non-deterministic.
91 if (swigCPtr.Handle != global::System.IntPtr.Zero)
96 NDalicPINVOKE.delete_ItemFactory(swigCPtr);
98 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
104 public virtual uint GetNumberOfItems()
106 uint ret = NDalicPINVOKE.ItemFactory_GetNumberOfItems(swigCPtr);
107 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
111 public virtual View NewItem(uint itemId)
113 View ret = new View(NDalicPINVOKE.ItemFactory_NewItem(swigCPtr, itemId), true);
114 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
118 public virtual void ItemReleased(uint itemId, View view)
120 if (SwigDerivedClassHasMethod("ItemReleased", swigMethodTypes2)) NDalicPINVOKE.ItemFactory_ItemReleasedSwigExplicitItemFactory(swigCPtr, itemId, View.getCPtr(view)); else NDalicPINVOKE.ItemFactory_ItemReleased(swigCPtr, itemId, View.getCPtr(view));
121 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
124 public ItemFactory() : this(NDalicPINVOKE.new_ItemFactory(), true)
126 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
127 SwigDirectorConnect();
130 private void SwigDirectorConnect()
132 if (SwigDerivedClassHasMethod("GetNumberOfItems", swigMethodTypes0))
133 swigDelegate0 = new SwigDelegateItemFactory_0(SwigDirectorGetNumberOfItems);
134 if (SwigDerivedClassHasMethod("NewItem", swigMethodTypes1))
135 swigDelegate1 = new SwigDelegateItemFactory_1(SwigDirectorNewItem);
136 if (SwigDerivedClassHasMethod("ItemReleased", swigMethodTypes2))
137 swigDelegate2 = new SwigDelegateItemFactory_2(SwigDirectorItemReleased);
138 NDalicPINVOKE.ItemFactory_director_connect(swigCPtr, swigDelegate0, swigDelegate1, swigDelegate2);
141 private bool SwigDerivedClassHasMethod(string methodName, global::System.Type[] methodTypes)
143 global::System.Reflection.MethodInfo methodInfo = this.GetType().GetMethod(methodName, methodTypes);
144 bool hasDerivedMethod = this.GetType().GetTypeInfo().IsSubclassOf(typeof(ItemFactory));
145 NUILog.Debug("hasDerivedMethod=" + hasDerivedMethod);
146 return hasDerivedMethod && (methodInfo != null);
149 private uint SwigDirectorGetNumberOfItems()
151 return GetNumberOfItems();
154 private global::System.IntPtr SwigDirectorNewItem(uint itemId)
156 return View.getCPtr(NewItem(itemId)).Handle;
159 private void SwigDirectorItemReleased(uint itemId, global::System.IntPtr actor)
161 ItemReleased(itemId, new View(actor, true));
164 public delegate uint SwigDelegateItemFactory_0();
165 public delegate global::System.IntPtr SwigDelegateItemFactory_1(uint itemId);
166 public delegate void SwigDelegateItemFactory_2(uint itemId, global::System.IntPtr actor);
168 private SwigDelegateItemFactory_0 swigDelegate0;
169 private SwigDelegateItemFactory_1 swigDelegate1;
170 private SwigDelegateItemFactory_2 swigDelegate2;
172 private static global::System.Type[] swigMethodTypes0 = new global::System.Type[] { };
173 private static global::System.Type[] swigMethodTypes1 = new global::System.Type[] { typeof(uint) };
174 private static global::System.Type[] swigMethodTypes2 = new global::System.Type[] { typeof(uint), typeof(View) };