Browse Source

Added tooltip for ChangeMarkerMargin

pull/15/head
Eusebiu Marcu 15 years ago
parent
commit
5fbc6ceef1
  1. 63
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ChangeMarkerMargin.cs
  2. 26
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/DefaultChangeWatcher.cs
  3. 2
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/LineChangeInfo.cs

63
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ChangeMarkerMargin.cs

@ -4,11 +4,12 @@ @@ -4,11 +4,12 @@
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using ICSharpCode.AvalonEdit.Editing;
using ICSharpCode.AvalonEdit.Rendering;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
namespace ICSharpCode.AvalonEdit.AddIn
{
@ -130,5 +131,63 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -130,5 +131,63 @@ namespace ICSharpCode.AvalonEdit.AddIn
{
return new Size(5, 0);
}
#region Diffs tooltip
ToolTip tooltip = new ToolTip();
protected override void OnMouseEnter(MouseEventArgs e)
{
var diffs = changeWatcher.GetDiffsByLine(GetLineFromMousePosition(e));
if (diffs != null && diffs.Count > 0) {
StackPanel stack = new StackPanel() {
Background = Brushes.White
};
TextBlock oldTb = new TextBlock() {
FontFamily = new FontFamily("Courier New"),
Foreground = Brushes.Black,
Background = Brushes.White,
TextDecorations = TextDecorations.Strikethrough,
};
if (diffs[0] != null)
oldTb.Text = diffs[0].Text;
TextBlock newTb = new TextBlock() {
FontFamily = new FontFamily("Courier New"),
Foreground = Brushes.Black,
Background = Brushes.White,
Text = diffs[1].Text
};
stack.Children.Add(oldTb);
stack.Children.Add(newTb);
tooltip.Content = stack;
tooltip.Background = Brushes.White;
tooltip.IsOpen = true;
}
base.OnMouseEnter(e);
}
protected override void OnMouseLeave(MouseEventArgs e)
{
tooltip.IsOpen = false;
base.OnMouseLeave(e);
}
int GetLineFromMousePosition(MouseEventArgs e)
{
TextView textView = this.TextView;
if (textView == null)
return 0;
VisualLine vl = textView.GetVisualLineFromVisualTop(e.GetPosition(textView).Y + textView.ScrollOffset.Y);
if (vl == null)
return 0;
return vl.FirstDocumentLine.LineNumber;
}
#endregion
}
}

26
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/DefaultChangeWatcher.cs

@ -4,17 +4,15 @@ @@ -4,17 +4,15 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using ICSharpCode.AvalonEdit.AddIn.MyersDiff;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Rendering;
using ICSharpCode.AvalonEdit.Utils;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.AvalonEdit;
namespace ICSharpCode.AvalonEdit.AddIn
{
@ -54,6 +52,12 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -54,6 +52,12 @@ namespace ICSharpCode.AvalonEdit.AddIn
if (baseFileStream != null) {
// ReadAll() is taking care of closing the stream
baseDocument = DocumentUtilitites.LoadReadOnlyDocumentFromBuffer(new StringTextBuffer(ReadAll(baseFileStream)));
} else {
if (baseDocument == null) {
// if the file is not under subversion, the document is the opened document
var doc = new TextDocument(textDocument.Text);
baseDocument = new AvalonEditDocumentAdapter(doc, null);
}
}
SetupInitialFileState(false);
@ -187,5 +191,19 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -187,5 +191,19 @@ namespace ICSharpCode.AvalonEdit.AddIn
disposed = true;
}
}
public IList<IDocumentLine> GetDiffsByLine(int line)
{
var result = new List<IDocumentLine>();
if (baseDocument.TotalNumberOfLines < line)
result.Add(null);
else
result.Add(baseDocument.GetLine(line));
result.Add(document.GetLine(line));
return result;
}
}
}
}

2
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/LineChangeInfo.cs

@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using ICSharpCode.SharpDevelop.Editor;
namespace ICSharpCode.AvalonEdit.AddIn
@ -16,6 +17,7 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -16,6 +17,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
/// </summary>
LineChangeInfo GetChange(int lineNumber);
void Initialize(IDocument document);
IList<IDocumentLine> GetDiffsByLine(int line);
}
public enum ChangeType

Loading…
Cancel
Save