Changeset 11657
- Timestamp:
- 12/04/14 17:14:01 (10 years ago)
- Location:
- trunk/sources
- Files:
-
- 1 deleted
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.CodeEditor/3.3/CodeEditor.Designer.cs
r7967 r11657 46 46 // textEditor 47 47 // 48 this.textEditor.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 49 | System.Windows.Forms.AnchorStyles.Left)50 48 this.textEditor.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 49 | System.Windows.Forms.AnchorStyles.Left) 50 | System.Windows.Forms.AnchorStyles.Right))); 51 51 this.textEditor.ConvertTabsToSpaces = true; 52 52 this.textEditor.IndentStyle = ICSharpCode.TextEditor.Document.IndentStyle.Auto; 53 53 this.textEditor.IsIconBarVisible = true; 54 54 this.textEditor.IsReadOnly = false; 55 this.textEditor.LineViewerStyle = ICSharpCode.TextEditor.Document.LineViewerStyle.FullRow; 55 56 this.textEditor.Location = new System.Drawing.Point(0, 0); 56 57 this.textEditor.Name = "textEditor"; … … 97 98 this.sharpDevelopLabel.Text = "powered by #develop"; 98 99 this.sharpDevelopLabel.ToolTipText = "Syntax highlighting and code completion facilities provided through #develop libr" + 99 100 "aries"; 100 101 this.sharpDevelopLabel.Click += new System.EventHandler(this.toolStripStatusLabel1_Click); 101 102 // … … 108 109 // CodeEditor 109 110 // 110 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);111 111 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit; 112 112 this.Controls.Add(this.textEditor); -
trunk/sources/HeuristicLab.CodeEditor/3.3/CodeEditor.cs
r11436 r11657 46 46 47 47 #region Fields & Properties 48 private static Color WarningColor = Color.Blue; 49 private static Color ErrorColor = Color.Red; 48 50 49 51 internal Dom.ProjectContentRegistry projectContentRegistry; … … 127 129 } 128 130 set { 131 if (Doc.TextContent == value) return; 129 132 Doc.Replace(prefix.Length, Doc.TextLength - suffix.Length - prefix.Length, value); 130 133 Doc.RequestUpdate(new TextAreaUpdate(TextAreaUpdateType.WholeTextArea)); … … 141 144 142 145 public event EventHandler TextEditorValidated; 143 144 146 protected void OnTextEditorValidated() { 145 147 if (TextEditorValidated != null) … … 148 150 149 151 public event EventHandler TextEditorTextChanged; 150 151 152 protected void OnTextEditorTextChanged() { 152 153 if (TextEditorTextChanged != null) … … 159 160 textEditor.ActiveTextAreaControl.TextEditorProperties.SupportReadOnlySegments = true; 160 161 161 textEditor.SetHighlighting("C#"); 162 textEditor.ShowEOLMarkers = false; 163 textEditor.ShowInvalidLines = false; 162 LoadHighlightingStrategy(); 164 163 HostCallbackImplementation.Register(this); 165 164 CodeCompletionKeyHandler.Attach(this, textEditor); … … 192 191 return; 193 192 194 textEditor.ActiveTextAreaControl.TextArea.KeyEventHandler += new ICSharpCode.TextEditor.KeyEventHandler(TextArea_KeyEventHandler); 195 textEditor.ActiveTextAreaControl.TextArea.DoProcessDialogKey += new DialogKeyProcessor(TextArea_DoProcessDialogKey); 196 197 parserThread = new Thread(ParserThread); 198 parserThread.IsBackground = true; 193 textEditor.ActiveTextAreaControl.TextArea.KeyEventHandler += TextArea_KeyEventHandler; 194 textEditor.ActiveTextAreaControl.TextArea.DoProcessDialogKey += TextArea_DoProcessDialogKey; 195 196 parserThread = new Thread(ParserThread) { IsBackground = true }; 199 197 parserThread.Start(); 200 198 201 textEditor.Validated += (s, a) => { OnTextEditorValidated(); }; 202 textEditor.TextChanged += (s, a) => { OnTextEditorTextChanged(); }; 199 textEditor.Validated += (s, a) => OnTextEditorValidated(); 200 textEditor.TextChanged += (s, a) => { 201 Doc.MarkerStrategy.RemoveAll(m => errorMarkers.Contains(m)); errorMarkers.Clear(); 202 Doc.BookmarkManager.RemoveMarks(m => errorBookmarks.Contains(m)); errorBookmarks.Clear(); 203 Doc.RequestUpdate(new TextAreaUpdate(TextAreaUpdateType.WholeTextArea)); 204 Doc.CommitUpdate(); 205 OnTextEditorTextChanged(); 206 }; 203 207 InitializeImageList(); 208 } 209 210 private void LoadHighlightingStrategy() { 211 var strategy = (DefaultHighlightingStrategy)HighlightingManager.Manager.FindHighlighter("C#"); 212 strategy.SetColorFor("CaretMarker", new HighlightColor(Color.Beige, false, false)); 213 Doc.HighlightingStrategy = strategy; 204 214 } 205 215 … … 216 226 217 227 #region keyboard handlers: filter input in read-only areas 218 219 228 bool TextArea_KeyEventHandler(char ch) { 220 229 int caret = textEditor.ActiveTextAreaControl.Caret.Offset; … … 232 241 return false; 233 242 } 234 235 243 #endregion 236 244 … … 240 248 } 241 249 250 public void ScrollToPosition(int line, int column) { 251 var segment = GetSegmentAtOffset(line, column); 252 var position = Doc.OffsetToPosition(segment.Offset + segment.Length); 253 var caret = textEditor.ActiveTextAreaControl.Caret; 254 caret.Position = position; 255 textEditor.ActiveTextAreaControl.CenterViewOn(line, 0); 256 } 257 242 258 private List<TextMarker> errorMarkers = new List<TextMarker>(); 243 259 private List<Bookmark> errorBookmarks = new List<Bookmark>(); 244 260 public void ShowCompileErrors(CompilerErrorCollection compilerErrors, string filename) { 245 Doc.MarkerStrategy.RemoveAll(m => errorMarkers.Contains(m));246 Doc.BookmarkManager.RemoveMarks(m => errorBookmarks.Contains(m));247 errorMarkers.Clear();248 errorBookmarks.Clear();249 261 errorLabel.Text = ""; 250 262 errorLabel.ToolTipText = null; … … 273 285 private void AddErrorMarker(CompilerError error) { 274 286 var segment = GetSegmentAtOffset(error.Line, error.Column); 275 Color color = error.IsWarning ? Color.Blue : Color.Red;287 Color color = error.IsWarning ? WarningColor : ErrorColor; 276 288 var marker = new TextMarker(segment.Offset, segment.Length, TextMarkerType.WaveLine, color) { 277 289 ToolTip = error.ErrorText, … … 282 294 283 295 private void AddErrorBookmark(CompilerError error) { 284 var bookmark = new ErrorBookmark(Doc, new TextLocation(error.Column, error.Line - 1)); 296 Color color = error.IsWarning ? WarningColor : ErrorColor; 297 var bookmark = new ErrorBookmark(Doc, new TextLocation(error.Column, error.Line - 1), color); 285 298 errorBookmarks.Add(bookmark); 286 299 Doc.BookmarkManager.AddMark(bookmark); … … 288 301 289 302 private AbstractSegment GetSegmentAtOffset(int lineNr, int columnNr) { 290 lineNr = Math.Max(Doc.OffsetToPosition(prefix.Length).Line, lineNr );303 lineNr = Math.Max(Doc.OffsetToPosition(prefix.Length).Line, lineNr - 1); 291 304 lineNr = Math.Min(Doc.OffsetToPosition(Doc.TextLength - suffix.Length).Line, lineNr); 292 var line = Doc.GetLineSegment(lineNr - 1);293 columnNr = Math.Max(0, columnNr );305 var line = Doc.GetLineSegment(lineNr); 306 columnNr = Math.Max(0, columnNr - 1); 294 307 columnNr = Math.Min(line.Length, columnNr); 295 308 var word = line.GetWord(columnNr); … … 299 312 segment.Length = word.Length; 300 313 } else { 301 segment.Offset = line.Offset + columnNr - 1;314 segment.Offset = line.Offset + columnNr; 302 315 segment.Length = 1; 303 316 } -
trunk/sources/HeuristicLab.CodeEditor/3.3/ErrorBookmark.cs
r11171 r11657 25 25 namespace HeuristicLab.CodeEditor { 26 26 public class ErrorBookmark : Bookmark { 27 private readonly Brush brush; 27 28 28 29 public override bool CanToggle { get { return false; } } 29 30 30 31 public ErrorBookmark(IDocument document, TextLocation location) 32 : this(document, location, Color.Red) { } 33 34 public ErrorBookmark(IDocument document, TextLocation location, Color color) 31 35 : base(document, location) { 36 brush = new SolidBrush(color); 32 37 } 33 38 34 public override void Draw(IconBarMargin margin, System.Drawing.Graphics g, System.Drawing.Point p) {39 public override void Draw(IconBarMargin margin, Graphics g, Point p) { 35 40 int delta = margin.TextArea.TextView.FontHeight / 4; 36 41 Rectangle rect = new Rectangle( … … 39 44 margin.DrawingPosition.Width - 6, 40 45 margin.TextArea.TextView.FontHeight - delta * 2); 41 g.FillRectangle( Brushes.Red, rect);46 g.FillRectangle(brush, rect); 42 47 g.DrawRectangle(Pens.White, rect); 43 48 } -
trunk/sources/HeuristicLab.CodeEditor/3.3/HeuristicLab.CodeEditor-3.3.csproj
r11623 r11657 151 151 <ItemGroup> 152 152 <Compile Include="CodeCompletionData.cs" /> 153 <EmbeddedResource Include="CodeEditor.resx">154 <DependentUpon>CodeEditor.cs</DependentUpon>155 </EmbeddedResource>156 153 <EmbeddedResource Include="CodeViewer.resx"> 157 154 <DependentUpon>CodeViewer.cs</DependentUpon> -
trunk/sources/HeuristicLab.Scripting.Views/3.3/CSharpScriptView.cs
r11171 r11657 132 132 return true; 133 133 case Keys.F6: 134 if (!Running) Compile();134 if (!Running) base.ProcessCmdKey(ref msg, keyData); 135 135 return true; 136 136 } 137 return base.ProcessCmdKey(ref msg, keyData); ;137 return base.ProcessCmdKey(ref msg, keyData); 138 138 } 139 139 #endregion -
trunk/sources/HeuristicLab.Scripting.Views/3.3/ScriptView.Designer.cs
r10747 r11657 110 110 this.toolTip.SetToolTip(this.compileButton, "Compile (F6)"); 111 111 this.compileButton.UseVisualStyleBackColor = true; 112 this.compileButton.Click += new System.EventHandler(this. CompileButtonOnClick);112 this.compileButton.Click += new System.EventHandler(this.compileButton_Click); 113 113 // 114 114 // infoTabControl … … 178 178 this.errorListView.UseCompatibleStateImageBehavior = false; 179 179 this.errorListView.View = System.Windows.Forms.View.Details; 180 this.errorListView.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.errorListView_MouseDoubleClick); 180 181 // 181 182 // iconColumnHeader … … 213 214 this.codeEditor.TabIndex = 0; 214 215 this.codeEditor.UserCode = ""; 215 this.codeEditor.TextEditorTextChanged += new System.EventHandler(this. CodeEditorOnTextEditorTextChanged);216 this.codeEditor.TextEditorTextChanged += new System.EventHandler(this.codeEditor_TextEditorTextChanged); 216 217 // 217 218 // splitContainer1 218 219 // 219 this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 220 | System.Windows.Forms.AnchorStyles.Left) 220 this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 221 | System.Windows.Forms.AnchorStyles.Left) 221 222 | System.Windows.Forms.AnchorStyles.Right))); 222 223 this.splitContainer1.Location = new System.Drawing.Point(0, 56); -
trunk/sources/HeuristicLab.Scripting.Views/3.3/ScriptView.cs
r11480 r11657 35 35 [Content(typeof(Script), true)] 36 36 public partial class ScriptView : NamedItemView { 37 #region Properties 37 38 public new Script Content { 38 39 get { return (Script)base.Content; } 39 40 set { base.Content = value; } 40 }41 42 public ScriptView() {43 InitializeComponent();44 errorListView.SmallImageList.Images.AddRange(new Image[] { VSImageLibrary.Warning, VSImageLibrary.Error });45 41 } 46 42 … … 54 50 set { base.Locked = codeEditor.ReadOnly = value; } 55 51 } 52 #endregion 53 54 public ScriptView() { 55 InitializeComponent(); 56 errorListView.SmallImageList.Images.AddRange(new Image[] { VSImageLibrary.Warning, VSImageLibrary.Error }); 57 } 56 58 57 59 protected override void RegisterContentEvents() { 58 60 base.RegisterContentEvents(); 59 Content.CodeChanged += Content OnCodeChanged;61 Content.CodeChanged += Content_CodeChanged; 60 62 } 61 63 62 64 protected override void DeregisterContentEvents() { 63 Content.CodeChanged -= Content OnCodeChanged;65 Content.CodeChanged -= Content_CodeChanged; 64 66 base.DeregisterContentEvents(); 65 67 } 66 68 67 protected virtual void ContentOnCodeChanged(object sender, EventArgs e) { 68 codeEditor.UserCode = Content.Code; 69 } 70 69 #region Overrides 71 70 protected override void OnContentChanged() { 72 71 base.OnContentChanged(); … … 74 73 codeEditor.UserCode = string.Empty; 75 74 } else { 76 codeEditor.UserCode = Content.Code; 75 if (codeEditor.UserCode != Content.Code) 76 codeEditor.UserCode = Content.Code; 77 77 foreach (var asm in Content.GetAssemblies()) 78 78 codeEditor.AddAssembly(asm); … … 96 96 } 97 97 98 protected virtual void CompileButtonOnClick(object sender, EventArgs e) {99 Compile();100 }101 102 protected virtual void CodeEditorOnTextEditorTextChanged(object sender, EventArgs e) {103 if (Content == null) return;104 Content.Code = codeEditor.UserCode;105 }106 98 protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 107 99 switch (keyData) { … … 113 105 return base.ProcessCmdKey(ref msg, keyData); 114 106 } 107 #endregion 115 108 116 109 public virtual bool Compile() { … … 123 116 outputTextBox.AppendText("Compilation succeeded."); 124 117 return true; 125 } catch {118 } catch (InvalidOperationException) { 126 119 if (Content.CompileErrors.HasErrors) { 127 120 outputTextBox.AppendText("Compilation failed."); … … 137 130 ReadOnly = false; 138 131 Locked = false; 132 codeEditor.Focus(); 139 133 OnContentChanged(); 140 134 } 141 135 } 142 136 137 #region Helpers 143 138 protected virtual void ShowCompilationResults() { 144 139 if (Content.CompileErrors.Count == 0) return; 145 var msgs = Content.CompileErrors.OfType<CompilerError>() 140 141 var messages = Content.CompileErrors.OfType<CompilerError>() 146 142 .OrderBy(x => x.IsWarning) 147 143 .ThenBy(x => x.Line) 148 144 .ThenBy(x => x.Column); 149 foreach (var m in msgs) { 150 var item = new ListViewItem(); 145 146 foreach (var m in messages) { 147 var item = new ListViewItem { Tag = m }; 151 148 item.SubItems.AddRange(new[] { 152 149 m.IsWarning ? "Warning" : "Error", … … 159 156 errorListView.Items.Add(item); 160 157 } 158 159 codeEditor.ShowCompileErrors(Content.CompileErrors, ".cs"); 160 161 161 AdjustErrorListViewColumnSizes(); 162 162 } … … 167 167 ch.Width = -2; 168 168 } 169 #endregion 170 171 #region Event Handlers 172 private void Content_CodeChanged(object sender, EventArgs e) { 173 if (InvokeRequired) 174 Invoke(new EventHandler(Content_CodeChanged), sender, e); 175 else { 176 codeEditor.UserCode = Content.Code; 177 } 178 } 179 180 private void compileButton_Click(object sender, EventArgs e) { 181 Compile(); 182 } 183 184 private void codeEditor_TextEditorTextChanged(object sender, EventArgs e) { 185 if (Content == null) return; 186 Content.Code = codeEditor.UserCode; 187 } 188 189 private void errorListView_MouseDoubleClick(object sender, MouseEventArgs e) { 190 if (e.Button == MouseButtons.Left) { 191 var item = errorListView.SelectedItems[0]; 192 var message = (CompilerError)item.Tag; 193 codeEditor.ScrollToPosition(message.Line, message.Column); 194 codeEditor.Focus(); 195 } 196 } 197 #endregion 169 198 } 170 199 } -
trunk/sources/HeuristicLab.Scripting/3.3/Script.cs
r11477 r11657 24 24 using System.CodeDom.Compiler; 25 25 using System.Collections.Generic; 26 using System.Diagnostics;27 26 using System.Drawing; 28 27 using System.IO; … … 80 79 public Script() 81 80 : base("Script", "An empty script.") { 82 code = string.Empty;81 code = CodeTemplate; 83 82 } 84 83 public Script(string code) … … 109 108 WarningLevel = 4 110 109 }; 110 111 111 parameters.ReferencedAssemblies.AddRange( 112 112 GetAssemblies() 113 113 .Select(a => a.Location) 114 114 .ToArray()); 115 var unit = CreateCompilationUnit(); 116 var writer = new StringWriter(); 117 CodeProvider.GenerateCodeFromCompileUnit( 118 unit, 119 writer, 120 new CodeGeneratorOptions { 121 ElseOnClosing = true, 122 IndentString = " ", 123 }); 124 return CodeProvider.CompileAssemblyFromDom(parameters, unit); 115 116 return CodeProvider.CompileAssemblyFromSource(parameters, code); 125 117 } 126 118 … … 135 127 .AppendLine(error.ErrorText); 136 128 } 137 throw new Exception(string.Format("Compilation of \"{0}\" failed:{1}{2}",129 throw new InvalidOperationException(string.Format("Compilation of \"{0}\" failed:{1}{2}", 138 130 Name, Environment.NewLine, sb.ToString())); 139 131 } else { … … 143 135 144 136 public virtual IEnumerable<Assembly> GetAssemblies() { 145 var assemblies = AppDomain.CurrentDomain.GetAssemblies().Where(a => !a.IsDynamic && File.Exists(a.Location)).ToList(); 137 var assemblies = AppDomain.CurrentDomain.GetAssemblies().Where(a => !a.IsDynamic && File.Exists(a.Location)).ToList(); 146 138 assemblies.Add(typeof(Microsoft.CSharp.RuntimeBinder.Binder).Assembly); // for dlr functionality 147 139 return assemblies;
Note: See TracChangeset
for help on using the changeset viewer.