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