private void TryShowScreen(NavigationRequestNode navigationNode) { ShowScreenData showScreenData = navigationNode.requestShowScreen.Event.ShowScreenData; ScreensRegistryComponent screensRegistry = navigationNode.screensRegistry; GameObject nonActiveScreen = this.GetNonActiveScreen(showScreenData.ScreenType, screensRegistry); if (nonActiveScreen == null) { if (this.GetActiveScreen(showScreenData.ScreenType, screensRegistry) != null) { navigationNode.Entity.RemoveComponent <RequestShowScreenComponent>(); } else { base.Log.WarnFormat("Skip remove RequestShowScreenComponent {0}", navigationNode.requestShowScreen.Event.ShowScreenData.ScreenType.Name); } } else { navigationNode.Entity.RemoveComponent <RequestShowScreenComponent>(); CurrentScreenComponent currentScreen = navigationNode.currentScreen; HistoryComponent history = navigationNode.history; GameObject hidingScreen = null; if (currentScreen.screen != null) { hidingScreen = this.GetActiveScreen(currentScreen.showScreenData.ScreenType, navigationNode.screensRegistry); currentScreen.screen.RemoveComponent <ActiveScreenComponent>(); currentScreen.screen.AddComponent <ScreenHidingComponent>(); if (hidingScreen.GetComponent <ScreenComponent>().LogInHistory) { ShowScreenData t = currentScreen.showScreenData.InvertAnimationDirection(showScreenData.AnimationDirection); Stack <ShowScreenData> screens = history.screens; if ((screens.Count > 0) && ReferenceEquals(screens.Peek().ScreenType, t.ScreenType)) { screens.Pop(); } screens.Push(t); if (t.Context != null) { t.Context.RemoveComponent <ScreenGroupComponent>(); } } } this.ActivateShowingScreen(nonActiveScreen, hidingScreen, showScreenData, currentScreen); } }
public CounterPage() { InitializeComponent(); // Observe changes on state Store.Select(SelectCount) .Subscribe(count => { CounterValueTextBlock.Text = count.ToString(); }); // Observe UI events IncrementButton.Events().Click .Subscribe(_ => Store.Dispatch(new IncrementAction())); DecrementButton.Events().Click .Subscribe(_ => Store.Dispatch(new DecrementAction())); // Initialize Components HistoryComponent.Initialize(Store); // Initialize Documentation DocumentationComponent.LoadMarkdownFilesAsync("Counter"); GoToGitHubButton.Events().Click .Subscribe(async _ => { var uri = new Uri("https://github.com/Odonno/ReduxSimple/tree/master/ReduxSimple.Samples/Counter"); await Launcher.LaunchUriAsync(uri); }); ContentGrid.Events().Tapped .Subscribe(_ => DocumentationComponent.Collapse()); DocumentationComponent.ObserveOnExpanded() .Subscribe(_ => ContentGrid.Blur(5).Start()); DocumentationComponent.ObserveOnCollapsed() .Subscribe(_ => ContentGrid.Blur(0).Start()); }
public TicTacToePage() { InitializeComponent(); // Get UI Elements var cellsGrids = CellsRootGrid.Children; // Observe changes on state Store.Select( CombineSelectors(SelectGameEnded, SelectWinner) ) .Subscribe(x => { var(gameEnded, winner) = x; YourTurnTextBlock.HideIf(gameEnded); StartNewGameButton.ShowIf(gameEnded); EndGameTextBlock.ShowIf(gameEnded); if (gameEnded) { if (winner.HasValue) { EndGameTextBlock.Text = $"{winner.Value} won!"; } else { EndGameTextBlock.Text = "It's a tie!"; } } }); Store.Select(SelectCells) .Subscribe(cells => { for (int i = 0; i < cells.Length; i++) { var cellGrid = cellsGrids[i] as Grid; var textBlock = cellGrid.Children[0] as TextBlock; if (cells[i].Mine.HasValue) { textBlock.Text = cells[i].Mine.Value ? "O" : "X"; } else { textBlock.Text = string.Empty; } } }); // Observe UI events foreach (Grid cellGrid in cellsGrids) { cellGrid.Events().Tapped .Select(e => { var grid = e.OriginalSource as Grid; return(new { Row = Grid.GetRow(grid), Column = Grid.GetColumn(grid) }); }) .Where(x => { var cell = Store.State.TicTacToe.Cells.First(c => c.Row == x.Row && c.Column == x.Column); return(!Store.State.TicTacToe.GameEnded && !cell.Mine.HasValue); }) .Subscribe(x => { Store.Dispatch(new PlayAction { Row = x.Row, Column = x.Column }); }); } StartNewGameButton.Events().Click .Subscribe(_ => Store.Dispatch(new StartNewGameAction())); // Initialize Components HistoryComponent.Initialize(Store); // Initialize Documentation DocumentationComponent.LoadMarkdownFilesAsync("TicTacToe"); GoToGitHubButton.Events().Click .Subscribe(async _ => { var uri = new Uri("https://github.com/Odonno/ReduxSimple/tree/master/ReduxSimple.Samples/TicTacToe"); await Launcher.LaunchUriAsync(uri); }); ContentGrid.Events().Tapped .Subscribe(_ => DocumentationComponent.Collapse()); DocumentationComponent.ObserveOnExpanded() .Subscribe(_ => ContentGrid.Blur(5).Start()); DocumentationComponent.ObserveOnCollapsed() .Subscribe(_ => ContentGrid.Blur(0).Start()); }
public TodoListPage() { InitializeComponent(); // Create backend properties var advancedCollectionView = new AdvancedCollectionView(); advancedCollectionView.SortDescriptions.Add(new SortDescription("Id", SortDirection.Ascending)); var selectedButtonStyle = App.Current.Resources["SelectedButtonStyle"] as Style; // Observe changes on state Store.Select(SelectFilter) .Subscribe(filter => { switch (filter) { case TodoFilter.All: advancedCollectionView.Filter = (_ => true); break; case TodoFilter.Todo: advancedCollectionView.Filter = (x => !((TodoItem)x).Completed); break; case TodoFilter.Completed: advancedCollectionView.Filter = (x => ((TodoItem)x).Completed); break; } FilterAllButton.Style = (filter == TodoFilter.All) ? selectedButtonStyle : null; FilterTodoButton.Style = (filter == TodoFilter.Todo) ? selectedButtonStyle : null; FilterCompletedButton.Style = (filter == TodoFilter.Completed) ? selectedButtonStyle : null; }); Store.Select(SelectItems) .Subscribe(items => { if (TodoItemsListView.ItemsSource != advancedCollectionView) { TodoItemsListView.ItemsSource = advancedCollectionView; } advancedCollectionView.Source = items; }); // Observe UI events FilterAllButton.Events().Click .Subscribe(_ => Store.Dispatch(new SetFilterAction { Filter = TodoFilter.All })); FilterTodoButton.Events().Click .Subscribe(_ => Store.Dispatch(new SetFilterAction { Filter = TodoFilter.Todo })); FilterCompletedButton.Events().Click .Subscribe(_ => Store.Dispatch(new SetFilterAction { Filter = TodoFilter.Completed })); AddNewItemButton.Events().Click .Subscribe(_ => Store.Dispatch(new CreateTodoItemAction())); // Initialize Components HistoryComponent.Initialize(Store); // Initialize Documentation DocumentationComponent.LoadMarkdownFilesAsync("TodoList"); GoToGitHubButton.Events().Click .Subscribe(async _ => { var uri = new Uri("https://github.com/Odonno/ReduxSimple/tree/master/ReduxSimple.Samples/TodoList"); await Launcher.LaunchUriAsync(uri); }); ContentGrid.Events().Tapped .Subscribe(_ => DocumentationComponent.Collapse()); DocumentationComponent.ObserveOnExpanded() .Subscribe(_ => ContentGrid.Blur(5).Start()); DocumentationComponent.ObserveOnCollapsed() .Subscribe(_ => ContentGrid.Blur(0).Start()); }
public PokedexPage() { InitializeComponent(); // Observe changes on state Store.Select( CombineSelectors(SelectLoading, SelectIsPokedexEmpty) ) .ObserveOnDispatcher() .Subscribe(x => { var(loading, isPokedexEmpty) = x; OpenPokedexButton.ShowIf(!loading && isPokedexEmpty); GlobalLoadingProgressRing.IsActive = loading && isPokedexEmpty; GlobalLoadingProgressRing.ShowIf(loading && isPokedexEmpty); RootStackPanel.ShowIf(!isPokedexEmpty); }); Store.Select(SelectSuggestions, 5) .ObserveOnDispatcher() .Subscribe(suggestions => { AutoSuggestBox.ItemsSource = suggestions; }); Store.Select(SelectPokemon) .ObserveOnDispatcher() .Subscribe(pokemon => { PokemonPanel.ShowIf(pokemon.HasValue); PokemonIdTextBlock.Text = pokemon.HasValue ? $"#{pokemon.Value.Id}" : string.Empty; PokemonNameTextBlock.Text = pokemon.HasValue ? pokemon.Value.Name : string.Empty; PokemonImage.Source = pokemon.HasValue ? new BitmapImage(new Uri(pokemon.Value.Image)) : null; }); Store.Select(SelectErrors) .ObserveOnDispatcher() .Subscribe(errors => { ErrorsListView.ItemsSource = errors; }); // Observe UI events OpenPokedexButton.Events().Click .ObserveOnDispatcher() .Subscribe(_ => Store.Dispatch(new GetPokemonListAction())); AutoSuggestBox.Events().TextChanged .ObserveOnDispatcher() .Subscribe(_ => { Store.Dispatch(new UpdateSearchStringAction { Search = AutoSuggestBox.Text }); }); AutoSuggestBox.Events().SuggestionChosen .ObserveOnDispatcher() .Subscribe(e => { var selectedPokemonOption = (e.SelectedItem as PokemonGeneralInfo).ToOption(); if (selectedPokemonOption.HasValue) { AutoSuggestBox.Text = selectedPokemonOption.Value.Name; // Avoid the automatic change of the Text property of SuggestBox Store.Dispatch(new UpdateSearchStringAction { Search = selectedPokemonOption.Value.Name }); } }); // Register Effects Store.RegisterEffects( LoadPokemonList, LoadPokemonById, SearchPokemon ); // Initialize Components HistoryComponent.Initialize(Store); // Initialize Documentation DocumentationComponent.LoadMarkdownFilesAsync("Pokedex"); GoToGitHubButton.Events().Click .Subscribe(async _ => { var uri = new Uri("https://github.com/Odonno/ReduxSimple/tree/master/ReduxSimple.Samples/Pokedex"); await Launcher.LaunchUriAsync(uri); }); ContentGrid.Events().Tapped .Subscribe(_ => DocumentationComponent.Collapse()); DocumentationComponent.ObserveOnExpanded() .Subscribe(_ => ContentGrid.Blur(5).Start()); DocumentationComponent.ObserveOnCollapsed() .Subscribe(_ => ContentGrid.Blur(0).Start()); }