private void Go() { if (runner.ExecutionState == ExecutionState.Stopped) { // Need to start the program... ProgramInteraction.Reset(); ProgramCode.SyncCodeToViewModel(); runner.BeginRun(ProgramCode.Code); Properties.Settings.Default.Code = ProgramCode.Code; // Save for next time } else if (runner.ExecutionState == ExecutionState.Paused) { runner.ExecuteNextLine(); } }
private void Runner_ExecutionStateChanged(object sender, ExecutionStateChangedEventArgs e) { App.Current.Dispatcher.Invoke(() => { switch (e.ExecutionState) { case ExecutionState.Stopped: ProgramCode.HighlightedLineNumber = 0; ProgramInteraction.HideInputPrompt(); break; case ExecutionState.Paused: if (SingleStepMode) { ProgramCode.HighlightedLineNumber = runner.LineNumber; ProgramInteraction.HideInputPrompt(); } else { // Want to run at full speed runner.ExecuteNextLine(); } break; case ExecutionState.Running: if (SingleStepMode) { ProgramCode.HighlightedLineNumber = 0; ProgramInteraction.HideInputPrompt(); } break; case ExecutionState.WaitingForInput: ProgramInteraction.ShowInputPrompt(!string.IsNullOrWhiteSpace(runner.Prompt) ? runner.Prompt : "Please enter your response:"); if (SingleStepMode) { ProgramCode.HighlightedLineNumber = runner.LineNumber; } break; } OnPropertyChanged(nameof(ExecutionState)); GoCommand.RaiseCanExecuteChanged(); StopCommand.RaiseCanExecuteChanged(); }); }
private void ProgramInteraction_Input(object sender, InputEventArgs e) { // The user has sumbitted an answer to the interactive input prompt // So hide the input box ProgramInteraction.HideInputPrompt(); // Show the original prompt (if any) if (!string.IsNullOrWhiteSpace(runner.Prompt)) { ProgramInteraction.OutputText(runner.Prompt.Trim() + " "); } // Show the user's response ProgramInteraction.OutputText(e.Answer + Environment.NewLine); // Submit the user's answer to the Python program, so it can continue runner.SubmitInput(e.Answer); }
private void Runner_ErrorReceived(object sender, RunnerErrorMessageEventArgs e) { App.Current.Dispatcher.Invoke(() => ProgramInteraction.OutputErrorMessage(e.ErrorMessage)); }
private void Runner_OutputReceived(object sender, RunnerOutputEventArgs e) { App.Current.Dispatcher.Invoke(() => ProgramInteraction.OutputText(e.Text)); }