From cf7adb39dd560bca204d684fc98ea0e360a0cd10 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 19 Mar 2010 16:51:18 +0000 Subject: [PATCH] Allow user to specify an encoding when opening a text file. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@5627 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- AddIns/ICSharpCode.SharpDevelop.addin | 5 +- .../Project/Src/Project/CSharpProject.cs | 2 +- .../AvalonEdit.AddIn/AvalonEdit.AddIn.addin | 6 +- .../AvalonEdit.AddIn/AvalonEdit.AddIn.csproj | 5 + .../Src/AvalonEditDisplayBinding.cs | 30 +- .../Src/AvalonEditViewContent.cs | 13 +- .../Src/ChooseEncodingDialog.xaml | 43 +++ .../Src/ChooseEncodingDialog.xaml.cs | 165 +++++++++++ .../AvalonEdit.AddIn/Src/CodeEditor.cs | 20 +- .../Src/Commands/SortSelectionCommand.cs | 2 +- .../ICSharpCode.AvalonEdit/TextEditor.cs | 3 +- .../Project/ICSharpCode.SharpDevelop.csproj | 1 - .../Base/Project/Src/Commands/FileCommands.cs | 48 +++- .../Commands/DefaultFileNodeCommands.cs | 8 +- .../Project/Src/Project/CompilableProject.cs | 2 + .../Src/TextEditor/CharacterEncodings.cs | 262 ------------------ .../Src/TextEditor/ClipboardHandling.cs | 1 + .../Src/TextEditor/Gui/TextEditorAdapter.cs | 1 + .../Project/Src/Util/SDWindowsFormsHost.cs | 4 +- 19 files changed, 333 insertions(+), 288 deletions(-) create mode 100644 src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ChooseEncodingDialog.xaml create mode 100644 src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ChooseEncodingDialog.xaml.cs delete mode 100644 src/Main/Base/Project/Src/TextEditor/CharacterEncodings.cs diff --git a/AddIns/ICSharpCode.SharpDevelop.addin b/AddIns/ICSharpCode.SharpDevelop.addin index 5d40feb3e7..11b37f2ab1 100644 --- a/AddIns/ICSharpCode.SharpDevelop.addin +++ b/AddIns/ICSharpCode.SharpDevelop.addin @@ -1154,6 +1154,10 @@ shortcut = "Control|O" class = "ICSharpCode.SharpDevelop.Commands.OpenFile"/> + + diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs index 71f63f902e..dfae97e7e9 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs @@ -21,7 +21,7 @@ using ICSharpCode.SharpDevelop.Project.Converter; namespace CSharpBinding { /// - /// Description of CSharpProject. + /// IProject implementation for .csproj files. /// public class CSharpProject : CompilableProject { diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin index 2dcd14b0f4..841ba7d11a 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin @@ -16,8 +16,12 @@ + diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj index 5ef2ddd9fc..2848b9176c 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj @@ -80,6 +80,10 @@ + + ChooseEncodingDialog.xaml + Code + @@ -183,6 +187,7 @@ ICSharpCode.SharpDevelop.Dom False + diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditDisplayBinding.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditDisplayBinding.cs index 5c54543f33..f3e6b1c7de 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditDisplayBinding.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditDisplayBinding.cs @@ -6,7 +6,11 @@ // using System; +using System.IO; +using System.Text; + using ICSharpCode.AvalonEdit.Highlighting; +using ICSharpCode.AvalonEdit.Utils; using ICSharpCode.Core; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Gui; @@ -35,8 +39,32 @@ namespace ICSharpCode.AvalonEdit.AddIn public IViewContent CreateContentForFile(OpenedFile file) { - RegisterAddInHighlightingDefinitions(); return new AvalonEditViewContent(file); } } + + public class ChooseEncodingDisplayBinding : IDisplayBinding + { + public bool CanCreateContentForFile(string fileName) + { + return true; + } + + public IViewContent CreateContentForFile(OpenedFile file) + { + ChooseEncodingDialog dlg = new ChooseEncodingDialog(); + dlg.Owner = WorkbenchSingleton.MainWindow; + using (Stream stream = file.OpenRead()) { + using (StreamReader reader = FileReader.OpenStream(stream, Encoding.UTF8)) { + reader.Peek(); // force reader to auto-detect encoding + dlg.Encoding = reader.CurrentEncoding; + } + } + if (dlg.ShowDialog() == true) { + return new AvalonEditViewContent(file, dlg.Encoding); + } else { + return null; + } + } + } } diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs index d55dae8960..3a22fbfa89 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs @@ -8,16 +8,18 @@ using System; using System.IO; using System.Linq; +using System.Text; +using System.Windows.Threading; using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Highlighting; +using ICSharpCode.AvalonEdit.Utils; using ICSharpCode.Core; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Bookmarks; using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Editor; using ICSharpCode.SharpDevelop.Gui; -using System.Windows.Threading; namespace ICSharpCode.AvalonEdit.AddIn { @@ -31,12 +33,17 @@ namespace ICSharpCode.AvalonEdit.AddIn { readonly CodeEditor codeEditor = new CodeEditor(); - public AvalonEditViewContent(OpenedFile file) + public AvalonEditViewContent(OpenedFile file, Encoding fixedEncodingForLoading = null) { + if (fixedEncodingForLoading != null) { + codeEditor.UseFixedEncoding = true; + codeEditor.PrimaryTextEditor.Encoding = fixedEncodingForLoading; + } this.TabPageText = "${res:FormsDesigner.DesignTabPages.SourceTabPage}"; this.Files.Add(file); file.ForceInitializeView(this); + codeEditor.Document.Changed += textEditor_Document_Changed; codeEditor.CaretPositionChanged += CaretChanged; codeEditor.TextCopied += codeEditor_TextCopied; @@ -85,7 +92,7 @@ namespace ICSharpCode.AvalonEdit.AddIn codeEditor.PrimaryTextEditor.SyntaxHighlighting = HighlightingManager.Instance.GetDefinitionByExtension(Path.GetExtension(file.FileName)); - codeEditor.Load(stream); + codeEditor.Load(stream); // we set the file name after loading because this will place the fold markers etc. codeEditor.FileName = FileName.Create(file.FileName); BookmarksAttach(); diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ChooseEncodingDialog.xaml b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ChooseEncodingDialog.xaml new file mode 100644 index 0000000000..bb446e7942 --- /dev/null +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ChooseEncodingDialog.xaml @@ -0,0 +1,43 @@ + + + +