Changeset 10731
- Timestamp:
- 04/08/14 23:28:40 (11 years ago)
- Location:
- trunk/sources
- Files:
-
- 4 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj
r10510 r10731 86 86 <ItemGroup> 87 87 <None Include="Plugin.cs.frame" /> 88 <Compile Include="CSharpScriptView.cs"> 89 <SubType>UserControl</SubType> 90 </Compile> 91 <Compile Include="CSharpScriptView.Designer.cs"> 92 <DependentUpon>CSharpScriptView.cs</DependentUpon> 93 </Compile> 88 94 <Compile Include="ScriptView.cs"> 89 95 <SubType>UserControl</SubType> -
trunk/sources/HeuristicLab.Scripting.Views/3.3/ScriptView.Designer.cs
r10506 r10731 46 46 private void InitializeComponent() { 47 47 this.components = new System.ComponentModel.Container(); 48 System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ScriptView)); 48 49 this.compilationLabel = new System.Windows.Forms.Label(); 49 this.startStopButton = new System.Windows.Forms.Button(); 50 this.imageList = new System.Windows.Forms.ImageList(this.components); 51 this.compileButton = new System.Windows.Forms.Button(); 52 this.infoTabControl = new System.Windows.Forms.TabControl(); 53 this.errorListTabPage = new System.Windows.Forms.TabPage(); 50 54 this.errorListView = new System.Windows.Forms.ListView(); 51 55 this.iconColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); … … 55 59 this.columnColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 56 60 this.descriptionColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 57 this.imageList = new System.Windows.Forms.ImageList(this.components); 61 this.outputTabPage = new System.Windows.Forms.TabPage(); 62 this.outputTextBox = new System.Windows.Forms.TextBox(); 58 63 this.codeEditor = new HeuristicLab.CodeEditor.CodeEditor(); 59 64 this.splitContainer1 = new System.Windows.Forms.SplitContainer(); 60 this.splitContainer2 = new System.Windows.Forms.SplitContainer();61 this.infoTabControl = new System.Windows.Forms.TabControl();62 this.outputTabPage = new System.Windows.Forms.TabPage();63 this.outputTextBox = new System.Windows.Forms.TextBox();64 this.errorListTabPage = new System.Windows.Forms.TabPage();65 this.variableStoreView = new HeuristicLab.Scripting.Views.VariableStoreView();66 this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();67 this.compileButton = new System.Windows.Forms.Button();68 65 ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit(); 66 this.infoTabControl.SuspendLayout(); 67 this.errorListTabPage.SuspendLayout(); 68 this.outputTabPage.SuspendLayout(); 69 69 ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); 70 70 this.splitContainer1.Panel1.SuspendLayout(); 71 71 this.splitContainer1.Panel2.SuspendLayout(); 72 72 this.splitContainer1.SuspendLayout(); 73 ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();74 this.splitContainer2.Panel1.SuspendLayout();75 this.splitContainer2.Panel2.SuspendLayout();76 this.splitContainer2.SuspendLayout();77 this.infoTabControl.SuspendLayout();78 this.outputTabPage.SuspendLayout();79 this.errorListTabPage.SuspendLayout();80 73 this.SuspendLayout(); 81 74 // … … 84 77 this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft); 85 78 this.errorProvider.SetIconPadding(this.nameTextBox, 2); 86 this.nameTextBox.Location = new System.Drawing.Point(6 0, 0);87 this.nameTextBox.Size = new System.Drawing.Size(7 50, 20);79 this.nameTextBox.Location = new System.Drawing.Point(69, 0); 80 this.nameTextBox.Size = new System.Drawing.Size(741, 20); 88 81 // 89 82 // infoLabel … … 101 94 this.compilationLabel.Text = "Not compiled"; 102 95 // 103 // startStopButton 104 // 105 this.startStopButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Play; 106 this.startStopButton.Location = new System.Drawing.Point(36, 26); 107 this.startStopButton.Name = "startStopButton"; 108 this.startStopButton.Size = new System.Drawing.Size(24, 24); 109 this.startStopButton.TabIndex = 1; 110 this.startStopButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; 111 this.toolTip.SetToolTip(this.startStopButton, "Run (F5)"); 112 this.startStopButton.UseVisualStyleBackColor = true; 113 this.startStopButton.Click += new System.EventHandler(this.startStopButton_Click); 96 // imageList 97 // 98 this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit; 99 this.imageList.ImageSize = new System.Drawing.Size(16, 16); 100 this.imageList.TransparentColor = System.Drawing.Color.Transparent; 101 // 102 // compileButton 103 // 104 this.compileButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Script; 105 this.compileButton.Location = new System.Drawing.Point(6, 26); 106 this.compileButton.Name = "compileButton"; 107 this.compileButton.Size = new System.Drawing.Size(24, 24); 108 this.compileButton.TabIndex = 8; 109 this.compileButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; 110 this.toolTip.SetToolTip(this.compileButton, "Compile (F6)"); 111 this.compileButton.UseVisualStyleBackColor = true; 112 this.compileButton.Click += new System.EventHandler(this.CompileButtonOnClick); 113 // 114 // infoTabControl 115 // 116 this.infoTabControl.Controls.Add(this.outputTabPage); 117 this.infoTabControl.Controls.Add(this.errorListTabPage); 118 this.infoTabControl.Dock = System.Windows.Forms.DockStyle.Fill; 119 this.infoTabControl.Location = new System.Drawing.Point(0, 0); 120 this.infoTabControl.Name = "infoTabControl"; 121 this.infoTabControl.SelectedIndex = 0; 122 this.infoTabControl.Size = new System.Drawing.Size(832, 112); 123 this.infoTabControl.TabIndex = 1; 124 // 125 // errorListTabPage 126 // 127 this.errorListTabPage.Controls.Add(this.errorListView); 128 this.errorListTabPage.Location = new System.Drawing.Point(4, 22); 129 this.errorListTabPage.Name = "errorListTabPage"; 130 this.errorListTabPage.Padding = new System.Windows.Forms.Padding(3); 131 this.errorListTabPage.Size = new System.Drawing.Size(824, 86); 132 this.errorListTabPage.TabIndex = 0; 133 this.errorListTabPage.Text = "Error List"; 134 this.errorListTabPage.UseVisualStyleBackColor = true; 114 135 // 115 136 // errorListView … … 128 149 this.errorListView.Location = new System.Drawing.Point(3, 3); 129 150 this.errorListView.Name = "errorListView"; 130 this.errorListView.Size = new System.Drawing.Size( 623, 79);151 this.errorListView.Size = new System.Drawing.Size(818, 80); 131 152 this.errorListView.SmallImageList = this.imageList; 132 153 this.errorListView.TabIndex = 0; … … 158 179 this.descriptionColumnHeader.Text = "Description"; 159 180 // 160 // imageList161 //162 this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;163 this.imageList.ImageSize = new System.Drawing.Size(16, 16);164 this.imageList.TransparentColor = System.Drawing.Color.Transparent;165 //166 // codeEditor167 //168 this.codeEditor.Dock = System.Windows.Forms.DockStyle.Fill;169 this.codeEditor.Location = new System.Drawing.Point(0, 0);170 this.codeEditor.Name = "codeEditor";171 this.codeEditor.Prefix = "";172 this.codeEditor.Size = new System.Drawing.Size(637, 428);173 this.codeEditor.Suffix = "";174 this.codeEditor.TabIndex = 0;175 this.codeEditor.UserCode = "";176 this.codeEditor.TextEditorTextChanged += new System.EventHandler(this.codeEditor_TextEditorTextChanged);177 //178 // splitContainer1179 //180 this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)181 | System.Windows.Forms.AnchorStyles.Left)182 | System.Windows.Forms.AnchorStyles.Right)));183 this.splitContainer1.Location = new System.Drawing.Point(3, 56);184 this.splitContainer1.Name = "splitContainer1";185 //186 // splitContainer1.Panel1187 //188 this.splitContainer1.Panel1.Controls.Add(this.splitContainer2);189 //190 // splitContainer1.Panel2191 //192 this.splitContainer1.Panel2.Controls.Add(this.variableStoreView);193 this.splitContainer1.Panel2.Controls.Add(this.viewHost);194 this.splitContainer1.Size = new System.Drawing.Size(829, 543);195 this.splitContainer1.SplitterDistance = 637;196 this.splitContainer1.TabIndex = 7;197 //198 // splitContainer2199 //200 this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;201 this.splitContainer2.Location = new System.Drawing.Point(0, 0);202 this.splitContainer2.Name = "splitContainer2";203 this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;204 //205 // splitContainer2.Panel1206 //207 this.splitContainer2.Panel1.Controls.Add(this.codeEditor);208 //209 // splitContainer2.Panel2210 //211 this.splitContainer2.Panel2.Controls.Add(this.infoTabControl);212 this.splitContainer2.Size = new System.Drawing.Size(637, 543);213 this.splitContainer2.SplitterDistance = 428;214 this.splitContainer2.TabIndex = 5;215 //216 // infoTabControl217 //218 this.infoTabControl.Controls.Add(this.outputTabPage);219 this.infoTabControl.Controls.Add(this.errorListTabPage);220 this.infoTabControl.Dock = System.Windows.Forms.DockStyle.Fill;221 this.infoTabControl.Location = new System.Drawing.Point(0, 0);222 this.infoTabControl.Name = "infoTabControl";223 this.infoTabControl.SelectedIndex = 0;224 this.infoTabControl.Size = new System.Drawing.Size(637, 111);225 this.infoTabControl.TabIndex = 1;226 //227 181 // outputTabPage 228 182 // … … 231 185 this.outputTabPage.Name = "outputTabPage"; 232 186 this.outputTabPage.Padding = new System.Windows.Forms.Padding(3); 233 this.outputTabPage.Size = new System.Drawing.Size( 629, 85);187 this.outputTabPage.Size = new System.Drawing.Size(824, 86); 234 188 this.outputTabPage.TabIndex = 1; 235 189 this.outputTabPage.Text = "Output"; … … 245 199 this.outputTextBox.ReadOnly = true; 246 200 this.outputTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; 247 this.outputTextBox.Size = new System.Drawing.Size( 623, 79);201 this.outputTextBox.Size = new System.Drawing.Size(818, 80); 248 202 this.outputTextBox.TabIndex = 0; 249 203 this.outputTextBox.WordWrap = false; 250 204 // 251 // errorListTabPage 252 // 253 this.errorListTabPage.Controls.Add(this.errorListView); 254 this.errorListTabPage.Location = new System.Drawing.Point(4, 22); 255 this.errorListTabPage.Name = "errorListTabPage"; 256 this.errorListTabPage.Padding = new System.Windows.Forms.Padding(3); 257 this.errorListTabPage.Size = new System.Drawing.Size(629, 85); 258 this.errorListTabPage.TabIndex = 0; 259 this.errorListTabPage.Text = "Error List"; 260 this.errorListTabPage.UseVisualStyleBackColor = true; 261 // 262 // variableStoreView 263 // 264 this.variableStoreView.Caption = "ItemCollection View"; 265 this.variableStoreView.Content = null; 266 this.variableStoreView.Dock = System.Windows.Forms.DockStyle.Fill; 267 this.variableStoreView.Location = new System.Drawing.Point(0, 0); 268 this.variableStoreView.Name = "variableStoreView"; 269 this.variableStoreView.ReadOnly = false; 270 this.variableStoreView.Size = new System.Drawing.Size(188, 543); 271 this.variableStoreView.TabIndex = 0; 272 // 273 // viewHost 274 // 275 this.viewHost.Caption = "View"; 276 this.viewHost.Content = null; 277 this.viewHost.Dock = System.Windows.Forms.DockStyle.Fill; 278 this.viewHost.Enabled = false; 279 this.viewHost.Location = new System.Drawing.Point(0, 0); 280 this.viewHost.Name = "viewHost"; 281 this.viewHost.ReadOnly = false; 282 this.viewHost.Size = new System.Drawing.Size(188, 543); 283 this.viewHost.TabIndex = 0; 284 this.viewHost.ViewsLabelVisible = true; 285 this.viewHost.ViewType = null; 286 // 287 // compileButton 288 // 289 this.compileButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Script; 290 this.compileButton.Location = new System.Drawing.Point(6, 26); 291 this.compileButton.Name = "compileButton"; 292 this.compileButton.Size = new System.Drawing.Size(24, 24); 293 this.compileButton.TabIndex = 8; 294 this.compileButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; 295 this.toolTip.SetToolTip(this.compileButton, "Compile (F6)"); 296 this.compileButton.UseVisualStyleBackColor = true; 297 this.compileButton.Click += new System.EventHandler(this.compileButton_Click); 205 // codeEditor 206 // 207 this.codeEditor.Dock = System.Windows.Forms.DockStyle.Fill; 208 this.codeEditor.Location = new System.Drawing.Point(0, 0); 209 this.codeEditor.Name = "codeEditor"; 210 this.codeEditor.Prefix = ""; 211 this.codeEditor.Size = new System.Drawing.Size(832, 430); 212 this.codeEditor.Suffix = ""; 213 this.codeEditor.TabIndex = 0; 214 this.codeEditor.UserCode = ""; 215 this.codeEditor.TextEditorTextChanged += new System.EventHandler(this.CodeEditorOnTextEditorTextChanged); 216 // 217 // splitContainer1 218 // 219 this.splitContainer1.Location = new System.Drawing.Point(0, 56); 220 this.splitContainer1.Name = "splitContainer1"; 221 this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; 222 // 223 // splitContainer1.Panel1 224 // 225 this.splitContainer1.Panel1.Controls.Add(this.codeEditor); 226 // 227 // splitContainer1.Panel2 228 // 229 this.splitContainer1.Panel2.Controls.Add(this.infoTabControl); 230 this.splitContainer1.Size = new System.Drawing.Size(832, 546); 231 this.splitContainer1.SplitterDistance = 430; 232 this.splitContainer1.TabIndex = 9; 298 233 // 299 234 // ScriptView 300 235 // 301 236 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit; 237 this.Controls.Add(this.splitContainer1); 302 238 this.Controls.Add(this.compileButton); 303 this.Controls.Add(this.splitContainer1);304 this.Controls.Add(this.startStopButton);305 239 this.Controls.Add(this.compilationLabel); 306 240 this.Name = "ScriptView"; 307 241 this.Size = new System.Drawing.Size(835, 602); 308 242 this.Controls.SetChildIndex(this.compilationLabel, 0); 309 this.Controls.SetChildIndex(this. startStopButton, 0);243 this.Controls.SetChildIndex(this.compileButton, 0); 310 244 this.Controls.SetChildIndex(this.splitContainer1, 0); 311 245 this.Controls.SetChildIndex(this.nameLabel, 0); 312 246 this.Controls.SetChildIndex(this.nameTextBox, 0); 313 247 this.Controls.SetChildIndex(this.infoLabel, 0); 314 this.Controls.SetChildIndex(this.compileButton, 0);315 248 ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit(); 249 this.infoTabControl.ResumeLayout(false); 250 this.errorListTabPage.ResumeLayout(false); 251 this.outputTabPage.ResumeLayout(false); 252 this.outputTabPage.PerformLayout(); 316 253 this.splitContainer1.Panel1.ResumeLayout(false); 317 254 this.splitContainer1.Panel2.ResumeLayout(false); 318 255 ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); 319 256 this.splitContainer1.ResumeLayout(false); 320 this.splitContainer2.Panel1.ResumeLayout(false);321 this.splitContainer2.Panel2.ResumeLayout(false);322 ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();323 this.splitContainer2.ResumeLayout(false);324 this.infoTabControl.ResumeLayout(false);325 this.outputTabPage.ResumeLayout(false);326 this.outputTabPage.PerformLayout();327 this.errorListTabPage.ResumeLayout(false);328 257 this.ResumeLayout(false); 329 258 this.PerformLayout(); … … 333 262 #endregion 334 263 335 private System.Windows.Forms.Label compilationLabel; 336 private System.Windows.Forms.Button startStopButton; 337 private System.Windows.Forms.ListView errorListView; 338 private System.Windows.Forms.ColumnHeader descriptionColumnHeader; 339 private System.Windows.Forms.ColumnHeader lineColumnHeader; 340 private System.Windows.Forms.ColumnHeader columnColumnHeader; 341 private CodeEditor.CodeEditor codeEditor; 342 private System.Windows.Forms.SplitContainer splitContainer1; 343 private System.Windows.Forms.SplitContainer splitContainer2; 344 private MainForm.WindowsForms.ViewHost viewHost; 345 private VariableStoreView variableStoreView; 346 private System.Windows.Forms.ColumnHeader errorNumberColumnHeader; 347 private System.Windows.Forms.ColumnHeader categoryColumnHeader; 348 private System.Windows.Forms.TabControl infoTabControl; 349 private System.Windows.Forms.TabPage errorListTabPage; 350 private System.Windows.Forms.TabPage outputTabPage; 351 private System.Windows.Forms.TextBox outputTextBox; 352 private System.Windows.Forms.Button compileButton; 353 private System.Windows.Forms.ColumnHeader iconColumnHeader; 354 private System.Windows.Forms.ImageList imageList; 264 protected System.Windows.Forms.Label compilationLabel; 265 protected System.Windows.Forms.Button compileButton; 266 protected System.Windows.Forms.ImageList imageList; 267 protected System.Windows.Forms.TabControl infoTabControl; 268 protected System.Windows.Forms.TabPage outputTabPage; 269 protected System.Windows.Forms.TextBox outputTextBox; 270 protected System.Windows.Forms.TabPage errorListTabPage; 271 protected System.Windows.Forms.ListView errorListView; 272 protected System.Windows.Forms.ColumnHeader iconColumnHeader; 273 protected System.Windows.Forms.ColumnHeader categoryColumnHeader; 274 protected System.Windows.Forms.ColumnHeader errorNumberColumnHeader; 275 protected System.Windows.Forms.ColumnHeader lineColumnHeader; 276 protected System.Windows.Forms.ColumnHeader columnColumnHeader; 277 protected System.Windows.Forms.ColumnHeader descriptionColumnHeader; 278 protected CodeEditor.CodeEditor codeEditor; 279 protected System.Windows.Forms.SplitContainer splitContainer1; 355 280 } 356 281 } -
trunk/sources/HeuristicLab.Scripting.Views/3.3/ScriptView.cs
r10727 r10731 26 26 using System.Linq; 27 27 using System.Windows.Forms; 28 using HeuristicLab.Common;29 28 using HeuristicLab.Common.Resources; 30 29 using HeuristicLab.Core.Views; … … 36 35 [Content(typeof(Script), true)] 37 36 public partial class ScriptView : NamedItemView { 38 private bool running;39 40 37 public new Script Content { 41 38 get { return (Script)base.Content; } 42 set { base.Content = (Script)value; }39 set { base.Content = value; } 43 40 } 44 41 … … 46 43 InitializeComponent(); 47 44 errorListView.SmallImageList.Images.AddRange(new Image[] { VSImageLibrary.Warning, VSImageLibrary.Error }); 48 AdjustErrorListViewColumnSizes();49 45 } 50 46 51 47 protected override void RegisterContentEvents() { 52 48 base.RegisterContentEvents(); 53 Content.CodeChanged += Content_CodeChanged; 54 Content.ScriptExecutionStarted += Content_ScriptExecutionStarted; 55 Content.ScriptExecutionFinished += Content_ScriptExecutionFinished; 56 Content.ConsoleOutputChanged += Content_ConsoleOutputChanged; 49 Content.CodeChanged += ContentOnCodeChanged; 57 50 } 58 51 59 52 protected override void DeregisterContentEvents() { 60 Content.CodeChanged -= Content_CodeChanged; 61 Content.ScriptExecutionStarted -= Content_ScriptExecutionStarted; 62 Content.ScriptExecutionFinished -= Content_ScriptExecutionFinished; 63 Content.ConsoleOutputChanged -= Content_ConsoleOutputChanged; 53 Content.CodeChanged -= ContentOnCodeChanged; 64 54 base.DeregisterContentEvents(); 65 55 } 66 56 67 #region Content event handlers 68 private void Content_CodeChanged(object sender, EventArgs e) { 57 protected virtual void ContentOnCodeChanged(object sender, EventArgs e) { 69 58 codeEditor.UserCode = Content.Code; 70 59 } 71 private void Content_ScriptExecutionStarted(object sender, EventArgs e) {72 if (InvokeRequired)73 Invoke((Action<object, EventArgs>)Content_ScriptExecutionStarted, sender, e);74 else {75 Locked = true;76 ReadOnly = true;77 startStopButton.Image = VSImageLibrary.Stop;78 toolTip.SetToolTip(startStopButton, "Stop (Shift+F5)");79 infoTabControl.SelectedTab = outputTabPage;80 }81 }82 private void Content_ScriptExecutionFinished(object sender, EventArgs<Exception> e) {83 if (InvokeRequired)84 Invoke((Action<object, EventArgs<Exception>>)Content_ScriptExecutionFinished, sender, e);85 else {86 Locked = false;87 ReadOnly = false;88 startStopButton.Image = VSImageLibrary.Play;89 toolTip.SetToolTip(startStopButton, "Run (F5)");90 running = false;91 var ex = e.Value;92 if (ex != null)93 PluginInfrastructure.ErrorHandling.ShowErrorDialog(this, ex);94 }95 }96 private void Content_ConsoleOutputChanged(object sender, EventArgs<string> e) {97 if (InvokeRequired)98 Invoke((Action<object, EventArgs<string>>)Content_ConsoleOutputChanged, sender, e);99 else {100 outputTextBox.AppendText(e.Value);101 }102 }103 #endregion104 60 105 61 protected override void OnContentChanged() { … … 107 63 if (Content == null) { 108 64 codeEditor.UserCode = string.Empty; 109 variableStoreView.Content = null;110 65 } else { 111 66 codeEditor.UserCode = Content.Code; 112 67 foreach (var asm in Content.GetAssemblies()) 113 68 codeEditor.AddAssembly(asm); 114 variableStoreView.Content = Content.VariableStore;115 69 if (Content.CompileErrors == null) { 116 70 compilationLabel.ForeColor = SystemColors.ControlDarkDark; … … 129 83 base.SetEnabledStateOfControls(); 130 84 compileButton.Enabled = Content != null && !Locked && !ReadOnly; 131 startStopButton.Enabled = Content != null && (!Locked || running);132 85 codeEditor.Enabled = Content != null && !Locked && !ReadOnly; 133 86 } 134 87 135 #region Child Control event handlers 136 private void compileButton_Click(object sender, EventArgs e) { 88 protected virtual void CompileButtonOnClick(object sender, EventArgs e) { 137 89 Compile(); 138 90 } 139 91 140 private void startStopButton_Click(object sender, EventArgs e) { 141 if (running) { 142 Content.Kill(); 143 } else 144 if (Compile()) { 145 outputTextBox.Clear(); 146 Content.Execute(); 147 running = true; 148 } 149 } 150 151 private void codeEditor_TextEditorTextChanged(object sender, EventArgs e) { 92 protected virtual void CodeEditorOnTextEditorTextChanged(object sender, EventArgs e) { 152 93 Content.Code = codeEditor.UserCode; 153 94 } 154 #endregion155 156 #region global HotKeys157 95 protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 158 96 switch (keyData) { 159 case Keys.F5:160 if (Content != null && !Locked && !running) {161 if (Compile()) {162 outputTextBox.Clear();163 Content.Execute();164 running = true;165 }166 }167 break;168 case Keys.F5 | Keys.Shift:169 if (running) Content.Kill();170 break;171 97 case Keys.F6: 172 if (!running) Compile(); 173 break; 98 if (Content != null && !Locked) 99 Compile(); 100 return true; 174 101 } 175 102 return base.ProcessCmdKey(ref msg, keyData); 176 103 } 177 #endregion178 104 179 #region Auxiliary functions 180 private bool Compile() { 105 public virtual bool Compile() { 181 106 ReadOnly = true; 182 107 Locked = true; … … 199 124 } 200 125 } 201 #endregion202 126 203 pr ivatevoid ShowCompilationResults() {127 protected virtual void ShowCompilationResults() { 204 128 if (Content.CompileErrors.Count == 0) return; 205 129 var msgs = Content.CompileErrors.OfType<CompilerError>() … … 222 146 } 223 147 224 pr ivatevoid AdjustErrorListViewColumnSizes() {148 protected virtual void AdjustErrorListViewColumnSizes() { 225 149 foreach (ColumnHeader ch in errorListView.Columns) 226 150 // adjusts the column width to the width of the column -
trunk/sources/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj
r10566 r10731 85 85 </ItemGroup> 86 86 <ItemGroup> 87 <Compile Include="CSharpScript.cs" /> 87 88 <Compile Include="Variables.cs" /> 88 89 <Compile Include="VariableStore.cs" /> 89 90 <None Include="Plugin.cs.frame" /> 90 91 <Compile Include="Script.cs" /> 91 <Compile Include=" UserScriptBase.cs" />92 <Compile Include="CSharpScriptBase.cs" /> 92 93 <Compile Include="Plugin.cs" /> 93 94 <Compile Include="Properties\AssemblyInfo.cs" /> -
trunk/sources/HeuristicLab.Scripting/3.3/Script.cs
r10727 r10731 29 29 using System.Reflection; 30 30 using System.Text; 31 using System.Text.RegularExpressions;32 using System.Threading;33 31 using HeuristicLab.Common; 34 32 using HeuristicLab.Common.Resources; … … 38 36 39 37 namespace HeuristicLab.Scripting { 40 [Item("C# Script", "An empty C# script.")]41 [Creatable("Scripts")]42 38 [StorableClass] 43 public sealed class Script : NamedItem, IStorableContent { 44 #region Constants 45 private const string ExecuteMethodName = "Execute"; 46 private const string CodeTemplate = 47 @"// use 'vars' to access variables in the script's variable store (e.g. vars.x = 5) 48 // use 'vars.Contains(string)' to check if a variable exists 49 // use 'vars.Clear()' to remove all variables 50 // use 'foreach (KeyValuePair<string, object> v in vars) { ... }' to iterate over all variables 51 52 using System; 53 using System.Linq; 54 using System.Collections.Generic; 55 using HeuristicLab.Common; 56 using HeuristicLab.Core; 57 using HeuristicLab.Data; 58 59 public class UserScript : HeuristicLab.Scripting.UserScriptBase { 60 public override void Main() { 61 // type your code here 62 } 63 64 // implement further classes and methods 65 66 }"; 67 #endregion 39 public class Script : NamedItem { 40 protected virtual string CodeTemplate { 41 get { return string.Empty; } 42 } 68 43 69 44 #region Fields & Properties 70 private UserScriptBase compiledScript;71 72 public string Filename { get; set; }73 74 45 public static new Image StaticItemImage { 75 46 get { return VSImageLibrary.Script; } … … 77 48 78 49 [Storable] 79 private VariableStore variableStore;80 public VariableStore VariableStore {81 get { return variableStore; }82 }83 84 [Storable]85 50 private string code; 86 public string Code {51 public virtual string Code { 87 52 get { return code; } 88 53 set { 89 54 if (value == code) return; 90 55 code = value; 91 compiledScript = null;92 56 OnCodeChanged(); 93 57 } … … 95 59 96 60 private string compilationUnitCode; 97 public string CompilationUnitCode {61 public virtual string CompilationUnitCode { 98 62 get { return compilationUnitCode; } 99 63 } 100 64 101 65 private CompilerErrorCollection compileErrors; 102 public CompilerErrorCollection CompileErrors {66 public virtual CompilerErrorCollection CompileErrors { 103 67 get { return compileErrors; } 104 68 private set { … … 111 75 #region Construction & Initialization 112 76 [StorableConstructor] 113 pr ivateScript(bool deserializing) : base(deserializing) { }114 pr ivateScript(Script original, Cloner cloner)77 protected Script(bool deserializing) : base(deserializing) { } 78 protected Script(Script original, Cloner cloner) 115 79 : base(original, cloner) { 116 80 code = original.code; 117 variableStore = new VariableStore();118 81 compilationUnitCode = original.compilationUnitCode; 119 82 if (original.compileErrors != null) … … 124 87 description = ItemDescription; 125 88 code = CodeTemplate; 126 variableStore = new VariableStore();127 89 } 128 90 public Script(string code) … … 136 98 #endregion 137 99 138 private void RegisterScriptEvents() { 139 if (compiledScript == null) return; 140 compiledScript.ConsoleOutputChanged += compiledScript_ConsoleOutputChanged; 100 #region Compilation 101 protected virtual CSharpCodeProvider CodeProvider { 102 get { 103 return new CSharpCodeProvider( 104 new Dictionary<string, string> { 105 {"CompilerVersion", "v4.0"}, // support C# 4.0 syntax 106 }); 107 } 141 108 } 142 109 143 private void DeregisterScriptEvents() { 144 if (compiledScript == null) return; 145 compiledScript.ConsoleOutputChanged -= compiledScript_ConsoleOutputChanged; 146 } 147 148 #region Compilation 149 private CSharpCodeProvider codeProvider = 150 new CSharpCodeProvider( 151 new Dictionary<string, string> { 152 { "CompilerVersion", "v4.0" }, // support C# 4.0 syntax 153 }); 154 155 private CompilerResults DoCompile() { 110 protected virtual CompilerResults DoCompile() { 156 111 var parameters = new CompilerParameters { 157 112 GenerateExecutable = false, … … 166 121 var unit = CreateCompilationUnit(); 167 122 var writer = new StringWriter(); 168 codeProvider.GenerateCodeFromCompileUnit(123 CodeProvider.GenerateCodeFromCompileUnit( 169 124 unit, 170 125 writer, … … 174 129 }); 175 130 compilationUnitCode = writer.ToString(); 176 return codeProvider.CompileAssemblyFromDom(parameters, unit);131 return CodeProvider.CompileAssemblyFromDom(parameters, unit); 177 132 } 178 133 179 public v oidCompile() {134 public virtual Assembly Compile() { 180 135 var results = DoCompile(); 181 compiledScript = null;182 136 CompileErrors = results.Errors; 183 137 if (results.Errors.HasErrors) { … … 188 142 .AppendLine(error.ErrorText); 189 143 } 190 throw new Exception(string.Format( 191 "Compilation of \"{0}\" failed:{1}{2}", 192 Name, Environment.NewLine, 193 sb.ToString())); 144 throw new Exception(string.Format("Compilation of \"{0}\" failed:{1}{2}", 145 Name, Environment.NewLine, sb.ToString())); 194 146 } else { 195 var assembly = results.CompiledAssembly; 196 var types = assembly.GetTypes(); 197 DeregisterScriptEvents(); 198 compiledScript = (UserScriptBase)Activator.CreateInstance(types[0]); 199 RegisterScriptEvents(); 147 return results.CompiledAssembly; 200 148 } 201 149 } 202 150 203 public IEnumerable<Assembly> GetAssemblies() {151 public virtual IEnumerable<Assembly> GetAssemblies() { 204 152 var assemblies = new List<Assembly>(); 205 153 foreach (var a in AppDomain.CurrentDomain.GetAssemblies()) { … … 217 165 } 218 166 219 private readonly Regex SafeTypeNameCharRegex = new Regex("[_a-zA-Z0-9]+"); 220 private readonly Regex SafeTypeNameRegex = new Regex("[_a-zA-Z][_a-zA-Z0-9]*"); 221 222 private CodeCompileUnit CreateCompilationUnit() { 167 protected virtual CodeCompileUnit CreateCompilationUnit() { 223 168 var unit = new CodeSnippetCompileUnit(code); 224 169 return unit; 225 170 } 226 227 public string CompiledTypeName {228 get {229 var sb = new StringBuilder();230 var strings = SafeTypeNameCharRegex.Matches(Name)231 .Cast<Match>()232 .Select(m => m.Value);233 foreach (string s in strings)234 sb.Append(s);235 return SafeTypeNameRegex.Match(sb.ToString()).Value;236 }237 }238 171 #endregion 239 172 240 private Thread scriptThread;241 public void Execute() {242 if (compiledScript == null) return;243 var executeMethod = typeof(UserScriptBase).GetMethod(ExecuteMethodName, BindingFlags.NonPublic | BindingFlags.Instance);244 if (executeMethod != null) {245 scriptThread = new Thread(() => {246 Exception ex = null;247 try {248 OnScriptExecutionStarted();249 executeMethod.Invoke(compiledScript, new[] { VariableStore });250 } catch (ThreadAbortException) {251 // the execution was cancelled by the user252 } catch (TargetInvocationException e) {253 ex = e.InnerException;254 } finally {255 OnScriptExecutionFinished(ex);256 }257 });258 scriptThread.Start();259 }260 }261 262 public void Kill() {263 if (scriptThread.IsAlive)264 scriptThread.Abort();265 }266 267 private void compiledScript_ConsoleOutputChanged(object sender, EventArgs<string> e) {268 OnConsoleOutputChanged(e.Value);269 }270 271 173 public event EventHandler CodeChanged; 272 pr ivatevoid OnCodeChanged() {174 protected virtual void OnCodeChanged() { 273 175 var handler = CodeChanged; 274 176 if (handler != null) handler(this, EventArgs.Empty); … … 276 178 277 179 public event EventHandler CompileErrorsChanged; 278 pr ivatevoid OnCompileErrorsChanged() {180 protected virtual void OnCompileErrorsChanged() { 279 181 var handler = CompileErrorsChanged; 280 182 if (handler != null) handler(this, EventArgs.Empty); 281 183 } 282 283 public event EventHandler ScriptExecutionStarted;284 private void OnScriptExecutionStarted() {285 var handler = ScriptExecutionStarted;286 if (handler != null) handler(this, EventArgs.Empty);287 }288 289 public event EventHandler<EventArgs<Exception>> ScriptExecutionFinished;290 private void OnScriptExecutionFinished(Exception e) {291 var handler = ScriptExecutionFinished;292 if (handler != null) handler(this, new EventArgs<Exception>(e));293 }294 295 public event EventHandler<EventArgs<string>> ConsoleOutputChanged;296 private void OnConsoleOutputChanged(string args) {297 var handler = ConsoleOutputChanged;298 if (handler != null) handler(this, new EventArgs<string>(args));299 }300 184 } 301 185 }
Note: See TracChangeset
for help on using the changeset viewer.