internal void RemoveMarker (TextMarker marker) { marker.LineSegment = null; if (markers == null) return; markers.Remove (marker); if (markers.Count == 0) markers = null; }
public override void Dispose () { FileRegistry.Remove (this); RemoveAutoSaveTimer (); StoreSettings (); this.isDisposed = true; Counters.LoadedEditors--; if (messageBubbleHighlightPopupWindow != null) messageBubbleHighlightPopupWindow.Destroy (); IdeApp.Preferences.DefaultHideMessageBubblesChanged -= HandleIdeAppPreferencesDefaultHideMessageBubblesChanged; IdeApp.Preferences.ShowMessageBubblesChanged -= HandleIdeAppPreferencesShowMessageBubblesChanged; MonoDevelop.Ide.Gui.Pads.ErrorListPad errorListPad = IdeApp.Workbench.GetPad<MonoDevelop.Ide.Gui.Pads.ErrorListPad> ().Content as MonoDevelop.Ide.Gui.Pads.ErrorListPad; errorListPad.TaskToggled -= HandleErrorListPadTaskToggled; DisposeErrorMarkers (); ClipbardRingUpdated -= UpdateClipboardRing; widget.TextEditor.Document.TextReplacing -= OnTextReplacing; widget.TextEditor.Document.TextReplacing -= OnTextReplaced; widget.TextEditor.Document.ReadOnlyCheckDelegate = null; widget.TextEditor.Options.Changed -= HandleWidgetTextEditorOptionsChanged; DebuggingService.DebugSessionStarted -= OnDebugSessionStarted; DebuggingService.CurrentFrameChanged -= currentFrameChanged; DebuggingService.StoppedEvent -= currentFrameChanged; DebuggingService.ResumedEvent -= currentFrameChanged; DebuggingService.Breakpoints.BreakpointAdded -= breakpointAdded; DebuggingService.Breakpoints.BreakpointRemoved -= breakpointRemoved; DebuggingService.Breakpoints.BreakpointStatusChanged -= breakpointStatusChanged; DebuggingService.Breakpoints.BreakpointModified -= breakpointStatusChanged; DebuggingService.PinnedWatches.WatchAdded -= OnWatchAdded; DebuggingService.PinnedWatches.WatchRemoved -= OnWatchRemoved; DebuggingService.PinnedWatches.WatchChanged -= OnWatchChanged; TaskService.Errors.TasksAdded -= UpdateTasks; TaskService.Errors.TasksRemoved -= UpdateTasks; TaskService.Errors.TasksChanged -= UpdateTasks; TaskService.JumpedToTask -= HandleTaskServiceJumpedToTask; // This is not necessary but helps when tracking down memory leaks debugStackLineMarker = null; currentDebugLineMarker = null; currentFrameChanged = null; breakpointAdded = null; breakpointRemoved = null; breakpointStatusChanged = null; }
internal void AddMarker (TextMarker marker) { if (markers == null) markers = new List<TextMarker> (); marker.LineSegment = this; markers.Add (marker); }
public SourceEditorView () { Counters.LoadedEditors++; currentFrameChanged = (EventHandler)DispatchService.GuiDispatch (new EventHandler (OnCurrentFrameChanged)); breakpointAdded = (EventHandler<BreakpointEventArgs>)DispatchService.GuiDispatch (new EventHandler<BreakpointEventArgs> (OnBreakpointAdded)); breakpointRemoved = (EventHandler<BreakpointEventArgs>)DispatchService.GuiDispatch (new EventHandler<BreakpointEventArgs> (OnBreakpointRemoved)); breakpointStatusChanged = (EventHandler<BreakpointEventArgs>)DispatchService.GuiDispatch (new EventHandler<BreakpointEventArgs> (OnBreakpointStatusChanged)); widget = new SourceEditorWidget (this); widget.TextEditor.Document.TextReplaced += delegate(object sender, ReplaceEventArgs args) { if (!inLoad) { if (widget.TextEditor.Document.IsInAtomicUndo) { wasEdited = true; } else { AutoSave.InformAutoSaveThread (Document); } } int startIndex = args.Offset; int endIndex = startIndex + Math.Max (args.Count, args.Value != null ? args.Value.Length : 0); if (TextChanged != null) TextChanged (this, new TextChangedEventArgs (startIndex, endIndex)); }; widget.TextEditor.Document.LineChanged += delegate(object sender, LineEventArgs e) { UpdateBreakpoints (); if (MessageBubbleTextMarker.RemoveLine (e.Line)) { MessageBubbleTextMarker marker = currentErrorMarkers.FirstOrDefault (m => m.LineSegment == e.Line); if (marker != null) { double oldHeight = marker.lastHeight; widget.TextEditor.TextViewMargin.RemoveCachedLine (e.Line); // ensure that the line cache is renewed double newHeight = marker.GetLineHeight (widget.TextEditor); if (oldHeight != newHeight) widget.Document.CommitLineToEndUpdate (widget.TextEditor.Document.OffsetToLineNumber (e.Line.Offset)); } } }; widget.TextEditor.Document.BeginUndo += delegate { wasEdited = false; }; widget.TextEditor.Document.EndUndo += delegate { if (wasEdited) AutoSave.InformAutoSaveThread (Document); }; widget.TextEditor.Document.Undone += (o, a) => AutoSave.InformAutoSaveThread (Document); widget.TextEditor.Document.Redone += (o, a) => AutoSave.InformAutoSaveThread (Document); widget.TextEditor.Document.TextReplacing += OnTextReplacing; widget.TextEditor.Document.TextReplaced += OnTextReplaced; widget.TextEditor.Document.ReadOnlyCheckDelegate = CheckReadOnly; // widget.TextEditor.Document.DocumentUpdated += delegate { // this.IsDirty = Document.IsDirty; // }; widget.TextEditor.Caret.PositionChanged += delegate { OnCaretPositionSet (EventArgs.Empty); FireCompletionContextChanged (); }; widget.TextEditor.IconMargin.ButtonPressed += OnIconButtonPress; debugStackLineMarker = new DebugStackLineTextMarker (widget.TextEditor); currentDebugLineMarker = new CurrentDebugLineTextMarker (widget.TextEditor); fileSystemWatcher = new FileSystemWatcher (); fileSystemWatcher.Created += (FileSystemEventHandler)DispatchService.GuiDispatch (new FileSystemEventHandler (OnFileChanged)); fileSystemWatcher.Changed += (FileSystemEventHandler)DispatchService.GuiDispatch (new FileSystemEventHandler (OnFileChanged)); fileChanged = DispatchService.GuiDispatch (new EventHandler<FileEventArgs> (GotFileChanged)); FileService.FileCreated += fileChanged; FileService.FileChanged += fileChanged; this.WorkbenchWindowChanged += delegate { if (WorkbenchWindow != null) { WorkbenchWindow.ActiveViewContentChanged += delegate { widget.UpdateLineCol (); }; } }; this.ContentNameChanged += delegate { this.Document.FileName = this.ContentName; isInWrite = true; if (String.IsNullOrEmpty (ContentName) || !File.Exists (ContentName)) return; fileSystemWatcher.EnableRaisingEvents = false; lastSaveTime = File.GetLastWriteTime (ContentName); fileSystemWatcher.Path = Path.GetDirectoryName (ContentName); fileSystemWatcher.Filter = Path.GetFileName (ContentName); isInWrite = false; fileSystemWatcher.EnableRaisingEvents = true; }; ClipbardRingUpdated += UpdateClipboardRing; DebuggingService.DebugSessionStarted += OnDebugSessionStarted; DebuggingService.CurrentFrameChanged += currentFrameChanged; DebuggingService.StoppedEvent += currentFrameChanged; DebuggingService.ResumedEvent += currentFrameChanged; DebuggingService.Breakpoints.BreakpointAdded += breakpointAdded; DebuggingService.Breakpoints.BreakpointRemoved += breakpointRemoved; DebuggingService.Breakpoints.BreakpointStatusChanged += breakpointStatusChanged; DebuggingService.Breakpoints.BreakpointModified += breakpointStatusChanged; DebuggingService.PinnedWatches.WatchAdded += OnWatchAdded; DebuggingService.PinnedWatches.WatchRemoved += OnWatchRemoved; DebuggingService.PinnedWatches.WatchChanged += OnWatchChanged; TaskService.Errors.TasksAdded += UpdateTasks; TaskService.Errors.TasksRemoved += UpdateTasks; TaskService.JumpedToTask += HandleTaskServiceJumpedToTask; IdeApp.Preferences.ShowMessageBubblesChanged += HandleIdeAppPreferencesShowMessageBubblesChanged; MonoDevelop.Ide.Gui.Pads.ErrorListPad errorListPad = IdeApp.Workbench.GetPad<MonoDevelop.Ide.Gui.Pads.ErrorListPad> ().Content as MonoDevelop.Ide.Gui.Pads.ErrorListPad; errorListPad.TaskToggled += HandleErrorListPadTaskToggled; widget.TextEditor.Options.Changed += HandleWidgetTextEditorOptionsChanged; IdeApp.Preferences.DefaultHideMessageBubblesChanged += HandleIdeAppPreferencesDefaultHideMessageBubblesChanged; }
public SourceEditorView () { Counters.LoadedEditors++; currentFrameChanged = (EventHandler)DispatchService.GuiDispatch (new EventHandler (OnCurrentFrameChanged)); breakpointAdded = (EventHandler<BreakpointEventArgs>)DispatchService.GuiDispatch (new EventHandler<BreakpointEventArgs> (OnBreakpointAdded)); breakpointRemoved = (EventHandler<BreakpointEventArgs>)DispatchService.GuiDispatch (new EventHandler<BreakpointEventArgs> (OnBreakpointRemoved)); breakpointStatusChanged = (EventHandler<BreakpointEventArgs>)DispatchService.GuiDispatch (new EventHandler<BreakpointEventArgs> (OnBreakpointStatusChanged)); widget = new SourceEditorWidget (this); widget.TextEditor.Document.SyntaxModeChanged += delegate(object sender, SyntaxModeChangeEventArgs e) { var oldProvider = e.OldMode as IQuickTaskProvider; if (oldProvider != null) widget.RemoveQuickTaskProvider (oldProvider); var newProvider = e.NewMode as IQuickTaskProvider; if (newProvider != null) widget.AddQuickTaskProvider (newProvider); }; widget.TextEditor.Document.TextReplaced += delegate(object sender, DocumentChangeEventArgs args) { if (!inLoad) { if (widget.TextEditor.Document.IsInAtomicUndo) { wasEdited = true; } else { InformAutoSave (); } } int startIndex = args.Offset; int endIndex = startIndex + Math.Max (args.RemovalLength, args.InsertionLength); if (TextChanged != null) TextChanged (this, new TextChangedEventArgs (startIndex, endIndex)); }; widget.TextEditor.Document.LineChanged += delegate(object sender, LineEventArgs e) { UpdateBreakpoints (); if (messageBubbleCache != null && messageBubbleCache.RemoveLine (e.Line)) { MessageBubbleTextMarker marker = currentErrorMarkers.FirstOrDefault (m => m.LineSegment == e.Line); if (marker != null) { double oldHeight = marker.lastHeight; widget.TextEditor.TextViewMargin.RemoveCachedLine (e.Line); // ensure that the line cache is renewed double newHeight = marker.GetLineHeight (widget.TextEditor); } } }; widget.TextEditor.Document.BeginUndo += delegate { wasEdited = false; }; widget.TextEditor.Document.EndUndo += delegate { if (wasEdited) InformAutoSave (); }; widget.TextEditor.Document.Undone += (o, a) => AutoSave.InformAutoSaveThread (Document); widget.TextEditor.Document.Redone += (o, a) => AutoSave.InformAutoSaveThread (Document); widget.TextEditor.Document.TextReplacing += OnTextReplacing; widget.TextEditor.Document.TextReplaced += OnTextReplaced; widget.TextEditor.Document.ReadOnlyCheckDelegate = CheckReadOnly; // widget.TextEditor.Document.DocumentUpdated += delegate { // this.IsDirty = Document.IsDirty; // }; widget.TextEditor.Caret.PositionChanged += delegate { OnCaretPositionSet (EventArgs.Empty); FireCompletionContextChanged (); }; widget.TextEditor.IconMargin.ButtonPressed += OnIconButtonPress; debugStackLineMarker = new DebugStackLineTextMarker (widget.TextEditor); currentDebugLineMarker = new CurrentDebugLineTextMarker (widget.TextEditor); this.WorkbenchWindowChanged += delegate { if (WorkbenchWindow != null) { widget.TextEditor.ExtensionContext = WorkbenchWindow.ExtensionContext; WorkbenchWindow.ActiveViewContentChanged += delegate { widget.UpdateLineCol (); }; } }; this.ContentNameChanged += delegate { this.Document.FileName = this.ContentName; if (String.IsNullOrEmpty (ContentName) || !File.Exists (ContentName)) return; lastSaveTimeUtc = File.GetLastWriteTimeUtc (ContentName); }; ClipbardRingUpdated += UpdateClipboardRing; DebuggingService.DebugSessionStarted += OnDebugSessionStarted; DebuggingService.CurrentFrameChanged += currentFrameChanged; DebuggingService.StoppedEvent += currentFrameChanged; DebuggingService.ResumedEvent += currentFrameChanged; DebuggingService.Breakpoints.BreakpointAdded += breakpointAdded; DebuggingService.Breakpoints.BreakpointRemoved += breakpointRemoved; DebuggingService.Breakpoints.BreakpointStatusChanged += breakpointStatusChanged; DebuggingService.Breakpoints.BreakpointModified += breakpointStatusChanged; DebuggingService.PinnedWatches.WatchAdded += OnWatchAdded; DebuggingService.PinnedWatches.WatchRemoved += OnWatchRemoved; DebuggingService.PinnedWatches.WatchChanged += OnWatchChanged; TaskService.Errors.TasksAdded += UpdateTasks; TaskService.Errors.TasksRemoved += UpdateTasks; TaskService.JumpedToTask += HandleTaskServiceJumpedToTask; IdeApp.Preferences.ShowMessageBubblesChanged += HandleIdeAppPreferencesShowMessageBubblesChanged; MonoDevelop.Ide.Gui.Pads.ErrorListPad errorListPad = IdeApp.Workbench.GetPad<MonoDevelop.Ide.Gui.Pads.ErrorListPad> ().Content as MonoDevelop.Ide.Gui.Pads.ErrorListPad; errorListPad.TaskToggled += HandleErrorListPadTaskToggled; widget.TextEditor.Options.Changed += HandleWidgetTextEditorOptionsChanged; IdeApp.Preferences.DefaultHideMessageBubblesChanged += HandleIdeAppPreferencesDefaultHideMessageBubblesChanged; Document.AddAnnotation (this); FileRegistry.Add (this); }
public void RemoveMarker (TextMarker marker) { RemoveMarker (marker, true); }
public void RemoveMarker (TextMarker marker, bool updateLine) { if (marker == null) return; var line = marker.LineSegment; if (line == null) return; if (marker is IExtendingTextMarker) { lock (extendingTextMarkers) { HeightChanged = true; extendingTextMarkers.Remove (marker); } } if (marker is IDisposable) ((IDisposable)marker).Dispose (); line.RemoveMarker (marker); OnMarkerRemoved (new TextMarkerEvent (line, marker)); if (updateLine) this.CommitLineUpdate (line); }
public void AddMarker (DocumentLine line, TextMarker marker, bool commitUpdate) { if (line == null || marker == null) return; if (marker is IExtendingTextMarker) { lock (extendingTextMarkers) { HeightChanged = true; extendingTextMarkers.Add (marker); extendingTextMarkers.Sort (CompareMarkers); } } line.AddMarker (marker); OnMarkerAdded (new TextMarkerEvent (line, marker)); if (commitUpdate) this.CommitLineUpdate (line); }
static int CompareMarkers (TextMarker left, TextMarker right) { if (left.LineSegment == null || right.LineSegment == null) return 0; return left.LineSegment.Offset.CompareTo (right.LineSegment.Offset); }
public void AddMarker (int lineNumber, TextMarker marker) { AddMarker (this.GetLine (lineNumber), marker); }
public void AddMarker (DocumentLine line, TextMarker marker) { AddMarker (line, marker, true); }
public void AddMarker (LineSegment line, TextMarker marker) { AddMarker (line, marker, true); }
public TextMarkerEvent (DocumentLine line, TextMarker textMarker) : base (line) { this.TextMarker = textMarker; }
public TextMarkerEvent(DocumentLine line, TextMarker textMarker) : base(line) { this.TextMarker = textMarker; }
public TextMarkerEvent(LineSegment line, TextMarker textMarker) : base(line) { this.TextMarker = textMarker; }
public TextMarkerEvent (LineSegment line, TextMarker textMarker) : base (line) { this.TextMarker = textMarker; }