Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/06/15 12:44:09 (9 years ago)
Author:
jkarder
Message:

#2077: merged r11807:11811, r11816, r11819, r11822, r11825, r11834, r11835, r11836, r11933 and r11936 into stable

Location:
stable
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • stable

  • stable/HeuristicLab.Scripting.Views/3.3/ScriptView.cs

    r11908 r11937  
    2222using System;
    2323using System.CodeDom.Compiler;
     24using System.Collections.Generic;
    2425using System.Drawing;
    2526using System.Globalization;
    2627using System.Linq;
     28using System.Reflection;
    2729using System.Windows.Forms;
     30using HeuristicLab.Common;
    2831using HeuristicLab.Common.Resources;
    2932using HeuristicLab.Core.Views;
     
    3538  [Content(typeof(Script), true)]
    3639  public partial class ScriptView : NamedItemView {
     40    private const string NotCompiledMessage = "Not compiled";
     41    private const string CompilationSucceededMessage = "Compilation succeeded";
     42    private const string CompilationFailedMessage = "Compilation failed";
     43    private const string AssembliesLoadingMessage = "Loading Assemblies";
     44    private const string AssembliesUnloadingMessage = "Unloading Assemblies";
     45    private const int SilentAssemblyLoadingOperationLimit = 10;
     46
    3747    #region Properties
    3848    public new Script Content {
     
    7383        codeEditor.UserCode = string.Empty;
    7484      } else {
    75         if (codeEditor.UserCode != Content.Code)
    76           codeEditor.UserCode = Content.Code;
    77         foreach (var asm in Content.GetAssemblies())
    78           codeEditor.AddAssembly(asm);
     85        codeEditor.UserCode = Content.Code;
     86        codeEditor.AddAssembliesAsync(Content.GetAssemblies());
    7987        if (Content.CompileErrors == null) {
    80           compilationLabel.ForeColor = SystemColors.ControlDarkDark;
    81           compilationLabel.Text = "Not compiled";
    82         } else if (Content.CompileErrors.HasErrors) {
    83           compilationLabel.ForeColor = Color.DarkRed;
    84           compilationLabel.Text = "Compilation failed";
    85         } else {
    86           compilationLabel.ForeColor = Color.DarkGreen;
    87           compilationLabel.Text = "Compilation successful";
     88          UpdateInfoTextLabel(NotCompiledMessage, SystemColors.ControlText);
    8889        }
    8990      }
     
    114115      try {
    115116        Content.Compile();
    116         outputTextBox.AppendText("Compilation succeeded.");
     117        outputTextBox.AppendText(CompilationSucceededMessage);
     118        UpdateInfoTextLabel(CompilationSucceededMessage, Color.DarkGreen);
    117119        return true;
    118120      } catch (CompilationException) {
    119121        if (Content.CompileErrors.HasErrors) {
    120           outputTextBox.AppendText("Compilation failed.");
     122          outputTextBox.AppendText(CompilationFailedMessage);
     123          UpdateInfoTextLabel(CompilationFailedMessage, Color.DarkRed);
    121124          return false;
    122125        } else {
    123           outputTextBox.AppendText("Compilation succeeded.");
     126          outputTextBox.AppendText(CompilationSucceededMessage);
     127          UpdateInfoTextLabel(CompilationSucceededMessage, Color.DarkGreen);
    124128          return true;
    125129        }
     
    131135        Locked = false;
    132136        codeEditor.Focus();
    133         OnContentChanged();
    134137      }
    135138    }
     
    137140    #region Helpers
    138141    protected virtual void ShowCompilationResults() {
    139       if (Content.CompileErrors.Count == 0) return;
    140 
    141142      var messages = Content.CompileErrors.OfType<CompilerError>()
    142143                                      .OrderBy(x => x.IsWarning)
     
    157158      }
    158159
    159       codeEditor.ShowCompileErrors(Content.CompileErrors, ".cs");
     160      codeEditor.ShowCompileErrors(Content.CompileErrors);
    160161
    161162      AdjustErrorListViewColumnSizes();
     163    }
     164
     165    protected virtual void UpdateInfoTextLabel(string message, Color color) {
     166      infoTextLabel.Text = message;
     167      infoTextLabel.ForeColor = color;
    162168    }
    163169
     
    167173        ch.Width = -2;
    168174    }
     175
     176    #region ProgressView
     177    private bool progressViewCreated;
     178
     179    private void AddProgressView(string progressMessage) {
     180      var mainForm = MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>();
     181      mainForm.AddOperationProgressToView(this, progressMessage);
     182      progressViewCreated = true;
     183    }
     184
     185    private void RemoveProgressView() {
     186      if (!progressViewCreated) return;
     187      var mainForm = MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>();
     188      mainForm.RemoveOperationProgressFromView(this);
     189      progressViewCreated = false;
     190    }
     191    #endregion
    169192    #endregion
    170193
    171194    #region Event Handlers
    172195    private void Content_CodeChanged(object sender, EventArgs e) {
    173       if (InvokeRequired)
    174         Invoke(new EventHandler(Content_CodeChanged), sender, e);
     196      if (InvokeRequired) Invoke((Action<object, EventArgs>)Content_CodeChanged, sender, e);
    175197      else {
    176198        codeEditor.UserCode = Content.Code;
     
    196218    }
    197219    #endregion
     220
     221    private void codeEditor_AssembliesLoading(object sender, EventArgs<IEnumerable<Assembly>> e) {
     222      if (InvokeRequired) Invoke((Action<object, EventArgs<IEnumerable<Assembly>>>)codeEditor_AssembliesLoading, sender, e);
     223      else {
     224        int nrOfAssemblies = e.Value.Count();
     225        if (nrOfAssemblies > SilentAssemblyLoadingOperationLimit)
     226          AddProgressView(AssembliesLoadingMessage);
     227      }
     228    }
     229
     230    private void codeEditor_AssembliesLoaded(object sender, EventArgs<IEnumerable<Assembly>> e) {
     231      if (InvokeRequired) Invoke((Action<object, EventArgs<IEnumerable<Assembly>>>)codeEditor_AssembliesLoaded, sender, e);
     232      else {
     233        RemoveProgressView();
     234      }
     235    }
     236
     237    private void codeEditor_AssembliesUnloading(object sender, EventArgs<IEnumerable<Assembly>> e) {
     238      if (InvokeRequired) Invoke((Action<object, EventArgs<IEnumerable<Assembly>>>)codeEditor_AssembliesUnloading, sender, e);
     239      else {
     240        int nrOfAssemblies = e.Value.Count();
     241        if (nrOfAssemblies > SilentAssemblyLoadingOperationLimit)
     242          AddProgressView(AssembliesUnloadingMessage);
     243      }
     244    }
     245
     246    private void codeEditor_AssembliesUnloaded(object sender, EventArgs<IEnumerable<Assembly>> e) {
     247      if (InvokeRequired) Invoke((Action<object, EventArgs<IEnumerable<Assembly>>>)codeEditor_AssembliesUnloaded, sender, e);
     248      else {
     249        RemoveProgressView();
     250      }
     251    }
    198252  }
    199253}
Note: See TracChangeset for help on using the changeset viewer.