Changeset 10892
- Timestamp:
- 05/26/14 16:41:12 (10 years ago)
- Location:
- stable
- Files:
-
- 2 deleted
- 9 edited
- 7 copied
Legend:
- Unmodified
- Added
- Removed
-
stable
- Property svn:mergeinfo changed
/trunk/sources merged: 10510-10512,10566,10577,10642,10727,10731,10747,10761,10857,10865
- Property svn:mergeinfo changed
-
stable/HeuristicLab 3.3.sln
r10891 r10892 381 381 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4", "HeuristicLab.Problems.DataAnalysis.Trading.Views\3.4\HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj", "{CB3D0A1E-1BE8-476B-A53C-2B189E30064F}" 382 382 EndProject 383 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Scripting-3.3", "HeuristicLab. HLScript\3.3\HeuristicLab.Scripting-3.3.csproj", "{21977CC3-1757-4B3B-87BD-FF817AAA900F}"384 EndProject 385 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Scripting.Views-3.3", "HeuristicLab. HLScript.Views\3.3\HeuristicLab.Scripting.Views-3.3.csproj", "{0C2917C8-7AA8-4E18-800A-C4D064F992ED}"383 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Scripting-3.3", "HeuristicLab.Scripting\3.3\HeuristicLab.Scripting-3.3.csproj", "{21977CC3-1757-4B3B-87BD-FF817AAA900F}" 384 EndProject 385 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Scripting.Views-3.3", "HeuristicLab.Scripting.Views\3.3\HeuristicLab.Scripting.Views-3.3.csproj", "{0C2917C8-7AA8-4E18-800A-C4D064F992ED}" 386 386 EndProject 387 387 Global -
stable/HeuristicLab.Scripting.Views/3.3/CSharpScriptView.cs
r10731 r10892 21 21 22 22 using System; 23 using System.Drawing;24 23 using System.Windows.Forms; 25 24 using HeuristicLab.Common; … … 95 94 base.OnContentChanged(); 96 95 if (Content == null) { 97 codeEditor.UserCode = string.Empty;98 96 variableStoreView.Content = null; 99 97 } else { 100 codeEditor.UserCode = Content.Code;101 foreach (var asm in Content.GetAssemblies())102 codeEditor.AddAssembly(asm);103 98 variableStoreView.Content = Content.VariableStore; 104 if (Content.CompileErrors == null) {105 compilationLabel.ForeColor = SystemColors.ControlDarkDark;106 compilationLabel.Text = "Not compiled";107 } else if (Content.CompileErrors.HasErrors) {108 compilationLabel.ForeColor = Color.DarkRed;109 compilationLabel.Text = "Compilation failed";110 } else {111 compilationLabel.ForeColor = Color.DarkGreen;112 compilationLabel.Text = "Compilation successful";113 }114 99 } 115 100 } … … 117 102 protected override void SetEnabledStateOfControls() { 118 103 base.SetEnabledStateOfControls(); 119 compileButton.Enabled = Content != null && !Locked && !ReadOnly;120 104 startStopButton.Enabled = Content != null && (!Locked || Running); 121 codeEditor.Enabled = Content != null && !Locked && !ReadOnly;122 105 } 123 106 -
stable/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj
r10510 r10892 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> -
stable/HeuristicLab.Scripting.Views/3.3/ScriptView.Designer.cs
r10506 r10892 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.outputTabPage = new System.Windows.Forms.TabPage(); 54 this.outputTextBox = new System.Windows.Forms.TextBox(); 55 this.errorListTabPage = new System.Windows.Forms.TabPage(); 50 56 this.errorListView = new System.Windows.Forms.ListView(); 51 57 this.iconColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); … … 55 61 this.columnColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 56 62 this.descriptionColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 57 this.imageList = new System.Windows.Forms.ImageList(this.components);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.outputTabPage.SuspendLayout(); 68 this.errorListTabPage.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 // outputTabPage 126 // 127 this.outputTabPage.Controls.Add(this.outputTextBox); 128 this.outputTabPage.Location = new System.Drawing.Point(4, 22); 129 this.outputTabPage.Name = "outputTabPage"; 130 this.outputTabPage.Padding = new System.Windows.Forms.Padding(3); 131 this.outputTabPage.Size = new System.Drawing.Size(824, 86); 132 this.outputTabPage.TabIndex = 1; 133 this.outputTabPage.Text = "Output"; 134 this.outputTabPage.UseVisualStyleBackColor = true; 135 // 136 // outputTextBox 137 // 138 this.outputTextBox.Dock = System.Windows.Forms.DockStyle.Fill; 139 this.outputTextBox.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 140 this.outputTextBox.Location = new System.Drawing.Point(3, 3); 141 this.outputTextBox.Multiline = true; 142 this.outputTextBox.Name = "outputTextBox"; 143 this.outputTextBox.ReadOnly = true; 144 this.outputTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; 145 this.outputTextBox.Size = new System.Drawing.Size(818, 80); 146 this.outputTextBox.TabIndex = 0; 147 this.outputTextBox.WordWrap = false; 148 // 149 // errorListTabPage 150 // 151 this.errorListTabPage.Controls.Add(this.errorListView); 152 this.errorListTabPage.Location = new System.Drawing.Point(4, 22); 153 this.errorListTabPage.Name = "errorListTabPage"; 154 this.errorListTabPage.Padding = new System.Windows.Forms.Padding(3); 155 this.errorListTabPage.Size = new System.Drawing.Size(824, 86); 156 this.errorListTabPage.TabIndex = 0; 157 this.errorListTabPage.Text = "Error List"; 158 this.errorListTabPage.UseVisualStyleBackColor = true; 114 159 // 115 160 // errorListView … … 128 173 this.errorListView.Location = new System.Drawing.Point(3, 3); 129 174 this.errorListView.Name = "errorListView"; 130 this.errorListView.Size = new System.Drawing.Size( 623, 79);175 this.errorListView.Size = new System.Drawing.Size(818, 80); 131 176 this.errorListView.SmallImageList = this.imageList; 132 177 this.errorListView.TabIndex = 0; … … 158 203 this.descriptionColumnHeader.Text = "Description"; 159 204 // 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 205 // codeEditor 167 206 // … … 170 209 this.codeEditor.Name = "codeEditor"; 171 210 this.codeEditor.Prefix = ""; 172 this.codeEditor.Size = new System.Drawing.Size( 637, 428);211 this.codeEditor.Size = new System.Drawing.Size(832, 430); 173 212 this.codeEditor.Suffix = ""; 174 213 this.codeEditor.TabIndex = 0; 175 214 this.codeEditor.UserCode = ""; 176 this.codeEditor.TextEditorTextChanged += new System.EventHandler(this. codeEditor_TextEditorTextChanged);215 this.codeEditor.TextEditorTextChanged += new System.EventHandler(this.CodeEditorOnTextEditorTextChanged); 177 216 // 178 217 // splitContainer1 … … 181 220 | System.Windows.Forms.AnchorStyles.Left) 182 221 | System.Windows.Forms.AnchorStyles.Right))); 183 this.splitContainer1.Location = new System.Drawing.Point( 3, 56);222 this.splitContainer1.Location = new System.Drawing.Point(0, 56); 184 223 this.splitContainer1.Name = "splitContainer1"; 224 this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; 185 225 // 186 226 // splitContainer1.Panel1 187 227 // 188 this.splitContainer1.Panel1.Controls.Add(this. splitContainer2);228 this.splitContainer1.Panel1.Controls.Add(this.codeEditor); 189 229 // 190 230 // splitContainer1.Panel2 191 231 // 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 // splitContainer2 199 // 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.Panel1 206 // 207 this.splitContainer2.Panel1.Controls.Add(this.codeEditor); 208 // 209 // splitContainer2.Panel2 210 // 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 // infoTabControl 217 // 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 // outputTabPage 228 // 229 this.outputTabPage.Controls.Add(this.outputTextBox); 230 this.outputTabPage.Location = new System.Drawing.Point(4, 22); 231 this.outputTabPage.Name = "outputTabPage"; 232 this.outputTabPage.Padding = new System.Windows.Forms.Padding(3); 233 this.outputTabPage.Size = new System.Drawing.Size(629, 85); 234 this.outputTabPage.TabIndex = 1; 235 this.outputTabPage.Text = "Output"; 236 this.outputTabPage.UseVisualStyleBackColor = true; 237 // 238 // outputTextBox 239 // 240 this.outputTextBox.Dock = System.Windows.Forms.DockStyle.Fill; 241 this.outputTextBox.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 242 this.outputTextBox.Location = new System.Drawing.Point(3, 3); 243 this.outputTextBox.Multiline = true; 244 this.outputTextBox.Name = "outputTextBox"; 245 this.outputTextBox.ReadOnly = true; 246 this.outputTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; 247 this.outputTextBox.Size = new System.Drawing.Size(623, 79); 248 this.outputTextBox.TabIndex = 0; 249 this.outputTextBox.WordWrap = false; 250 // 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); 232 this.splitContainer1.Panel2.Controls.Add(this.infoTabControl); 233 this.splitContainer1.Size = new System.Drawing.Size(832, 546); 234 this.splitContainer1.SplitterDistance = 430; 235 this.splitContainer1.TabIndex = 9; 298 236 // 299 237 // ScriptView 300 238 // 301 239 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit; 240 this.Controls.Add(this.splitContainer1); 302 241 this.Controls.Add(this.compileButton); 303 this.Controls.Add(this.splitContainer1);304 this.Controls.Add(this.startStopButton);305 242 this.Controls.Add(this.compilationLabel); 306 243 this.Name = "ScriptView"; 307 244 this.Size = new System.Drawing.Size(835, 602); 308 245 this.Controls.SetChildIndex(this.compilationLabel, 0); 309 this.Controls.SetChildIndex(this. startStopButton, 0);246 this.Controls.SetChildIndex(this.compileButton, 0); 310 247 this.Controls.SetChildIndex(this.splitContainer1, 0); 311 248 this.Controls.SetChildIndex(this.nameLabel, 0); 312 249 this.Controls.SetChildIndex(this.nameTextBox, 0); 313 250 this.Controls.SetChildIndex(this.infoLabel, 0); 314 this.Controls.SetChildIndex(this.compileButton, 0);315 251 ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit(); 252 this.infoTabControl.ResumeLayout(false); 253 this.outputTabPage.ResumeLayout(false); 254 this.outputTabPage.PerformLayout(); 255 this.errorListTabPage.ResumeLayout(false); 316 256 this.splitContainer1.Panel1.ResumeLayout(false); 317 257 this.splitContainer1.Panel2.ResumeLayout(false); 318 258 ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); 319 259 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 260 this.ResumeLayout(false); 329 261 this.PerformLayout(); … … 333 265 #endregion 334 266 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; 267 protected System.Windows.Forms.Label compilationLabel; 268 protected System.Windows.Forms.Button compileButton; 269 protected System.Windows.Forms.ImageList imageList; 270 protected System.Windows.Forms.TabControl infoTabControl; 271 protected System.Windows.Forms.TabPage outputTabPage; 272 protected System.Windows.Forms.TextBox outputTextBox; 273 protected System.Windows.Forms.TabPage errorListTabPage; 274 protected System.Windows.Forms.ListView errorListView; 275 protected System.Windows.Forms.ColumnHeader iconColumnHeader; 276 protected System.Windows.Forms.ColumnHeader categoryColumnHeader; 277 protected System.Windows.Forms.ColumnHeader errorNumberColumnHeader; 278 protected System.Windows.Forms.ColumnHeader lineColumnHeader; 279 protected System.Windows.Forms.ColumnHeader columnColumnHeader; 280 protected System.Windows.Forms.ColumnHeader descriptionColumnHeader; 281 protected CodeEditor.CodeEditor codeEditor; 282 protected System.Windows.Forms.SplitContainer splitContainer1; 355 283 } 356 284 } -
stable/HeuristicLab.Scripting.Views/3.3/ScriptView.cs
r10506 r10892 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 infoTabControl.SelectedTab = outputTabPage;79 }80 }81 private void Content_ScriptExecutionFinished(object sender, EventArgs<Exception> e) {82 if (InvokeRequired)83 Invoke((Action<object, EventArgs<Exception>>)Content_ScriptExecutionFinished, sender, e);84 else {85 Locked = false;86 ReadOnly = false;87 startStopButton.Image = VSImageLibrary.Play;88 running = false;89 var ex = e.Value;90 if (ex != null)91 PluginInfrastructure.ErrorHandling.ShowErrorDialog(this, ex);92 }93 }94 private void Content_ConsoleOutputChanged(object sender, EventArgs<string> e) {95 if (InvokeRequired)96 Invoke((Action<object, EventArgs<string>>)Content_ConsoleOutputChanged, sender, e);97 else {98 outputTextBox.AppendText(e.Value);99 }100 }101 #endregion102 60 103 61 protected override void OnContentChanged() { … … 105 63 if (Content == null) { 106 64 codeEditor.UserCode = string.Empty; 107 variableStoreView.Content = null;108 65 } else { 109 66 codeEditor.UserCode = Content.Code; 110 67 foreach (var asm in Content.GetAssemblies()) 111 68 codeEditor.AddAssembly(asm); 112 variableStoreView.Content = Content.VariableStore;113 69 if (Content.CompileErrors == null) { 114 70 compilationLabel.ForeColor = SystemColors.ControlDarkDark; … … 127 83 base.SetEnabledStateOfControls(); 128 84 compileButton.Enabled = Content != null && !Locked && !ReadOnly; 129 startStopButton.Enabled = Content != null && (!Locked || running);130 85 codeEditor.Enabled = Content != null && !Locked && !ReadOnly; 131 86 } 132 87 133 #region Child Control event handlers 134 private void compileButton_Click(object sender, EventArgs e) { 88 protected virtual void CompileButtonOnClick(object sender, EventArgs e) { 135 89 Compile(); 136 90 } 137 91 138 private void startStopButton_Click(object sender, EventArgs e) { 139 if (running) { 140 Content.Kill(); 141 } else 142 if (Compile()) { 143 outputTextBox.Clear(); 144 Content.Execute(); 145 running = true; 146 } 147 } 148 149 private void codeEditor_TextEditorTextChanged(object sender, EventArgs e) { 92 protected virtual void CodeEditorOnTextEditorTextChanged(object sender, EventArgs e) { 93 if (Content == null) return; 150 94 Content.Code = codeEditor.UserCode; 151 95 } 152 #endregion153 154 #region global HotKeys155 96 protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 156 97 switch (keyData) { 157 case Keys.F5:158 if (Content != null && !Locked) {159 if (Compile()) {160 outputTextBox.Clear();161 Content.Execute();162 running = true;163 } else164 infoTabControl.SelectedTab = errorListTabPage;165 }166 break;167 case Keys.F5 | Keys.Shift:168 if (running) Content.Kill();169 break;170 98 case Keys.F6: 171 if ( !Compile() || Content.CompileErrors.HasWarnings)172 infoTabControl.SelectedTab = errorListTabPage;173 break;99 if (Content != null && !Locked) 100 Compile(); 101 return true; 174 102 } 175 103 return base.ProcessCmdKey(ref msg, keyData); 176 104 } 177 #endregion178 105 179 #region Auxiliary functions 180 private bool Compile() { 106 public virtual bool Compile() { 181 107 ReadOnly = true; 182 108 Locked = true; … … 188 114 return true; 189 115 } catch { 190 outputTextBox.AppendText("Compilation failed."); 191 return false; 116 if (Content.CompileErrors.HasErrors) { 117 outputTextBox.AppendText("Compilation failed."); 118 return false; 119 } else { 120 outputTextBox.AppendText("Compilation succeeded."); 121 return true; 122 } 192 123 } finally { 193 124 ShowCompilationResults(); 125 if (Content.CompileErrors.Count > 0) 126 infoTabControl.SelectedTab = errorListTabPage; 194 127 ReadOnly = false; 195 128 Locked = false; … … 197 130 } 198 131 } 199 #endregion200 132 201 pr ivatevoid ShowCompilationResults() {133 protected virtual void ShowCompilationResults() { 202 134 if (Content.CompileErrors.Count == 0) return; 203 135 var msgs = Content.CompileErrors.OfType<CompilerError>() … … 220 152 } 221 153 222 pr ivatevoid AdjustErrorListViewColumnSizes() {154 protected virtual void AdjustErrorListViewColumnSizes() { 223 155 foreach (ColumnHeader ch in errorListView.Columns) 224 // adjusts the column width to the width of the column 225 // header or the column content, whichever is greater 156 // adjusts the column width to the width of the column header 226 157 ch.Width = -2; 227 158 } -
stable/HeuristicLab.Scripting.Views/3.3/VariableStoreView.cs
r10506 r10892 21 21 22 22 using System; 23 using System.Collections;24 23 using System.Collections.Generic; 25 24 using System.Drawing; … … 220 219 221 220 if (items.Count > 0) { 222 DataObjectdata = new DataObject();221 var data = new DataObject(); 223 222 if (items.Count == 1) data.SetData(HeuristicLab.Common.Constants.DragDropDataFormat, items[0]); 224 223 else data.SetData(HeuristicLab.Common.Constants.DragDropDataFormat, items); 225 224 if (ReadOnly) { 226 DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link);225 DoDragDrop(data, DragDropEffects.Copy); 227 226 } else { 228 DragDropEffectsresult = DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link | DragDropEffects.Move);227 var result = DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link | DragDropEffects.Move); 229 228 if ((result & DragDropEffects.Move) == DragDropEffects.Move) { 230 229 foreach (string item in items) Content.Remove(item); … … 235 234 } 236 235 protected virtual void variableListView_DragEnter(object sender, DragEventArgs e) { 237 validDragOperation = false; 238 if (!Locked && !ReadOnly && (e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) is object)) { 239 validDragOperation = true; 240 } else if (!Locked && !ReadOnly && (e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) is IEnumerable)) { 241 validDragOperation = true; 242 IEnumerable items = (IEnumerable)e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat); 243 foreach (object item in items) 244 validDragOperation = validDragOperation && (item is object); 245 } 236 validDragOperation = !Locked && !ReadOnly && e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) != null; 246 237 } 247 238 protected virtual void variableListView_DragOver(object sender, DragEventArgs e) { … … 257 248 protected virtual void variableListView_DragDrop(object sender, DragEventArgs e) { 258 249 if (e.Effect != DragDropEffects.None) { 259 if (e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) is IEnumerable) { 260 IEnumerable<object> items = ((IEnumerable)e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat)).Cast<object>(); 261 if (e.Effect.HasFlag(DragDropEffects.Copy)) { 262 var cloner = new Cloner(); 263 var clonedItems = new List<object>(); 264 foreach (var item in items) { 265 var dc = item as IDeepCloneable; 266 clonedItems.Add(dc != null ? cloner.Clone(dc) : item); 267 } 268 items = clonedItems; 269 } 270 foreach (var item in items) { 271 string name = GenerateNewVariableName(); 272 Content.Add(name, item); 273 var listViewItem = variableListView.FindItemWithText(name); 274 listViewItem.BeginEdit(); 275 } 276 } else { 277 object item = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat); 278 if (e.Effect.HasFlag(DragDropEffects.Copy)) { 279 var cloner = new Cloner(); 280 var dc = item as IDeepCloneable; 281 if (dc != null) item = cloner.Clone(dc); 282 } 283 string name = GenerateNewVariableName(); 284 Content.Add(name, item); 285 var listViewItem = variableListView.FindItemWithText(name); 286 listViewItem.BeginEdit(); 287 } 250 object item = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat); 251 if (e.Effect.HasFlag(DragDropEffects.Copy)) { 252 var cloner = new Cloner(); 253 var dc = item as IDeepCloneable; 254 if (dc != null) item = cloner.Clone(dc); 255 } 256 string name = GenerateNewVariableName(); 257 Content.Add(name, item); 258 var listViewItem = variableListView.FindItemWithText(name); 259 listViewItem.BeginEdit(); 288 260 } 289 261 } … … 423 395 string toolTipText = string.Join(Environment.NewLine, lines); 424 396 if (!serializable) 425 toolTipText += Environment.NewLine + "CAUTION: Type is not serializable!";397 toolTipText = "Caution: Type is not serializable!" + Environment.NewLine + toolTipText; 426 398 return toolTipText; 427 399 } -
stable/HeuristicLab.Scripting/3.3/CSharpScript.cs
r10731 r10892 62 62 63 63 #region Fields & Properties 64 pr otected CSharpScriptBase CompiledScript;64 private CSharpScriptBase compiledScript; 65 65 66 66 public string Filename { get; set; } … … 82 82 public CSharpScript() { 83 83 variableStore = new VariableStore(); 84 Code = CodeTemplate; 84 85 } 85 86 public CSharpScript(string code) … … 94 95 95 96 protected virtual void RegisterScriptEvents() { 96 if ( CompiledScript != null)97 CompiledScript.ConsoleOutputChanged += CompiledScriptOnConsoleOutputChanged;97 if (compiledScript != null) 98 compiledScript.ConsoleOutputChanged += CompiledScriptOnConsoleOutputChanged; 98 99 } 99 100 100 101 protected virtual void DeregisterScriptEvents() { 101 if ( CompiledScript != null)102 CompiledScript.ConsoleOutputChanged -= CompiledScriptOnConsoleOutputChanged;102 if (compiledScript != null) 103 compiledScript.ConsoleOutputChanged -= CompiledScriptOnConsoleOutputChanged; 103 104 } 104 105 … … 106 107 107 108 public override Assembly Compile() { 108 CompiledScript = null; 109 DeregisterScriptEvents(); 110 compiledScript = null; 109 111 var assembly = base.Compile(); 110 112 var types = assembly.GetTypes(); 111 DeregisterScriptEvents(); 112 CompiledScript = (CSharpScriptBase)Activator.CreateInstance(types.First(x => typeof(CSharpScriptBase).IsAssignableFrom(x))); 113 compiledScript = (CSharpScriptBase)Activator.CreateInstance(types.Single(x => typeof(CSharpScriptBase).IsAssignableFrom(x))); 113 114 RegisterScriptEvents(); 114 115 return assembly; … … 116 117 #endregion 117 118 118 pr otected Thread ScriptThread;119 private Thread scriptThread; 119 120 public virtual void Execute() { 120 if (CompiledScript == null) return; 121 var executeMethod = typeof(CSharpScriptBase).GetMethod(ExecuteMethodName, BindingFlags.NonPublic | BindingFlags.Instance); 122 if (executeMethod != null) { 123 ScriptThread = new Thread(() => { 124 Exception ex = null; 125 try { 126 OnScriptExecutionStarted(); 127 executeMethod.Invoke(CompiledScript, new object[] { VariableStore }); 128 } catch (ThreadAbortException) { 129 // the execution was cancelled by the user 130 } catch (TargetInvocationException e) { 131 ex = e.InnerException; 132 } finally { 133 OnScriptExecutionFinished(ex); 134 } 135 }); 136 ScriptThread.Start(); 137 } 121 if (compiledScript == null) return; 122 scriptThread = new Thread(() => { 123 Exception ex = null; 124 try { 125 OnScriptExecutionStarted(); 126 compiledScript.Execute(VariableStore); 127 } catch (ThreadAbortException) { 128 // the execution was cancelled by the user 129 } catch (Exception e) { 130 ex = e; 131 } finally { 132 OnScriptExecutionFinished(ex); 133 } 134 }); 135 scriptThread.Start(); 138 136 } 139 137 140 138 public virtual void Kill() { 141 if ( ScriptThread.IsAlive)142 ScriptThread.Abort();139 if (scriptThread.IsAlive) 140 scriptThread.Abort(); 143 141 } 144 142 -
stable/HeuristicLab.Scripting/3.3/CSharpScriptBase.cs
r10731 r10892 52 52 53 53 protected class EventWriter : TextWriter { 54 private readonly CSharpScriptBase usb;54 private readonly CSharpScriptBase script; 55 55 56 public EventWriter(CSharpScriptBase usb) {57 this. usb = usb;56 public EventWriter(CSharpScriptBase script) { 57 this.script = script; 58 58 } 59 59 … … 64 64 #region Write/WriteLine Overrides 65 65 #region Write 66 public override void Write(bool value) { usb.OnConsoleOutputChanged(value.ToString()); }67 public override void Write(char value) { usb.OnConsoleOutputChanged(value.ToString()); }68 public override void Write(char[] buffer) { usb.OnConsoleOutputChanged(new string(buffer)); }69 public override void Write(char[] buffer, int index, int count) { usb.OnConsoleOutputChanged(new string(buffer, index, count)); }70 public override void Write(decimal value) { usb.OnConsoleOutputChanged(value.ToString()); }71 public override void Write(double value) { usb.OnConsoleOutputChanged(value.ToString()); }72 public override void Write(float value) { usb.OnConsoleOutputChanged(value.ToString()); }73 public override void Write(int value) { usb.OnConsoleOutputChanged(value.ToString()); }74 public override void Write(long value) { usb.OnConsoleOutputChanged(value.ToString()); }75 public override void Write(object value) { usb.OnConsoleOutputChanged(value.ToString()); }76 public override void Write(string value) { usb.OnConsoleOutputChanged(value); }77 public override void Write(string format, object arg0) { usb.OnConsoleOutputChanged(string.Format(format, arg0)); }78 public override void Write(string format, object arg0, object arg1) { usb.OnConsoleOutputChanged(string.Format(format, arg0, arg0)); }79 public override void Write(string format, object arg0, object arg1, object arg2) { usb.OnConsoleOutputChanged(string.Format(format, arg0, arg1, arg2)); }80 public override void Write(string format, params object[] arg) { usb.OnConsoleOutputChanged(string.Format(format, arg)); }81 public override void Write(uint value) { usb.OnConsoleOutputChanged(value.ToString()); }82 public override void Write(ulong value) { usb.OnConsoleOutputChanged(value.ToString()); }66 public override void Write(bool value) { script.OnConsoleOutputChanged(value.ToString()); } 67 public override void Write(char value) { script.OnConsoleOutputChanged(value.ToString()); } 68 public override void Write(char[] buffer) { script.OnConsoleOutputChanged(new string(buffer)); } 69 public override void Write(char[] buffer, int index, int count) { script.OnConsoleOutputChanged(new string(buffer, index, count)); } 70 public override void Write(decimal value) { script.OnConsoleOutputChanged(value.ToString()); } 71 public override void Write(double value) { script.OnConsoleOutputChanged(value.ToString()); } 72 public override void Write(float value) { script.OnConsoleOutputChanged(value.ToString()); } 73 public override void Write(int value) { script.OnConsoleOutputChanged(value.ToString()); } 74 public override void Write(long value) { script.OnConsoleOutputChanged(value.ToString()); } 75 public override void Write(object value) { script.OnConsoleOutputChanged(value.ToString()); } 76 public override void Write(string value) { script.OnConsoleOutputChanged(value); } 77 public override void Write(string format, object arg0) { script.OnConsoleOutputChanged(string.Format(format, arg0)); } 78 public override void Write(string format, object arg0, object arg1) { script.OnConsoleOutputChanged(string.Format(format, arg0, arg0)); } 79 public override void Write(string format, object arg0, object arg1, object arg2) { script.OnConsoleOutputChanged(string.Format(format, arg0, arg1, arg2)); } 80 public override void Write(string format, params object[] arg) { script.OnConsoleOutputChanged(string.Format(format, arg)); } 81 public override void Write(uint value) { script.OnConsoleOutputChanged(value.ToString()); } 82 public override void Write(ulong value) { script.OnConsoleOutputChanged(value.ToString()); } 83 83 #endregion 84 84 85 85 #region WriteLine 86 public override void WriteLine() { usb.OnConsoleOutputChanged(Environment.NewLine); }87 public override void WriteLine(bool value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }88 public override void WriteLine(char value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }89 public override void WriteLine(char[] buffer) { usb.OnConsoleOutputChanged(new string(buffer) + Environment.NewLine); }90 public override void WriteLine(char[] buffer, int index, int count) { usb.OnConsoleOutputChanged(new string(buffer, index, count) + Environment.NewLine); }91 public override void WriteLine(decimal value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }92 public override void WriteLine(double value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }93 public override void WriteLine(float value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }94 public override void WriteLine(int value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }95 public override void WriteLine(long value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }96 public override void WriteLine(object value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }97 public override void WriteLine(string value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }98 public override void WriteLine(string format, object arg0) { usb.OnConsoleOutputChanged(string.Format(format, arg0) + Environment.NewLine); }99 public override void WriteLine(string format, object arg0, object arg1) { usb.OnConsoleOutputChanged(string.Format(format, arg0, arg1) + Environment.NewLine); }100 public override void WriteLine(string format, object arg0, object arg1, object arg2) { usb.OnConsoleOutputChanged(string.Format(format, arg0, arg1, arg2) + Environment.NewLine); }101 public override void WriteLine(string format, params object[] arg) { usb.OnConsoleOutputChanged(string.Format(format, arg) + Environment.NewLine); }102 public override void WriteLine(uint value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }103 public override void WriteLine(ulong value) { usb.OnConsoleOutputChanged(value + Environment.NewLine); }86 public override void WriteLine() { script.OnConsoleOutputChanged(Environment.NewLine); } 87 public override void WriteLine(bool value) { script.OnConsoleOutputChanged(value + Environment.NewLine); } 88 public override void WriteLine(char value) { script.OnConsoleOutputChanged(value + Environment.NewLine); } 89 public override void WriteLine(char[] buffer) { script.OnConsoleOutputChanged(new string(buffer) + Environment.NewLine); } 90 public override void WriteLine(char[] buffer, int index, int count) { script.OnConsoleOutputChanged(new string(buffer, index, count) + Environment.NewLine); } 91 public override void WriteLine(decimal value) { script.OnConsoleOutputChanged(value + Environment.NewLine); } 92 public override void WriteLine(double value) { script.OnConsoleOutputChanged(value + Environment.NewLine); } 93 public override void WriteLine(float value) { script.OnConsoleOutputChanged(value + Environment.NewLine); } 94 public override void WriteLine(int value) { script.OnConsoleOutputChanged(value + Environment.NewLine); } 95 public override void WriteLine(long value) { script.OnConsoleOutputChanged(value + Environment.NewLine); } 96 public override void WriteLine(object value) { script.OnConsoleOutputChanged(value + Environment.NewLine); } 97 public override void WriteLine(string value) { script.OnConsoleOutputChanged(value + Environment.NewLine); } 98 public override void WriteLine(string format, object arg0) { script.OnConsoleOutputChanged(string.Format(format, arg0) + Environment.NewLine); } 99 public override void WriteLine(string format, object arg0, object arg1) { script.OnConsoleOutputChanged(string.Format(format, arg0, arg1) + Environment.NewLine); } 100 public override void WriteLine(string format, object arg0, object arg1, object arg2) { script.OnConsoleOutputChanged(string.Format(format, arg0, arg1, arg2) + Environment.NewLine); } 101 public override void WriteLine(string format, params object[] arg) { script.OnConsoleOutputChanged(string.Format(format, arg) + Environment.NewLine); } 102 public override void WriteLine(uint value) { script.OnConsoleOutputChanged(value + Environment.NewLine); } 103 public override void WriteLine(ulong value) { script.OnConsoleOutputChanged(value + Environment.NewLine); } 104 104 #endregion 105 105 #endregion -
stable/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj
r10506 r10892 85 85 </ItemGroup> 86 86 <ItemGroup> 87 <Compile Include="CSharpScript.cs" /> 88 <Compile Include="Variables.cs" /> 87 89 <Compile Include="VariableStore.cs" /> 88 90 <None Include="Plugin.cs.frame" /> 89 91 <Compile Include="Script.cs" /> 90 <Compile Include=" UserScriptBase.cs" />92 <Compile Include="CSharpScriptBase.cs" /> 91 93 <Compile Include="Plugin.cs" /> 92 94 <Compile Include="Properties\AssemblyInfo.cs" /> -
stable/HeuristicLab.Scripting/3.3/Script.cs
r10506 r10892 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("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 global variables in the variable store 48 49 using System; 50 using System.Linq; 51 using System.Collections.Generic; 52 using HeuristicLab.Common; 53 using HeuristicLab.Core; 54 using HeuristicLab.Data; 55 56 public class UserScript : HeuristicLab.Scripting.UserScriptBase { 57 public override void Main() { 58 // type your code here 59 } 60 61 // further classes and methods 62 63 }"; 64 #endregion 39 public class Script : NamedItem { 40 protected virtual string CodeTemplate { 41 get { return string.Empty; } 42 } 65 43 66 44 #region Fields & Properties 67 private UserScriptBase compiledScript;68 69 public string Filename { get; set; }70 71 45 public static new Image StaticItemImage { 72 46 get { return VSImageLibrary.Script; } 73 }74 75 [Storable]76 private VariableStore variableStore;77 public VariableStore VariableStore {78 get { return variableStore; }79 47 } 80 48 … … 86 54 if (value == code) return; 87 55 code = value; 88 compiledScript = null;89 56 OnCodeChanged(); 90 57 } 91 }92 93 private string compilationUnitCode;94 public string CompilationUnitCode {95 get { return compilationUnitCode; }96 58 } 97 59 … … 108 70 #region Construction & Initialization 109 71 [StorableConstructor] 110 pr ivateScript(bool deserializing) : base(deserializing) { }111 pr ivateScript(Script original, Cloner cloner)72 protected Script(bool deserializing) : base(deserializing) { } 73 protected Script(Script original, Cloner cloner) 112 74 : base(original, cloner) { 113 75 code = original.code; 114 variableStore = new VariableStore();115 compilationUnitCode = original.compilationUnitCode;116 76 if (original.compileErrors != null) 117 77 compileErrors = new CompilerErrorCollection(original.compileErrors); 118 78 } 119 120 79 public Script() 121 : base("Script", "A HeuristicLab script.") { 122 code = CodeTemplate; 123 variableStore = new VariableStore(); 80 : base("Script", "An empty script.") { 81 code = string.Empty; 82 } 83 public Script(string code) 84 : this() { 85 this.code = code; 124 86 } 125 87 … … 129 91 #endregion 130 92 131 private void RegisterScriptEvents() { 132 if (compiledScript == null) return; 133 compiledScript.ConsoleOutputChanged += compiledScript_ConsoleOutputChanged; 93 #region Compilation 94 protected virtual CSharpCodeProvider CodeProvider { 95 get { 96 return new CSharpCodeProvider( 97 new Dictionary<string, string> { 98 {"CompilerVersion", "v4.0"}, // support C# 4.0 syntax 99 }); 100 } 134 101 } 135 102 136 private void DeregisterScriptEvents() { 137 if (compiledScript == null) return; 138 compiledScript.ConsoleOutputChanged -= compiledScript_ConsoleOutputChanged; 139 } 140 141 #region Compilation 142 private CSharpCodeProvider codeProvider = 143 new CSharpCodeProvider( 144 new Dictionary<string, string> { 145 { "CompilerVersion", "v4.0" }, // support C# 4.0 syntax 146 }); 147 148 private CompilerResults DoCompile() { 103 protected virtual CompilerResults DoCompile() { 149 104 var parameters = new CompilerParameters { 150 105 GenerateExecutable = false, … … 159 114 var unit = CreateCompilationUnit(); 160 115 var writer = new StringWriter(); 161 codeProvider.GenerateCodeFromCompileUnit(116 CodeProvider.GenerateCodeFromCompileUnit( 162 117 unit, 163 118 writer, … … 166 121 IndentString = " ", 167 122 }); 168 compilationUnitCode = writer.ToString(); 169 return codeProvider.CompileAssemblyFromDom(parameters, unit); 123 return CodeProvider.CompileAssemblyFromDom(parameters, unit); 170 124 } 171 125 172 public v oidCompile() {126 public virtual Assembly Compile() { 173 127 var results = DoCompile(); 174 compiledScript = null;175 128 CompileErrors = results.Errors; 176 129 if (results.Errors.HasErrors) { … … 181 134 .AppendLine(error.ErrorText); 182 135 } 183 throw new Exception(string.Format( 184 "Compilation of \"{0}\" failed:{1}{2}", 185 Name, Environment.NewLine, 186 sb.ToString())); 136 throw new Exception(string.Format("Compilation of \"{0}\" failed:{1}{2}", 137 Name, Environment.NewLine, sb.ToString())); 187 138 } else { 188 var assembly = results.CompiledAssembly; 189 var types = assembly.GetTypes(); 190 DeregisterScriptEvents(); 191 compiledScript = (UserScriptBase)Activator.CreateInstance(types[0]); 192 RegisterScriptEvents(); 139 return results.CompiledAssembly; 193 140 } 194 141 } 195 142 196 public IEnumerable<Assembly> GetAssemblies() {143 public virtual IEnumerable<Assembly> GetAssemblies() { 197 144 var assemblies = new List<Assembly>(); 198 145 foreach (var a in AppDomain.CurrentDomain.GetAssemblies()) { … … 210 157 } 211 158 212 private readonly Regex SafeTypeNameCharRegex = new Regex("[_a-zA-Z0-9]+"); 213 private readonly Regex SafeTypeNameRegex = new Regex("[_a-zA-Z][_a-zA-Z0-9]*"); 214 215 private CodeCompileUnit CreateCompilationUnit() { 159 protected virtual CodeCompileUnit CreateCompilationUnit() { 216 160 var unit = new CodeSnippetCompileUnit(code); 217 161 return unit; 218 162 } 219 220 public string CompiledTypeName {221 get {222 var sb = new StringBuilder();223 var strings = SafeTypeNameCharRegex.Matches(Name)224 .Cast<Match>()225 .Select(m => m.Value);226 foreach (string s in strings)227 sb.Append(s);228 return SafeTypeNameRegex.Match(sb.ToString()).Value;229 }230 }231 163 #endregion 232 164 233 private Thread scriptThread;234 public void Execute() {235 if (compiledScript == null) return;236 var executeMethod = typeof(UserScriptBase).GetMethod(ExecuteMethodName, BindingFlags.NonPublic | BindingFlags.Instance);237 if (executeMethod != null) {238 scriptThread = new Thread(() => {239 Exception ex = null;240 try {241 OnScriptExecutionStarted();242 executeMethod.Invoke(compiledScript, new[] { VariableStore });243 } catch (ThreadAbortException) {244 // the execution was cancelled by the user245 } catch (TargetInvocationException e) {246 ex = e.InnerException;247 } finally {248 OnScriptExecutionFinished(ex);249 }250 });251 scriptThread.Start();252 }253 }254 255 public void Kill() {256 if (scriptThread.IsAlive)257 scriptThread.Abort();258 }259 260 private void compiledScript_ConsoleOutputChanged(object sender, EventArgs<string> e) {261 OnConsoleOutputChanged(e.Value);262 }263 264 165 public event EventHandler CodeChanged; 265 pr ivatevoid OnCodeChanged() {166 protected virtual void OnCodeChanged() { 266 167 var handler = CodeChanged; 267 168 if (handler != null) handler(this, EventArgs.Empty); … … 269 170 270 171 public event EventHandler CompileErrorsChanged; 271 pr ivatevoid OnCompileErrorsChanged() {172 protected virtual void OnCompileErrorsChanged() { 272 173 var handler = CompileErrorsChanged; 273 174 if (handler != null) handler(this, EventArgs.Empty); 274 175 } 275 276 public event EventHandler ScriptExecutionStarted;277 private void OnScriptExecutionStarted() {278 var handler = ScriptExecutionStarted;279 if (handler != null) handler(this, EventArgs.Empty);280 }281 282 public event EventHandler<EventArgs<Exception>> ScriptExecutionFinished;283 private void OnScriptExecutionFinished(Exception e) {284 var handler = ScriptExecutionFinished;285 if (handler != null) handler(this, new EventArgs<Exception>(e));286 }287 288 public event EventHandler<EventArgs<string>> ConsoleOutputChanged;289 private void OnConsoleOutputChanged(string args) {290 var handler = ConsoleOutputChanged;291 if (handler != null) handler(this, new EventArgs<string>(args));292 }293 176 } 294 177 } -
stable/HeuristicLab.Scripting/3.3/UserScriptBase.cs
r10512 r10892 52 52 var handler = ConsoleOutputChanged; 53 53 if (handler != null) handler(null, new EventArgs<string>(args)); 54 }55 56 protected class Variables : DynamicObject, IEnumerable<KeyValuePair<string, object>> {57 private readonly VariableStore variableStore;58 59 public ICollection<string> Keys {60 get { return variableStore.Keys; }61 }62 63 public ICollection<object> Values {64 get { return variableStore.Values; }65 }66 67 public Variables(VariableStore variableStore) {68 this.variableStore = variableStore;69 }70 71 public override bool TryGetMember(GetMemberBinder binder, out object result) {72 return variableStore.TryGetValue(binder.Name, out result);73 }74 75 public override bool TrySetMember(SetMemberBinder binder, object value) {76 variableStore[binder.Name] = value;77 return true;78 }79 80 public bool Contains(string variableName) {81 return variableStore.ContainsKey(variableName);82 }83 84 public IEnumerator<KeyValuePair<string, object>> GetEnumerator() {85 return variableStore.GetEnumerator();86 }87 88 IEnumerator IEnumerable.GetEnumerator() {89 return GetEnumerator();90 }91 54 } 92 55 -
stable/HeuristicLab.Scripting/3.3/Variables.cs
r10566 r10892 6 6 public class Variables : DynamicObject, IEnumerable<KeyValuePair<string, object>> { 7 7 private readonly VariableStore variableStore; 8 9 public ICollection<string> Keys {10 get { return variableStore.Keys; }11 }12 13 public ICollection<object> Values {14 get { return variableStore.Values; }15 }16 8 17 9 public Variables(VariableStore variableStore) { … … 32 24 } 33 25 26 public void Clear() { 27 variableStore.Clear(); 28 } 29 34 30 public IEnumerator<KeyValuePair<string, object>> GetEnumerator() { 35 31 return variableStore.GetEnumerator();
Note: See TracChangeset
for help on using the changeset viewer.