Merge "[NUI] Update Widget / NUIWidgetApplication" into rel/api_4
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / internal / Application.cs
1 /*
2  * Copyright(c) 2017 Samsung Electronics Co., Ltd.
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
18 namespace Tizen.NUI
19 {
20
21     using System;
22     using System.Runtime.InteropServices;
23
24     /**
25       * @brief Event arguments that passed via NUIApplicationInit signal
26       *
27       */
28     internal class NUIApplicationInitEventArgs : EventArgs
29     {
30         private Application _application;
31
32         /**
33           * @brief Application - is the application that is being initialized
34           *
35           */
36         public Application Application
37         {
38             get
39             {
40                 return _application;
41             }
42             set
43             {
44                 _application = value;
45             }
46         }
47     }
48
49     /**
50       * @brief Event arguments that passed via NUIApplicationTerminate signal
51       *
52       */
53     internal class NUIApplicationTerminatingEventArgs : EventArgs
54     {
55         private Application _application;
56         /**
57           * @brief Application - is the application that is being Terminated
58           *
59           */
60         public Application Application
61         {
62             get
63             {
64                 return _application;
65             }
66             set
67             {
68                 _application = value;
69             }
70         }
71     }
72
73     /**
74       * @brief Event arguments that passed via NUIApplicationPause signal
75       *
76       */
77     internal class NUIApplicationPausedEventArgs : EventArgs
78     {
79         private Application _application;
80         /**
81           * @brief Application - is the application that is being Paused
82           *
83           */
84         public Application Application
85         {
86             get
87             {
88                 return _application;
89             }
90             set
91             {
92                 _application = value;
93             }
94         }
95     }
96
97     /**
98       * @brief Event arguments that passed via NUIApplicationResume signal
99       *
100       */
101     internal class NUIApplicationResumedEventArgs : EventArgs
102     {
103         private Application _application;
104         /**
105           * @brief Application - is the application that is being Resumed
106           *
107           */
108         public Application Application
109         {
110             get
111             {
112                 return _application;
113             }
114             set
115             {
116                 _application = value;
117             }
118         }
119     }
120
121     /**
122       * @brief Event arguments that passed via NUIApplicationReset signal
123       *
124       */
125     internal class NUIApplicationResetEventArgs : EventArgs
126     {
127         private Application _application;
128         /**
129           * @brief Application - is the application that is being Reset
130           *
131           */
132         public Application Application
133         {
134             get
135             {
136                 return _application;
137             }
138             set
139             {
140                 _application = value;
141             }
142         }
143     }
144
145     /**
146       * @brief Event arguments that passed via NUIApplicationResize signal
147       *
148       */
149     internal class NUIApplicationResizedEventArgs : EventArgs
150     {
151         private Application _application;
152         /**
153           * @brief Application - is the application that is being Resized
154           *
155           */
156         public Application Application
157         {
158             get
159             {
160                 return _application;
161             }
162             set
163             {
164                 _application = value;
165             }
166         }
167     }
168
169     /**
170       * @brief Event arguments that passed via NUIApplicationLanguageChanged signal
171       *
172       */
173     internal class NUIApplicationLanguageChangedEventArgs : EventArgs
174     {
175         private Application _application;
176         /**
177           * @brief Application - is the application that is being affected with Device's language change
178           *
179           */
180         public Application Application
181         {
182             get
183             {
184                 return _application;
185             }
186             set
187             {
188                 _application = value;
189             }
190         }
191     }
192
193     /**
194       * @brief Event arguments that passed via NUIApplicationRegionChanged signal
195       *
196       */
197     internal class NUIApplicationRegionChangedEventArgs : EventArgs
198     {
199         private Application _application;
200         /**
201           * @brief Application - is the application that is being affected with Device's region change
202           *
203           */
204         public Application Application
205         {
206             get
207             {
208                 return _application;
209             }
210             set
211             {
212                 _application = value;
213             }
214         }
215     }
216
217     /**
218       * @brief Event arguments that passed via NUIApplicationBatteryLow signal
219       *
220       */
221     internal class NUIApplicationBatteryLowEventArgs : EventArgs
222     {
223         private Application.BatteryStatus _status;
224         /**
225           * @brief Application - is the application that is being affected when the battery level of the device is low
226           *
227           */
228         public Application.BatteryStatus BatteryStatus
229         {
230             get
231             {
232                 return _status;
233             }
234             set
235             {
236                 _status = value;
237             }
238         }
239     }
240
241     /**
242       * @brief Event arguments that passed via NUIApplicationMemoryLow signal
243       *
244       */
245     internal class NUIApplicationMemoryLowEventArgs : EventArgs
246     {
247         private Application.MemoryStatus _status;
248         /**
249           * @brief Application - is the application that is being affected when the memory level of the device is low
250           *
251           */
252         public Application.MemoryStatus MemoryStatus
253         {
254             get
255             {
256                 return _status;
257             }
258             set
259             {
260                 _status = value;
261             }
262         }
263     }
264
265     /**
266       * @brief Event arguments that passed via NUIApplicationAppControl  signal
267       *
268       */
269     internal class NUIApplicationAppControlEventArgs : EventArgs
270     {
271         private Application _application;
272         private IntPtr _voidp;
273         /**
274           * @brief Application - is the application that is receiving the launch request from another application
275           *
276           */
277         public Application Application
278         {
279             get
280             {
281                 return _application;
282             }
283             set
284             {
285                 _application = value;
286             }
287         }
288         /**
289           * @brief VoidP - contains the information about why the application is launched
290           *
291           */
292         public IntPtr VoidP
293         {
294             get
295             {
296                 return _voidp;
297             }
298             set
299             {
300                 _voidp = value;
301             }
302         }
303     }
304
305     internal class Application : BaseHandle
306     {
307         private global::System.Runtime.InteropServices.HandleRef swigCPtr;
308
309         internal Application(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicPINVOKE.Application_SWIGUpcast(cPtr), cMemoryOwn)
310         {
311             swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
312         }
313
314         internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Application obj)
315         {
316             return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
317         }
318
319         protected override void Dispose(DisposeTypes type)
320         {
321             if (disposed)
322             {
323                 return;
324             }
325
326             if (type == DisposeTypes.Explicit)
327             {
328                 //Called by User
329                 //Release your own managed resources here.
330                 //You should release all of your own disposable objects here.
331
332             }
333
334             //Release your own unmanaged resources here.
335             //You should not access any managed member here except static instance.
336             //because the execution order of Finalizes is non-deterministic.
337
338             if (_applicationInitEventCallbackDelegate != null)
339             {
340                 this.InitSignal().Disconnect(_applicationInitEventCallbackDelegate);
341             }
342
343             if (_applicationTerminateEventCallbackDelegate != null)
344             {
345                 this.TerminateSignal().Disconnect(_applicationTerminateEventCallbackDelegate);
346             }
347
348             if (_applicationPauseEventCallbackDelegate != null)
349             {
350                 this.PauseSignal().Disconnect(_applicationPauseEventCallbackDelegate);
351             }
352
353             if (_applicationResumeEventCallbackDelegate != null)
354             {
355                 this.ResumeSignal().Disconnect(_applicationResumeEventCallbackDelegate);
356             }
357
358             if (_applicationResetEventCallbackDelegate != null)
359             {
360                 this.ResetSignal().Disconnect(_applicationResetEventCallbackDelegate);
361             }
362
363             if (_applicationResizeEventCallbackDelegate != null)
364             {
365                 this.ResizeSignal().Disconnect(_applicationResizeEventCallbackDelegate);
366             }
367
368             if (_applicationLanguageChangedEventCallbackDelegate != null)
369             {
370                 this.LanguageChangedSignal().Disconnect(_applicationLanguageChangedEventCallbackDelegate);
371             }
372
373             if (_applicationRegionChangedEventCallbackDelegate != null)
374             {
375                 this.RegionChangedSignal().Disconnect(_applicationRegionChangedEventCallbackDelegate);
376             }
377
378             if (_applicationBatteryLowEventCallbackDelegate != null)
379             {
380                 this.BatteryLowSignal().Disconnect(_applicationBatteryLowEventCallbackDelegate);
381             }
382
383             if (_applicationMemoryLowEventCallbackDelegate != null)
384             {
385                 this.MemoryLowSignal().Disconnect(_applicationMemoryLowEventCallbackDelegate);
386             }
387
388             if (_applicationAppControlEventCallbackDelegate != null)
389             {
390                 this.AppControlSignal().Disconnect(_applicationAppControlEventCallbackDelegate);
391             }
392
393             if (swigCPtr.Handle != global::System.IntPtr.Zero)
394             {
395                 if (swigCMemOwn)
396                 {
397                     swigCMemOwn = false;
398                     NDalicPINVOKE.delete_Application(swigCPtr);
399                 }
400                 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
401             }
402
403             base.Dispose(type);
404         }
405
406         /// <since_tizen> 4 </since_tizen>
407         public enum BatteryStatus
408         {
409             Normal,
410             CriticallyLow,
411             PowerOff
412         };
413
414         /// <since_tizen> 4 </since_tizen>
415         public enum MemoryStatus
416         {
417             Normal,
418             Low,
419             CriticallyLow
420         };
421
422         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
423         private delegate void NUIApplicationInitEventCallbackDelegate(IntPtr application);
424         private DaliEventHandler<object, NUIApplicationInitEventArgs> _applicationInitEventHandler;
425         private NUIApplicationInitEventCallbackDelegate _applicationInitEventCallbackDelegate;
426
427
428         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
429         private delegate void NUIApplicationTerminateEventCallbackDelegate(IntPtr application);
430         private DaliEventHandler<object, NUIApplicationTerminatingEventArgs> _applicationTerminateEventHandler;
431         private NUIApplicationTerminateEventCallbackDelegate _applicationTerminateEventCallbackDelegate;
432
433
434         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
435         private delegate void NUIApplicationPauseEventCallbackDelegate(IntPtr application);
436         private DaliEventHandler<object, NUIApplicationPausedEventArgs> _applicationPauseEventHandler;
437         private NUIApplicationPauseEventCallbackDelegate _applicationPauseEventCallbackDelegate;
438
439         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
440         private delegate void NUIApplicationResumeEventCallbackDelegate(IntPtr application);
441         private DaliEventHandler<object, NUIApplicationResumedEventArgs> _applicationResumeEventHandler;
442         private NUIApplicationResumeEventCallbackDelegate _applicationResumeEventCallbackDelegate;
443
444         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
445         private delegate void NUIApplicationResetEventCallbackDelegate(IntPtr application);
446         private DaliEventHandler<object, NUIApplicationResetEventArgs> _applicationResetEventHandler;
447         private NUIApplicationResetEventCallbackDelegate _applicationResetEventCallbackDelegate;
448
449         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
450         private delegate void NUIApplicationResizeEventCallbackDelegate(IntPtr application);
451         private DaliEventHandler<object, NUIApplicationResizedEventArgs> _applicationResizeEventHandler;
452         private NUIApplicationResizeEventCallbackDelegate _applicationResizeEventCallbackDelegate;
453
454         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
455         private delegate void NUIApplicationLanguageChangedEventCallbackDelegate(IntPtr application);
456         private DaliEventHandler<object, NUIApplicationLanguageChangedEventArgs> _applicationLanguageChangedEventHandler;
457         private NUIApplicationLanguageChangedEventCallbackDelegate _applicationLanguageChangedEventCallbackDelegate;
458
459
460         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
461         private delegate void NUIApplicationRegionChangedEventCallbackDelegate(IntPtr application);
462         private DaliEventHandler<object, NUIApplicationRegionChangedEventArgs> _applicationRegionChangedEventHandler;
463         private NUIApplicationRegionChangedEventCallbackDelegate _applicationRegionChangedEventCallbackDelegate;
464
465         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
466         private delegate void NUIApplicationBatteryLowEventCallbackDelegate(BatteryStatus status);
467         private DaliEventHandler<object, NUIApplicationBatteryLowEventArgs> _applicationBatteryLowEventHandler;
468         private NUIApplicationBatteryLowEventCallbackDelegate _applicationBatteryLowEventCallbackDelegate;
469
470         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
471         private delegate void NUIApplicationMemoryLowEventCallbackDelegate(MemoryStatus status);
472         private DaliEventHandler<object, NUIApplicationMemoryLowEventArgs> _applicationMemoryLowEventHandler;
473         private NUIApplicationMemoryLowEventCallbackDelegate _applicationMemoryLowEventCallbackDelegate;
474
475         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
476         private delegate void NUIApplicationAppControlEventCallbackDelegate(IntPtr application, IntPtr voidp);
477         private DaliEventHandler<object, NUIApplicationAppControlEventArgs> _applicationAppControlEventHandler;
478         private NUIApplicationAppControlEventCallbackDelegate _applicationAppControlEventCallbackDelegate;
479
480         /**
481           * @brief Event for Initialized signal which can be used to subscribe/unsubscribe the event handler
482           *  provided by the user. Initialized signal is emitted when application is initialised
483           */
484         public event DaliEventHandler<object, NUIApplicationInitEventArgs> Initialized
485         {
486             add
487             {
488                 lock (this)
489                 {
490                     // Restricted to only one listener
491                     if (_applicationInitEventHandler == null)
492                     {
493                         _applicationInitEventHandler += value;
494
495                         _applicationInitEventCallbackDelegate = new NUIApplicationInitEventCallbackDelegate(OnApplicationInit);
496                         this.InitSignal().Connect(_applicationInitEventCallbackDelegate);
497                     }
498                 }
499             }
500
501             remove
502             {
503                 lock (this)
504                 {
505                     if (_applicationInitEventHandler != null)
506                     {
507                         this.InitSignal().Disconnect(_applicationInitEventCallbackDelegate);
508                     }
509
510                     _applicationInitEventHandler -= value;
511                 }
512             }
513         }
514
515         // Callback for Application InitSignal
516         private void OnApplicationInit(IntPtr data)
517         {
518             if (Version.DaliVersionMatchWithNUI() == false)
519             {
520                 Tizen.Log.Fatal("NUI", "Dali and NUI are version mismatched!");
521             }
522
523             // Initialize DisposeQueue Singleton class. This is also required to create DisposeQueue on main thread.
524             DisposeQueue.Instance.Initialize();
525
526             NUIApplicationInitEventArgs e = new NUIApplicationInitEventArgs();
527             // Populate all members of "e" (NUIApplicationInitEventArgs) with real data
528             e.Application = Application.GetApplicationFromPtr(data);
529             if (_applicationInitEventHandler != null)
530             {
531                 //here we send all data to user event handlers
532                 _applicationInitEventHandler(this, e);
533             }
534         }
535
536         /**
537           * @brief Event for Terminated signal which can be used to subscribe/unsubscribe the event handler
538           *  provided by the user. Terminated signal is emitted when application is terminating
539           */
540         public event DaliEventHandler<object, NUIApplicationTerminatingEventArgs> Terminating
541         {
542             add
543             {
544                 lock (this)
545                 {
546                     // Restricted to only one listener
547                     if (_applicationTerminateEventHandler == null)
548                     {
549                         _applicationTerminateEventHandler += value;
550
551                         _applicationTerminateEventCallbackDelegate = new NUIApplicationTerminateEventCallbackDelegate(OnNUIApplicationTerminate);
552                         this.TerminateSignal().Connect(_applicationTerminateEventCallbackDelegate);
553                     }
554                 }
555             }
556
557             remove
558             {
559                 lock (this)
560                 {
561                     if (_applicationTerminateEventHandler != null)
562                     {
563                         this.TerminateSignal().Disconnect(_applicationTerminateEventCallbackDelegate);
564                     }
565
566                     _applicationTerminateEventHandler -= value;
567                 }
568             }
569         }
570
571         // Callback for Application TerminateSignal
572         private void OnNUIApplicationTerminate(IntPtr data)
573         {
574             NUIApplicationTerminatingEventArgs e = new NUIApplicationTerminatingEventArgs();
575
576             // Populate all members of "e" (NUIApplicationTerminateEventArgs) with real data
577             e.Application = Application.GetApplicationFromPtr(data);
578
579             if (_applicationTerminateEventHandler != null)
580             {
581                 //here we send all data to user event handlers
582                 _applicationTerminateEventHandler(this, e);
583             }
584         }
585
586         /**
587           * @brief Event for Paused signal which can be used to subscribe/unsubscribe the event handler
588           * provided by the user. Paused signal is emitted when application is paused
589           */
590         public event DaliEventHandler<object, NUIApplicationPausedEventArgs> Paused
591         {
592             add
593             {
594                 lock (this)
595                 {
596                     // Restricted to only one listener
597                     if (_applicationPauseEventHandler == null)
598                     {
599                         _applicationPauseEventHandler += value;
600
601                         _applicationPauseEventCallbackDelegate = new NUIApplicationPauseEventCallbackDelegate(OnNUIApplicationPause);
602                         this.PauseSignal().Connect(_applicationPauseEventCallbackDelegate);
603                     }
604                 }
605             }
606
607             remove
608             {
609                 lock (this)
610                 {
611                     if (_applicationPauseEventHandler != null)
612                     {
613                         this.PauseSignal().Disconnect(_applicationPauseEventCallbackDelegate);
614                     }
615
616                     _applicationPauseEventHandler -= value;
617                 }
618             }
619         }
620
621         // Callback for Application PauseSignal
622         private void OnNUIApplicationPause(IntPtr data)
623         {
624             NUIApplicationPausedEventArgs e = new NUIApplicationPausedEventArgs();
625
626             // Populate all members of "e" (NUIApplicationPauseEventArgs) with real data
627             e.Application = Application.GetApplicationFromPtr(data);
628
629             if (_applicationPauseEventHandler != null)
630             {
631                 //here we send all data to user event handlers
632                 _applicationPauseEventHandler(this, e);
633             }
634         }
635
636         /**
637           * @brief Event for Resumed signal which can be used to subscribe/unsubscribe the event handler
638           *  provided by the user. Resumed signal is emitted when application is resumed
639           */
640         public event DaliEventHandler<object, NUIApplicationResumedEventArgs> Resumed
641         {
642             add
643             {
644                 lock (this)
645                 {
646                     // Restricted to only one listener
647                     if (_applicationResumeEventHandler == null)
648                     {
649                         _applicationResumeEventHandler += value;
650
651                         _applicationResumeEventCallbackDelegate = new NUIApplicationResumeEventCallbackDelegate(OnNUIApplicationResume);
652                         this.ResumeSignal().Connect(_applicationResumeEventCallbackDelegate);
653                     }
654                 }
655             }
656
657             remove
658             {
659                 lock (this)
660                 {
661                     if (_applicationResumeEventHandler != null)
662                     {
663                         this.ResumeSignal().Disconnect(_applicationResumeEventCallbackDelegate);
664                     }
665
666                     _applicationResumeEventHandler -= value;
667                 }
668             }
669         }
670
671         // Callback for Application ResumeSignal
672         private void OnNUIApplicationResume(IntPtr data)
673         {
674             NUIApplicationResumedEventArgs e = new NUIApplicationResumedEventArgs();
675
676             // Populate all members of "e" (NUIApplicationResumeEventArgs) with real data
677             e.Application = Application.GetApplicationFromPtr(data);
678
679             if (_applicationResumeEventHandler != null)
680             {
681                 //here we send all data to user event handlers
682                 _applicationResumeEventHandler(this, e);
683             }
684         }
685
686         /**
687           * @brief Event for Reset signal which can be used to subscribe/unsubscribe the event handler
688           *  provided by the user. Reset signal is emitted when application is reset
689           */
690         public new event DaliEventHandler<object, NUIApplicationResetEventArgs> Reset
691         {
692             add
693             {
694                 lock (this)
695                 {
696                     // Restricted to only one listener
697                     if (_applicationResetEventHandler == null)
698                     {
699                         _applicationResetEventHandler += value;
700
701                         _applicationResetEventCallbackDelegate = new NUIApplicationResetEventCallbackDelegate(OnNUIApplicationReset);
702                         this.ResetSignal().Connect(_applicationResetEventCallbackDelegate);
703                     }
704                 }
705             }
706
707             remove
708             {
709                 lock (this)
710                 {
711                     if (_applicationResetEventHandler != null)
712                     {
713                         this.ResetSignal().Disconnect(_applicationResetEventCallbackDelegate);
714                     }
715
716                     _applicationResetEventHandler -= value;
717                 }
718             }
719         }
720
721         // Callback for Application ResetSignal
722         private void OnNUIApplicationReset(IntPtr data)
723         {
724             NUIApplicationResetEventArgs e = new NUIApplicationResetEventArgs();
725
726             // Populate all members of "e" (NUIApplicationResetEventArgs) with real data
727             e.Application = Application.GetApplicationFromPtr(data);
728
729             if (_applicationResetEventHandler != null)
730             {
731                 //here we send all data to user event handlers
732                 _applicationResetEventHandler(this, e);
733             }
734         }
735
736         /**
737           * @brief Event for Resized signal which can be used to subscribe/unsubscribe the event handler
738           *  provided by the user. Resized signal is emitted when application is resized
739           */
740         public event DaliEventHandler<object, NUIApplicationResizedEventArgs> Resized
741         {
742             add
743             {
744                 lock (this)
745                 {
746                     // Restricted to only one listener
747                     if (_applicationResizeEventHandler == null)
748                     {
749                         _applicationResizeEventHandler += value;
750
751                         _applicationResizeEventCallbackDelegate = new NUIApplicationResizeEventCallbackDelegate(OnNUIApplicationResize);
752                         this.ResizeSignal().Connect(_applicationResizeEventCallbackDelegate);
753                     }
754                 }
755             }
756
757             remove
758             {
759                 lock (this)
760                 {
761                     if (_applicationResizeEventHandler != null)
762                     {
763                         this.ResizeSignal().Disconnect(_applicationResizeEventCallbackDelegate);
764                     }
765
766                     _applicationResizeEventHandler -= value;
767                 }
768             }
769         }
770
771         // Callback for Application ResizeSignal
772         private void OnNUIApplicationResize(IntPtr data)
773         {
774             NUIApplicationResizedEventArgs e = new NUIApplicationResizedEventArgs();
775
776             // Populate all members of "e" (NUIApplicationResizeEventArgs) with real data
777             e.Application = Application.GetApplicationFromPtr(data);
778
779             if (_applicationResizeEventHandler != null)
780             {
781                 //here we send all data to user event handlers
782                 _applicationResizeEventHandler(this, e);
783             }
784         }
785
786         /**
787           * @brief Event for LanguageChanged signal which can be used to subscribe/unsubscribe the event handler
788           *  provided by the user. LanguageChanged signal is emitted when the region of the device is changed.
789           */
790         public event DaliEventHandler<object, NUIApplicationLanguageChangedEventArgs> LanguageChanged
791         {
792             add
793             {
794                 lock (this)
795                 {
796                     // Restricted to only one listener
797                     if (_applicationLanguageChangedEventHandler == null)
798                     {
799                         _applicationLanguageChangedEventHandler += value;
800
801                         _applicationLanguageChangedEventCallbackDelegate = new NUIApplicationLanguageChangedEventCallbackDelegate(OnNUIApplicationLanguageChanged);
802                         this.LanguageChangedSignal().Connect(_applicationLanguageChangedEventCallbackDelegate);
803                     }
804                 }
805             }
806
807             remove
808             {
809                 lock (this)
810                 {
811                     if (_applicationLanguageChangedEventHandler != null)
812                     {
813                         this.LanguageChangedSignal().Disconnect(_applicationLanguageChangedEventCallbackDelegate);
814                     }
815
816                     _applicationLanguageChangedEventHandler -= value;
817                 }
818             }
819         }
820
821         // Callback for Application LanguageChangedSignal
822         private void OnNUIApplicationLanguageChanged(IntPtr data)
823         {
824             NUIApplicationLanguageChangedEventArgs e = new NUIApplicationLanguageChangedEventArgs();
825
826             // Populate all members of "e" (NUIApplicationLanguageChangedEventArgs) with real data
827             e.Application = Application.GetApplicationFromPtr(data);
828
829             if (_applicationLanguageChangedEventHandler != null)
830             {
831                 //here we send all data to user event handlers
832                 _applicationLanguageChangedEventHandler(this, e);
833             }
834         }
835
836         /**
837           * @brief Event for RegionChanged signal which can be used to subscribe/unsubscribe the event handler
838           *  provided by the user. RegionChanged signal is emitted when the region of the device is changed.
839           */
840         public event DaliEventHandler<object, NUIApplicationRegionChangedEventArgs> RegionChanged
841         {
842             add
843             {
844                 lock (this)
845                 {
846                     // Restricted to only one listener
847                     if (_applicationRegionChangedEventHandler == null)
848                     {
849                         _applicationRegionChangedEventHandler += value;
850
851                         _applicationRegionChangedEventCallbackDelegate = new NUIApplicationRegionChangedEventCallbackDelegate(OnNUIApplicationRegionChanged);
852                         this.RegionChangedSignal().Connect(_applicationRegionChangedEventCallbackDelegate);
853                     }
854                 }
855             }
856
857             remove
858             {
859                 lock (this)
860                 {
861                     if (_applicationRegionChangedEventHandler != null)
862                     {
863                         this.RegionChangedSignal().Disconnect(_applicationRegionChangedEventCallbackDelegate);
864                     }
865
866                     _applicationRegionChangedEventHandler -= value;
867                 }
868             }
869         }
870
871         // Callback for Application RegionChangedSignal
872         private void OnNUIApplicationRegionChanged(IntPtr data)
873         {
874             NUIApplicationRegionChangedEventArgs e = new NUIApplicationRegionChangedEventArgs();
875
876             // Populate all members of "e" (NUIApplicationRegionChangedEventArgs) with real data
877             e.Application = Application.GetApplicationFromPtr(data);
878
879             if (_applicationRegionChangedEventHandler != null)
880             {
881                 //here we send all data to user event handlers
882                 _applicationRegionChangedEventHandler(this, e);
883             }
884         }
885
886         /**
887           * @brief Event for BatteryLow signal which can be used to subscribe/unsubscribe the event handler
888           * provided by the user. BatteryLow signal is emitted when the battery level of the device is low.
889           */
890         public event DaliEventHandler<object, NUIApplicationBatteryLowEventArgs> BatteryLow
891         {
892             add
893             {
894                 lock (this)
895                 {
896                     // Restricted to only one listener
897                     if (_applicationBatteryLowEventHandler == null)
898                     {
899                         _applicationBatteryLowEventHandler += value;
900
901                         _applicationBatteryLowEventCallbackDelegate = new NUIApplicationBatteryLowEventCallbackDelegate(OnNUIApplicationBatteryLow);
902                         this.BatteryLowSignal().Connect(_applicationBatteryLowEventCallbackDelegate);
903                     }
904                 }
905             }
906
907             remove
908             {
909                 lock (this)
910                 {
911                     if (_applicationBatteryLowEventHandler != null)
912                     {
913                         this.BatteryLowSignal().Disconnect(_applicationBatteryLowEventCallbackDelegate);
914                     }
915
916                     _applicationBatteryLowEventHandler -= value;
917                 }
918             }
919         }
920
921         // Callback for Application BatteryLowSignal
922         private void OnNUIApplicationBatteryLow(BatteryStatus status)
923         {
924             NUIApplicationBatteryLowEventArgs e = new NUIApplicationBatteryLowEventArgs();
925
926             // Populate all members of "e" (NUIApplicationBatteryLowEventArgs) with real data
927             e.BatteryStatus = status;
928
929             if (_applicationBatteryLowEventHandler != null)
930             {
931                 //here we send all data to user event handlers
932                 _applicationBatteryLowEventHandler(this, e);
933             }
934         }
935
936         /**
937           * @brief Event for MemoryLow signal which can be used to subscribe/unsubscribe the event handler
938           *  provided by the user. MemoryLow signal is emitted when the memory level of the device is low.
939           */
940         public event DaliEventHandler<object, NUIApplicationMemoryLowEventArgs> MemoryLow
941         {
942             add
943             {
944                 lock (this)
945                 {
946                     // Restricted to only one listener
947                     if (_applicationMemoryLowEventHandler == null)
948                     {
949                         _applicationMemoryLowEventHandler += value;
950
951                         _applicationMemoryLowEventCallbackDelegate = new NUIApplicationMemoryLowEventCallbackDelegate(OnNUIApplicationMemoryLow);
952                         this.MemoryLowSignal().Connect(_applicationMemoryLowEventCallbackDelegate);
953                     }
954                 }
955             }
956
957             remove
958             {
959                 lock (this)
960                 {
961                     if (_applicationMemoryLowEventHandler != null)
962                     {
963                         this.MemoryLowSignal().Disconnect(_applicationMemoryLowEventCallbackDelegate);
964                     }
965
966                     _applicationMemoryLowEventHandler -= value;
967                 }
968             }
969         }
970
971         // Callback for Application MemoryLowSignal
972         private void OnNUIApplicationMemoryLow(MemoryStatus status)
973         {
974             NUIApplicationMemoryLowEventArgs e = new NUIApplicationMemoryLowEventArgs();
975
976             // Populate all members of "e" (NUIApplicationMemoryLowEventArgs) with real data
977             e.MemoryStatus = status;
978
979             if (_applicationMemoryLowEventHandler != null)
980             {
981                 //here we send all data to user event handlers
982                 _applicationMemoryLowEventHandler(this, e);
983             }
984         }
985
986         /**
987           * @brief Event for AppControl signal which can be used to subscribe/unsubscribe the event handler
988           *  provided by the user. AppControl signal is emitted when another application sends a launch request to the application.
989           */
990         public event DaliEventHandler<object, NUIApplicationAppControlEventArgs> AppControl
991         {
992             add
993             {
994                 lock (this)
995                 {
996                     // Restricted to only one listener
997                     if (_applicationAppControlEventHandler == null)
998                     {
999                         _applicationAppControlEventHandler += value;
1000
1001                         _applicationAppControlEventCallbackDelegate = new NUIApplicationAppControlEventCallbackDelegate(OnNUIApplicationAppControl);
1002                         this.AppControlSignal().Connect(_applicationAppControlEventCallbackDelegate);
1003                     }
1004                 }
1005             }
1006
1007             remove
1008             {
1009                 lock (this)
1010                 {
1011                     if (_applicationAppControlEventHandler != null)
1012                     {
1013                         this.AppControlSignal().Disconnect(_applicationAppControlEventCallbackDelegate);
1014                     }
1015
1016                     _applicationAppControlEventHandler -= value;
1017                 }
1018             }
1019         }
1020
1021         // Callback for Application AppControlSignal
1022         private void OnNUIApplicationAppControl(IntPtr application, IntPtr voidp)
1023         {
1024             NUIApplicationAppControlEventArgs e = new NUIApplicationAppControlEventArgs();
1025
1026             // Populate all members of "e" (NUIApplicationAppControlEventArgs) with real data
1027             e.Application = Application.GetApplicationFromPtr(application);
1028             e.VoidP = voidp;
1029
1030             if (_applicationAppControlEventHandler != null)
1031             {
1032                 //here we send all data to user event handlers
1033                 _applicationAppControlEventHandler(this, e);
1034             }
1035         }
1036
1037         private static Application _instance; // singleton
1038
1039         public static Application Instance
1040         {
1041             get
1042             {
1043                 return _instance;
1044             }
1045         }
1046
1047         public static Application GetApplicationFromPtr(global::System.IntPtr cPtr)
1048         {
1049             Application ret = new Application(cPtr, false);
1050             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1051             return ret;
1052         }
1053
1054         public static Application NewApplication()
1055         {
1056             return NewApplication("", Application.WindowMode.Opaque);
1057         }
1058
1059         public static Application NewApplication(string stylesheet)
1060         {
1061             return NewApplication(stylesheet, Application.WindowMode.Opaque);
1062         }
1063
1064         public static Application NewApplication(string stylesheet, Application.WindowMode windowMode)
1065         {
1066             // register all Views with the type registry, so that can be created / styled via JSON
1067             //ViewRegistryHelper.Initialize(); //moved to Application side.
1068
1069             Application ret = New(1, stylesheet, windowMode);
1070             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1071
1072             // set the singleton
1073             _instance = ret;
1074             return ret;
1075         }
1076
1077
1078         public static Application NewApplication(string[] args, string stylesheet, Application.WindowMode windowMode)
1079         {
1080             Application ret = New(args, stylesheet, (Application.WindowMode)windowMode);
1081             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1082
1083             // set the singleton
1084             _instance = ret;
1085             return _instance;
1086         }
1087
1088         /// <summary>
1089         /// Ensures that the function passed in is called from the main loop when it is idle.
1090         /// </summary>
1091         /// <param name="func">The function to call</param>
1092         /// <returns>true if added successfully, false otherwise</returns>
1093         public bool AddIdle(System.Delegate func)
1094         {
1095             System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate<System.Delegate>(func);
1096             System.IntPtr ip2 = NDalicManualPINVOKE.MakeCallback(new System.Runtime.InteropServices.HandleRef(this, ip));
1097
1098             bool ret = NDalicPINVOKE.Application_AddIdle(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip2));
1099
1100             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1101             return ret;
1102         }
1103
1104         /**
1105         * Outer::outer_method(int)
1106         */
1107         public static Application New()
1108         {
1109             Application ret = new Application(NDalicPINVOKE.Application_New__SWIG_0(), true);
1110             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1111             return ret;
1112         }
1113
1114         public static Application New(int argc)
1115         {
1116             Application ret = new Application(NDalicPINVOKE.Application_New__SWIG_1(argc), true);
1117             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1118             return ret;
1119         }
1120
1121         public static Application New(int argc, string stylesheet)
1122         {
1123             Application ret = new Application(NDalicPINVOKE.Application_New__SWIG_2(argc, stylesheet), true);
1124             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1125             return ret;
1126         }
1127
1128         public static Application New(int argc, string stylesheet, Application.WindowMode windowMode)
1129         {
1130             Application ret = new Application(NDalicPINVOKE.Application_New__SWIG_3(argc, stylesheet, (int)windowMode), true);
1131             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1132             return ret;
1133         }
1134
1135         public static Application New(string[] args, string stylesheet, Application.WindowMode windowMode)
1136         {
1137             int argc = args.Length;
1138             string argvStr = string.Join(" ", args);
1139
1140             Application ret = new Application(NDalicPINVOKE.Application_New__MANUAL_4(argc, argvStr, stylesheet, (int)windowMode), true);
1141             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1142             return ret;
1143         }
1144
1145         public static Application New(int argc, string stylesheet, Application.WindowMode windowMode, Rectangle positionSize)
1146         {
1147             Application ret = new Application(NDalicPINVOKE.Application_New__SWIG_4(argc, stylesheet, (int)windowMode, Rectangle.getCPtr(positionSize)), true);
1148             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1149             return ret;
1150         }
1151
1152         public Application() : this(NDalicPINVOKE.new_Application__SWIG_0(), true)
1153         {
1154             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1155         }
1156
1157         public Application(Application application) : this(NDalicPINVOKE.new_Application__SWIG_1(Application.getCPtr(application)), true)
1158         {
1159             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1160         }
1161
1162         public Application Assign(Application application)
1163         {
1164             Application ret = new Application(NDalicPINVOKE.Application_Assign(swigCPtr, Application.getCPtr(application)), false);
1165             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1166             return ret;
1167         }
1168
1169         public void MainLoop()
1170         {
1171             NDalicPINVOKE.Application_MainLoop__SWIG_0(swigCPtr);
1172             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1173         }
1174
1175         internal void MainLoop(SWIGTYPE_p_Configuration__ContextLoss configuration)
1176         {
1177             NDalicPINVOKE.Application_MainLoop__SWIG_1(swigCPtr, SWIGTYPE_p_Configuration__ContextLoss.getCPtr(configuration));
1178             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1179         }
1180
1181         public void Lower()
1182         {
1183             NDalicPINVOKE.Application_Lower(swigCPtr);
1184             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1185         }
1186
1187         public void Quit()
1188         {
1189             NDalicPINVOKE.Application_Quit(swigCPtr);
1190             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1191         }
1192
1193         internal bool AddIdle(SWIGTYPE_p_Dali__CallbackBase callback)
1194         {
1195             bool ret = NDalicPINVOKE.Application_AddIdle(swigCPtr, SWIGTYPE_p_Dali__CallbackBase.getCPtr(callback));
1196             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1197             return ret;
1198         }
1199
1200         public Window GetWindow()
1201         {
1202             Window ret = new Window(NDalicPINVOKE.Application_GetWindow(swigCPtr), true);
1203             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1204             return ret;
1205         }
1206
1207         public void ReplaceWindow(Rectangle windowPosition, string name)
1208         {
1209             NDalicPINVOKE.Application_ReplaceWindow(swigCPtr, Rectangle.getCPtr(windowPosition), name);
1210             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1211         }
1212
1213         public static string GetResourcePath()
1214         {
1215             string ret = NDalicPINVOKE.Application_GetResourcePath();
1216             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1217             return ret;
1218         }
1219
1220         internal void SetViewMode(ViewMode viewMode)
1221         {
1222             NDalicPINVOKE.Application_SetViewMode(swigCPtr, (int)viewMode);
1223             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1224         }
1225
1226         internal ViewMode GetViewMode()
1227         {
1228             ViewMode ret = (ViewMode)NDalicPINVOKE.Application_GetViewMode(swigCPtr);
1229             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1230             return ret;
1231         }
1232
1233         public void SetStereoBase(float stereoBase)
1234         {
1235             NDalicPINVOKE.Application_SetStereoBase(swigCPtr, stereoBase);
1236             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1237         }
1238
1239         public float GetStereoBase()
1240         {
1241             float ret = NDalicPINVOKE.Application_GetStereoBase(swigCPtr);
1242             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1243             return ret;
1244         }
1245
1246         public string GetLanguage()
1247         {
1248             string ret = NDalicPINVOKE.Application_GetLanguage(swigCPtr);
1249             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1250             return ret;
1251         }
1252
1253         public string GetRegion()
1254         {
1255             string ret = NDalicPINVOKE.Application_GetRegion(swigCPtr);
1256             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1257             return ret;
1258         }
1259
1260
1261         internal ApplicationSignal InitSignal()
1262         {
1263             ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_InitSignal(swigCPtr), false);
1264             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1265             return ret;
1266         }
1267
1268         internal ApplicationSignal TerminateSignal()
1269         {
1270             ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_TerminateSignal(swigCPtr), false);
1271             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1272             return ret;
1273         }
1274
1275         internal ApplicationSignal PauseSignal()
1276         {
1277             ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_PauseSignal(swigCPtr), false);
1278             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1279             return ret;
1280         }
1281
1282         internal ApplicationSignal ResumeSignal()
1283         {
1284             ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_ResumeSignal(swigCPtr), false);
1285             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1286             return ret;
1287         }
1288
1289         internal ApplicationSignal ResetSignal()
1290         {
1291             ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_ResetSignal(swigCPtr), false);
1292             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1293             return ret;
1294         }
1295
1296         internal ApplicationSignal ResizeSignal()
1297         {
1298             ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_ResizeSignal(swigCPtr), false);
1299             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1300             return ret;
1301         }
1302
1303         internal ApplicationControlSignal AppControlSignal()
1304         {
1305             ApplicationControlSignal ret = new ApplicationControlSignal(NDalicPINVOKE.Application_AppControlSignal(swigCPtr), false);
1306             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1307             return ret;
1308         }
1309
1310         internal ApplicationSignal LanguageChangedSignal()
1311         {
1312             ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_LanguageChangedSignal(swigCPtr), false);
1313             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1314             return ret;
1315         }
1316
1317         internal ApplicationSignal RegionChangedSignal()
1318         {
1319             ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_RegionChangedSignal(swigCPtr), false);
1320             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1321             return ret;
1322         }
1323
1324         internal LowBatterySignalType BatteryLowSignal()
1325         {
1326             LowBatterySignalType ret = new LowBatterySignalType(NDalicPINVOKE.Application_LowBatterySignal(swigCPtr), false);
1327             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1328             return ret;
1329         }
1330
1331         internal LowMemorySignalType MemoryLowSignal()
1332         {
1333             LowMemorySignalType ret = new LowMemorySignalType(NDalicPINVOKE.Application_LowMemorySignal(swigCPtr), false);
1334             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1335             return ret;
1336         }
1337
1338         /// <since_tizen> 3 </since_tizen>
1339         public enum WindowMode
1340         {
1341             Opaque = 0,
1342             Transparent = 1
1343         }
1344
1345     }
1346
1347 }