Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The PythonProcessor class from my last post is designed to be hosted in an GUI text editor. I used an Avalon TextBox, as so:
namespace AddInConsole
{
using System;
using System.Globalization;
using System.IO;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
public class ConsolePane : DockPanel
{
private TextBox textBox = null;
private PythonProcessor processor = null;
public ConsolePane()
{
this.textBox = new TextBox();
this.textBox.AcceptsTab = true;
this.textBox.KeyDown += textBox_KeyDown;
this.Children.Add(this.textBox);
TextBoxStream stream = new TextBoxStream(this.textBox);
this.processor = new PythonProcessor(stream);
}
public PythonProcessor Processor
{
get
{
return this.processor;
}
}
void textBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == Key.Return)
{
string line = this.textBox.GetLineText(this.textBox.LineCount - 1);
this.Write("\n");
if (this.processor.EvaluateLine(line))
{
this.Write("\n");
}
}
}
internal void Clear()
{
if (this.textBox != null)
{
this.textBox.Text = string.Empty;
}
}
internal void Write(string run)
{
bool cursorIsAtEnd = false;
if (this.textBox.SelectionStart == this.textBox.Text.Length)
{
cursorIsAtEnd = true;
}
this.textBox.AppendText(run);
if (cursorIsAtEnd)
{
this.textBox.Select(this.textBox.Text.Length, 0);
this.textBox.ScrollToEnd();
}
}
internal void WriteLine(string line)
{
this.Write(line + "\n");
}
}
}