Browse Source

Fix SD-1734 - 2 or 3 sets of Fold Markers shown with open .xaml file

pull/2/head
Daniel Grunwald 16 years ago
parent
commit
b2a32bf877
  1. 4
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
  2. 28
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs
  3. 8
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/FoldingManagerAdapter.cs
  4. 2
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/IFoldingManager.cs
  5. 1
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlFoldingManager.cs
  6. 9
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlLanguageBinding.cs
  7. 1
      src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.addin
  8. 5
      src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj
  9. 4
      src/AddIns/DisplayBindings/XmlEditor/Test/Utils/FakeFoldingManager.cs

4
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs

@ -546,9 +546,9 @@ namespace ICSharpCode.AvalonEdit.AddIn
} }
} }
iconBarManager.UpdateClassMemberBookmarks(parseInfo); iconBarManager.UpdateClassMemberBookmarks(parseInfo);
primaryTextEditor.UpdateParseInformation(parseInfo); primaryTextEditor.UpdateParseInformationForFolding(parseInfo);
if (secondaryTextEditor != null) if (secondaryTextEditor != null)
secondaryTextEditor.UpdateParseInformation(parseInfo); secondaryTextEditor.UpdateParseInformationForFolding(parseInfo);
} }
public void Dispose() public void Dispose()

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

@ -71,7 +71,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
if (e.PropertyName == "HighlightBrackets") if (e.PropertyName == "HighlightBrackets")
HighlightBrackets(null, e); HighlightBrackets(null, e);
else if (e.PropertyName == "EnableFolding") else if (e.PropertyName == "EnableFolding")
UpdateParseInformation(); UpdateParseInformationForFolding();
else if (e.PropertyName == "HighlightSymbol") { else if (e.PropertyName == "HighlightSymbol") {
if (this.caretReferencesRenderer != null) if (this.caretReferencesRenderer != null)
this.caretReferencesRenderer.ClearHighlight(); this.caretReferencesRenderer.ClearHighlight();
@ -252,15 +252,15 @@ namespace ICSharpCode.AvalonEdit.AddIn
toolTip.Closed += ToolTipClosed; toolTip.Closed += ToolTipClosed;
} }
toolTip.PlacementTarget = this; // required for property inheritance toolTip.PlacementTarget = this; // required for property inheritance
if(args.ContentToShow is string) { if(args.ContentToShow is string) {
toolTip.Content = new TextBlock toolTip.Content = new TextBlock
{ {
Text = args.ContentToShow as string, Text = args.ContentToShow as string,
TextWrapping = TextWrapping.Wrap TextWrapping = TextWrapping.Wrap
}; };
} }
else else
toolTip.Content = args.ContentToShow; toolTip.Content = args.ContentToShow;
toolTip.IsOpen = true; toolTip.IsOpen = true;
@ -434,14 +434,26 @@ namespace ICSharpCode.AvalonEdit.AddIn
} }
#region UpdateParseInformation - Folding #region UpdateParseInformation - Folding
void UpdateParseInformation() void UpdateParseInformationForFolding()
{ {
UpdateParseInformation(ParserService.GetExistingParseInformation(this.Adapter.FileName)); UpdateParseInformationForFolding(ParserService.GetExistingParseInformation(this.Adapter.FileName));
}
bool disableParseInformationFolding;
public bool DisableParseInformationFolding {
get { return disableParseInformationFolding; }
set {
if (disableParseInformationFolding != value) {
disableParseInformationFolding = value;
UpdateParseInformationForFolding();
}
}
} }
public void UpdateParseInformation(ParseInformation parseInfo) public void UpdateParseInformationForFolding(ParseInformation parseInfo)
{ {
if (!CodeEditorOptions.Instance.EnableFolding) if (!CodeEditorOptions.Instance.EnableFolding || disableParseInformationFolding)
parseInfo = null; parseInfo = null;
IServiceContainer container = this.Adapter.GetService(typeof(IServiceContainer)) as IServiceContainer; IServiceContainer container = this.Adapter.GetService(typeof(IServiceContainer)) as IServiceContainer;

8
src/AddIns/DisplayBindings/XmlEditor/Project/Src/FoldingManagerAdapter.cs

@ -30,5 +30,13 @@ namespace ICSharpCode.XmlEditor
foldingManager.UpdateFoldings(newFoldings, firstErrorOffset); foldingManager.UpdateFoldings(newFoldings, firstErrorOffset);
} }
} }
public void Dispose()
{
if (foldingManager != null) {
FoldingManager.Uninstall(foldingManager);
foldingManager = null;
}
}
} }
} }

2
src/AddIns/DisplayBindings/XmlEditor/Project/Src/IFoldingManager.cs

@ -7,7 +7,7 @@ using ICSharpCode.AvalonEdit.Folding;
namespace ICSharpCode.XmlEditor namespace ICSharpCode.XmlEditor
{ {
public interface IFoldingManager public interface IFoldingManager : IDisposable
{ {
void UpdateFoldings(IEnumerable<NewFolding> newFoldings, int firstErrorOffset); void UpdateFoldings(IEnumerable<NewFolding> newFoldings, int firstErrorOffset);
} }

1
src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlFoldingManager.cs

@ -53,6 +53,7 @@ namespace ICSharpCode.XmlEditor
public void Dispose() public void Dispose()
{ {
document.Changed -= DocumentChanged; document.Changed -= DocumentChanged;
foldingManager.Dispose();
} }
public IList<FoldingRegion> GetFolds(ITextBuffer textBuffer) public IList<FoldingRegion> GetFolds(ITextBuffer textBuffer)

9
src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlLanguageBinding.cs

@ -10,6 +10,7 @@ namespace ICSharpCode.XmlEditor
public class XmlLanguageBinding : DefaultLanguageBinding public class XmlLanguageBinding : DefaultLanguageBinding
{ {
XmlFoldingManager foldingManager; XmlFoldingManager foldingManager;
AvalonEdit.AddIn.CodeEditorView codeEditorView;
public override IFormattingStrategy FormattingStrategy { public override IFormattingStrategy FormattingStrategy {
get { return new XmlFormattingStrategy(); } get { return new XmlFormattingStrategy(); }
@ -17,6 +18,11 @@ namespace ICSharpCode.XmlEditor
public override void Attach(ITextEditor editor) public override void Attach(ITextEditor editor)
{ {
// HACK: disable SharpDevelop's built-in folding
codeEditorView = editor.GetService(typeof(AvalonEdit.TextEditor)) as AvalonEdit.AddIn.CodeEditorView;
if (codeEditorView != null)
codeEditorView.DisableParseInformationFolding = true;
foldingManager = new XmlFoldingManager(editor); foldingManager = new XmlFoldingManager(editor);
foldingManager.UpdateFolds(); foldingManager.UpdateFolds();
foldingManager.Start(); foldingManager.Start();
@ -29,6 +35,9 @@ namespace ICSharpCode.XmlEditor
foldingManager.Stop(); foldingManager.Stop();
foldingManager.Dispose(); foldingManager.Dispose();
if (codeEditorView != null)
codeEditorView.DisableParseInformationFolding = false;
base.Detach(); base.Detach();
} }
} }

1
src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.addin

@ -14,6 +14,7 @@
<Manifest> <Manifest>
<Identity name="ICSharpCode.XmlEditor"/> <Identity name="ICSharpCode.XmlEditor"/>
<Dependency addin="ICSharpCode.AvalonEdit" requirePreload="true"/>
</Manifest> </Manifest>
<Path name="/AddIns/DefaultTextEditor/Formatter/XML"> <Path name="/AddIns/DefaultTextEditor/Formatter/XML">

5
src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj

@ -230,5 +230,10 @@
<Name>ICSharpCode.SharpDevelop.Widgets</Name> <Name>ICSharpCode.SharpDevelop.Widgets</Name>
<Private>False</Private> <Private>False</Private>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\..\AvalonEdit.AddIn\AvalonEdit.AddIn.csproj">
<Project>{0162E499-42D0-409B-AA25-EED21F75336B}</Project>
<Name>AvalonEdit.AddIn</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup> </ItemGroup>
</Project> </Project>

4
src/AddIns/DisplayBindings/XmlEditor/Test/Utils/FakeFoldingManager.cs

@ -24,5 +24,9 @@ namespace XmlEditor.Tests.Utils
NewFoldsPassedToUpdateFoldings.AddRange(newFoldings); NewFoldsPassedToUpdateFoldings.AddRange(newFoldings);
FirstErrorOffset = firstErrorOffset; FirstErrorOffset = firstErrorOffset;
} }
public void Dispose()
{
}
} }
} }

Loading…
Cancel
Save