예제 #1
0
        public void ViewsHaveMatchingTypeHashCodes()
        {
            var text  = new Text("Foo").GetContentTypeHashCode();
            var text2 = new Text("Bar").GetContentTypeHashCode();

            Assert.Equal(text, text2);

            text = new HStack()
            {
                new Text("Foo"),
            }.GetContentTypeHashCode();

            text2 = new HStack()
            {
                new Text("Bar"),
            }.GetContentTypeHashCode();

            Assert.Equal(text, text2);


            text = new HStack()
            {
                new Text("Foo"),
                new Button("Foo"),
            }.GetContentTypeHashCode();

            text2 = new HStack()
            {
                new Text("Bar"),
                new Button("Bar"),
            }.GetContentTypeHashCode();

            Assert.Equal(text, text2);

            //Not Equal Section

            text = new HStack()
            {
                new Text("Foo"),
            }.GetContentTypeHashCode();

            text2 = new HStack()
            {
                new Button("Bar"),
            }.GetContentTypeHashCode();

            Assert.NotEqual(text, text2);

            text = new HStack()
            {
                new Text("Foo"),
            }.GetContentTypeHashCode();

            text2 = new VStack()
            {
                new Button("Foo"),
            }.GetContentTypeHashCode();

            Assert.NotEqual(text, text2);
        }
예제 #2
0
        private static View CreateConfigurationControls(ITrackParameters trackParameters, IEnumerable <ILayerRenderer> layers)
        {
            var layersGroup = new VStack();

            foreach (ILayerRenderer layer in layers)
            {
                layersGroup.Add(new ToggleButton(layer.Name, layer.Enabled, () => layer.Enabled = !layer.Enabled));
            }
#pragma warning disable CA2000 // Dispose objects before losing scope
            layersGroup.Add(new VStack()
            {
                GetConfigurationControl(trackParameters, nameof(trackParameters.CellSize)),
                GetConfigurationControl(trackParameters, nameof(trackParameters.NumPlanks)),
                GetConfigurationControl(trackParameters, nameof(trackParameters.NumCornerPlanks)),
                GetConfigurationControl(trackParameters, nameof(trackParameters.PlankWidth)),
                GetConfigurationControl(trackParameters, nameof(trackParameters.PlankPadding)),
                GetConfigurationControl(trackParameters, nameof(trackParameters.TrackPadding)),
                GetConfigurationControl(trackParameters, nameof(trackParameters.TrackWidth)),
                GetConfigurationControl(trackParameters, nameof(trackParameters.CornerStepDegrees)),
                GetConfigurationControl(trackParameters, nameof(trackParameters.CornerEdgeOffsetDegrees))
            }.Margin(top: 50)
#pragma warning restore CA2000 // Dispose objects before losing scope
                            );
            return(layersGroup);
        }
예제 #3
0
            View body()
            {
                var view = new VStack()
                {
                    new BorderedEntry(newItem, "Task Name").FillHorizontal().Padding(6),

                    new Button("Add", () =>
                    {
                        if (string.IsNullOrWhiteSpace(newItem.Value))
                        {
                            errorIsVisible.Value = true;
                            return;
                        }

                        items.Add(new TodoItem {
                            Name = newItem.Value
                        });
                        isAdding.Value = false;
                    }),
                    new Button("Cancel", () =>
                    {
                        isAdding.Value = false;
                    }),
                    new Text("Name cannot be empty").Color(errorIsVisible ? Color.Red : Color.Transparent)
                };

                return(view);
            }
예제 #4
0
        public void Test_Min()
        {
            var stack = new VStack <int>();

            stack.Push(2);
            stack.Push(3);
            stack.Push(1);
            stack.Push(4);
            Assert.Equal(1, stack.Min());
        }
예제 #5
0
        private static View CreateConfigurationControls(IEnumerable <ILayerRenderer> layers)
        {
            var layersGroup = new VStack();

            foreach (ILayerRenderer layer in layers)
            {
                layersGroup.Add(new ToggleButton(layer.Name, layer.Enabled, () => layer.Enabled = !layer.Enabled));
            }
            return(layersGroup);
        }
예제 #6
0
        private static View CreateCommandControls(IEnumerable <ICommand> commands)
        {
            var controlsGroup = new VStack();

            foreach (ICommand cmd in commands)
            {
                controlsGroup.Add(new Button(cmd.Name, () => cmd.Execute()));
            }

            return(controlsGroup);
        }
예제 #7
0
        public void BindingMultipleLabelsUpdatesBoth()
        {
            TextField textField = null;
            Text      text      = null;
            VStack    stack     = null;
            var       view      = new StatePage();

            view.text.Value = "Hello";
            int buildCount = 0;

            view.Body = () => {
                buildCount++;
                textField = new TextField(view.text, "Placeholder");
                text      = new Text(view.text.Value);
                stack     = new VStack {
                    textField,
                    text
                };
                //text = new Text ($"{view.text.Value} - {view.clickCount.Value}");
                return(stack);
            };

            var viewHandler = new GenericViewHandler();

            view.ViewHandler = viewHandler;

            var stackHandler = new GenericViewHandler();

            stack.ViewHandler = stackHandler;


            var textFieldHandler = new GenericViewHandler();

            textField.ViewHandler = textFieldHandler;


            var textHandler = new GenericViewHandler();

            text.ViewHandler = textHandler;

            view.text.Value = "Good bye";

            const string tfValue = nameof(TextField.Text);
            const string tValue  = nameof(Text.Value);

            Assert.True(textFieldHandler.ChangedProperties.ContainsKey(tfValue), "TextField Value didnt change");

            Assert.True(textHandler.ChangedProperties.ContainsKey(tValue), "Text Value didnt change");

            var text1Value = textFieldHandler.ChangedProperties [tfValue];
            var text2Value = textHandler.ChangedProperties [tValue];

            Assert.Equal(text1Value, text2Value);
        }
예제 #8
0
        public void Test_Push()
        {
            var stack = new VStack <int>(3);

            stack.Push(0);
            stack.Push(1);
            stack.Push(2);
            stack.Push(3);
            stack.Push(4);
            stack.Push(5);
            Assert.Equal(5, stack.Count());
        }
예제 #9
0
        View body()
        {
            var stack = new VStack {
                new Button
                    (() => myBoolean.Value ? myText.Value : $"State: {myBoolean.Value}",
                    () => myBoolean.Value = !myBoolean.Value),
            };

            for (var i = 0; i < 100; i++)
            {
                stack.Add(new Text(i.ToString()));
            }
            return(new ScrollView {
                stack
            });
        }
예제 #10
0
        public void Test_Pop()
        {
            var stack = new VStack <int>(3);

            stack.Push(0);
            stack.Push(1);
            stack.Push(2);
            Assert.Equal(2, stack.Pop());
            Assert.Equal(1, stack.Pop());
            stack.Push(3);
            stack.Push(4);
            stack.Push(5);
            Assert.Equal(5, stack.Pop());
            Assert.Equal(4, stack.Pop());
            Assert.Equal(3, stack.Pop());
            Assert.Equal(0, stack.Pop());
            Assert.Throws <IndexOutOfRangeException>(() => stack.Pop());
        }
예제 #11
0
        protected void UpdateChildren(VStack stack)
        {
            var children = stack.GetChildren();

            if (views.Count == children.Count)
            {
                bool areSame = false;
                for (var i = 0; i < views.Count; i++)
                {
                    var v = views[i];
                    var c = children[i].ToView();
                    areSame = c == v;
                    if (!areSame)
                    {
                        break;
                    }
                }

                if (areSame)
                {
                    return;
                }
            }

            foreach (var v in views)
            {
                base.RemoveView(v);
            }

            views.Clear();
            foreach (var child in children)
            {
                var cview = child.ToView();
                if (cview != null)
                {
                    views.Add(cview);
                    base.AddView(cview);
                }
            }
        }
예제 #12
0
        View body()
        {
            var stack = new VStack
            {
            };            //.Frame(alignment:Alignment.Top);

            if (report.HandledProperties.Count > 0)
            {
                stack.Add(new Text("Handled Properties").FontSize(30));
                foreach (var prop in report.HandledProperties)
                {
                    stack.Add(new Text(prop).Color(Colors.Green));
                }
            }
            if (report.UnHandledProperties.Count > 0)
            {
                stack.Add(new Text("UnHandled Properties!").FontSize(30));
                foreach (var prop in report.UnHandledProperties)
                {
                    stack.Add(new Text(prop).Color(Colors.Red));
                }
            }
            return(stack);
        }
예제 #13
0
        public MainPage(IGame game, IPixelMapper pixelMapper, IEnumerable <ITool> tools)
        {
            HotReloadHelper.Register(this, game);

            this.Title("Trains.NET");

            this.Body = () =>
            {
                var controlsPanel = new VStack();

                var controlDelegate = new TrainsDelegate(game, pixelMapper);

                foreach (ITool tool in tools)
                {
                    controlsPanel.Add(new Button(tool.Name, () => controlDelegate.CurrentTool = tool));
                }

                return(new HStack()
                {
                    controlsPanel.Frame(100),
                    new DrawableControl(controlDelegate).FillVertical()
                }.FillHorizontal());
            };
        }
예제 #14
0
 public void SetView(View view)
 {
     stack = view as VStack;
     UpdateChildren(stack);
     stack.ChildrenChanged += Stack_ChildrenChanged;
 }