2 * Copyright (c) 2017 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 using System.Runtime.InteropServices;
21 using Tizen.NUI.UIComponents;
22 using Tizen.NUI.BaseComponents;
23 using Tizen.NUI.Constants;
29 private string _myOwnName;
30 public int _myCurrentValue;
37 public string MyOwnName
50 class MyButton : PushButton
52 private string _myOwnName;
53 public int _myCurrentValue;
60 public string MyOwnName
75 private string _myOwnName;
76 public int _myCurrentValue;
83 public string MyOwnName
96 class Example : NUIApplication
98 private const string _resPath = "/home/owner/apps_rw/NUISamples.TizenTV/res";
100 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
101 delegate void CallbackDelegate(IntPtr appPtr); // void, void delgate
103 public Example() : base()
107 public Example(string stylesheet) : base(stylesheet)
111 public Example(string stylesheet, WindowMode windowMode) : base(stylesheet, windowMode)
115 protected override void OnCreate()
121 public void Initialize()
125 NavigationPropertiesTests();
129 CustomViewPropertyTest();
131 VisibilityChangeTest();
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 );
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 );
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);
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);
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);
165 Tizen.Log.Debug("NUI", "Text label text: " + text.Text );
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 );
171 RectanglePaddingClassTest();
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 );
181 Tizen.Log.Debug("NUI", " Size width = " + Size.Width + ", height = " + Size.Height );
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 );
192 Tizen.Log.Debug("NUI", " Position width = " + Position.X + ", height = " + Position.Y + ", depth = " + Position.Z );
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 );
204 Tizen.Log.Debug("NUI", " Color r = " + color.R + ", g = " + color.G + ", b = " + color.B + ", a = " + color.A );
209 public void RectanglePaddingClassTest()
211 using (Rectangle r1 = new Rectangle(2, 5, 20, 30))
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() );
222 Tizen.Log.Debug("NUI", " *************************" );
224 using (Rectangle r2 = new Rectangle(2, 5, 20, 30))
226 Tizen.Log.Debug("NUI", " Created " + r2 );
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() );
236 Tizen.Log.Debug("NUI", " *************************" );
238 Rectangle r3 = new Rectangle(10, 10, 20, 20);
239 Rectangle r4 = new Rectangle(10, 10, 20, 20);
243 Tizen.Log.Debug("NUI", "r3 == r4");
247 Tizen.Log.Debug("NUI", "r3 != r4");
250 r4 = new Rectangle(12, 10, 20, 20);
254 Tizen.Log.Debug("NUI", "r3 == r4");
258 Tizen.Log.Debug("NUI", "r3 != r4");
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);
266 Tizen.Log.Debug("NUI", "p1 == p2");
270 Tizen.Log.Debug("NUI", "p1 != p2");
273 p2 = new PaddingType(12.0f, 10.7f, 20.2f, 20.0f);
277 Tizen.Log.Debug("NUI", "p1 == p2");
281 Tizen.Log.Debug("NUI", "p1 != p2");
285 public void NavigationPropertiesTests()
287 View view = new View();
288 View leftView, rightView, upView, downView, tmpView;
290 leftView = new View();
291 leftView.Name = "leftView";
292 rightView = new View();
293 rightView.Name = "rightView";
295 upView.Name = "upView";
296 downView = new View();
297 downView.Name = "downView";
299 Window.Instance.GetDefaultLayer().Add(leftView);
300 Window.Instance.GetDefaultLayer().Add(rightView);
301 Window.Instance.GetDefaultLayer().Add(upView);
302 Window.Instance.GetDefaultLayer().Add(downView);
304 view.LeftFocusableView = leftView;
305 tmpView = view.LeftFocusableView;
306 if (string.Compare(tmpView.Name, "leftView") == 0)
308 Tizen.Log.Debug("NUI", "Passed: LeftFocusedView = " + tmpView.Name);
312 Tizen.Log.Debug("NUI", "Failed: LeftFocusedView = " + tmpView.Name);
315 view.RightFocusableView = rightView;
316 tmpView = view.RightFocusableView;
317 if (string.Compare(tmpView.Name, "rightView") == 0)
319 Tizen.Log.Debug("NUI", "Passed: RightFocusedView = " + tmpView.Name);
323 Tizen.Log.Debug("NUI", "Failed: RightFocusedView = " + tmpView.Name);
326 Window.Instance.GetDefaultLayer().Add(view);
328 view.UpFocusableView = upView;
329 tmpView = view.UpFocusableView;
330 if (string.Compare(tmpView.Name, "upView") == 0)
332 Tizen.Log.Debug("NUI", "Passed: UpFocusedView = " + tmpView.Name);
336 Tizen.Log.Debug("NUI", "Failed: UpFocusedView = " + tmpView.Name);
339 view.DownFocusableView = downView;
340 tmpView = view.DownFocusableView;
341 if (string.Compare(tmpView.Name, "downView") == 0)
343 Tizen.Log.Debug("NUI", "Passed: DownFocusedView = " + tmpView.Name);
347 Tizen.Log.Debug("NUI", "Failed: DownFocusedView = " + tmpView.Name);
350 Window.Instance.GetDefaultLayer().Remove(leftView);
351 tmpView = view.LeftFocusableView;
354 Tizen.Log.Debug("NUI", "Passed: NULL LeftFocusedView");
358 Tizen.Log.Debug("NUI", "Failed: LeftFocusedView = " + tmpView.Name);
362 public void OperatorTests()
364 View view = new View();
365 View differentView = new View();
366 View viewSame = view;
367 View nullView = null;
369 // test the true operator
372 Tizen.Log.Debug("NUI", "BaseHandle Operator true (view) : test passed ");
376 Tizen.Log.Debug("NUI", "BaseHandle Operator true (view): test failed ");
379 View parent = view.Parent;
383 Tizen.Log.Debug("NUI", "Handle with Empty body :failed ");
387 Tizen.Log.Debug("NUI", "Valid with Empty body :passed ");
390 view.Add( differentView );
392 // here we test two different C# objects, which on the native side have the same body/ ref-object
393 if ( view == differentView.Parent )
395 Tizen.Log.Debug("NUI", "view == differentView.GetParent() :passed ");
399 Tizen.Log.Debug("NUI", "view == differentView.GetParent() :failed ");
402 if ( differentView == differentView.Parent )
404 Tizen.Log.Debug("NUI", "differentView == differentView.GetParent() :failed ");
408 Tizen.Log.Debug("NUI", "differentView == differentView.GetParent() :passed ");
413 Tizen.Log.Debug("NUI", "BaseHandle Operator true (nullView) : test failed ");
417 Tizen.Log.Debug("NUI", "BaseHandle Operator true (nullView): test passed ");
423 Tizen.Log.Debug("NUI", "BaseHandle Operator !(view) : test failed ");
427 Tizen.Log.Debug("NUI", "BaseHandle Operator !(view): test passed ");
432 Tizen.Log.Debug("NUI", "BaseHandle Operator !(nullView) : test passed ");
436 Tizen.Log.Debug("NUI", "BaseHandle Operator !(nullView): test failed ");
439 // Note: operator false only used inside & operator
440 // test equality operator ==
441 if ( view == viewSame )
443 Tizen.Log.Debug("NUI", "BaseHandle Operator (view == viewSame) : test passed");
447 Tizen.Log.Debug("NUI", "BaseHandle Operator (view == viewSame) : test failed");
450 if ( view == differentView )
452 Tizen.Log.Debug("NUI", "BaseHandle Operator (view == differentView) : test failed");
456 Tizen.Log.Debug("NUI", "BaseHandle Operator (view == differentView) : test passed");
459 if ( view == nullView )
461 Tizen.Log.Debug("NUI", "BaseHandle Operator (view == nullView) : test failed");
465 Tizen.Log.Debug("NUI", "BaseHandle Operator (view == nullView) : test passed");
468 if ( nullView == nullView )
470 Tizen.Log.Debug("NUI", "BaseHandle Operator (nullView == nullView) : test passed");
474 Tizen.Log.Debug("NUI", "BaseHandle Operator (nullView == nullView) : test failed");
478 if ( view || viewSame )
480 Tizen.Log.Debug("NUI", "BaseHandle Operator (view || viewSame) : test passed");
484 Tizen.Log.Debug("NUI", "BaseHandle Operator (view || viewSame) : test failed");
487 if ( view || nullView )
489 Tizen.Log.Debug("NUI", "BaseHandle Operator (view || nullView) : test passed");
493 Tizen.Log.Debug("NUI", "BaseHandle Operator (view || nullView) : test failed");
496 if ( nullView || nullView )
498 Tizen.Log.Debug("NUI", "BaseHandle Operator (nullView || nullView) : test failed");
502 Tizen.Log.Debug("NUI", "BaseHandle Operator (nullView || nullView) : test passed");
506 if ( view && viewSame )
508 Tizen.Log.Debug("NUI", "BaseHandle Operator (view && viewSame) : test passed");
512 Tizen.Log.Debug("NUI", "BaseHandle Operator (view && viewSame) : test failed");
515 if ( view && nullView )
517 Tizen.Log.Debug("NUI", "BaseHandle Operator (view && nullView) : test failed");
521 Tizen.Log.Debug("NUI", "BaseHandle Operator (view && nullView) : test passed");
524 if ( nullView && nullView )
526 Tizen.Log.Debug("NUI", "BaseHandle Operator (nullView && nullView) : test failed");
530 Tizen.Log.Debug("NUI", "BaseHandle Operator (nullView && nullView) : test passed");
535 private TextLabel label;
536 public void VisibilityChangeTest()
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) =>
549 Console.WriteLine("VisibilityChanged, label show.");
551 Console.WriteLine("VisibilityChanged, label hide.");
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) =>
574 public void ResourceReadyTest()
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) =>
584 Console.WriteLine("Resource is ready!");
586 Window.GetDefaultLayer().Add(image);
589 public void CustomViewPropertyTest()
591 // Create a Spin control
592 Spin spin = new Spin();
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;
600 background = spin.Background;
601 Color backgroundColor = new Color();
602 background.Find(ColorVisualProperty.MixColor).Get(backgroundColor);
603 if( backgroundColor == Color.Red )
605 Tizen.Log.Debug("NUI", "Custom View Background property : test passed");
609 Tizen.Log.Debug("NUI", "Custom View Background property : test failed");
612 // BackgroundColor property
613 spin.BackgroundColor = Color.Yellow;
614 if(spin.BackgroundColor == Color.Yellow)
616 Tizen.Log.Debug("NUI", "Custom View BackgroundColor property : test passed");
620 Tizen.Log.Debug("NUI", "Custom View BackgroundColor property : test failed");
623 // BackgroundImage property
624 spin.BackgroundImage = "background-image.jpg";
625 if(spin.BackgroundImage == "background-image.jpg")
627 Tizen.Log.Debug("NUI", "Custom View BackgroundImage property : test passed");
631 Tizen.Log.Debug("NUI", "Custom View BackgroundImage property : test failed");
634 // StyleName property
635 spin.StyleName = "MyCustomStyle";
636 if(spin.StyleName == "MyCustomStyle")
638 Tizen.Log.Debug("NUI", "Custom View StyleName property : test passed");
642 Tizen.Log.Debug("NUI", "Custom View StyleName property : test failed");
646 public void ViewDownCastTest()
648 View container = new View();
649 container.Position = new Position(-800.0f, -800.0f, 0.0f);
650 Window.Instance.GetDefaultLayer().Add(container);
652 // Test downcast for native control
653 TextLabel myLabel = new TextLabel();
654 myLabel.Name = "MyLabelName";
655 myLabel.Text = "MyText";
657 Tizen.Log.Debug("NUI", "myLabel.Name = " + myLabel.Name + ", Text = " + myLabel.Text);
659 container.Add(myLabel);
661 View myLabelView = container.FindChildByName("MyLabelName");
664 TextLabel newLabel = View.DownCast<TextLabel>(myLabelView);
667 Tizen.Log.Debug("NUI", "Downcast to TextLabel successful: newLabel Name = " + newLabel.Name + ", Text = " + newLabel.Text);
671 Tizen.Log.Debug("NUI", "Downcast to TextLabel failed!");
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;
681 Tizen.Log.Debug("NUI", "myView.Name = " + myView.Name + ", MyOwnName = " + myView.MyOwnName + ", myCurrentValue = " + myView._myCurrentValue);
683 container.Add(myView);
685 View myViewView = container.FindChildByName("MyViewName");
688 MyView newView = View.DownCast<MyView>(myViewView);
691 Tizen.Log.Debug("NUI", "Downcast to MyView successful: newView Name = " + newView.Name + ", MyOwnName = " + newView.MyOwnName + ", myCurrentValue = " + newView._myCurrentValue);
695 Tizen.Log.Debug("NUI", "Downcast to MyView failed!");
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;
706 Tizen.Log.Debug("NUI", "myButton.Name = " + myButton.Name + ", MyOwnName = " + myButton.MyOwnName + ", LabelText = " + myButton.LabelText + ", myCurrentValue = " + myButton._myCurrentValue);
708 container.Add(myButton);
710 View myButtonView = container.FindChildByName("MyButtonName");
713 MyButton newButton = View.DownCast<MyButton>(myButtonView);
716 Tizen.Log.Debug("NUI", "Downcast to MyButton successful: newButton Name = " + newButton.Name + ", MyOwnName = " + newButton.MyOwnName + ", LabelText = " + myButton.LabelText + ", myCurrentValue = " + newButton._myCurrentValue);
720 Tizen.Log.Debug("NUI", "Downcast to MyButton failed!");
724 // Test downcast for a CustomView
725 Spin spin = new Spin();
726 spin.Name = "SpinName";
727 spin.MaxValue = 8888;
729 Tizen.Log.Debug("NUI", "spin.Name = " + spin.Name + ", MaxValue = " + spin.MaxValue);
733 View spinView = container.FindChildByName("SpinName");
736 Spin newSpin = View.DownCast<Spin>(spinView);
739 Tizen.Log.Debug("NUI", "Downcast to Spin successful: newSpin Name = " + newSpin.Name + ", MaxValue = " + newSpin.MaxValue);
743 Tizen.Log.Debug("NUI", "Downcast to Spin failed!");
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;
754 Tizen.Log.Debug("NUI", "mySpin.Name = " + mySpin.Name + ", MyOwnName = " + mySpin.MyOwnName + ", MaxValue = " + mySpin.MaxValue + ", currentValue = " + mySpin._myCurrentValue);
756 container.Add(mySpin);
758 View mySpinView = container.FindChildByName("MySpinName");
761 MySpin newSpin = View.DownCast<MySpin>(mySpinView);
764 Tizen.Log.Debug("NUI", "Downcast to MySpin successful: newSpin Name = " + newSpin.Name + ", MyOwnName = " + newSpin.MyOwnName + ", MaxValue = " + newSpin.MaxValue + ", currentValue = " + newSpin._myCurrentValue);
768 Tizen.Log.Debug("NUI", "Downcast to MySpin failed!");
775 public void DowncastTest()
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];
781 for (int i = 0; i < 5; i++)
783 childs[i] = new View();
784 childs[i].Name = "child_view_" + i;
785 childs[i].BackgroundColor = Color.Red;
786 parent.Add(childs[i]);
789 for (uint i = 0; i < parent.GetChildCount(); i++)
791 View child = parent.GetChildAt(i);
792 View childView = View.DownCast<View>(child);
795 Tizen.Log.Debug("NUI", "Type[" + childView.GetTypeName() + "] BGColor[" + childView.BackgroundColor.R + "]" + " Name[" + childView.Name + "]");
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));
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);
816 /// The main entry point for the application.
819 static void _Main(string[] args)
821 Tizen.Log.Debug("NUI", "Hello Mono World");
823 Example example = new Example();