diff --git a/UICatalog/Scenarios/ComputedLayout.cs b/UICatalog/Scenarios/ComputedLayout.cs index e2ac0541ce..d9078a3710 100644 --- a/UICatalog/Scenarios/ComputedLayout.cs +++ b/UICatalog/Scenarios/ComputedLayout.cs @@ -199,6 +199,101 @@ public override void Setup () Win.Add (rightButton); } + /// + /// Displays a Dialog that uses a wizard (next/prev) idom to step through each class derived from View + /// testing various Computed layout scenarios + /// + private void DemoAllViewClasses () + { + List GetAllViewClassesCollection () + { + List objects = new List (); + foreach (Type type in typeof (View).Assembly.GetTypes () + .Where (myType => myType.IsClass && !myType.IsAbstract && myType.IsPublic && myType.IsSubclassOf (typeof (View)))) { + objects.Add (type); + } + return objects; + } + + var viewClasses = GetAllViewClassesCollection ().OrderByDescending (c => c.Name).ToList (); + var curClass = 0; + + var closeBtn = new Button ("_Close") { + Clicked = () => { + Application.RequestStop (); + }, + }; + var nextBtn = new Button ("_Next"); + var prevBtn = new Button ("_Previous"); + var dialog = new Dialog ("Demoing all View classs", new [] { prevBtn, nextBtn, closeBtn }); + + var label = new Label ("Class:") { + X = 0, + Y = 0, + }; + dialog.Add (label); + var currentClassLabel = new Label ("") { + X = Pos.Right (label) + 1, + Y = Pos.Y (label), + }; + dialog.Add (currentClassLabel); + + View curView = null; + void SetCurrentClass () + { + currentClassLabel.Text = $"{viewClasses [curClass].Name}"; + + // Remove existing class, if any + if (curView != null) { + dialog.Remove (curView); + curView = null; + } + + // Instantiate view + curView = (View)Activator.CreateInstance (viewClasses [curClass]); + + curView.X = Pos.Center (); + curView.Y = Pos.Center (); + curView.Width = Dim.Fill (5); + curView.Height = Dim.Fill (5); + + // If the view supports a Text property, set it so we have something to look at + if (viewClasses [curClass].GetProperty("Text") != null) { + curView.GetType ().GetProperty ("Text")?.GetSetMethod ()?.Invoke (curView, new [] { ustring.Make("09/10/1966") }); + } + + // If the view supports a Title property, set it so we have something to look at + if (viewClasses [curClass].GetProperty ("Title") != null) { + curView.GetType ().GetProperty ("Title")?.GetSetMethod ()?.Invoke (curView, new [] { ustring.Make ("Test Title") }); + } + + + dialog.Add (curView); + dialog.LayoutSubviews (); + } + + nextBtn.Clicked = () => { + curClass++; + if (curClass >= viewClasses.Count) { + curClass = 0; + } + SetCurrentClass (); + }; + + prevBtn.Clicked = () => { + if (curClass == 0) { + curClass = viewClasses.Count - 1; + } else { + curClass--; + } + SetCurrentClass (); + }; + + SetCurrentClass (); + + Application.Run (dialog); + } + public override void Run () { base.Run ();