public ShowTableDialog(GridData data) { m_Data = data; m_NormalizedData = NormalizeData(data); InitializeComponent(); this.DataContext = this; VisualTypeSelector = new SelectorCommand("Table"); VisualTypeSelector.SelectionChanged += (sender, args) => { switch (VisualTypeSelector.SelectedValue) { case "Table": VisualizationPresenter.Visualization = GridDataVisualizationProvider.Table().ProvideVisualization(m_Data); break; case "2D": VisualizationPresenter.Visualization = GridDataVisualizationProvider.Color().ProvideVisualization(m_NormalizedData); break; case "3D": VisualizationPresenter.Visualization = GridDataVisualizationProvider.Model3D(m_Data.Size).ProvideVisualization(m_NormalizedData); break; } }; TitleTb.Text = $"Таблица: {m_Data.Size.Height} на {m_Data.Size.Width}"; VisualTypeSelector.RaiseSelectionChanged(); }
public PrTabViewModel(SimulationOptions simulationOptions) : base("ІПРАЙ") { var logger = Logger.New(typeof(PrTabViewModel)); using (logger.LogPerf("Init")) { m_SimulationOptions = simulationOptions; m_Simulator = new PrSimulator(m_SimulationOptions); m_VisualizationProvider = GridDataVisualizationProvider.Table(); m_Player = new Player(() => { using (logger.LogPerf("Step simulation")) { m_Simulator.SimulateSteps(); } }, () => { using (logger.LogPerf("Auto simulation")) { m_Simulator.SimulateSteps(5); } }, () => { UpdateVisualization.Execute().Subscribe(); }, TimeSpan.FromMilliseconds(10), DispatcherPriority.ContextIdle); UpdateVisualization = ReactiveCommand.Create(() => { using (logger.LogPerf("Visualization")) { Visualization = m_VisualizationProvider.ProvideVisualization(m_Simulator.GetData()); SimulationInfo = m_Simulator.SimulationInfo; } }); var notRunningOrPlaying = m_Player.WhenAny(x => x.RunningOrPlaying, r => !r.Value); var notSingleStepRunning = m_Player.WhenAny(x => x.SingleStepRunning, r => !r.Value); Step = ReactiveCommand.Create(() => { m_Player.StepOnce(); }, notRunningOrPlaying); PlayPause = new ReactivePlayPauseCommand("Програти", "Пауза", notSingleStepRunning); PlayPause.Subscribe(p => { if (p) { m_Player.Start(); } else { m_Player.Stop(); } }); Restart = ReactiveCommand.Create(() => { m_Simulator.Reset(); }, notRunningOrPlaying); Restart.InvokeCommand(UpdateVisualization); VisualTypeSelector = new ReactiveSelectorCommand <string>(x => (string)x, "Table"); VisualTypeSelector.Selected .Subscribe(option => { switch (option) { case "Table": m_VisualizationProvider = GridDataVisualizationProvider.Table(); break; case "2D": m_VisualizationProvider = GridDataVisualizationProvider.Color(); break; case "3D": m_VisualizationProvider = GridDataVisualizationProvider.Model3D(m_SimulationOptions.Size); break; } }); VisualTypeSelector.Selected .ToSignal() .InvokeCommand(UpdateVisualization); OpenSimulationOptions = ReactiveCommand.Create(() => { SimulationOptionsDialog dialog = new SimulationOptionsDialog(m_SimulationOptions); dialog.ShowDialog(); if (!dialog.DialogResult.GetValueOrDefault(false)) { return; } m_SimulationOptions = dialog.SimulationOptions; m_Simulator = new PrSimulator(m_SimulationOptions); m_VisualizationProvider = m_VisualizationProvider.Copy(m_SimulationOptions.Size); }, notRunningOrPlaying); OpenSimulationOptions .InvokeCommand(UpdateVisualization); ExportToCsv = ReactiveCommand.Create(() => { SaveFileDialog saveFileDialog = new SaveFileDialog() { Filter = "Файл CSV (*.csv)|*.csv" }; if (saveFileDialog.ShowDialog(Application.Current.MainWindow).GetValueOrDefault()) { CsvUtil.ExportToFile(m_Simulator.GetData(), saveFileDialog.FileName); } }); Settings.SettingsChange .InvokeCommand(UpdateVisualization); Settings.SettingsChange .Subscribe(_ => { Pallete = Settings.Current.VisualizationOptions.Pallete; }); Pallete = Settings.Current.VisualizationOptions.Pallete; } }