Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/29/15 12:50:06 (8 years ago)
Author:
jkarder
Message:

#2298: added ExecutableScript and ExecutableScriptView

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Scripting.Views/3.3/CSharpScriptView.cs

    r13024 r13080  
    2121
    2222using System;
    23 using System.Drawing;
    24 using System.Threading;
    2523using System.Windows.Forms;
    2624using HeuristicLab.Common;
    27 using HeuristicLab.Common.Resources;
    2825using HeuristicLab.MainForm;
    2926
     
    3229  [View("C# Script View")]
    3330  [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 {
    4132
    4233    public new CSharpScript Content {
     
    5142    protected override void RegisterContentEvents() {
    5243      base.RegisterContentEvents();
    53       Content.ScriptExecutionStarted += ContentOnScriptExecutionStarted;
    54       Content.ScriptExecutionFinished += ContentOnScriptExecutionFinished;
    5544      Content.ConsoleOutputChanged += ContentOnConsoleOutputChanged;
    56       Content.ExecutionTimeChanged += ContentOnExecutionTimeChanged;
    5745    }
    5846
    5947    protected override void DeregisterContentEvents() {
    60       Content.ScriptExecutionStarted -= ContentOnScriptExecutionStarted;
    61       Content.ScriptExecutionFinished -= ContentOnScriptExecutionFinished;
    6248      Content.ConsoleOutputChanged -= ContentOnConsoleOutputChanged;
    63       Content.ExecutionTimeChanged -= ContentOnExecutionTimeChanged;
    6449      base.DeregisterContentEvents();
    6550    }
    6651
    6752    #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 user
    94           UpdateInfoTextLabel(ScriptExecutionCanceledMessage, Color.DarkOrange);
    95         } else {
    96           UpdateInfoTextLabel(ScriptExecutionFailedMessage, Color.DarkRed);
    97           PluginInfrastructure.ErrorHandling.ShowErrorDialog(this, ex);
    98         }
    99 
    100         Running = false;
    101       }
    102     }
    10353    protected virtual void ContentOnConsoleOutputChanged(object sender, EventArgs<string> e) {
    10454      if (InvokeRequired)
     
    10656      else {
    10757        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();
    11558      }
    11659    }
     
    12164      if (Content == null) {
    12265        variableStoreView.Content = null;
    123         executionTimeTextBox.Text = "-";
    12466      } else {
    12567        variableStoreView.Content = Content.VariableStore;
    126         executionTimeTextBox.Text = Content.ExecutionTime.ToString();
    12768      }
    12869    }
    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       } else
    139         if (Compile()) {
    140         outputTextBox.Clear();
    141         Running = true;
    142         Content.ExecuteAsync();
    143       }
    144     }
    145 
    146     #region global HotKeys
    147     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     #endregion
    16870  }
    16971}
Note: See TracChangeset for help on using the changeset viewer.