Browse Source

Added SD-1634 - Implement column ruler

pull/26/merge
Tobias Ibounig 13 years ago committed by Siegfried Pammer
parent
commit
0624b9e15e
  1. 1
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj
  2. 17
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs
  3. 72
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ColumnRulerRenderer.cs
  4. 32
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/CodeEditorOptions.cs

1
src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj

@ -76,6 +76,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Src\AvalonEditSyntaxHighlighterAdapter.cs" /> <Compile Include="Src\AvalonEditSyntaxHighlighterAdapter.cs" />
<Compile Include="Src\ColumnRulerRenderer.cs" />
<Compile Include="Src\DocumentSequence.cs" /> <Compile Include="Src\DocumentSequence.cs" />
<Compile Include="Src\Snippets\CodeSnippetComparer.cs" /> <Compile Include="Src\Snippets\CodeSnippetComparer.cs" />
<Compile Include="Src\Utils.cs" /> <Compile Include="Src\Utils.cs" />

17
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs

@ -14,7 +14,9 @@ using System.Windows.Controls;
using System.Windows.Controls.Primitives; using System.Windows.Controls.Primitives;
using System.Windows.Documents; using System.Windows.Documents;
using System.Windows.Input; using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Threading; using System.Windows.Threading;
using ICSharpCode.AvalonEdit.AddIn.Options; using ICSharpCode.AvalonEdit.AddIn.Options;
using ICSharpCode.AvalonEdit.AddIn.Snippets; using ICSharpCode.AvalonEdit.AddIn.Snippets;
using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Document;
@ -45,6 +47,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
CaretReferencesRenderer caretReferencesRenderer; CaretReferencesRenderer caretReferencesRenderer;
ContextActionsRenderer contextActionsRenderer; ContextActionsRenderer contextActionsRenderer;
HiddenDefinition.HiddenDefinitionRenderer hiddenDefinitionRenderer; HiddenDefinition.HiddenDefinitionRenderer hiddenDefinitionRenderer;
ColumnRulerRenderer columnRoulerRenderer;
public CodeEditorView() public CodeEditorView()
{ {
@ -54,6 +57,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
this.caretReferencesRenderer = new CaretReferencesRenderer(this); this.caretReferencesRenderer = new CaretReferencesRenderer(this);
this.contextActionsRenderer = new ContextActionsRenderer(this); this.contextActionsRenderer = new ContextActionsRenderer(this);
this.hiddenDefinitionRenderer = new HiddenDefinition.HiddenDefinitionRenderer(this); this.hiddenDefinitionRenderer = new HiddenDefinition.HiddenDefinitionRenderer(this);
this.columnRoulerRenderer = new ColumnRulerRenderer(this.TextArea.TextView);
UpdateCustomizedHighlighting(); UpdateCustomizedHighlighting();
@ -95,6 +99,10 @@ namespace ICSharpCode.AvalonEdit.AddIn
if (this.caretReferencesRenderer != null) if (this.caretReferencesRenderer != null)
this.caretReferencesRenderer.ClearHighlight(); this.caretReferencesRenderer.ClearHighlight();
} }
else if(e.PropertyName == "ShowColumnRuler")
{
}
} }
#region CaretPositionChanged - Bracket Highlighting #region CaretPositionChanged - Bracket Highlighting
@ -587,5 +595,14 @@ namespace ICSharpCode.AvalonEdit.AddIn
{ {
return CustomizedHighlightingColor.FetchCustomizations(languageName); return CustomizedHighlightingColor.FetchCustomizations(languageName);
} }
public static readonly DependencyProperty ColumnRulerBrushProperty =
DependencyProperty.Register("ColumnRulerBrush", typeof(Brush), typeof(TextView),
new FrameworkPropertyMetadata());
public Brush ColumnRulerBrush {
get { return (Brush)GetValue(ColumnRulerBrushProperty); }
set { SetValue(ColumnRulerBrushProperty, value); }
}
} }
} }

72
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ColumnRulerRenderer.cs

@ -0,0 +1,72 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Windows;
using System.Windows.Media;
using ICSharpCode.AvalonEdit.Rendering;
using ICSharpCode.AvalonEdit.Utils;
namespace ICSharpCode.AvalonEdit.AddIn
{
/// <summary>
/// Redners a ruler at a certain colum
/// </summary>
public class ColumnRulerRenderer : IBackgroundRenderer
{
Pen pen;
int column;
public int Column {
get { return column; }
set { column = value; }
}
TextView textView;
public ColumnRulerRenderer(TextView textView)
{
if (textView == null)
throw new ArgumentNullException("textView");
Pen pen = new Pen(Brushes.LightGray, 1);
pen.Freeze();
this.textView = textView;
this.textView.BackgroundRenderers.Add(this);
}
public KnownLayer Layer {
get {
return KnownLayer.Background;
}
}
public void SetRuler(int column, Brush brush)
{
if (this.column != column) {
this.column = column;
textView.InvalidateLayer(this.Layer);
}
if (pen.Brush != brush) {
this.pen = new Pen(brush, 1);
this.pen.Freeze();
}
}
public void Draw(TextView textView, System.Windows.Media.DrawingContext drawingContext)
{
if(column < 1)
return;
double offset = textView.WideSpaceWidth * column;
System.Windows.Size pixelSize = PixelSnapHelpers.GetPixelSize(textView);
double markerXPos = PixelSnapHelpers.PixelAlign(offset, pixelSize.Width);
Point start = new Point(markerXPos, 0);
Point end = new Point(markerXPos, textView.DocumentHeight);
drawingContext.DrawLine(pen, start, end);
}
}
}

32
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/CodeEditorOptions.cs

@ -66,6 +66,38 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
} }
} }
bool showColumnRuler = false;
/// <summary>
/// Gets/Sets whether the column ruler should be shown.
/// </summary>
[DefaultValue(false)]
public virtual bool ShowColumnRuler {
get { return showColumnRuler; }
set {
if (showColumnRuler != value) {
showColumnRuler = value;
OnPropertyChanged("ShowColumnRuler");
}
}
}
int columnRulerPosition = 80;
/// <summary>
/// Gets/Sets where the column ruler should be shown.
/// </summary>
[DefaultValue(80)]
public virtual int ColumnRulerPosition {
get { return columnRulerPosition; }
set {
if (columnRulerPosition != value) {
columnRulerPosition = value;
OnPropertyChanged("ColumnRulerPosition");
}
}
}
bool enableChangeMarkerMargin = true; bool enableChangeMarkerMargin = true;
[DefaultValue(true)] [DefaultValue(true)]

Loading…
Cancel
Save