1 // Copyright 2016 by Samsung Electronics, Inc.,
3 // This software is the confidential and proprietary information
4 // of Samsung Electronics, Inc. ("Confidential Information"). You
5 // shall not disclose such Confidential Information and shall use
6 // it only in accordance with the terms of the license agreement
7 // you entered into with Samsung.
10 using System.Collections.Generic;
12 namespace Tizen.Applications
14 internal class WidgetType
16 internal readonly Type ClassType;
17 internal readonly string Id;
18 internal IList<WidgetBase> WidgetInstances = new List<WidgetBase>();
20 private Interop.Widget.WidgetiInstanceLifecycleCallbacks _callbacks;
22 internal WidgetType(Type ctype, string id)
26 _callbacks.OnCreate = new Interop.Widget.WidgetInstanceCreateCallback(OnCreate);
27 _callbacks.OnDestroy = new Interop.Widget.WidgetInstanceDestroyCallback(OnDestroy);
28 _callbacks.OnPause = new Interop.Widget.WidgetInstancePauseCallback(OnPause);
29 _callbacks.OnResume = new Interop.Widget.WidgetInstanceResumeCallback(OnResume);
30 _callbacks.OnResize = new Interop.Widget.WidgetInstanceResizeCallback(OnResize);
31 _callbacks.OnUpdate = new Interop.Widget.WidgetInstanceUpdateCallback(OnUpdate);
34 internal IntPtr Bind(IntPtr h)
36 return Interop.Widget.AddClass(h, Id, _callbacks, IntPtr.Zero);
39 private int OnCreate(IntPtr context, IntPtr content, int w, int h, IntPtr userData)
41 WidgetBase b = Activator.CreateInstance(ClassType) as WidgetBase;
48 WidgetInstances.Add(b);
49 if (content != IntPtr.Zero)
50 bundle = new Bundle(new SafeBundleHandle(content, false));
51 b.OnCreate(bundle, w, h);
56 private int OnDestroy(IntPtr context, Interop.Widget.WidgetAppDestroyType reason, IntPtr content, IntPtr userData)
58 foreach (WidgetBase w in WidgetInstances)
60 if(w.Handle == context)
64 if (content != IntPtr.Zero)
65 bundle = new Bundle(new SafeBundleHandle(content, false));
67 w.OnDestroy(reason == Interop.Widget.WidgetAppDestroyType.Permanent ?
68 WidgetBase.WidgetDestroyType.Permanent :
69 WidgetBase.WidgetDestroyType.Temporary, bundle);
70 WidgetInstances.Remove(w);
78 private int OnPause(IntPtr context, IntPtr userData)
80 foreach (WidgetBase w in WidgetInstances)
82 if (w.Handle == context)
91 private int OnResume(IntPtr context, IntPtr userData)
93 foreach (WidgetBase w in WidgetInstances)
95 if (w.Handle == context)
104 private int OnResize(IntPtr context, int w, int h, IntPtr userData)
106 foreach (WidgetBase o in WidgetInstances)
108 if (o.Handle == context)
117 private int OnUpdate(IntPtr context, IntPtr content, int force, IntPtr userData)
119 foreach (WidgetBase o in WidgetInstances)
121 if (o.Handle == context)
123 Bundle bundle = null;
125 if (content != IntPtr.Zero)
126 bundle = new Bundle(new SafeBundleHandle(content, false));
127 o.OnUpdate(bundle, force != 0 ? true : false);