public SnakesAndLaddersMainView(IEventAggregator aggregator, TestOptions test, SnakesAndLaddersMainGameClass mainGame, SnakesAndLaddersVMData model ) { _aggregator = aggregator; _mainGame = mainGame; _model = model; _aggregator.Subscribe(this); StackLayout mainStack = new StackLayout(); ParentSingleUIContainer?restoreP = null; if (test.SaveOption == EnumTestSaveCategory.RestoreOnly) { restoreP = new ParentSingleUIContainer(nameof(SnakesAndLaddersMainViewModel.RestoreScreen)); } _privateBoard = new GameboardXF(); _privateBoard.Margin = new Thickness(5, 5, 5, 5); _privateBoard.HorizontalOptions = LayoutOptions.Start; _privateBoard.VerticalOptions = LayoutOptions.Start; mainStack.Children.Add(_privateBoard); var thisRoll = GetGamingButton("Roll Dice", nameof(SnakesAndLaddersMainViewModel.RollDiceAsync)); StackLayout otherStack = new StackLayout(); otherStack.Orientation = StackOrientation.Horizontal; _diceControl = new DiceListControlXF <SimpleDice>(); otherStack.Children.Add(thisRoll); _pieceTurn = new GamePieceXF(); if (ScreenUsed == EnumScreen.SmallPhone) { _pieceTurn.WidthRequest = 40; _pieceTurn.HeightRequest = 40; } else { _pieceTurn.WidthRequest = 90; _pieceTurn.HeightRequest = 90; } _pieceTurn.Margin = new Thickness(10, 0, 0, 0); _pieceTurn.NeedsSubscribe = false; // won't notify in this case. just let them know when new turn. otherwise, when this number changes, it will trigger for the gameboard (which is not good) _pieceTurn.Init(); otherStack.Children.Add(_pieceTurn); otherStack.Children.Add(_diceControl); mainStack.Children.Add(otherStack); SimpleLabelGridXF firstInfo = new SimpleLabelGridXF(); firstInfo.AddRow("Turn", nameof(SnakesAndLaddersMainViewModel.NormalTurn)); firstInfo.AddRow("Status", nameof(SnakesAndLaddersMainViewModel.Status)); mainStack.Children.Add(firstInfo.GetContent); if (restoreP != null) { //todo: figure out where to place the restore ui if there is a restore option. mainStack.Children.Add(restoreP); //default add to grid but does not have to. } Content = mainStack; }
public MinesweeperMainView(IEventAggregator aggregator, MinesweeperMainGameClass game) { _aggregator = aggregator; _aggregator.Subscribe(this); Grid grid = new Grid(); AddLeftOverColumn(grid, 1); //well see how this works (?) AddLeftOverColumn(grid, 1); GameboardXF gameboard = new GameboardXF(game); AddControlToGrid(grid, gameboard, 0, 0); _gameboard = gameboard; StackLayout stack = new StackLayout(); SimpleLabelGridXF thisLab = new SimpleLabelGridXF(); thisLab.AddRow("Mines Needed", nameof(MinesweeperMainViewModel.HowManyMinesNeeded)); thisLab.AddRow("Mines Left", nameof(MinesweeperMainViewModel.NumberOfMinesLeft)); thisLab.AddRow("Level Chosen", nameof(MinesweeperMainViewModel.LevelChosen)); //hopefully this simple (?) //i do like the buttons first. Button button = GetGamingButton("", nameof(MinesweeperMainViewModel.ChangeFlag)); Binding binding = new Binding(nameof(MinesweeperMainViewModel.IsFlagging)); IValueConverter converter = new ToggleNameConverter(); binding.Converter = converter; button.SetBinding(Button.TextProperty, binding); binding = new Binding(nameof(MinesweeperMainViewModel.IsFlagging)); converter = new ToggleColorConverter(); binding.Converter = converter; button.SetBinding(BackgroundColorProperty, binding); stack.Children.Add(button); button.Margin = new Thickness(5); button.HorizontalOptions = LayoutOptions.Start; button.VerticalOptions = LayoutOptions.Start; stack.Children.Add(thisLab.GetContent); AddControlToGrid(grid, stack, 0, 1); Content = grid; }