public MainViewModel(ILogger <MainViewModel> logger, IAcmePdbParser acmePdbParser, Globals globals, IDispatcher dispatcher, ISettingsManager settingsManager, ErrorMessagesViewModel errorMessagesViewModel, IServiceScope scope, IViceBridge viceBridge, IProjectPrgFileWatcher projectPdbFileWatcher, RegistersMapping registersMapping, RegistersViewModel registers, ExecutionStatusViewModel executionStatusViewModel, BreakpointsViewModel breakpointsViewModel) { this.logger = logger; this.acmePdbParser = acmePdbParser; this.Globals = globals; this.dispatcher = dispatcher; this.settingsManager = settingsManager; this.scope = scope; this.viceBridge = viceBridge; this.projectPdbFileWatcher = projectPdbFileWatcher; this.executionStatusViewModel = executionStatusViewModel; RegistersViewModel = registers; BreakpointsViewModel = breakpointsViewModel; executionStatusViewModel.PropertyChanged += ExecutionStatusViewModel_PropertyChanged; uiFactory = new TaskFactory(TaskScheduler.FromCurrentSynchronizationContext()); commandsManager = new CommandsManager(this, uiFactory); closeOverlaySubscription = dispatcher.Subscribe <CloseOverlayMessage>(CloseOverlay); prgFileChangedSubscription = dispatcher.Subscribe <PrgFileChangedMessage>(PrgFileChanged); prgFilePathChangedSubscription = dispatcher.Subscribe <PrgFilePathChangedMessage>(PrgFilePathChanged); showModalDialogMessageSubscription = dispatcher.Subscribe <ShowModalDialogMessageCore>(OnShowModalDialog); ErrorMessagesViewModel = errorMessagesViewModel; ShowSettingsCommand = commandsManager.CreateRelayCommand(ShowSettings, () => !IsShowingSettings); ShowProjectCommand = commandsManager.CreateRelayCommand(ShowProject, () => !IsShowingProject && IsProjectOpen); TestCommand = commandsManager.CreateRelayCommand(Test, () => !IsBusy); CreateProjectCommand = commandsManager.CreateRelayCommand(CreateProject, () => !IsBusy && !IsDebugging); OpenProjectFromPathCommand = commandsManager.CreateRelayCommand <string>(OpenProjectFromPath, _ => !IsBusy && !IsDebugging); OpenProjectCommand = commandsManager.CreateRelayCommand(OpenProject, () => !IsBusy && !IsDebugging); globals.PropertyChanged += Globals_PropertyChanged; CloseProjectCommand = commandsManager.CreateRelayCommand(CloseProject, () => IsProjectOpen && !IsDebugging); ExitCommand = new RelayCommand(() => CloseApp?.Invoke()); ToggleErrorsVisibilityCommand = new RelayCommand(() => IsShowingErrors = !IsShowingErrors); RunCommand = commandsManager.CreateRelayCommandAsync(StartDebuggingAsync, () => IsProjectOpen && (!IsDebugging || IsDebuggingPaused)); StopCommand = commandsManager.CreateRelayCommand(StopDebugging, () => IsDebugging); PauseCommand = commandsManager.CreateRelayCommand(PauseDebugging, () => IsDebugging && !IsDebuggingPaused && IsViceConnected); StepIntoCommand = commandsManager.CreateRelayCommandAsync(StepIntoAsync, () => IsDebugging && IsDebuggingPaused); StepOverCommand = commandsManager.CreateRelayCommandAsync(StepOverAsync, () => IsDebugging && IsDebuggingPaused); UpdatePdbCommand = commandsManager.CreateRelayCommandAsync(UpdatePdbAsync, () => !IsBusy && IsDebugging); SwitchContent <DebuggerViewModel>(); // by default opens most recent project if (globals.Settings.RecentProjects.Count > 0) { OpenProjectFromPath(globals.Settings.RecentProjects[0]); } stoppedExecution = new TaskCompletionSource(); resumedExecution = new TaskCompletionSource(); viceBridge.ConnectedChanged += ViceBridge_ConnectedChanged; viceBridge.ViceResponse += ViceBridge_ViceResponse; viceBridge.Start(); requiresBreakpointsRefresh = true; if (!Directory.Exists(globals.Settings.VicePath)) { SwitchOverlayContent <SettingsViewModel>(); } }
public RegistersViewModel(ILogger <RegistersViewModel> logger, IViceBridge viceBridge, RegistersMapping mapping, IDispatcher dispatcher) { this.logger = logger; this.viceBridge = viceBridge; this.mapping = mapping; this.dispatcher = dispatcher; uiFactory = new TaskFactory(TaskScheduler.FromCurrentSynchronizationContext()); commandsManager = new CommandsManager(this, new TaskFactory(TaskScheduler.FromCurrentSynchronizationContext())); viceBridge.ViceResponse += ViceBridge_ViceResponse; UpdateCommand = commandsManager.CreateRelayCommandAsync(Update, () => !IsLoadingMappings && IsLoadingRegisters); }