-
Notifications
You must be signed in to change notification settings - Fork 25
Expand file tree
/
Copy pathIronPythonConsole.xaml.cs
More file actions
136 lines (120 loc) · 4.65 KB
/
IronPythonConsole.xaml.cs
File metadata and controls
136 lines (120 loc) · 4.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
using ICSharpCode.AvalonEdit;
using ICSharpCode.AvalonEdit.Highlighting;
using System.IO;
using System.Windows;
using System.Windows.Input;
using System.Xml;
using KeyEventArgs = System.Windows.Input.KeyEventArgs;
using KeyEventHandler = System.Windows.Input.KeyEventHandler;
using OpenFileDialog = Microsoft.Win32.OpenFileDialog;
using SaveFileDialog = Microsoft.Win32.SaveFileDialog;
namespace CADPythonShell
{
/// <summary>
/// Interaction logic for IronPythonConsole.xaml
/// </summary>
public partial class IronPythonConsole : Window
{
private ConsoleOptions consoleOptionsProvider;
// this is the name of the file currently being edited in the pad
private string currentFileName;
public IronPythonConsole()
{
Initialized += new EventHandler(MainWindow_Initialized);
IHighlightingDefinition pythonHighlighting;
using (Stream s = typeof(IronPythonConsole).Assembly.GetManifestResourceStream("CADPythonShell.Resources.Python.xshd"))
{
if (s == null)
throw new InvalidOperationException("Could not find embedded resource");
using (XmlReader reader = new XmlTextReader(s))
{
pythonHighlighting = ICSharpCode.AvalonEdit.Highlighting.Xshd.
HighlightingLoader.Load(reader, HighlightingManager.Instance);
}
}
// and register it in the HighlightingManager
HighlightingManager.Instance.RegisterHighlighting("Python Highlighting", new string[] { ".cool" }, pythonHighlighting);
InitializeComponent();
textEditor.SyntaxHighlighting = pythonHighlighting;
textEditor.PreviewKeyDown += new KeyEventHandler(textEditor_PreviewKeyDown);
consoleOptionsProvider = new ConsoleOptions(consoleControl.Pad);
}
private void MainWindow_Initialized(object sender, EventArgs e)
{
//propertyGridComboBox.SelectedIndex = 1;
}
private void openFileClick(object sender, RoutedEventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.CheckFileExists = true;
if (dlg.ShowDialog() ?? false)
{
currentFileName = dlg.FileName;
textEditor.Load(currentFileName);
//textEditor.SyntaxHighlighting = HighlightingManager.Instance.GetDefinitionByExtension(Path.GetExtension(currentFileName));
}
}
private void newFileClick(object sender, RoutedEventArgs e)
{
currentFileName = null;
textEditor.Text = string.Empty;
}
private void saveFileClick(object sender, EventArgs e)
{
SaveFile();
}
private void saveAsFileClick(object sender, EventArgs e)
{
currentFileName = null;
SaveFile();
}
private void SaveFile()
{
if (currentFileName == null)
{
SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = "Save Files (*.py)|*.py";
dlg.DefaultExt = "py";
dlg.AddExtension = true;
if (dlg.ShowDialog() ?? false)
{
currentFileName = dlg.FileName;
}
else
{
return;
}
}
textEditor.Save(currentFileName);
}
private void runClick(object sender, EventArgs e)
{
RunStatements();
}
private void textEditor_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.F5) RunStatements();
}
private void RunStatements()
{
string statementsToRun = "";
if (textEditor.TextArea.Selection.Length > 0)
statementsToRun = textEditor.TextArea.Selection.GetText();
else
statementsToRun = textEditor.TextArea.Document.Text;
consoleControl.Pad.Console.RunStatements(statementsToRun);
}
// Clear the contents on first click inside the editor
private void textEditor_GotFocus(object sender, RoutedEventArgs e)
{
if (this.currentFileName == null)
{
TextEditor tb = (TextEditor)sender;
tb.Text = string.Empty;
// Remove the handler from the list otherwise this handler will clear
// editor contents every time the editor gains focus.
tb.GotFocus -= textEditor_GotFocus;
}
}
}
}