Changeset 13080
- Timestamp:
- 10/29/15 12:50:06 (9 years ago)
- Location:
- trunk/sources
- Files:
-
- 3 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Scripting.Views/3.3/CSharpScriptView.Designer.cs
r13024 r13080 20 20 #endregion 21 21 22 using System.Windows.Forms;23 22 24 23 namespace HeuristicLab.Scripting.Views { … … 47 46 /// </summary> 48 47 private void InitializeComponent() { 49 this.components = new System.ComponentModel.Container();50 this.startStopButton = new System.Windows.Forms.Button();51 48 this.splitContainer2 = new System.Windows.Forms.SplitContainer(); 52 49 this.variableStoreView = new HeuristicLab.Scripting.Views.VariableStoreView(); 53 50 this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost(); 54 this.executionTimeTextBox = new System.Windows.Forms.TextBox(); 55 this.executionTimeLabel = new System.Windows.Forms.Label(); 51 this.infoTabControl.SuspendLayout(); 52 this.outputTabPage.SuspendLayout(); 53 this.errorListTabPage.SuspendLayout(); 56 54 ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); 57 55 this.splitContainer1.Panel1.SuspendLayout(); 56 this.splitContainer1.Panel2.SuspendLayout(); 58 57 this.splitContainer1.SuspendLayout(); 59 58 ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit(); … … 64 63 this.SuspendLayout(); 65 64 // 66 // splitContainer1.Panel165 // executionTimeLabel 67 66 // 68 this.splitContainer1.Panel1.Controls.Add(this.executionTimeTextBox); 69 this.splitContainer1.Panel1.Controls.Add(this.executionTimeLabel); 70 this.splitContainer1.Panel1.Controls.SetChildIndex(this.executionTimeTextBox, 0); 71 this.splitContainer1.Panel1.Controls.SetChildIndex(this.executionTimeLabel, 0); 67 this.executionTimeLabel.Location = new System.Drawing.Point(394, 393); 68 // 69 // executionTimeTextBox 70 // 71 this.executionTimeTextBox.Location = new System.Drawing.Point(483, 390); 72 // 73 // splitContainer1 74 // 75 this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left))); 76 this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; 77 this.splitContainer1.Location = new System.Drawing.Point(0, 0); 72 78 this.splitContainer1.Size = new System.Drawing.Size(637, 543); 73 // 74 // nameTextBox 75 // 76 this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft); 77 this.errorProvider.SetIconPadding(this.nameTextBox, 2); 78 this.nameTextBox.Location = new System.Drawing.Point(60, 0); 79 this.nameTextBox.Size = new System.Drawing.Size(750, 20); 80 // 81 // infoLabel 82 // 83 this.infoLabel.Location = new System.Drawing.Point(816, 4); 84 // 85 // startStopButton 86 // 87 this.startStopButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Play; 88 this.startStopButton.Location = new System.Drawing.Point(36, 26); 89 this.startStopButton.Name = "startStopButton"; 90 this.startStopButton.Size = new System.Drawing.Size(24, 24); 91 this.startStopButton.TabIndex = 1; 92 this.startStopButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; 93 this.toolTip.SetToolTip(this.startStopButton, "Run (F5)"); 94 this.startStopButton.UseVisualStyleBackColor = true; 95 this.startStopButton.Click += new System.EventHandler(this.StartStopButtonOnClick); 79 this.splitContainer1.SplitterDistance = 427; 96 80 // 97 81 // splitContainer2 … … 114 98 this.splitContainer2.SplitterDistance = 637; 115 99 this.splitContainer2.TabIndex = 7; 116 //117 // splitContainer1118 //119 this.splitContainer1.Location = new System.Drawing.Point(0, 0);120 this.splitContainer1.Dock = DockStyle.Fill;121 100 // 122 101 // variableStoreView … … 145 124 this.viewHost.ViewType = null; 146 125 // 147 // executionTimeTextBox 148 // 149 this.executionTimeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 150 this.executionTimeTextBox.Location = new System.Drawing.Point(483, 390); 151 this.executionTimeTextBox.Name = "executionTimeTextBox"; 152 this.executionTimeTextBox.ReadOnly = true; 153 this.executionTimeTextBox.Size = new System.Drawing.Size(137, 20); 154 this.executionTimeTextBox.TabIndex = 17; 155 // 156 // executionTimeLabel 157 // 158 this.executionTimeLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 159 this.executionTimeLabel.AutoSize = true; 160 this.executionTimeLabel.Location = new System.Drawing.Point(394, 393); 161 this.executionTimeLabel.Name = "executionTimeLabel"; 162 this.executionTimeLabel.Size = new System.Drawing.Size(83, 13); 163 this.executionTimeLabel.TabIndex = 16; 164 this.executionTimeLabel.Text = "&Execution Time:"; 165 // 166 // ScriptView 126 // CSharpScriptView 167 127 // 168 128 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit; 169 129 this.Controls.Add(this.splitContainer2); 170 this. Controls.Add(this.startStopButton);171 this. Name = "ScriptView";172 this. Size = new System.Drawing.Size(835, 602);130 this.Name = "CSharpScriptView"; 131 this.Controls.SetChildIndex(this.infoTextLabel, 0); 132 this.Controls.SetChildIndex(this.compileButton, 0); 173 133 this.Controls.SetChildIndex(this.startStopButton, 0); 174 134 this.Controls.SetChildIndex(this.splitContainer2, 0); … … 176 136 this.Controls.SetChildIndex(this.nameTextBox, 0); 177 137 this.Controls.SetChildIndex(this.infoLabel, 0); 138 this.infoTabControl.ResumeLayout(false); 139 this.outputTabPage.ResumeLayout(false); 140 this.outputTabPage.PerformLayout(); 141 this.errorListTabPage.ResumeLayout(false); 178 142 this.splitContainer1.Panel1.ResumeLayout(false); 179 143 this.splitContainer1.Panel1.PerformLayout(); 144 this.splitContainer1.Panel2.ResumeLayout(false); 180 145 ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); 181 146 this.splitContainer1.ResumeLayout(false); 147 ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit(); 182 148 this.splitContainer2.Panel1.ResumeLayout(false); 183 149 this.splitContainer2.Panel2.ResumeLayout(false); … … 191 157 #endregion 192 158 193 protected System.Windows.Forms.Button startStopButton;194 159 protected System.Windows.Forms.SplitContainer splitContainer2; 195 160 protected MainForm.WindowsForms.ViewHost viewHost; 196 161 protected VariableStoreView variableStoreView; 197 protected TextBox executionTimeTextBox;198 protected Label executionTimeLabel;199 162 } 200 163 } -
trunk/sources/HeuristicLab.Scripting.Views/3.3/CSharpScriptView.cs
r13024 r13080 21 21 22 22 using System; 23 using System.Drawing;24 using System.Threading;25 23 using System.Windows.Forms; 26 24 using HeuristicLab.Common; 27 using HeuristicLab.Common.Resources;28 25 using HeuristicLab.MainForm; 29 26 … … 32 29 [View("C# Script View")] 33 30 [Content(typeof(CSharpScript), true)] 34 public partial class CSharpScriptView : ScriptView { 35 private const string ScriptExecutionStartedMessage = "Script execution started"; 36 private const string ScriptExecutionCanceledMessage = "Script execution canceled"; 37 private const string ScriptExecutionSuccessfulMessage = "Script execution successful"; 38 private const string ScriptExecutionFailedMessage = "Script execution failed"; 39 40 protected bool Running { get; set; } 31 public partial class CSharpScriptView : ExecutableScriptView { 41 32 42 33 public new CSharpScript Content { … … 51 42 protected override void RegisterContentEvents() { 52 43 base.RegisterContentEvents(); 53 Content.ScriptExecutionStarted += ContentOnScriptExecutionStarted;54 Content.ScriptExecutionFinished += ContentOnScriptExecutionFinished;55 44 Content.ConsoleOutputChanged += ContentOnConsoleOutputChanged; 56 Content.ExecutionTimeChanged += ContentOnExecutionTimeChanged;57 45 } 58 46 59 47 protected override void DeregisterContentEvents() { 60 Content.ScriptExecutionStarted -= ContentOnScriptExecutionStarted;61 Content.ScriptExecutionFinished -= ContentOnScriptExecutionFinished;62 48 Content.ConsoleOutputChanged -= ContentOnConsoleOutputChanged; 63 Content.ExecutionTimeChanged -= ContentOnExecutionTimeChanged;64 49 base.DeregisterContentEvents(); 65 50 } 66 51 67 52 #region Content event handlers 68 protected virtual void ContentOnScriptExecutionStarted(object sender, EventArgs e) {69 if (InvokeRequired)70 Invoke((Action<object, EventArgs>)ContentOnScriptExecutionStarted, sender, e);71 else {72 Locked = true;73 ReadOnly = true;74 startStopButton.Image = VSImageLibrary.Stop;75 toolTip.SetToolTip(startStopButton, "Stop (Shift+F5)");76 UpdateInfoTextLabel(ScriptExecutionStartedMessage, SystemColors.ControlText);77 infoTabControl.SelectedTab = outputTabPage;78 }79 }80 protected virtual void ContentOnScriptExecutionFinished(object sender, EventArgs<Exception> e) {81 if (InvokeRequired)82 Invoke((Action<object, EventArgs<Exception>>)ContentOnScriptExecutionFinished, sender, e);83 else {84 Locked = false;85 ReadOnly = false;86 startStopButton.Image = VSImageLibrary.Play;87 toolTip.SetToolTip(startStopButton, "Run (F5)");88 89 var ex = e.Value;90 if (ex == null) {91 UpdateInfoTextLabel(ScriptExecutionSuccessfulMessage, Color.DarkGreen);92 } else if (ex is ThreadAbortException) {93 // the execution was canceled by the user94 UpdateInfoTextLabel(ScriptExecutionCanceledMessage, Color.DarkOrange);95 } else {96 UpdateInfoTextLabel(ScriptExecutionFailedMessage, Color.DarkRed);97 PluginInfrastructure.ErrorHandling.ShowErrorDialog(this, ex);98 }99 100 Running = false;101 }102 }103 53 protected virtual void ContentOnConsoleOutputChanged(object sender, EventArgs<string> e) { 104 54 if (InvokeRequired) … … 106 56 else { 107 57 outputTextBox.AppendText(e.Value); 108 }109 }110 protected virtual void ContentOnExecutionTimeChanged(object sender, EventArgs eventArgs) {111 if (InvokeRequired)112 Invoke((Action<object, EventArgs>)ContentOnExecutionTimeChanged, sender, eventArgs);113 else {114 executionTimeTextBox.Text = Content == null ? "-" : Content.ExecutionTime.ToString();115 58 } 116 59 } … … 121 64 if (Content == null) { 122 65 variableStoreView.Content = null; 123 executionTimeTextBox.Text = "-";124 66 } else { 125 67 variableStoreView.Content = Content.VariableStore; 126 executionTimeTextBox.Text = Content.ExecutionTime.ToString();127 68 } 128 69 } 129 130 protected override void SetEnabledStateOfControls() {131 base.SetEnabledStateOfControls();132 startStopButton.Enabled = Content != null && (!Locked || Running);133 }134 135 protected virtual void StartStopButtonOnClick(object sender, EventArgs e) {136 if (Running) {137 Content.Kill();138 } else139 if (Compile()) {140 outputTextBox.Clear();141 Running = true;142 Content.ExecuteAsync();143 }144 }145 146 #region global HotKeys147 protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {148 switch (keyData) {149 case Keys.F5:150 if (Content != null && !Locked && !Running) {151 if (Compile()) {152 outputTextBox.Clear();153 Content.ExecuteAsync();154 Running = true;155 }156 }157 return true;158 case Keys.F5 | Keys.Shift:159 if (Running) Content.Kill();160 return true;161 case Keys.F6:162 if (!Running) base.ProcessCmdKey(ref msg, keyData);163 return true;164 }165 return base.ProcessCmdKey(ref msg, keyData);166 }167 #endregion168 70 } 169 71 } -
trunk/sources/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj
r11807 r13080 97 97 <Compile Include="CSharpScriptView.Designer.cs"> 98 98 <DependentUpon>CSharpScriptView.cs</DependentUpon> 99 </Compile> 100 <Compile Include="ExecutableScriptView.cs"> 101 <SubType>UserControl</SubType> 102 </Compile> 103 <Compile Include="ExecutableScriptView.Designer.cs"> 104 <DependentUpon>ExecutableScriptView.cs</DependentUpon> 99 105 </Compile> 100 106 <Compile Include="ScriptView.cs"> -
trunk/sources/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj
r11882 r13080 92 92 <ItemGroup> 93 93 <Compile Include="CompilationException.cs" /> 94 <Compile Include="ExecutableScript.cs" /> 94 95 <Compile Include="Scripts\CSharp\CSharpScript.cs" /> 95 96 <Compile Include="Scripts\Templates\CSharpScriptTemplate.cs" /> -
trunk/sources/HeuristicLab.Scripting/3.3/Scripts/CSharp/CSharpScript.cs
r13024 r13080 23 23 using System.Linq; 24 24 using System.Reflection; 25 using System.Threading;26 25 using HeuristicLab.Common; 27 26 using HeuristicLab.Core; … … 32 31 [Creatable(CreatableAttribute.Categories.Scripts, Priority = 100)] 33 32 [StorableClass] 34 public class CSharpScript : Script, IStorableContent {33 public class CSharpScript : ExecutableScript, IStorableContent { 35 34 #region Constants 36 protected const string ExecuteMethodName = "Execute";37 35 protected override string CodeTemplate { get { return ScriptTemplates.CSharpScriptTemplate; } } 38 36 #endregion … … 40 38 #region Fields & Properties 41 39 private CSharpScriptBase compiledScript; 42 private Thread scriptThread;43 private DateTime lastUpdateTime;44 40 45 41 public string Filename { get; set; } … … 50 46 get { return variableStore; } 51 47 } 52 53 [Storable]54 private TimeSpan executionTime;55 public TimeSpan ExecutionTime {56 get { return executionTime; }57 protected set {58 executionTime = value;59 OnExecutionTimeChanged();60 }61 }62 48 #endregion 63 49 64 #region Construction & Initialization50 #region Construction & Cloning 65 51 [StorableConstructor] 66 52 protected CSharpScript(bool deserializing) : base(deserializing) { } … … 68 54 : base(original, cloner) { 69 55 variableStore = cloner.Clone(original.variableStore); 70 executionTime = original.executionTime;71 56 } 72 public CSharpScript() { 57 public CSharpScript() 58 : base() { 73 59 variableStore = new VariableStore(); 74 executionTime = TimeSpan.Zero;75 Code = CodeTemplate;76 60 } 77 61 public CSharpScript(string code) 78 62 : base(code) { 79 63 variableStore = new VariableStore(); 80 executionTime = TimeSpan.Zero;81 64 } 82 65 … … 97 80 98 81 #region Compilation 99 100 82 public override Assembly Compile() { 101 83 DeregisterScriptEvents(); … … 109 91 #endregion 110 92 111 p ublic virtual void ExecuteAsync() {93 protected override void ExecuteCode() { 112 94 if (compiledScript == null) return; 113 executionTime = TimeSpan.Zero;114 scriptThread = new Thread(() => {115 Exception ex = null;116 var timer = new System.Timers.Timer(250) { AutoReset = true };117 timer.Elapsed += timer_Elapsed;118 try {119 OnScriptExecutionStarted();120 lastUpdateTime = DateTime.UtcNow;121 timer.Start();122 compiledScript.Execute(VariableStore);123 } catch (Exception e) {124 ex = e;125 } finally {126 scriptThread = null;127 timer.Elapsed -= timer_Elapsed;128 timer.Stop();129 ExecutionTime += DateTime.UtcNow - lastUpdateTime;130 OnScriptExecutionFinished(ex);131 }132 });133 scriptThread.SetApartmentState(ApartmentState.STA);134 scriptThread.Start();135 }136 95 137 public virtual void Kill() { 138 if (scriptThread == null) return; 139 scriptThread.Abort(); 140 } 141 142 private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { 143 var timer = (System.Timers.Timer)sender; 144 timer.Enabled = false; 145 DateTime now = DateTime.UtcNow; 146 ExecutionTime += now - lastUpdateTime; 147 lastUpdateTime = now; 148 timer.Enabled = true; 96 compiledScript.Execute(VariableStore); 149 97 } 150 98 151 99 protected virtual void CompiledScriptOnConsoleOutputChanged(object sender, EventArgs<string> e) { 152 100 OnConsoleOutputChanged(e.Value); 153 }154 155 public event EventHandler ScriptExecutionStarted;156 protected virtual void OnScriptExecutionStarted() {157 var handler = ScriptExecutionStarted;158 if (handler != null) handler(this, EventArgs.Empty);159 }160 161 public event EventHandler<EventArgs<Exception>> ScriptExecutionFinished;162 protected virtual void OnScriptExecutionFinished(Exception e) {163 var handler = ScriptExecutionFinished;164 if (handler != null) handler(this, new EventArgs<Exception>(e));165 101 } 166 102 … … 170 106 if (handler != null) handler(this, new EventArgs<string>(args)); 171 107 } 172 173 public event EventHandler ExecutionTimeChanged;174 protected virtual void OnExecutionTimeChanged() {175 var handler = ExecutionTimeChanged;176 if (handler != null) handler(this, EventArgs.Empty);177 }178 108 } 179 109 }
Note: See TracChangeset
for help on using the changeset viewer.