[Tizen] Update NUISamples to support .netcore 2.0
[platform/core/csapi/nui.git] / NUISamples / examples / dali-test.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 using System;
19 using System.Runtime.InteropServices;
20 using Tizen.NUI;
21 using Tizen.NUI.UIComponents;
22 using Tizen.NUI.BaseComponents;
23 using Tizen.NUI.Constants;
24
25 namespace DaliTest
26 {
27     class MyView : View
28     {
29         private string _myOwnName;
30         public int _myCurrentValue;
31
32         public MyView()
33         {
34             _myCurrentValue = 0;
35         }
36
37         public string MyOwnName
38         {
39             get
40             {
41                 return _myOwnName;
42             }
43             set
44             {
45               _myOwnName = value;
46             }
47         }
48     }
49
50     class MyButton : PushButton
51     {
52         private string _myOwnName;
53         public int _myCurrentValue;
54
55         public MyButton()
56         {
57             _myCurrentValue = 0;
58         }
59
60         public string MyOwnName
61         {
62             get
63             {
64                 return _myOwnName;
65             }
66             set
67             {
68               _myOwnName = value;
69             }
70         }
71     }
72
73     class MySpin : Spin
74     {
75         private string _myOwnName;
76         public int _myCurrentValue;
77
78         public MySpin()
79         {
80             _myCurrentValue = 0;
81         }
82
83         public string MyOwnName
84         {
85             get
86             {
87                 return _myOwnName;
88             }
89             set
90             {
91               _myOwnName = value;
92             }
93         }
94     }
95
96     class Example : NUIApplication
97     {
98         //private const string _resPath = "/home/owner/apps_rw/NUISamples.TizenTV/res";
99         private const string _resPath = "./res";  //for ubuntu
100
101         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
102         delegate void CallbackDelegate(IntPtr appPtr); // void, void delgate
103
104         public Example() : base()
105         {
106         }
107
108         public Example(string stylesheet) : base(stylesheet)
109         {
110         }
111
112         public Example(string stylesheet, WindowMode windowMode) : base(stylesheet, windowMode)
113         {
114         }
115
116         protected override void OnCreate()
117         {
118             base.OnCreate();
119             Initialize();
120         }
121
122         public void Initialize()
123         {
124             DowncastTest();
125
126             NavigationPropertiesTests();
127
128             OperatorTests();
129
130             CustomViewPropertyTest();
131
132             VisibilityChangeTest();
133
134             ResourceReadyTest();
135
136             ViewFocusTest();
137
138             WindowDevelPropertyTest();
139
140             Animatable handle = new Animatable();
141             int myPropertyIndex = handle.RegisterProperty("myProperty", new PropertyValue(10.0f), PropertyAccessMode.ReadWrite);
142             float myProperty = 0.0f;
143             handle.GetProperty(myPropertyIndex).Get(out myProperty);
144             Tizen.Log.Debug("NUI",  "myProperty value: " + myProperty );
145
146             int myPropertyIndex2 = handle.RegisterProperty("myProperty2", new PropertyValue(new Size(5.0f, 5.0f, 0.0f)), PropertyAccessMode.ReadWrite);
147             Size2D myProperty2 = new Size2D(0, 0);
148             handle.GetProperty(myPropertyIndex2).Get(myProperty2);
149             Tizen.Log.Debug("NUI",  "myProperty2 value: " + myProperty2.Width + ", " + myProperty2.Height );
150
151             View view = new View();
152             view.Size2D = new Size2D(200, 200);
153             view.Name = "MyView";
154             //view.MixColor = new Color(1.0f, 0.0f, 1.0f, 0.8f);
155             Tizen.Log.Debug("NUI", "View size: " + view.Size2D.Width + ", " + view.Size2D.Height);
156             Tizen.Log.Debug("NUI", "View name: " + view.Name);
157
158             Window window = Window.Instance;
159             window.BackgroundColor = Color.White;
160             Size windowSize = new Size(window.Size.Width, window.Size.Height, 0.0f);
161             Tizen.Log.Debug("NUI", "Window size: " + windowSize.Width + ", " + windowSize.Height);
162             window.Add(view);
163
164             TextLabel text = new TextLabel("Hello Mono World");
165             text.ParentOrigin = ParentOrigin.Center;
166             text.PivotPoint = PivotPoint.Center;
167             text.HorizontalAlignment = HorizontalAlignment.Center;
168             window.Add(text);
169
170             Tizen.Log.Debug("NUI",  "Text label text:  " + text.Text );
171
172             Tizen.Log.Debug("NUI",  "Text label point size:  " + text.PointSize );
173             text.PointSize = 32.0f;
174             Tizen.Log.Debug("NUI",  "Text label new point size:  " + text.PointSize );
175
176             RectanglePaddingClassTest();
177
178             Tizen.Log.Debug("NUI",  " *************************" );
179             Size Size = new Size(100, 50, 0);
180             Tizen.Log.Debug("NUI",  "    Created " + Size );
181             Tizen.Log.Debug("NUI",  "    Size x =  " + Size.Width + ", y = " + Size.Height );
182             Size += new Size(20, 20, 0);
183             Tizen.Log.Debug("NUI",  "    Size x =  " + Size.Width + ", y = " + Size.Height );
184             Size.Width += 10;
185             Size.Height += 10;
186             Tizen.Log.Debug("NUI",  "    Size width =  " + Size.Width + ", height = " + Size.Height );
187
188             Tizen.Log.Debug("NUI",  " *************************" );
189             Position Position = new Position(20, 100, 50);
190             Tizen.Log.Debug("NUI",  "    Created " + Position );
191             Tizen.Log.Debug("NUI",  "    Position x =  " + Position.X + ", y = " + Position.Y + ", z = " + Position.Z );
192             Position += new Position(20, 20, 20);
193             Tizen.Log.Debug("NUI",  "    Position x =  " + Position.X + ", y = " + Position.Y + ", z = " + Position.Z );
194             Position.X += 10;
195             Position.Y += 10;
196             Position.Z += 10;
197             Tizen.Log.Debug("NUI",  "    Position width =  " + Position.X + ", height = " + Position.Y + ", depth = " + Position.Z );
198
199             Tizen.Log.Debug("NUI",  " *************************" );
200             Color color = new Color(20, 100, 50, 200);
201             Tizen.Log.Debug("NUI",  "    Created " + color );
202             Tizen.Log.Debug("NUI",  "    Color R =  " + color.R + ", G = " + color.G + ", B = " + color.B + ", A = " + color.A );
203             color += new Color(20, 20, 20, 20);
204             Tizen.Log.Debug("NUI",  "    Color R =  " + color.R + ", G = " + color.G + ", B = " + color.B + ", A = " + color.A );
205             color.R += 10;
206             color.G += 10;
207             color.B += 10;
208             color.A += 10;
209             Tizen.Log.Debug("NUI",  "    Color r =  " + color.R + ", g = " + color.G + ", b = " + color.B + ", a = " + color.A );
210
211             ViewDownCastTest();
212         }
213
214         public void RectanglePaddingClassTest()
215         {
216             using (Rectangle r1 = new Rectangle(2, 5, 20, 30))
217             {
218                 Tizen.Log.Debug("NUI",  "    Created " + r1 );
219                 Tizen.Log.Debug("NUI",  "    IsEmpty() =  " + r1.IsEmpty() );
220                 Tizen.Log.Debug("NUI",  "    Left =  " + r1.Left() );
221                 Tizen.Log.Debug("NUI",  "    Right =  " + r1.Right() );
222                 Tizen.Log.Debug("NUI",  "    Top  = " + r1.Top() );
223                 Tizen.Log.Debug("NUI",  "    Bottom  = " + r1.Bottom() );
224                 Tizen.Log.Debug("NUI",  "    Area  = " + r1.Area() );
225             }
226
227             Tizen.Log.Debug("NUI",  " *************************" );
228
229             using (Rectangle r2 = new Rectangle(2, 5, 20, 30))
230             {
231                 Tizen.Log.Debug("NUI",  "    Created " + r2 );
232                 r2.Set(1,1,40,40);
233                 Tizen.Log.Debug("NUI",  "    IsEmpty() =  " + r2.IsEmpty() );
234                 Tizen.Log.Debug("NUI",  "    Left =  " + r2.Left() );
235                 Tizen.Log.Debug("NUI",  "    Right =  " + r2.Right() );
236                 Tizen.Log.Debug("NUI",  "    Top  = " + r2.Top() );
237                 Tizen.Log.Debug("NUI",  "    Bottom  = " + r2.Bottom() );
238                 Tizen.Log.Debug("NUI",  "    Area  = " + r2.Area() );
239             }
240
241             Tizen.Log.Debug("NUI",  " *************************" );
242
243             Rectangle r3 = new Rectangle(10, 10, 20, 20);
244             Rectangle r4 = new Rectangle(10, 10, 20, 20);
245
246             if (r3 == r4)
247             {
248                 Tizen.Log.Debug("NUI", "r3 == r4");
249             }
250             else
251             {
252                 Tizen.Log.Debug("NUI", "r3 != r4");
253             }
254
255             r4 = new Rectangle(12, 10, 20, 20);
256
257             if (r3 == r4)
258             {
259                 Tizen.Log.Debug("NUI", "r3 == r4");
260             }
261             else
262             {
263                 Tizen.Log.Debug("NUI", "r3 != r4");
264             }
265
266             PaddingType p1 = new PaddingType(10.5f, 10.7f, 20.8f, 20.8f);
267             PaddingType p2 = new PaddingType(10.5f, 10.7f, 20.8f, 20.8f);
268
269             if (p1 == p2)
270             {
271                 Tizen.Log.Debug("NUI", "p1 == p2");
272             }
273             else
274             {
275                 Tizen.Log.Debug("NUI", "p1 != p2");
276             }
277
278             p2 = new PaddingType(12.0f, 10.7f, 20.2f, 20.0f);
279
280             if (p1 == p2)
281             {
282                 Tizen.Log.Debug("NUI", "p1 == p2");
283             }
284             else
285             {
286                 Tizen.Log.Debug("NUI", "p1 != p2");
287             }
288         }
289
290         public void NavigationPropertiesTests()
291         {
292             View view = new View();
293             View leftView, rightView, upView, downView, tmpView;
294
295             leftView = new View();
296             leftView.Name = "leftView";
297             rightView = new View();
298             rightView.Name = "rightView";
299             upView = new View();
300             upView.Name = "upView";
301             downView = new View();
302             downView.Name = "downView";
303
304             Window.Instance.Add(leftView);
305             Window.Instance.Add(rightView);
306             Window.Instance.Add(upView);
307             Window.Instance.Add(downView);
308
309             view.LeftFocusableView = leftView;
310             tmpView = view.LeftFocusableView;
311             if (string.Compare(tmpView.Name, "leftView") == 0)
312             {
313                 Tizen.Log.Debug("NUI", "Passed: LeftFocusedView = " + tmpView.Name);
314             }
315             else
316             {
317                 Tizen.Log.Debug("NUI", "Failed: LeftFocusedView = " + tmpView.Name);
318             }
319
320             view.RightFocusableView = rightView;
321             tmpView = view.RightFocusableView;
322             if (string.Compare(tmpView.Name, "rightView") == 0)
323             {
324                 Tizen.Log.Debug("NUI", "Passed: RightFocusedView = " + tmpView.Name);
325             }
326             else
327             {
328                 Tizen.Log.Debug("NUI", "Failed: RightFocusedView = " + tmpView.Name);
329             }
330
331             Window.Instance.Add(view);
332
333             view.UpFocusableView = upView;
334             tmpView = view.UpFocusableView;
335             if (string.Compare(tmpView.Name, "upView") == 0)
336             {
337                 Tizen.Log.Debug("NUI", "Passed: UpFocusedView = " + tmpView.Name);
338             }
339             else
340             {
341                 Tizen.Log.Debug("NUI", "Failed: UpFocusedView = " + tmpView.Name);
342             }
343
344             view.DownFocusableView = downView;
345             tmpView = view.DownFocusableView;
346             if (string.Compare(tmpView.Name, "downView") == 0)
347             {
348                 Tizen.Log.Debug("NUI", "Passed: DownFocusedView = " + tmpView.Name);
349             }
350             else
351             {
352                 Tizen.Log.Debug("NUI", "Failed: DownFocusedView = " + tmpView.Name);
353             }
354
355             Window.Instance.Remove(leftView);
356             tmpView = view.LeftFocusableView;
357             if (!tmpView)
358             {
359                 Tizen.Log.Debug("NUI", "Passed: NULL LeftFocusedView");
360             }
361             else
362             {
363                 Tizen.Log.Debug("NUI", "Failed: LeftFocusedView = " + tmpView.Name);
364             }
365         }
366
367         public void OperatorTests()
368         {
369             View view = new View();
370             View differentView = new View();
371             View viewSame = view;
372             View nullView = null;
373
374             // test the true operator
375             if ( view )
376             {
377                 Tizen.Log.Debug("NUI", "BaseHandle Operator true (view) : test passed ");
378             }
379             else
380             {
381                 Tizen.Log.Debug("NUI", "BaseHandle Operator true (view): test failed ");
382             }
383
384             View parent = view.Parent;
385
386             if ( parent )
387             {
388                 Tizen.Log.Debug("NUI", "Handle with Empty body  :failed ");
389             }
390             else
391             {
392                 Tizen.Log.Debug("NUI", "Valid with Empty body  :passed ");
393             }
394
395             view.Add( differentView );
396
397             // here we test two different C# objects, which on the native side have the same body/ ref-object
398             if ( view == differentView.Parent )
399             {
400                 Tizen.Log.Debug("NUI", "view == differentView.GetParent() :passed ");
401             }
402             else
403             {
404                 Tizen.Log.Debug("NUI", "view == differentView.GetParent() :failed ");
405             }
406
407             if ( differentView == differentView.Parent )
408             {
409                 Tizen.Log.Debug("NUI", "differentView == differentView.GetParent() :failed ");
410             }
411             else
412             {
413                 Tizen.Log.Debug("NUI", "differentView == differentView.GetParent() :passed ");
414             }
415
416             if ( nullView )
417             {
418                 Tizen.Log.Debug("NUI", "BaseHandle Operator true (nullView) : test failed ");
419             }
420             else
421             {
422                 Tizen.Log.Debug("NUI", "BaseHandle Operator true (nullView): test passed ");
423             }
424
425             // ! operator
426             if ( !view )
427             {
428                 Tizen.Log.Debug("NUI", "BaseHandle Operator !(view) : test failed ");
429             }
430             else
431             {
432                 Tizen.Log.Debug("NUI", "BaseHandle Operator !(view): test passed ");
433             }
434
435             if ( !nullView )
436             {
437                 Tizen.Log.Debug("NUI", "BaseHandle Operator !(nullView) : test passed ");
438             }
439             else
440             {
441                 Tizen.Log.Debug("NUI", "BaseHandle Operator !(nullView): test failed ");
442             }
443
444             // Note: operator false only used inside & operator
445             // test equality operator ==
446             if ( view == viewSame )
447             {
448                 Tizen.Log.Debug("NUI", "BaseHandle Operator  (view == viewSame) : test passed");
449             }
450             else
451             {
452                 Tizen.Log.Debug("NUI", "BaseHandle Operator  (view == viewSame) : test failed");
453             }
454
455             if ( view == differentView )
456             {
457                 Tizen.Log.Debug("NUI", "BaseHandle Operator (view == differentView) : test failed");
458             }
459             else
460             {
461                 Tizen.Log.Debug("NUI", "BaseHandle Operator (view == differentView) : test passed");
462             }
463
464             if ( view == nullView )
465             {
466                 Tizen.Log.Debug("NUI", "BaseHandle Operator (view == nullView) : test failed");
467             }
468             else
469             {
470                 Tizen.Log.Debug("NUI", "BaseHandle Operator (view == nullView) : test passed");
471             }
472
473             if ( nullView == nullView )
474             {
475                 Tizen.Log.Debug("NUI", "BaseHandle Operator (nullView == nullView) : test passed");
476             }
477             else
478             {
479                 Tizen.Log.Debug("NUI", "BaseHandle Operator (nullView == nullView) : test failed");
480             }
481
482             // test || operator
483             if ( view || viewSame )
484             {
485                 Tizen.Log.Debug("NUI", "BaseHandle Operator (view || viewSame) : test passed");
486             }
487             else
488             {
489                 Tizen.Log.Debug("NUI", "BaseHandle Operator (view || viewSame) : test failed");
490             }
491
492             if ( view || nullView )
493             {
494                 Tizen.Log.Debug("NUI", "BaseHandle Operator (view || nullView) : test passed");
495             }
496             else
497             {
498                 Tizen.Log.Debug("NUI", "BaseHandle Operator (view || nullView) : test failed");
499             }
500
501             if ( nullView || nullView )
502             {
503                 Tizen.Log.Debug("NUI", "BaseHandle Operator (nullView || nullView) : test failed");
504             }
505             else
506             {
507                 Tizen.Log.Debug("NUI", "BaseHandle Operator (nullView || nullView) : test passed");
508             }
509
510             // test && operator
511             if ( view && viewSame )
512             {
513                 Tizen.Log.Debug("NUI", "BaseHandle Operator (view && viewSame) : test passed");
514             }
515             else
516             {
517                 Tizen.Log.Debug("NUI", "BaseHandle Operator (view && viewSame) : test failed");
518             }
519
520             if ( view && nullView )
521             {
522                 Tizen.Log.Debug("NUI", "BaseHandle Operator (view && nullView) : test failed");
523             }
524             else
525             {
526                 Tizen.Log.Debug("NUI", "BaseHandle Operator (view && nullView) : test passed");
527             }
528
529             if ( nullView && nullView )
530             {
531                 Tizen.Log.Debug("NUI", "BaseHandle Operator (nullView && nullView) : test failed");
532             }
533             else
534             {
535                 Tizen.Log.Debug("NUI", "BaseHandle Operator (nullView && nullView) : test passed");
536             }
537         }
538
539
540         private TextLabel label;
541         public void VisibilityChangeTest()
542         {
543             label = new TextLabel();
544             label.Text = "Visibility";
545             label.TextColor = Color.Red;
546             label.PointSize = 30.0f;
547             label.ParentOrigin = ParentOrigin.TopLeft;
548             label.PivotPoint = PivotPoint.TopLeft;
549             label.Position = new Position(0.0f, 50.0f, 0.0f);
550             Window.Instance.Add(label);
551             label.VisibilityChanged += (sender, e) =>
552             {
553                 if (e.Visibility)
554                     Tizen.Log.Debug("NUI", "VisibilityChanged, label show.");
555                 else
556                     Tizen.Log.Debug("NUI", "VisibilityChanged, label hide.");
557             };
558
559             PushButton button = new PushButton();
560             button.LabelText = "Change Visibility";
561             button.ParentOrigin = ParentOrigin.TopLeft;
562             button.PivotPoint = PivotPoint.TopLeft;
563             Window.Instance.Add(button);
564             button.Clicked += (sender, e) =>
565             {
566                 if (label.Visible)
567                 {
568                     label.Hide();
569                 }
570                 else
571                 {
572                     label.Show();
573                 }
574
575                 return true;
576             };
577         }
578
579         public void ResourceReadyTest()
580         {
581             ImageView image = new ImageView();
582             image.ResourceUrl = _resPath + "/images/dog-anim.gif";
583             image.Size2D = new Size2D(150, 150);
584             image.ParentOrigin = ParentOrigin.TopLeft;
585             image.PivotPoint = PivotPoint.TopLeft;
586             image.Position = new Position(0.0f, 150.0f, 0.0f);
587             image.ResourceReady += (sender, e) =>
588             {
589                 Tizen.Log.Debug("NUI", "Resource is ready!");
590             };
591             Window.Instance.Add(image);
592         }
593
594         public void ViewFocusTest()
595         {
596             View view1 = new View();
597             view1.BackgroundColor = Color.Red;
598             view1.Size2D = new Size2D(80, 50);
599             view1.ParentOrigin = ParentOrigin.CenterLeft;
600             view1.PivotPoint = PivotPoint.CenterLeft;
601             view1.Position = new Position(10.0f, 50.0f, 0.0f);
602             view1.Focusable = true;
603             View view2 = new View();
604             view2.BackgroundColor = Color.Cyan;
605             view2.Size2D = new Size2D(80, 50);
606             view2.ParentOrigin = ParentOrigin.CenterLeft;
607             view2.PivotPoint = PivotPoint.CenterLeft;
608             view2.Position = new Position(100.0f, 50.0f, 0.0f);
609             view2.Focusable = true;
610             view1.RightFocusableView = view2;
611             view2.LeftFocusableView = view1;
612             Window.Instance.Add(view1);
613             Window.Instance.Add(view2);
614             FocusManager.Instance.SetCurrentFocusView(view1);
615
616             PushButton button = new PushButton();
617             button.LabelText = "Focus Back";
618             button.Size2D = new Size2D(150, 50);
619             button.ParentOrigin = ParentOrigin.CenterLeft;
620             button.PivotPoint = PivotPoint.CenterLeft;
621             button.Position = new Position(190.0f, 50.0f, 0.0f);
622
623             button.Focusable = true;
624             view2.RightFocusableView = button;
625  
626             button.Pressed += (obj, e) =>
627             {
628                 FocusManager.Instance.MoveFocusBackward();
629                 return true;
630             };
631             Window.Instance.Add(button);
632         }
633
634         public void WindowDevelPropertyTest()
635         {
636             Window window = Window.Instance;
637             uint count = window.GetSupportedAuxiliaryHintCount();
638             if (count > 0)
639             {
640                 window.BackgroundColor = Color.Blue;
641             }
642             uint id = window.AddAuxiliaryHint("wm.policy.win.effect.disable", "1");
643             window.RemoveAuxiliaryHint(id);
644             window.RemoveAuxiliaryHint(2);
645
646             id = window.AddAuxiliaryHint("wm.policy.win.effect.disable", "1");
647             window.SetAuxiliaryHintValue(id, "0");
648             string value = window.GetAuxiliaryHintValue(id);
649             if(value.Length > 0)
650             {
651                 window.BackgroundColor = Color.Red;
652             }
653
654             window.SetInputRegion(new Rectangle(0, 0, 0, 0));
655             WindowType type = window.Type;
656             Tizen.Log.Debug("NUI", "window type is "+type);
657             window.Type = WindowType.Notification;
658
659             NotificationLevel level = window.GetNotificationLevel();
660             window.SetNotificationLevel(NotificationLevel.High);
661             level = window.GetNotificationLevel();
662             Tizen.Log.Debug("NUI", "window notification level is " + level);
663
664             window.SetOpaqueState(true);
665             Tizen.Log.Debug("NUI", "window is opaque? " + window.IsOpaqueState());
666
667             window.SetScreenMode(ScreenMode.AlwaysOn);
668             ScreenMode screenMode = window.GetScreenMode();
669             Tizen.Log.Debug("NUI", "window screen mode is " + screenMode);
670
671             bool ret = window.SetBrightness(50);
672             int brightness = window.GetBrightness();
673             Tizen.Log.Debug("NUI", "window brightness is " + brightness, ", return "+ret);
674         }
675
676         public void CustomViewPropertyTest()
677         {
678             // Create a Spin control
679             Spin spin = new Spin();
680
681             // Background property
682             PropertyMap background = new PropertyMap();
683             background.Add( Visual.Property.Type, new PropertyValue((int)Visual.Type.Color) )
684                       .Add( ColorVisualProperty.MixColor, new PropertyValue(Color.Red) );
685             spin.Background = background;
686
687             background = spin.Background;
688             Color backgroundColor = new Color();
689             background.Find(ColorVisualProperty.MixColor, "mixColor")?.Get(backgroundColor);
690             if( backgroundColor == Color.Red )
691             {
692                 Tizen.Log.Debug("NUI", "Custom View Background property : test passed");
693             }
694             else
695             {
696                 Tizen.Log.Debug("NUI", "Custom View Background property : test failed");
697             }
698
699             // BackgroundColor property
700             spin.BackgroundColor = Color.Yellow;
701             if(spin.BackgroundColor == Color.Yellow)
702             {
703                 Tizen.Log.Debug("NUI", "Custom View BackgroundColor property : test passed");
704             }
705             else
706             {
707                 Tizen.Log.Debug("NUI", "Custom View BackgroundColor property : test failed");
708             }
709
710             // BackgroundImage property
711             spin.BackgroundImage = "background-image.jpg";
712             if(spin.BackgroundImage == "background-image.jpg")
713             {
714                 Tizen.Log.Debug("NUI", "Custom View BackgroundImage property : test passed");
715             }
716             else
717             {
718                 Tizen.Log.Debug("NUI", "Custom View BackgroundImage property : test failed");
719             }
720
721             // StyleName property
722             spin.StyleName = "MyCustomStyle";
723             if(spin.StyleName == "MyCustomStyle")
724             {
725                 Tizen.Log.Debug("NUI", "Custom View StyleName property : test passed");
726             }
727             else
728             {
729                 Tizen.Log.Debug("NUI", "Custom View StyleName property : test failed");
730             }
731         }
732
733         public void ViewDownCastTest()
734         {
735           View container = new View();
736           container.Position = new Position(-800.0f, -800.0f, 0.0f);
737           Window.Instance.Add(container);
738           Tizen.Log.Debug("NUI", "winow layer count is "+Window.Instance.LayerCount);
739           Tizen.Log.Debug("NUI", "winow default layer child at 0 is "+Window.Instance.GetDefaultLayer().GetChildAt(0));
740           // Test downcast for native control
741           TextLabel myLabel = new TextLabel();
742           myLabel.Name = "MyLabelName";
743           myLabel.Text = "MyText";
744
745           Tizen.Log.Debug("NUI", "myLabel.Name = " + myLabel.Name + ", Text = " + myLabel.Text);
746
747           container.Add(myLabel);
748
749           View myLabelView  = container.FindChildByName("MyLabelName");
750           if(myLabelView)
751           {
752             TextLabel newLabel = myLabelView as TextLabel;
753             if(newLabel)
754             {
755               Tizen.Log.Debug("NUI", "Downcast to TextLabel successful: newLabel Name = " + newLabel.Name + ", Text = " + newLabel.Text);
756             }
757             else
758             {
759               Tizen.Log.Debug("NUI", "Downcast to TextLabel failed!");
760             }
761           }
762
763           // Test downcast for class directly inherited from View
764           MyView myView = new MyView();
765           myView.Name = "MyViewName";
766           myView.MyOwnName = "MyOwnViewName";
767           myView._myCurrentValue = 5;
768
769           Tizen.Log.Debug("NUI", "myView.Name = " + myView.Name + ", MyOwnName = " + myView.MyOwnName + ", myCurrentValue = " + myView._myCurrentValue);
770
771           container.Add(myView);
772
773           View myViewView  = container.FindChildByName("MyViewName");
774           if(myViewView)
775           {
776             MyView newView = myViewView as MyView;
777             if(newView)
778             {
779               Tizen.Log.Debug("NUI", "Downcast to MyView successful: newView Name = " + newView.Name + ", MyOwnName = " + newView.MyOwnName + ", myCurrentValue = " + newView._myCurrentValue);
780             }
781             else
782             {
783               Tizen.Log.Debug("NUI", "Downcast to MyView failed!");
784             }
785           }
786
787           // Test downcast for class directly inherited from native control
788           MyButton myButton = new MyButton();
789           myButton.Name = "MyButtonName";
790           myButton.MyOwnName = "MyOwnViewName";
791           myButton.LabelText = "MyLabelText";
792           myButton._myCurrentValue = 5;
793
794           Tizen.Log.Debug("NUI", "myButton.Name = " + myButton.Name + ", MyOwnName = " + myButton.MyOwnName + ", LabelText = " + myButton.LabelText + ", myCurrentValue = " + myButton._myCurrentValue);
795
796           container.Add(myButton);
797
798           View myButtonView  = container.FindChildByName("MyButtonName");
799           if(myButtonView)
800           {
801             MyButton newButton = myButtonView as MyButton;
802             if(newButton)
803             {
804               Tizen.Log.Debug("NUI", "Downcast to MyButton successful: newButton Name = " + newButton.Name + ", MyOwnName = " + newButton.MyOwnName + ", LabelText = " + myButton.LabelText + ", myCurrentValue = " + newButton._myCurrentValue);
805             }
806             else
807             {
808               Tizen.Log.Debug("NUI", "Downcast to MyButton failed!");
809             }
810           }
811
812           // Test downcast for a CustomView
813           Spin spin = new Spin();
814           spin.Name = "SpinName";
815           spin.MaxValue = 8888;
816
817           Tizen.Log.Debug("NUI", "spin.Name = " + spin.Name + ", MaxValue = " + spin.MaxValue);
818
819           container.Add(spin);
820
821           View spinView  = container.FindChildByName("SpinName");
822           if(spinView)
823           {
824             Spin newSpin = spinView as Spin;
825             if(newSpin)
826             {
827               Tizen.Log.Debug("NUI", "Downcast to Spin successful: newSpin Name = " + newSpin.Name + ", MaxValue = " + newSpin.MaxValue);
828             }
829             else
830             {
831               Tizen.Log.Debug("NUI", "Downcast to Spin failed!");
832             }
833           }
834
835           // Test downcast for class inherited from a CustomView
836           MySpin mySpin = new MySpin();
837           mySpin.Name = "MySpinName";
838           mySpin.MyOwnName = "MyOwnSpinName";
839           mySpin.MaxValue = 8888;
840           mySpin._myCurrentValue = 5;
841
842           Tizen.Log.Debug("NUI", "mySpin.Name = " + mySpin.Name + ", MyOwnName = " + mySpin.MyOwnName + ", MaxValue = " + mySpin.MaxValue + ", currentValue = " + mySpin._myCurrentValue);
843
844           container.Add(mySpin);
845
846           View mySpinView  = container.FindChildByName("MySpinName");
847           if(mySpinView)
848           {
849             MySpin newSpin = mySpinView as MySpin;
850             if(newSpin)
851             {
852               Tizen.Log.Debug("NUI", "Downcast to MySpin successful: newSpin Name = " + newSpin.Name + ", MyOwnName = " + newSpin.MyOwnName + ", MaxValue = " + newSpin.MaxValue + ", currentValue = " + newSpin._myCurrentValue);
853             }
854             else
855             {
856               Tizen.Log.Debug("NUI", "Downcast to MySpin failed!");
857             }
858           }
859         }
860
861
862
863         public void DowncastTest()
864         {
865             //Create a View as a child of parent View, get it use parent.GetChildAt(i), then DownCast to View handle, but call BackgroundColor property will crash.
866             View parent = new View();
867             View[] childs = new View[5];
868
869             for (int i = 0; i < 5; i++)
870             {
871                 childs[i] = new View();
872                 childs[i].Name = "child_view_" + i;
873                 childs[i].BackgroundColor = Color.Red;
874                 parent.Add(childs[i]);
875             }
876
877             for (uint i = 0; i < parent.ChildCount; i++)
878             {
879                 View childView = parent.GetChildAt(i);
880                 if (childView)
881                 {
882                     Tizen.Log.Debug("NUI", "Type[" + childView.GetTypeName() + "] BGColor[" + childView.BackgroundColor.R + "]" + " Name[" + childView.Name + "]");
883                 }
884             }
885
886             PushButton button = new PushButton();
887             button.LabelText = "ButtonTest!";
888             button.BackgroundColor = Color.White;
889             View parentView = new View();
890             parentView.Add(button);
891             PushButton view = parentView.GetChildAt(0) as PushButton;
892             if (view)
893             {
894                 Tizen.Log.Debug("NUI", "NUI view GetTypeName= " + view.GetTypeName());
895                 Tizen.Log.Debug("NUI", "NUI view LabelText= " + view.LabelText);
896                 Tizen.Log.Debug("NUI", "NUI view color= " +  view.BackgroundColor.R);
897             }
898         }
899
900
901
902         /// <summary>
903         /// The main entry point for the application.
904         /// </summary>
905         [STAThread]
906         static void _Main(string[] args)
907         {
908             Tizen.Log.Debug("NUI", "Hello Mono World");
909
910             Example example = new Example();
911             example.Run(args);
912         }
913     }
914 }