2 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
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.
19 using System.Runtime.InteropServices;
23 internal class WatchApplication : Application
25 internal WatchApplication(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
29 protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
31 Interop.Watch.DeleteWatchApplication(swigCPtr);
34 private void DisConnectFromSignals()
36 if (timeTickCallback != null)
38 this.TimeTickSignal().Disconnect(timeTickCallback);
40 if (ambientTickCallback != null)
42 this.AmbientTickSignal().Disconnect(ambientTickCallback);
44 if (ambientChangedCallback != null)
46 this.AmbientChangedSignal().Disconnect(ambientChangedCallback);
50 public static WatchApplication NewWatchApplication()
52 WatchApplication ret = New();
53 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
54 // we've got an application now connect the signals
59 public static WatchApplication NewWatchApplication(string[] args)
61 WatchApplication ret = New(args);
62 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
67 public static WatchApplication NewWatchApplication(string[] args, string stylesheet)
69 WatchApplication ret = New(args, stylesheet);
70 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
75 public new static WatchApplication New()
77 WatchApplication ret = new WatchApplication(Interop.Watch.WatchApplicationNew(), true);
78 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
82 public static WatchApplication New(string[] args)
84 int argc = args.Length;
85 string argvStr = string.Join(" ", args);
87 WatchApplication ret = new WatchApplication(Interop.Watch.WatchApplicationNew(argc, argvStr), true);
88 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
92 public static WatchApplication New(string[] args, string stylesheet)
94 int argc = args.Length;
95 string argvStr = string.Join(" ", args);
97 WatchApplication ret = new WatchApplication(Interop.Watch.WatchApplicationNew(argc, argvStr, stylesheet), true);
98 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
102 internal WatchApplication(WatchApplication implementation) : this(Interop.Watch.NewWatchApplication(WatchApplication.getCPtr(implementation)), true)
104 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
108 /// Event arguments that passed via time tick event signal.
110 public class TimeTickEventArgs : EventArgs
115 public Application Application
124 public WatchTime WatchTime
131 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
132 private delegate void TimeTickCallbackType(IntPtr application, IntPtr watchTime);
133 private TimeTickCallbackType timeTickCallback;
134 private DaliEventHandler<object, TimeTickEventArgs> timeTickEventHandler;
139 public event DaliEventHandler<object, TimeTickEventArgs> TimeTick
143 if (timeTickEventHandler == null)
145 timeTickCallback = new TimeTickCallbackType(OnTimeTick);
146 TimeTickSignal().Connect(timeTickCallback);
149 timeTickEventHandler += value;
154 timeTickEventHandler -= value;
156 if (timeTickEventHandler == null && TimeTickSignal().Empty() == false)
158 TimeTickSignal().Disconnect(timeTickCallback);
163 private void OnTimeTick(IntPtr application, IntPtr watchTime)
165 TimeTickEventArgs e = new TimeTickEventArgs();
166 e.Application = this;
167 e.WatchTime = WatchTime.GetWatchTimeFromPtr(watchTime);
169 timeTickEventHandler?.Invoke(this, e);
172 internal WatchTimeSignal TimeTickSignal()
174 WatchTimeSignal ret = new WatchTimeSignal(Interop.Watch.WatchApplicationTimeTickSignal(SwigCPtr), false);
175 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
180 /// Event arguments that passed via ambient tick event signal.
182 public class AmbientTickEventArgs : EventArgs
187 public Application Application
196 public WatchTime WatchTime
203 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
204 private delegate void AmbientTickCallbackType(IntPtr application, IntPtr watchTime);
205 private AmbientTickCallbackType ambientTickCallback;
206 private DaliEventHandler<object, AmbientTickEventArgs> ambientTickEventHandler;
209 /// AmbientTick event.
211 public event DaliEventHandler<object, AmbientTickEventArgs> AmbientTick
215 if (ambientTickEventHandler == null)
217 ambientTickCallback = new AmbientTickCallbackType(OnAmbientTick);
218 AmbientTickSignal().Connect(ambientTickCallback);
221 ambientTickEventHandler += value;
226 ambientTickEventHandler -= value;
228 if (ambientTickEventHandler == null && AmbientTickSignal().Empty() == false)
230 AmbientTickSignal().Disconnect(ambientTickCallback);
235 private void OnAmbientTick(IntPtr application, IntPtr watchTime)
237 AmbientTickEventArgs e = new AmbientTickEventArgs();
239 e.Application = this;
240 e.WatchTime = WatchTime.GetWatchTimeFromPtr(watchTime);
241 ambientTickEventHandler?.Invoke(this, e);
244 internal WatchTimeSignal AmbientTickSignal()
246 WatchTimeSignal ret = new WatchTimeSignal(Interop.Watch.WatchApplicationAmbientTickSignal(SwigCPtr), false);
247 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
252 /// Event arguments that passed via ambient tick event signal.
254 public class AmbientChangedEventArgs : EventArgs
259 public Application Application
275 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
276 private delegate void AmbientChangedCallbackType(IntPtr application, bool changed);
277 private AmbientChangedCallbackType ambientChangedCallback;
278 private DaliEventHandler<object, AmbientChangedEventArgs> ambientChangedEventHandler;
281 /// AmbientChanged event.
283 public event DaliEventHandler<object, AmbientChangedEventArgs> AmbientChanged
287 if (ambientChangedEventHandler == null)
289 ambientChangedCallback = new AmbientChangedCallbackType(OnAmbientChanged);
290 AmbientChangedSignal().Connect(ambientChangedCallback);
293 ambientChangedEventHandler += value;
298 ambientChangedEventHandler -= value;
300 if (ambientChangedEventHandler == null && AmbientChangedSignal().Empty() == false)
302 AmbientChangedSignal().Disconnect(ambientChangedCallback);
307 private void OnAmbientChanged(IntPtr application, bool changed)
309 AmbientChangedEventArgs e = new AmbientChangedEventArgs();
310 e.Application = this;
312 ambientChangedEventHandler?.Invoke(this, e);
315 internal WatchBoolSignal AmbientChangedSignal()
317 WatchBoolSignal ret = new WatchBoolSignal(Interop.Watch.WatchApplicationAmbientChangedSignal(SwigCPtr), false);
318 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();