Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/06/10 18:17:09 (13 years ago)
Author:
epitzer
Message:

Add breakpoint to ProgrammableOperator (#1322)

this patch also adds a shortcut (F6) to recompile, makes minor GUI improvements and gets rid of resource files

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperatorView.cs

    r4838 r5042  
    2222using System;
    2323using System.Collections.Generic;
     24using System.Drawing;
    2425using System.Linq;
    2526using System.Reflection;
     
    3334
    3435namespace HeuristicLab.Operators.Programmable {
     36
    3537  [View("ProgrammableOperator View")]
    3638  [Content(typeof(ProgrammableOperator), true)]
     
    5557      ProgrammableOperator.CodeChanged += ProgrammableOperator_CodeChanged;
    5658      ProgrammableOperator.SignatureChanged += ProgrammableOperator_SignatureChanged;
     59      ProgrammableOperator.BreakpointChanged += ProgrammableOperator_BreakpointChanged;
    5760    }
    5861
     
    6063      ProgrammableOperator.CodeChanged -= ProgrammableOperator_CodeChanged;
    6164      ProgrammableOperator.SignatureChanged -= ProgrammableOperator_SignatureChanged;
     65      ProgrammableOperator.BreakpointChanged -= ProgrammableOperator_BreakpointChanged;
    6266      base.DeregisterContentEvents();
    6367    }
     68
     69    #region Content event handlers
     70    void ProgrammableOperator_BreakpointChanged(object sender, EventArgs e) {
     71      breakpointCheckBox.Checked = ProgrammableOperator.Breakpoint;
     72    }
     73    private void ProgrammableOperator_CodeChanged(object sender, EventArgs e) {
     74      codeEditor.Text = ProgrammableOperator.Code;
     75    }
     76    private void ProgrammableOperator_SignatureChanged(object sender, EventArgs args) {
     77      codeEditor.Prefix = GetGeneratedPrefix();
     78    }
     79    #endregion
    6480
    6581    protected override void OnContentChanged() {
     
    86102          ProgrammableOperator.CompilationUnitCode.Length > 0;
    87103        parameterCollectionView.Content = ProgrammableOperator.Parameters;
     104        if (ProgrammableOperator.CompileErrors == null) {
     105          compilationLabel.ForeColor = SystemColors.ControlDarkDark;
     106          compilationLabel.Text = "not compiled";
     107        } else if (ProgrammableOperator.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
    88115      }
    89116    }
     
    96123      compileButton.Enabled = Content != null && !ReadOnly;
    97124      codeEditor.Enabled = Content != null && !ReadOnly;
    98     }
    99 
    100 
    101     private string GetGeneratedPrefix() {
    102       StringBuilder prefix = new StringBuilder();
    103       foreach (var ns in ProgrammableOperator.GetSelectedAndValidNamespaces()) {
    104         prefix.Append("using ").Append(ns).AppendLine(";");
    105       }
    106       prefix.AppendLine();
    107       prefix.Append("public class ").Append(ProgrammableOperator.CompiledTypeName).AppendLine(" {");
    108       prefix.Append("  ").Append(ProgrammableOperator.Signature).AppendLine(" {");
    109       return prefix.ToString();
    110     }
    111 
     125      showCodeButton.Enabled = Content != null && !string.IsNullOrEmpty(ProgrammableOperator.CompilationUnitCode) && !ReadOnly;
     126    }
     127
     128    #region Child Control event handlers
     129    private void compileButton_Click(object sender, EventArgs e) {
     130      Recompile();
     131    }
     132    private void breakpointCheckBox_CheckedChanged(object sender, EventArgs e) {
     133      if (ProgrammableOperator != null) ProgrammableOperator.Breakpoint = breakpointCheckBox.Checked;
     134    }
     135    private void showCodeButton_Click(object sender, EventArgs e) {
     136      new CodeViewer(ProgrammableOperator.CompilationUnitCode).ShowDialog(this);
     137    }
    112138    private void codeEditor_Validated(object sender, EventArgs e) {
    113139      ProgrammableOperator.Code = codeEditor.UserCode;
    114140    }
    115 
    116     private void Recompile() {
    117       this.Enabled = false;
    118       try {
    119         ProgrammableOperator.Compile();
    120         MessageBox.Show("Compilation successful", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
    121       } catch (Exception ex) {
    122         ErrorHandling.ShowErrorDialog(this, ex);
    123       }
    124       OnContentChanged();
    125       this.Enabled = true;
    126     }
    127 
    128     private void compileButton_Click(object sender, EventArgs e) {
    129       Recompile();
    130     }
    131 
    132     #region ProgrammableOperator Events
    133     private void ProgrammableOperator_CodeChanged(object sender, EventArgs e) {
    134       codeEditor.Text = ProgrammableOperator.Code;
    135     }
    136     private void ProgrammableOperator_SignatureChanged(object sender, EventArgs args) {
    137       codeEditor.Prefix = GetGeneratedPrefix();
    138     }
    139     #endregion
    140 
    141141    private void assembliesTreeView_AfterCheck(object sender, TreeViewEventArgs e) {
    142142      if (initializing)
     
    158158      InitializeNamespacesList();
    159159      codeEditor.Prefix = GetGeneratedPrefix();
     160    }
     161    private void namespacesTreeView_AfterCheck(object sender, TreeViewEventArgs e) {
     162      if (initializing)
     163        return;
     164      if (e.Node.Checked) {
     165        ProgrammableOperator.SelectNamespace(e.Node.FullPath);
     166      } else {
     167        ProgrammableOperator.UnselectNamespace(e.Node.FullPath);
     168      }
     169      codeEditor.Prefix = GetGeneratedPrefix();
     170    }
     171    #endregion
     172
     173    #region global HotKeys
     174    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
     175      if (keyData == Keys.F6) {
     176        Control activeControl = ActiveControl;
     177        compileButton.Focus();
     178        Recompile();
     179        if (activeControl != null)
     180          activeControl.Focus();
     181        return true;
     182      }
     183      return base.ProcessCmdKey(ref msg, keyData);
     184    }
     185    #endregion
     186
     187    #region Auxiliary functions
     188
     189    private string GetGeneratedPrefix() {
     190      StringBuilder prefix = new StringBuilder();
     191      foreach (var ns in ProgrammableOperator.GetSelectedAndValidNamespaces()) {
     192        prefix.Append("using ").Append(ns).AppendLine(";");
     193      }
     194      prefix.AppendLine();
     195      prefix.Append("public class ").Append(ProgrammableOperator.CompiledTypeName).AppendLine(" {");
     196      prefix.Append("  ").Append(ProgrammableOperator.Signature).AppendLine(" {");
     197      return prefix.ToString();
     198    }
     199
     200    private void Recompile() {
     201      this.Enabled = false;
     202      try {
     203        ProgrammableOperator.Compile();
     204      } catch (Exception ex) {
     205        ErrorHandling.ShowErrorDialog(this, ex);
     206      }
     207      OnContentChanged();
     208      this.Enabled = true;
    160209    }
    161210
     
    265314    }
    266315
    267     private void namespacesTreeView_AfterCheck(object sender, TreeViewEventArgs e) {
    268       if (initializing)
    269         return;
    270       if (e.Node.Checked) {
    271         ProgrammableOperator.SelectNamespace(e.Node.FullPath);
    272       } else {
    273         ProgrammableOperator.UnselectNamespace(e.Node.FullPath);
    274       }
    275       codeEditor.Prefix = GetGeneratedPrefix();
    276     }
    277 
    278     private void showCodeButton_Click(object sender, EventArgs e) {
    279       new CodeViewer(ProgrammableOperator.CompilationUnitCode).ShowDialog(this);
    280     }
     316    #endregion
    281317  }
    282318}
Note: See TracChangeset for help on using the changeset viewer.