X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=plugins%2Fdali-swig%2Fexamples%2Fdali-test.cs;h=a4a3a1e3da72bbab925b9e1789c0315922b8e5f5;hp=60b6c7a3d2dfdbc7b6af988e4b752f34c1263aa1;hb=071fcd1b53571defd28db3f3563645b5f32e6329;hpb=e2ab03b7246a8621d025f02a0a2f9325748f993c diff --git a/plugins/dali-swig/examples/dali-test.cs b/plugins/dali-swig/examples/dali-test.cs old mode 100644 new mode 100755 index 60b6c7a..a4a3a1e --- a/plugins/dali-swig/examples/dali-test.cs +++ b/plugins/dali-swig/examples/dali-test.cs @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2017 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +21,75 @@ using Dali; namespace MyCSharpExample { + class MyView : View + { + private string _myOwnName; + public int _myCurrentValue; + + public MyView() + { + _myCurrentValue = 0; + } + + public string MyOwnName + { + get + { + return _myOwnName; + } + set + { + _myOwnName = value; + } + } + } + + class MyButton : PushButton + { + private string _myOwnName; + public int _myCurrentValue; + + public MyButton() + { + _myCurrentValue = 0; + } + + public string MyOwnName + { + get + { + return _myOwnName; + } + set + { + _myOwnName = value; + } + } + } + + class MySpin : Spin + { + private string _myOwnName; + public int _myCurrentValue; + + public MySpin() + { + _myCurrentValue = 0; + } + + public string MyOwnName + { + get + { + return _myOwnName; + } + set + { + _myOwnName = value; + } + } + } + class Example { [UnmanagedFunctionPointer(CallingConvention.StdCall)] @@ -31,40 +100,43 @@ namespace MyCSharpExample public Example(Dali.Application application) { _application = application; - - CallbackDelegate initializeCallback = new CallbackDelegate( Initialize ); Console.WriteLine( "InitSignal connection count = " + _application.InitSignal().GetConnectionCount() ); - _application.InitSignal().Connect( initializeCallback ); + _application.Initialized += Initialize; Console.WriteLine( "InitSignal connection count = " + _application.InitSignal().GetConnectionCount() ); } - private void Initialize(IntPtr appPtr) + public void Initialize(object source, NUIApplicationInitEventArgs e) { + NavigationPropertiesTests(); + + OperatorTests(); + + CustomViewPropertyTest(); + Handle handle = new Handle(); int myPropertyIndex = handle.RegisterProperty("myProperty", new Property.Value(10.0f), Property.AccessMode.READ_WRITE); float myProperty = 0.0f; handle.GetProperty(myPropertyIndex).Get(ref myProperty); Console.WriteLine( "myProperty value: " + myProperty ); - int myPropertyIndex2 = handle.RegisterProperty("myProperty2", new Property.Value(new Vector2(5.0f, 5.0f)), Property.AccessMode.READ_WRITE); - Vector2 myProperty2 = new Vector2(0.0f, 0.0f); + int myPropertyIndex2 = handle.RegisterProperty("myProperty2", new Property.Value(new Size(5.0f, 5.0f)), Property.AccessMode.READ_WRITE); + Size myProperty2 = new Size(0.0f, 0.0f); handle.GetProperty(myPropertyIndex2).Get(myProperty2); - Console.WriteLine( "myProperty2 value: " + myProperty2.x + ", " + myProperty2.y ); + Console.WriteLine( "myProperty2 value: " + myProperty2.W + ", " + myProperty2.H ); Actor actor = new Actor(); - actor.Size = new Vector3(200.0f, 200.0f, 0.0f); + actor.Size = new Position(200.0f, 200.0f, 0.0f); actor.Name = "MyActor"; - actor.Color = new Vector4(1.0f, 0.0f, 1.0f, 0.8f); + Console.WriteLine("Actor id: {0}", actor.GetId()); - Console.WriteLine("Actor size: " + actor.Size.x + ", " + actor.Size.y); + Console.WriteLine("Actor size: " + actor.Size.X + ", " + actor.Size.Y); Console.WriteLine("Actor name: " + actor.Name); Stage stage = Stage.GetCurrent(); - stage.SetBackgroundColor( NDalic.WHITE ); - - Vector2 stageSize = stage.GetSize(); - Console.WriteLine("Stage size: " + stageSize.x + ", " + stageSize.y); + stage.BackgroundColor = Color.White; + Size stageSize = stage.Size; + Console.WriteLine("Stage size: " + stageSize.W + ", " + stageSize.H); stage.Add(actor); TextLabel text = new TextLabel("Hello Mono World"); @@ -79,89 +151,553 @@ namespace MyCSharpExample text.PointSize = 32.0f; Console.WriteLine( "Text label new point size: " + text.PointSize ); - using (RectInteger ri = new RectInteger(02,05,20,30)) + RectanglePaddingClassTest(); + + Console.WriteLine( " *************************" ); + Size Size = new Size(100, 50); + Console.WriteLine( " Created " + Size ); + Console.WriteLine( " Size x = " + Size.W + ", y = " + Size.H ); + Size += new Size(20, 20); + Console.WriteLine( " Size x = " + Size.W + ", y = " + Size.H ); + Size.W += 10; + Size.H += 10; + Console.WriteLine( " Size width = " + Size.W + ", height = " + Size.H ); + + Console.WriteLine( " *************************" ); + Position Position = new Position(20, 100, 50); + Console.WriteLine( " Created " + Position ); + Console.WriteLine( " Position x = " + Position.X + ", y = " + Position.Y + ", z = " + Position.Z ); + Position += new Position(20, 20, 20); + Console.WriteLine( " Position x = " + Position.X + ", y = " + Position.Y + ", z = " + Position.Z ); + Position.X += 10; + Position.Y += 10; + Position.Z += 10; + Console.WriteLine( " Position width = " + Position.X + ", height = " + Position.Y + ", depth = " + Position.Z ); + Position parentOrigin = new Dali.Position(NDalic.ParentOriginBottomRight); + Console.WriteLine( " parentOrigin x = " + parentOrigin.X + ", y = " + parentOrigin.Y + ", z = " + parentOrigin.Z ); + + Console.WriteLine( " *************************" ); + Color color = new Color(20, 100, 50, 200); + Console.WriteLine( " Created " + color ); + Console.WriteLine( " Color R = " + color.R + ", G = " + color.G + ", B = " + color.B + ", A = " + color.A ); + color += new Color(20, 20, 20, 20); + Console.WriteLine( " Color R = " + color.R + ", G = " + color.G + ", B = " + color.B + ", A = " + color.A ); + color.R += 10; + color.G += 10; + color.B += 10; + color.A += 10; + Console.WriteLine( " Color r = " + color.R + ", g = " + color.G + ", b = " + color.B + ", a = " + color.A ); + + ViewDownCastTest(); + } + + public void RectanglePaddingClassTest() + { + using (Rectangle r1 = new Rectangle(2, 5, 20, 30)) { - Console.WriteLine( " Created " + ri ); - Console.WriteLine( " IsEmpty() = " + ri.IsEmpty() ); - Console.WriteLine( " Left = " + ri.Left() ); - Console.WriteLine( " Right = " + ri.Right() ); - Console.WriteLine( " Top = " + ri.Top() ); - Console.WriteLine( " Bottom = " + ri.Bottom() ); - Console.WriteLine( " Area = " + ri.Area() ); + Console.WriteLine( " Created " + r1 ); + Console.WriteLine( " IsEmpty() = " + r1.IsEmpty() ); + Console.WriteLine( " Left = " + r1.Left() ); + Console.WriteLine( " Right = " + r1.Right() ); + Console.WriteLine( " Top = " + r1.Top() ); + Console.WriteLine( " Bottom = " + r1.Bottom() ); + Console.WriteLine( " Area = " + r1.Area() ); } + Console.WriteLine( " *************************" ); - using (RectInteger ri2 = new RectInteger(02,05,20,30)) + + using (Rectangle r2 = new Rectangle(2, 5, 20.0f, 30.0f)) { - Console.WriteLine( " Created " + ri2 ); - ri2.Set(1,1,40,40); - Console.WriteLine( " IsEmpty() = " + ri2.IsEmpty() ); - Console.WriteLine( " Left = " + ri2.Left() ); - Console.WriteLine( " Right = " + ri2.Right() ); - Console.WriteLine( " Top = " + ri2.Top() ); - Console.WriteLine( " Bottom = " + ri2.Bottom() ); - Console.WriteLine( " Area = " + ri2.Area() ); + Console.WriteLine( " Created " + r2 ); + r2.Set(1,1,40,40); + Console.WriteLine( " IsEmpty() = " + r2.IsEmpty() ); + Console.WriteLine( " Left = " + r2.Left() ); + Console.WriteLine( " Right = " + r2.Right() ); + Console.WriteLine( " Top = " + r2.Top() ); + Console.WriteLine( " Bottom = " + r2.Bottom() ); + Console.WriteLine( " Area = " + r2.Area() ); } + Console.WriteLine( " *************************" ); - using (RectDouble rd = new RectDouble(02,05,20.5,30.5)) + + Rectangle r3 = new Rectangle(10, 10, 20, 20); + Rectangle r4 = new Rectangle(10, 10, 20, 20); + + if (r3 == r4) { - Console.WriteLine( " Created " + rd ); - Console.WriteLine( " IsEmpty() = " + rd.IsEmpty() ); - Console.WriteLine( " Left = " + rd.Left() ); - Console.WriteLine( " Right = " + rd.Right() ); - Console.WriteLine( " Top = " + rd.Top() ); - Console.WriteLine( " Bottom = " + rd.Bottom() ); - Console.WriteLine( " Area = " + rd.Area() ); + Console.WriteLine("r3 == r4"); + } + else + { + Console.WriteLine("r3 != r4"); } - Console.WriteLine( " *************************" ); - RectDouble rd2 = new RectDouble(); - rd2.x = 10; - rd2.y = 10; - rd2.width = 20; - rd2.height = 20; - Console.WriteLine( " Created " + rd2 ); - Console.WriteLine( " IsEmpty() = " + rd2.IsEmpty() ); - Console.WriteLine( " Left = " + rd2.Left() ); - Console.WriteLine( " Right = " + rd2.Right() ); - Console.WriteLine( " Top = " + rd2.Top() ); - Console.WriteLine( " Bottom = " + rd2.Bottom() ); - Console.WriteLine( " Area = " + rd2.Area() ); - Console.WriteLine( " *************************" ); - Vector2 vector2 = new Vector2(100, 50); - Console.WriteLine( " Created " + vector2 ); - Console.WriteLine( " Vector2 x = " + vector2.x + ", y = " + vector2.y ); - vector2 += new Vector2(20, 20); - Console.WriteLine( " Vector2 x = " + vector2[0] + ", y = " + vector2[1] ); - vector2.x += 10; - vector2.y += 10; - Console.WriteLine( " Vector2 width = " + vector2.width + ", height = " + vector2.height ); - vector2 += new Vector2(15, 15); - Console.WriteLine( " Vector2 width = " + vector2[0] + ", height = " + vector2[1] ); + r4 = new Rectangle(12, 10, 20, 20); - Console.WriteLine( " *************************" ); - Vector3 vector3 = new Vector3(20, 100, 50); - Console.WriteLine( " Created " + vector3 ); - Console.WriteLine( " Vector3 x = " + vector3.x + ", y = " + vector3.y + ", z = " + vector3.z ); - vector3 += new Vector3(20, 20, 20); - Console.WriteLine( " Vector3 x = " + vector3[0] + ", y = " + vector3[1] + ", z = " + vector3[2] ); - vector3.x += 10; - vector3.y += 10; - vector3.z += 10; - Console.WriteLine( " Vector3 width = " + vector3.width + ", height = " + vector3.height + ", depth = " + vector3.depth ); - Vector3 parentOrigin = NDalic.ParentOriginBottomRight; - Console.WriteLine( " parentOrigin x = " + parentOrigin.x + ", y = " + parentOrigin.y + ", z = " + parentOrigin.z ); + if (r3 == r4) + { + Console.WriteLine("r3 == r4"); + } + else + { + Console.WriteLine("r3 != r4"); + } - Console.WriteLine( " *************************" ); - Vector4 vector4 = new Vector4(20, 100, 50, 200); - Console.WriteLine( " Created " + vector4 ); - Console.WriteLine( " Vector4 x = " + vector4.x + ", y = " + vector4.y + ", z = " + vector4.z + ", w = " + vector4.w ); - vector4 += new Vector4(20, 20, 20, 20); - Console.WriteLine( " Vector4 x = " + vector4[0] + ", y = " + vector4[1] + ", z = " + vector4[2] + ", w = " + vector4[3] ); - vector4.x += 10; - vector4.y += 10; - vector4.z += 10; - vector4.w += 10; - Console.WriteLine( " Vector4 r = " + vector4.r + ", g = " + vector4.g + ", b = " + vector4.b + ", a = " + vector4.a ); + PaddingType p1 = new PaddingType(10.5f, 10.7f, 20.8f, 20.8f); + PaddingType p2 = new PaddingType(10.5f, 10.7f, 20.8f, 20.8f); + + if (p1 == p2) + { + Console.WriteLine("p1 == p2"); + } + else + { + Console.WriteLine("p1 != p2"); + } + + p2 = new PaddingType(12.0f, 10.7f, 20.2f, 20.0f); + + if (p1 == p2) + { + Console.WriteLine("p1 == p2"); + } + else + { + Console.WriteLine("p1 != p2"); + } + } + + public void NavigationPropertiesTests() + { + View view = new View(); + View leftView, rightView, upView, downView, tmpView; + + leftView = new View(); + leftView.Name = "leftView"; + rightView = new View(); + rightView.Name = "rightView"; + upView = new View(); + upView.Name = "upView"; + downView = new View(); + downView.Name = "downView"; + + Stage.Instance.Add(leftView); + Stage.Instance.Add(rightView); + Stage.Instance.Add(upView); + Stage.Instance.Add(downView); + + view.LeftFocusableView = leftView; + tmpView = view.LeftFocusableView; + if (string.Compare(tmpView.Name, "leftView") == 0) + { + Console.WriteLine("Passed: LeftFocusedView = " + tmpView.Name); + } + else + { + Console.WriteLine("Failed: LeftFocusedView = " + tmpView.Name); + } + + view.RightFocusableView = rightView; + tmpView = view.RightFocusableView; + if (string.Compare(tmpView.Name, "rightView") == 0) + { + Console.WriteLine("Passed: RightFocusedView = " + tmpView.Name); + } + else + { + Console.WriteLine("Failed: RightFocusedView = " + tmpView.Name); + } + + Stage.Instance.Add(view); + + view.UpFocusableView = upView; + tmpView = view.UpFocusableView; + if (string.Compare(tmpView.Name, "upView") == 0) + { + Console.WriteLine("Passed: UpFocusedView = " + tmpView.Name); + } + else + { + Console.WriteLine("Failed: UpFocusedView = " + tmpView.Name); + } + + view.DownFocusableView = downView; + tmpView = view.DownFocusableView; + if (string.Compare(tmpView.Name, "downView") == 0) + { + Console.WriteLine("Passed: DownFocusedView = " + tmpView.Name); + } + else + { + Console.WriteLine("Failed: DownFocusedView = " + tmpView.Name); + } + + Stage.Instance.Remove(leftView); + tmpView = view.LeftFocusableView; + if (!tmpView) + { + Console.WriteLine("Passed: NULL LeftFocusedView"); + } + else + { + Console.WriteLine("Failed: LeftFocusedView = " + tmpView.Name); + } + } + + public void OperatorTests() + { + Actor actor = new Actor(); + Actor differentActor = new Actor(); + Actor actorSame = actor; + Actor nullActor = null; + + // test the true operator + if ( actor ) + { + Console.WriteLine ("BaseHandle Operator true (actor) : test passed "); + } + else + { + Console.WriteLine ("BaseHandle Operator true (actor): test failed "); + } + + Actor parent = actor.GetParent (); + + if ( parent ) + { + Console.WriteLine ("Handle with Empty body :failed "); + } + else + { + Console.WriteLine ("Valid with Empty body :passed "); + } + + actor.Add( differentActor ); + + // here we test two different C# objects, which on the native side have the same body/ ref-object + if ( actor == differentActor.GetParent() ) + { + Console.WriteLine ("actor == differentActor.GetParent() :passed "); + } + else + { + Console.WriteLine ("actor == differentActor.GetParent() :failed "); + } + + if ( differentActor == differentActor.GetParent() ) + { + Console.WriteLine ("differentActor == differentActor.GetParent() :failed "); + } + else + { + Console.WriteLine ("differentActor == differentActor.GetParent() :passed "); + } + + if ( nullActor ) + { + Console.WriteLine ("BaseHandle Operator true (nullActor) : test failed "); + } + else + { + Console.WriteLine ("BaseHandle Operator true (nullActor): test passed "); + } + + // ! operator + if ( !actor ) + { + Console.WriteLine ("BaseHandle Operator !(actor) : test failed "); + } + else + { + Console.WriteLine ("BaseHandle Operator !(actor): test passed "); + } + + if ( !nullActor ) + { + Console.WriteLine ("BaseHandle Operator !(nullActor) : test passed "); + } + else + { + Console.WriteLine ("BaseHandle Operator !(nullActor): test failed "); + } + + // Note: operator false only used inside & operator + // test equality operator == + if ( actor == actorSame ) + { + Console.WriteLine ("BaseHandle Operator (actor == actorSame) : test passed"); + } + else + { + Console.WriteLine ("BaseHandle Operator (actor == actorSame) : test failed"); + } + + if ( actor == differentActor ) + { + Console.WriteLine ("BaseHandle Operator (actor == differentActor) : test failed"); + } + else + { + Console.WriteLine ("BaseHandle Operator (actor == differentActor) : test passed"); + } + + if ( actor == nullActor ) + { + Console.WriteLine ("BaseHandle Operator (actor == nullActor) : test failed"); + } + else + { + Console.WriteLine ("BaseHandle Operator (actor == nullActor) : test passed"); + } + + if ( nullActor == nullActor ) + { + Console.WriteLine ("BaseHandle Operator (nullActor == nullActor) : test passed"); + } + else + { + Console.WriteLine ("BaseHandle Operator (nullActor == nullActor) : test failed"); + } + + // test || operator + if ( actor || actorSame ) + { + Console.WriteLine ("BaseHandle Operator (actor || actorSame) : test passed"); + } + else + { + Console.WriteLine ("BaseHandle Operator (actor || actorSame) : test failed"); + } + + if ( actor || nullActor ) + { + Console.WriteLine ("BaseHandle Operator (actor || nullActor) : test passed"); + } + else + { + Console.WriteLine ("BaseHandle Operator (actor || nullActor) : test failed"); + } + + if ( nullActor || nullActor ) + { + Console.WriteLine ("BaseHandle Operator (nullActor || nullActor) : test failed"); + } + else + { + Console.WriteLine ("BaseHandle Operator (nullActor || nullActor) : test passed"); + } + + // test && operator + if ( actor && actorSame ) + { + Console.WriteLine ("BaseHandle Operator (actor && actorSame) : test passed"); + } + else + { + Console.WriteLine ("BaseHandle Operator (actor && actorSame) : test failed"); + } + + if ( actor && nullActor ) + { + Console.WriteLine ("BaseHandle Operator (actor && nullActor) : test failed"); + } + else + { + Console.WriteLine ("BaseHandle Operator (actor && nullActor) : test passed"); + } + + if ( nullActor && nullActor ) + { + Console.WriteLine ("BaseHandle Operator (nullActor && nullActor) : test failed"); + } + else + { + Console.WriteLine ("BaseHandle Operator (nullActor && nullActor) : test passed"); + } + } + + public void CustomViewPropertyTest() + { + // Create a Spin control + Spin spin = new Spin(); + + // Background property + Property.Map background = new Property.Map(); + background.Add( Dali.Constants.Visual.Property.Type, new Property.Value((int)Dali.Constants.Visual.Type.Color) ) + .Add( Dali.Constants.ColorVisualProperty.MixColor, new Property.Value(Color.Red) ); + spin.Background = background; + + background = spin.Background; + Vector4 backgroundColor = new Vector4(); + background.Find(Dali.Constants.ColorVisualProperty.MixColor).Get(backgroundColor); + if( backgroundColor == Color.Red ) + { + Console.WriteLine ("Custom View Background property : test passed"); + } + else + { + Console.WriteLine ("Custom View Background property : test failed"); + } + + // BackgroundColor property + spin.BackgroundColor = Color.Yellow; + if(spin.BackgroundColor == Color.Yellow) + { + Console.WriteLine ("Custom View BackgroundColor property : test passed"); + } + else + { + Console.WriteLine ("Custom View BackgroundColor property : test failed"); + } + + // BackgroundImage property + spin.BackgroundImage = "background-image.jpg"; + if(spin.BackgroundImage == "background-image.jpg") + { + Console.WriteLine ("Custom View BackgroundImage property : test passed"); + } + else + { + Console.WriteLine ("Custom View BackgroundImage property : test failed"); + } + + // StyleName property + spin.StyleName = "MyCustomStyle"; + if(spin.StyleName == "MyCustomStyle") + { + Console.WriteLine ("Custom View StyleName property : test passed"); + } + else + { + Console.WriteLine ("Custom View StyleName property : test failed"); + } + } + + public void ViewDownCastTest() + { + View container = new View(); + container.Position = new Position(-800.0f, -800.0f, 0.0f); + Stage.GetCurrent().Add(container); + + // Test downcast for native control + TextLabel myLabel = new TextLabel(); + myLabel.Name = "MyLabelName"; + myLabel.Text = "MyText"; + + Console.WriteLine("myLabel.Name = " + myLabel.Name + ", Text = " + myLabel.Text); + + container.Add(myLabel); + + Actor myLabelActor = container.FindChildByName("MyLabelName"); + if(myLabelActor) + { + TextLabel newLabel = View.DownCast(myLabelActor); + if(newLabel) + { + Console.WriteLine("Downcast to TextLabel successful: newLabel Name = " + newLabel.Name + ", Text = " + newLabel.Text); + } + else + { + Console.WriteLine("Downcast to TextLabel failed!"); + } + } + + // Test downcast for class directly inherited from View + MyView myView = new MyView(); + myView.Name = "MyViewName"; + myView.MyOwnName = "MyOwnViewName"; + myView._myCurrentValue = 5; + + Console.WriteLine("myView.Name = " + myView.Name + ", MyOwnName = " + myView.MyOwnName + ", myCurrentValue = " + myView._myCurrentValue); + + container.Add(myView); + + Actor myViewActor = container.FindChildByName("MyViewName"); + if(myViewActor) + { + MyView newView = View.DownCast(myViewActor); + if(newView) + { + Console.WriteLine("Downcast to MyView successful: newView Name = " + newView.Name + ", MyOwnName = " + newView.MyOwnName + ", myCurrentValue = " + newView._myCurrentValue); + } + else + { + Console.WriteLine("Downcast to MyView failed!"); + } + } + + // Test downcast for class directly inherited from native control + MyButton myButton = new MyButton(); + myButton.Name = "MyButtonName"; + myButton.MyOwnName = "MyOwnViewName"; + myButton.LabelText = "MyLabelText"; + myButton._myCurrentValue = 5; + + Console.WriteLine("myButton.Name = " + myButton.Name + ", MyOwnName = " + myButton.MyOwnName + ", LabelText = " + myButton.LabelText + ", myCurrentValue = " + myButton._myCurrentValue); + + container.Add(myButton); + + Actor myButtonActor = container.FindChildByName("MyButtonName"); + if(myButtonActor) + { + MyButton newButton = View.DownCast(myButtonActor); + if(newButton) + { + Console.WriteLine("Downcast to MyButton successful: newButton Name = " + newButton.Name + ", MyOwnName = " + newButton.MyOwnName + ", LabelText = " + myButton.LabelText + ", myCurrentValue = " + newButton._myCurrentValue); + } + else + { + Console.WriteLine("Downcast to MyButton failed!"); + } + } + + // Test downcast for a CustomView + Spin spin = new Spin(); + spin.Name = "SpinName"; + spin.MaxValue = 8888; + + Console.WriteLine("spin.Name = " + spin.Name + ", MaxValue = " + spin.MaxValue); + + container.Add(spin); + + Actor spinActor = container.FindChildByName("SpinName"); + if(spinActor) + { + Spin newSpin = View.DownCast(spinActor); + if(newSpin) + { + Console.WriteLine("Downcast to Spin successful: newSpin Name = " + newSpin.Name + ", MaxValue = " + newSpin.MaxValue); + } + else + { + Console.WriteLine("Downcast to Spin failed!"); + } + } + + // Test downcast for class inherited from a CustomView + MySpin mySpin = new MySpin(); + mySpin.Name = "MySpinName"; + mySpin.MyOwnName = "MyOwnSpinName"; + mySpin.MaxValue = 8888; + mySpin._myCurrentValue = 5; + + Console.WriteLine("mySpin.Name = " + mySpin.Name + ", MyOwnName = " + mySpin.MyOwnName + ", MaxValue = " + mySpin.MaxValue + ", currentValue = " + mySpin._myCurrentValue); + + container.Add(mySpin); + + Actor mySpinActor = container.FindChildByName("MySpinName"); + if(mySpinActor) + { + MySpin newSpin = View.DownCast(mySpinActor); + if(newSpin) + { + Console.WriteLine("Downcast to MySpin successful: newSpin Name = " + newSpin.Name + ", MyOwnName = " + newSpin.MyOwnName + ", MaxValue = " + newSpin.MaxValue + ", currentValue = " + newSpin._myCurrentValue); + } + else + { + Console.WriteLine("Downcast to MySpin failed!"); + } + } } public void MainLoop()