diff --git a/src/AddIns/Analysis/Profiler/Frontend/AddIn/ICSharpCode.Profiler.AddIn.addin b/src/AddIns/Analysis/Profiler/Frontend/AddIn/ICSharpCode.Profiler.AddIn.addin index 371d3819e6..7f0261bd91 100644 --- a/src/AddIns/Analysis/Profiler/Frontend/AddIn/ICSharpCode.Profiler.AddIn.addin +++ b/src/AddIns/Analysis/Profiler/Frontend/AddIn/ICSharpCode.Profiler.AddIn.addin @@ -36,7 +36,7 @@ @@ -78,7 +78,8 @@ + extensions = "*.sdps" + mimeType = "application/x-sharpdevelop-profiler"/> diff --git a/src/AddIns/Analysis/Profiler/Frontend/AddIn/Src/Views/ProfilerDisplayBinding.cs b/src/AddIns/Analysis/Profiler/Frontend/AddIn/Src/Views/ProfilerDisplayBinding.cs index c5a4104412..e7230c3ea1 100644 --- a/src/AddIns/Analysis/Profiler/Frontend/AddIn/Src/Views/ProfilerDisplayBinding.cs +++ b/src/AddIns/Analysis/Profiler/Frontend/AddIn/Src/Views/ProfilerDisplayBinding.cs @@ -21,7 +21,7 @@ namespace ICSharpCode.Profiler.AddIn.Views public bool CanCreateContentForFile(string fileName) { - return Path.GetExtension(fileName) == ".sdps"; + return true; // definition in .addin does extension-based filtering } public ICSharpCode.SharpDevelop.Gui.IViewContent CreateContentForFile(OpenedFile file) @@ -45,5 +45,15 @@ namespace ICSharpCode.Profiler.AddIn.Views } return new WpfViewer(file, provider); } + + public bool IsPreferredBindingForFile(string fileName) + { + return true; + } + + public double AutoDetectFileContent(string fileName, Stream fileContent, string detectedMimeType) + { + return 1; + } } } diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin index 363de2765e..e1d47ff846 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin @@ -29,7 +29,8 @@ + extensions = "*.boo" + mimeType = "text/plain"/> diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin index cbb95cfdbc..15bccf626c 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin @@ -36,7 +36,8 @@ + extensions = "*.cs" + mimeType = "text/plain"/> diff --git a/src/AddIns/BackendBindings/CppBinding/CppBinding/CppBinding.addin b/src/AddIns/BackendBindings/CppBinding/CppBinding/CppBinding.addin index d56ef76297..28e1453704 100644 --- a/src/AddIns/BackendBindings/CppBinding/CppBinding/CppBinding.addin +++ b/src/AddIns/BackendBindings/CppBinding/CppBinding/CppBinding.addin @@ -65,7 +65,8 @@ insertafter="C#" insertbefore="Resources" name="C++ files (*.cpp, *.h)" - extensions="*.cpp;*.c;*.hpp;*.h"/> + extensions="*.cpp;*.c;*.hpp;*.h" + mimeType = "text/plain"/> diff --git a/src/AddIns/BackendBindings/FSharpBinding/FSharpBinding.addin b/src/AddIns/BackendBindings/FSharpBinding/FSharpBinding.addin index a8dd642bb4..fe19391181 100644 --- a/src/AddIns/BackendBindings/FSharpBinding/FSharpBinding.addin +++ b/src/AddIns/BackendBindings/FSharpBinding/FSharpBinding.addin @@ -41,7 +41,8 @@ + extensions = "*.fs" + mimeType = "text/plain"/> diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.addin b/src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.addin index 89f2ad3c25..02d32890c9 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.addin +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.addin @@ -19,33 +19,34 @@ + extensions=".py" + name="Python" + resource="ICSharpCode.PythonBinding.Resources.Python.xshd"/> + class="ICSharpCode.PythonBinding.PythonLanguageBinding" + extensions=".py" /> + insertbefore="Resources" + insertafter="Icons" + name="${res:ICSharpCode.PythonBinding.PythonFiles} (*.py)" + extensions="*.py" + mimeType = "text/plain"/> + insertbefore="AllFiles" + name="${res:ICSharpCode.PythonBinding.PythonProjectFiles} (*.pyproj)" + class="ICSharpCode.SharpDevelop.Project.LoadProject" + extensions="*.pyproj"/> @@ -57,36 +58,36 @@ + insertafter="Search" + insertbefore="Tools" + label="&Python" + type="Menu"> + icon="Icons.16x16.RunProgramIcon" + class="ICSharpCode.PythonBinding.RunDebugPythonCommand" + label="${res:XML.MainMenu.RunMenu.Run}" + shortcut="Control|Shift|R"/> + icon="Icons.16x16.Debug.StartWithoutDebugging" + class="ICSharpCode.PythonBinding.RunPythonCommand" + label="${res:XML.MainMenu.DebugMenu.RunWithoutDebug}" + shortcut="Control|Shift|W"/> + icon="Icons.16x16.StopProcess" + class="ICSharpCode.SharpDevelop.Project.Commands.StopDebuggingCommand" + label="${res:XML.MainMenu.DebugMenu.Stop}"/> + class="ICSharpCode.PythonBinding.SendLineToPythonConsoleCommand" + label="${res:ICSharpCode.PythonBinding.SendLineToPythonConsole}"/> + class="ICSharpCode.PythonBinding.SendSelectedTextToPythonConsoleCommand" + label="${res:ICSharpCode.PythonBinding.SendSelectedTextToPythonConsole}"/> @@ -95,18 +96,18 @@ + supportedextensions=".py" + projectfileextension=".pyproj" + class="ICSharpCode.PythonBinding.PythonParser"/> + guid="{FD48973F-F585-4F70-812B-4D0503B36CE9}" + supportedextensions=".py" + projectfileextension=".pyproj" + class="ICSharpCode.PythonBinding.PythonProjectBinding" /> @@ -127,33 +128,33 @@ + label="Python" + class="ICSharpCode.PythonBinding.PythonOptionsPanel"/> + label="${res:Dialog.ProjectOptions.ApplicationSettings}" + class="ICSharpCode.PythonBinding.ApplicationSettingsPanel"/> + label="${res:Dialog.ProjectOptions.BuildEvents}" + class="ICSharpCode.SharpDevelop.Gui.OptionPanels.BuildEvents"/> + label="${res:Dialog.ProjectOptions.BuildOptions}" + class="ICSharpCode.PythonBinding.CompilingOptionsPanel"/> + label="${res:Dialog.ProjectOptions.DebugOptions}" + class="ICSharpCode.SharpDevelop.Gui.OptionPanels.DebugOptions"/> + type="Secondary" + fileNamePattern="\.py$" + languagePattern="^Python$" + class="ICSharpCode.PythonBinding.PythonFormsDesignerDisplayBinding" /> @@ -163,63 +164,63 @@ + insertafter="CSharp" + insertbefore="VBNet" + label="Python" + class="ICSharpCode.PythonBinding.ConvertToPythonMenuCommand"/> + label="${res:ICSharpCode.PythonBinding.ConvertCSharpProjectToPythonProject}" + class="ICSharpCode.PythonBinding.ConvertProjectToPythonProjectCommand"/> + label="${res:ICSharpCode.PythonBinding.ConvertVBNetProjectToPythonProject}" + class="ICSharpCode.PythonBinding.ConvertProjectToPythonProjectCommand"/> + category="Tools" + title="${res:ICSharpCode.PythonBinding.PythonConsole}" + insertbefore="DefinitionView" + icon="PadIcons.Output" + defaultPosition="Bottom, Hidden" + class="ICSharpCode.PythonBinding.PythonConsolePad"/> + extensions=".py" + resource="Python.ProjectBrowser.File"/> + language="Python" + resource="Python.ProjectBrowser.Project"/> + class="ICSharpCode.PythonBinding.PythonTestFramework" + supportedProjects=".pyproj"/> - + + insertafter="Indent" + type="Separator"/> + class="ICSharpCode.PythonBinding.SendLineToPythonConsoleCommand" + label="${res:ICSharpCode.PythonBinding.SendLineToPythonConsole}"/> + class="ICSharpCode.PythonBinding.SendSelectedTextToPythonConsoleCommand" + label="${res:ICSharpCode.PythonBinding.SendSelectedTextToPythonConsole}"/> diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/RubyBinding.addin b/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/RubyBinding.addin index fd03659bfa..ef305f5c6f 100644 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/RubyBinding.addin +++ b/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/RubyBinding.addin @@ -1,8 +1,8 @@  + author = "Matt Ward" + copyright = "prj:///doc/copyright.txt" + description = "IronRuby addin" + addInManagerHidden = "preinstalled"> @@ -19,27 +19,28 @@ - + extensions=".rb" + name="Ruby" + resource="ICSharpCode.RubyBinding.Resources.Ruby.xshd"/> + + insertbefore="Resources" + insertafter="Icons" + name="Ruby Files (*.rb)" + extensions="*.rb" + mimeType = "text/plain"/> + insertbefore="AllFiles" + name="Ruby Project Files (*.rbproj)" + class="ICSharpCode.SharpDevelop.Project.LoadProject" + extensions="*.rbproj"/> @@ -51,36 +52,36 @@ + insertafter="Search" + insertbefore="Tools" + label="&Ruby" + type="Menu"> + icon="Icons.16x16.RunProgramIcon" + class="ICSharpCode.RubyBinding.RunDebugRubyCommand" + label="${res:XML.MainMenu.RunMenu.Run}" + shortcut="Control|Shift|R"/> + icon="Icons.16x16.Debug.StartWithoutDebugging" + class="ICSharpCode.RubyBinding.RunRubyCommand" + label="${res:XML.MainMenu.DebugMenu.RunWithoutDebug}" + shortcut="Control|Shift|W"/> + icon="Icons.16x16.StopProcess" + class="ICSharpCode.SharpDevelop.Project.Commands.StopDebuggingCommand" + label="${res:XML.MainMenu.DebugMenu.Stop}"/> + class="ICSharpCode.RubyBinding.SendLineToRubyConsoleCommand" + label="${res:ICSharpCode.RubyBinding.SendLineToRubyConsole}"/> + class="ICSharpCode.RubyBinding.SendSelectedTextToRubyConsoleCommand" + label="${res:ICSharpCode.RubyBinding.SendSelectedTextToRubyConsole}"/> @@ -89,28 +90,28 @@ + supportedextensions=".rb" + projectfileextension=".rbproj" + class="ICSharpCode.RubyBinding.RubyParser"/> - + + guid="{BD8E9625-815A-4BDB-B228-5D4F9C2541A1}" + supportedextensions=".rb" + projectfileextension=".rbproj" + class="ICSharpCode.RubyBinding.RubyProjectBinding" /> + class="ICSharpCode.RubyBinding.RubyLanguageBinding" + extensions=".rb" /> - + label="Ruby" + class="ICSharpCode.RubyBinding.RubyOptionsPanel"/> + label="${res:Dialog.ProjectOptions.DebugOptions}" + class="ICSharpCode.SharpDevelop.Gui.OptionPanels.DebugOptions"/> + type="Secondary" + fileNamePattern="\.rb$" + languagePattern="^Ruby$" + class="ICSharpCode.RubyBinding.RubyFormsDesignerDisplayBinding" /> @@ -150,64 +151,64 @@ + insertafter="CSharp" + insertbefore="VBNet" + label="Ruby" + class="ICSharpCode.RubyBinding.ConvertToRubyMenuCommand"/> + label="From C# to Ruby" + class="ICSharpCode.RubyBinding.ConvertProjectToRubyProjectCommand"/> + label="From VB.NET to Ruby" + class="ICSharpCode.RubyBinding.ConvertProjectToRubyProjectCommand"/> + category="Tools" + title="Ruby Console" + insertbefore="DefinitionView" + icon="PadIcons.Output" + defaultPosition="Bottom, Hidden" + class="ICSharpCode.RubyBinding.RubyConsolePad"/> + extensions=".rb" + resource="Ruby.ProjectBrowser.File"/> + language="Ruby" + resource="Ruby.ProjectBrowser.Project"/> - + + class="ICSharpCode.RubyBinding.RubyTestFramework" + supportedProjects=".rbproj"/> + insertafter="Indent" + type="Separator"/> + class="ICSharpCode.RubyBinding.SendLineToRubyConsoleCommand" + label="${res:ICSharpCode.RubyBinding.SendLineToRubyConsole}"/> + class="ICSharpCode.RubyBinding.SendSelectedTextToRubyConsoleCommand" + label="${res:ICSharpCode.RubyBinding.SendSelectedTextToRubyConsole}"/> - + diff --git a/src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.addin b/src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.addin index 2a08dd5a78..0ad5f20b5d 100644 --- a/src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.addin +++ b/src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.addin @@ -23,7 +23,8 @@ + extensions = "*.vb" + mimeType = "text/plain"/> diff --git a/src/AddIns/BackendBindings/WixBinding/Project/WixBinding.addin b/src/AddIns/BackendBindings/WixBinding/Project/WixBinding.addin index 47938d8081..86f0093fea 100644 --- a/src/AddIns/BackendBindings/WixBinding/Project/WixBinding.addin +++ b/src/AddIns/BackendBindings/WixBinding/Project/WixBinding.addin @@ -28,7 +28,8 @@ + extensions = "*.wxs;*.wxi" + mimeType = "text/xml"/> diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlBinding.addin b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlBinding.addin index 920aa5a7ac..125e64d183 100644 --- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlBinding.addin +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlBinding.addin @@ -29,7 +29,8 @@ + extensions = "*.xaml" + mimeType = "text/xml"/> diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditDisplayBinding.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditDisplayBinding.cs index ae23980420..983eb2c9c3 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditDisplayBinding.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditDisplayBinding.cs @@ -3,13 +3,14 @@ using System; using System.IO; +using System.Linq; using System.Text; - using ICSharpCode.AvalonEdit.Highlighting; using ICSharpCode.AvalonEdit.Utils; using ICSharpCode.Core; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Gui; +using ICSharpCode.SharpDevelop.Project; namespace ICSharpCode.AvalonEdit.AddIn { @@ -37,6 +38,19 @@ namespace ICSharpCode.AvalonEdit.AddIn { return new AvalonEditViewContent(file); } + + public bool IsPreferredBindingForFile(string fileName) + { + string extension = Path.GetExtension(fileName); + var fileFilter = ProjectService.GetFileFilters().FirstOrDefault(ff => ff.ContainsExtension(extension)); + + return fileFilter != null && fileFilter.MimeType.StartsWith("text/", StringComparison.OrdinalIgnoreCase); + } + + public double AutoDetectFileContent(string fileName, Stream fileContent, string detectedMimeType) + { + return detectedMimeType.StartsWith("text/") ? 0.5 : 0; + } } public class ChooseEncodingDisplayBinding : IDisplayBinding @@ -62,5 +76,15 @@ namespace ICSharpCode.AvalonEdit.AddIn return null; } } + + public bool IsPreferredBindingForFile(string fileName) + { + return false; + } + + public double AutoDetectFileContent(string fileName, Stream fileContent, string detectedMimeType) + { + return double.NegativeInfinity; + } } } diff --git a/src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/ClassDiagramAddin.addin b/src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/ClassDiagramAddin.addin index 45e87379be..1cca62b096 100644 --- a/src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/ClassDiagramAddin.addin +++ b/src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/ClassDiagramAddin.addin @@ -132,6 +132,7 @@ diff --git a/src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/Src/ClassDiagramDisplayBinding.cs b/src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/Src/ClassDiagramDisplayBinding.cs index f8fe60814e..448d2272c3 100644 --- a/src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/Src/ClassDiagramDisplayBinding.cs +++ b/src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/Src/ClassDiagramDisplayBinding.cs @@ -19,12 +19,22 @@ namespace ClassDiagramAddin public bool CanCreateContentForFile(string fileName) { - return true; + return true; // .addin file filters for *.cd } public IViewContent CreateContentForFile(OpenedFile file) { return new ClassDiagramViewContent(file); } + + public bool IsPreferredBindingForFile(string fileName) + { + return true; + } + + public double AutoDetectFileContent(string fileName, System.IO.Stream fileContent, string detectedMimeType) + { + return 1; + } } } diff --git a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Addin/ICSharpCode.Data.addin b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Addin/ICSharpCode.Data.addin index 84fa1ec1b1..cc93e0bc48 100644 --- a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Addin/ICSharpCode.Data.addin +++ b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Addin/ICSharpCode.Data.addin @@ -21,7 +21,8 @@ + extensions="*.edmx" + mimeType="text/xml"/> diff --git a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/DisplayBinding/EDMDesignerDisplayBinding.cs b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/DisplayBinding/EDMDesignerDisplayBinding.cs index dc7a4f559f..24683ecffa 100644 --- a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/DisplayBinding/EDMDesignerDisplayBinding.cs +++ b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/DisplayBinding/EDMDesignerDisplayBinding.cs @@ -19,7 +19,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.DisplayBinding { public bool CanCreateContentForFile(string fileName) { - return Path.GetExtension(fileName).Equals(".edmx", StringComparison.OrdinalIgnoreCase); + return true; // .addin file filters for *.edmx } public IViewContent CreateContentForFile(OpenedFile file) @@ -30,6 +30,16 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.DisplayBinding return null; } } + + public bool IsPreferredBindingForFile(string fileName) + { + return true; + } + + public double AutoDetectFileContent(string fileName, Stream fileContent, string detectedMimeType) + { + return 1; + } } public class WizardCancelledException : Exception {} diff --git a/src/AddIns/DisplayBindings/HexEditor/Project/HexEditor.addin b/src/AddIns/DisplayBindings/HexEditor/Project/HexEditor.addin index 90c129988a..c46cc300b0 100644 --- a/src/AddIns/DisplayBindings/HexEditor/Project/HexEditor.addin +++ b/src/AddIns/DisplayBindings/HexEditor/Project/HexEditor.addin @@ -15,9 +15,8 @@ diff --git a/src/AddIns/DisplayBindings/HexEditor/Project/Src/View/HexEditDisplayBinding.cs b/src/AddIns/DisplayBindings/HexEditor/Project/Src/View/HexEditDisplayBinding.cs index 1f56c960fc..e0c9e5cdad 100644 --- a/src/AddIns/DisplayBindings/HexEditor/Project/Src/View/HexEditDisplayBinding.cs +++ b/src/AddIns/DisplayBindings/HexEditor/Project/Src/View/HexEditDisplayBinding.cs @@ -12,60 +12,21 @@ namespace HexEditor.View { public class HexEditDisplayBinding : IDisplayBinding { - static string[] supportedExtensions; - - public HexEditDisplayBinding() - { - } - - bool IsBinaryFileName(string fileName) - { - if (fileName != null) { - string extension = Path.GetExtension(fileName); - foreach (string supportedExtension in GetSupportedBinaryFileExtensions()) { - if (String.Compare(supportedExtension, extension, StringComparison.OrdinalIgnoreCase) == 0) { - return true; - } - } - } - return false; - } - - string[] GetSupportedBinaryFileExtensions() + public bool CanCreateContentForFile(string fileName) { - if (supportedExtensions == null) - supportedExtensions = Settings.FileTypes; - - return supportedExtensions; + return true; } - bool IsBinary(string fileName) + public bool IsPreferredBindingForFile(string fileName) { - try { - if (!File.Exists(fileName)) return false; - - BinaryReader reader = new BinaryReader(new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)); - byte[] data = reader.ReadBytes(1024); - reader.Close(); - - for (int i = 0; i < data.Length; i++) { - if ((data[i] != 0xA) && (data[i] != 0xD) && (data[i] != 0x9)) { - if (data[i] < 0x20) return true; - } - } - } catch (IOException ex) { - MessageService.ShowException(ex, ex.Message); - } catch (Exception ex) { - System.Diagnostics.Debug.Print(ex.ToString()); - } return false; } - public bool CanCreateContentForFile(string fileName) + public double AutoDetectFileContent(string fileName, Stream fileContent, string detectedMimeType) { - return IsBinaryFileName(fileName); + return 0.1; } - + public IViewContent CreateContentForFile(OpenedFile file) { return new HexEditView(file); diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/IconEditorAddIn.addin b/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/IconEditorAddIn.addin index 9d08261bb7..53b87ffade 100644 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/IconEditorAddIn.addin +++ b/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/IconEditorAddIn.addin @@ -23,7 +23,7 @@ diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/Src/IconDisplayBinding.cs b/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/Src/IconDisplayBinding.cs index 742ffc4f5e..ce51562ac0 100644 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/Src/IconDisplayBinding.cs +++ b/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/Src/IconDisplayBinding.cs @@ -18,5 +18,15 @@ namespace ICSharpCode.IconEditorAddIn { return new IconViewContent(file); } + + public bool IsPreferredBindingForFile(string fileName) + { + return true; + } + + public double AutoDetectFileContent(string fileName, System.IO.Stream fileContent, string detectedMimeType) + { + return 1; + } } } diff --git a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/DisplayDefinition.cs b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/DisplayDefinition.cs index cefd05629f..c26f53f39c 100644 --- a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/DisplayDefinition.cs +++ b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/DisplayDefinition.cs @@ -18,14 +18,23 @@ namespace ResourceEditor // IDisplayBinding interface public bool CanCreateContentForFile(string fileName) { - return Path.GetExtension(fileName).Equals(".RESOURCES", StringComparison.OrdinalIgnoreCase) || - Path.GetExtension(fileName).Equals(".RESX", StringComparison.OrdinalIgnoreCase); + return true; // definition in .addin does extension-based filtering } public IViewContent CreateContentForFile(OpenedFile file) { return new ResourceEditWrapper(file); } + + public bool IsPreferredBindingForFile(string fileName) + { + return true; + } + + public double AutoDetectFileContent(string fileName, Stream fileContent, string detectedMimeType) + { + return 1; + } } /// diff --git a/src/AddIns/DisplayBindings/SettingsEditor/Project/SettingsDisplayBinding.cs b/src/AddIns/DisplayBindings/SettingsEditor/Project/SettingsDisplayBinding.cs index ca40e2b72d..a61e12f89f 100644 --- a/src/AddIns/DisplayBindings/SettingsEditor/Project/SettingsDisplayBinding.cs +++ b/src/AddIns/DisplayBindings/SettingsEditor/Project/SettingsDisplayBinding.cs @@ -19,5 +19,15 @@ namespace ICSharpCode.SettingsEditor { return new SettingsViewContent(file); } + + public bool IsPreferredBindingForFile(string fileName) + { + return true; + } + + public double AutoDetectFileContent(string fileName, System.IO.Stream fileContent, string detectedMimeType) + { + return 1; + } } } diff --git a/src/AddIns/DisplayBindings/SettingsEditor/Project/SettingsEditor.addin b/src/AddIns/DisplayBindings/SettingsEditor/Project/SettingsEditor.addin index 826dd1cea5..3aa86a693e 100644 --- a/src/AddIns/DisplayBindings/SettingsEditor/Project/SettingsEditor.addin +++ b/src/AddIns/DisplayBindings/SettingsEditor/Project/SettingsEditor.addin @@ -20,7 +20,8 @@ + extensions = "*.settings" + mimeType = "text/xml"/> diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/WpfDisplayBinding.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/WpfDisplayBinding.cs index caa33eabf3..5b18056f30 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/WpfDisplayBinding.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/WpfDisplayBinding.cs @@ -21,6 +21,16 @@ namespace ICSharpCode.WpfDesign.AddIn { return new WpfViewContent(file); } + + public bool IsPreferredBindingForFile(string fileName) + { + throw new NotImplementedException(); + } + + public double AutoDetectFileContent(string fileName, Stream fileContent, string detectedMimeType) + { + throw new NotImplementedException(); + } } public class WpfSecondaryDisplayBinding : ISecondaryDisplayBinding diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/WpfDesign.addin b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/WpfDesign.addin index 4e637ffdc5..84bef95e78 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/WpfDesign.addin +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/WpfDesign.addin @@ -19,7 +19,7 @@ diff --git a/src/AddIns/Misc/AddInManager/Project/Src/AddInInstallBinding.cs b/src/AddIns/Misc/AddInManager/Project/Src/AddInInstallBinding.cs index ce908417f7..b1553b6df1 100644 --- a/src/AddIns/Misc/AddInManager/Project/Src/AddInInstallBinding.cs +++ b/src/AddIns/Misc/AddInManager/Project/Src/AddInInstallBinding.cs @@ -20,6 +20,16 @@ namespace ICSharpCode.AddInManager ManagerForm.Instance.ShowInstallableAddIns(new string[] { file.FileName }); return null; } + + public bool IsPreferredBindingForFile(string fileName) + { + return true; + } + + public double AutoDetectFileContent(string fileName, System.IO.Stream fileContent, string detectedMimeType) + { + return 1; + } } #endif } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/ICSharpCode.ReportDesigner.addin b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/ICSharpCode.ReportDesigner.addin index 7ce4e22acb..95e66c49e8 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/ICSharpCode.ReportDesigner.addin +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/ICSharpCode.ReportDesigner.addin @@ -22,7 +22,7 @@ @@ -32,7 +32,8 @@ + extensions="*.srd" + mimeType = "text/xml"/> diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/DesignerBinding/ReportDesignerDisplayBinding.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/DesignerBinding/ReportDesignerDisplayBinding.cs index 72ec819184..7d1f732632 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/DesignerBinding/ReportDesignerDisplayBinding.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/DesignerBinding/ReportDesignerDisplayBinding.cs @@ -18,10 +18,9 @@ namespace ICSharpCode.Reports.Addin public bool CanCreateContentForFile(string fileName) { - return System.IO.Path.GetExtension(fileName).Equals(".srd",StringComparison.OrdinalIgnoreCase) ; + return true; // definition in .addin does extension-based filtering } - public IViewContent CreateContentForFile(OpenedFile file) { if (file.IsDirty) { @@ -35,5 +34,15 @@ namespace ICSharpCode.Reports.Addin ReportDesignerView view = ICSharpCode.Reports.Addin.Commands.StartViewCommand.SetupDesigner(file); return view; } + + public bool IsPreferredBindingForFile(string fileName) + { + return true; + } + + public double AutoDetectFileContent(string fileName, System.IO.Stream fileContent, string detectedMimeType) + { + return 1; + } } } diff --git a/src/AddIns/Misc/TextTemplating/Project/TextTemplating.addin b/src/AddIns/Misc/TextTemplating/Project/TextTemplating.addin index c88bbdef3b..45ce992889 100644 --- a/src/AddIns/Misc/TextTemplating/Project/TextTemplating.addin +++ b/src/AddIns/Misc/TextTemplating/Project/TextTemplating.addin @@ -16,29 +16,30 @@ + insertbefore="AllFiles" + name="Text Template Files (*.tt;*.t4)" + extensions="*.tt;*.t4" + mimeType = "text/plain"/> - + - + - - + + class="ICSharpCode.TextTemplating.TextTemplatingFilePreprocessorCustomTool" + fileNamePattern="\.t(t|4)$"/> - + - + diff --git a/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/BrowserDisplayBinding.cs b/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/BrowserDisplayBinding.cs index 0371259154..63707a8903 100644 --- a/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/BrowserDisplayBinding.cs +++ b/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/BrowserDisplayBinding.cs @@ -28,5 +28,15 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding } return browserPane; } + + public bool IsPreferredBindingForFile(string fileName) + { + return CanCreateContentForFile(fileName); + } + + public double AutoDetectFileContent(string fileName, System.IO.Stream fileContent, string detectedMimeType) + { + return 1; + } } } diff --git a/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs b/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs index a7b0ecb9c1..20314f7de3 100644 --- a/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs @@ -1246,9 +1246,9 @@ namespace ICSharpCode.SharpDevelop.Project #region Saving public override void Save(string fileName) { - watcher.Disable(); - watcher.Rename(fileName); lock (SyncRoot) { + watcher.Disable(); + watcher.Rename(fileName); // we need the global lock - if the file is being renamed, // MSBuild will update the global project collection lock (MSBuildInternals.SolutionProjectCollectionLock) { @@ -1259,8 +1259,8 @@ namespace ICSharpCode.SharpDevelop.Project userProjectFile.Save(userFile); } } + watcher.Enable(); } - watcher.Enable(); FileUtility.RaiseFileSaved(new FileNameEventArgs(fileName)); } #endregion @@ -1381,7 +1381,7 @@ namespace ICSharpCode.SharpDevelop.Project foreach (ProjectPropertyGroupElement g in projectFile.PropertyGroups.Concat(userProjectFile.PropertyGroups)) { // Rename the default configuration setting var prop = g.Properties.FirstOrDefault(p => p.Name == "Configuration"); - if (prop != null && prop.Value == oldName) { + if (prop != null && prop.Value == oldName) { prop.Value = newName; } @@ -1405,7 +1405,7 @@ namespace ICSharpCode.SharpDevelop.Project foreach (ProjectPropertyGroupElement g in projectFile.PropertyGroups.Concat(userProjectFile.PropertyGroups)) { // Rename the default platform setting var prop = g.Properties.FirstOrDefault(p => p.Name == "Platform"); - if (prop != null && prop.Value == oldName) { + if (prop != null && prop.Value == oldName) { prop.Value = newName; } diff --git a/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingDescriptor.cs b/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingDescriptor.cs index 0f8d1538aa..9c22b7b890 100644 --- a/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingDescriptor.cs +++ b/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingDescriptor.cs @@ -107,5 +107,11 @@ namespace ICSharpCode.SharpDevelop return false; return Regex.IsMatch(fileName, fileNameRegex, RegexOptions.IgnoreCase); } + + public override string ToString() + { + return string.Format("[DisplayBindingDescriptor Id={1} Binding={0}]", binding, Id); + } + } } diff --git a/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingService.cs b/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingService.cs index e07b09143b..cd5548f0b4 100644 --- a/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingService.cs +++ b/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingService.cs @@ -110,10 +110,15 @@ namespace ICSharpCode.SharpDevelop } foreach (DisplayBindingDescriptor binding in bindings) { - if (IsPrimaryBindingValidForFileName(binding, filename)) { + if (IsPrimaryBindingValidForFileName(binding, filename) && binding.Binding.IsPreferredBindingForFile(filename)) { return binding; } } + +// var autoDetect = new AutoDetectDisplayBinding(); +// if (autoDetect.AutoDetectFileContent(filename, new MemoryStream(File.ReadAllBytes(filename))) > double.NegativeInfinity) +// return autoDetect.BestDescriptor; + return null; } diff --git a/src/Main/Base/Project/Src/Services/DisplayBinding/ExternalProcessDisplayBinding.cs b/src/Main/Base/Project/Src/Services/DisplayBinding/ExternalProcessDisplayBinding.cs index 7ea65d2bb6..68dc47b244 100644 --- a/src/Main/Base/Project/Src/Services/DisplayBinding/ExternalProcessDisplayBinding.cs +++ b/src/Main/Base/Project/Src/Services/DisplayBinding/ExternalProcessDisplayBinding.cs @@ -61,6 +61,16 @@ namespace ICSharpCode.SharpDevelop info.WorkingDirectory = workingDir; Process.Start(info); } + + public bool IsPreferredBindingForFile(string fileName) + { + return false; + } + + public double AutoDetectFileContent(string fileName, Stream fileContent, string detectedMimeType) + { + return double.NegativeInfinity; + } } sealed class ExternalProcessDisplayBindingConverter : TypeConverter diff --git a/src/Main/Base/Project/Src/Services/DisplayBinding/IDisplayBinding.cs b/src/Main/Base/Project/Src/Services/DisplayBinding/IDisplayBinding.cs index 74fb80dccb..8a651eacbd 100644 --- a/src/Main/Base/Project/Src/Services/DisplayBinding/IDisplayBinding.cs +++ b/src/Main/Base/Project/Src/Services/DisplayBinding/IDisplayBinding.cs @@ -2,6 +2,9 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using System.IO; +using System.Linq; + using ICSharpCode.SharpDevelop.Gui; namespace ICSharpCode.SharpDevelop @@ -12,6 +15,8 @@ namespace ICSharpCode.SharpDevelop /// public interface IDisplayBinding { + bool IsPreferredBindingForFile(string fileName); + /// /// This function determines, if this display binding is able to create /// an IViewContent for the file given by fileName. @@ -23,6 +28,8 @@ namespace ICSharpCode.SharpDevelop /// bool CanCreateContentForFile(string fileName); + double AutoDetectFileContent(string fileName, Stream fileContent, string detectedMimeType); + /// /// Creates a new IViewContent object for the file fileName /// @@ -31,4 +38,48 @@ namespace ICSharpCode.SharpDevelop /// IViewContent CreateContentForFile(OpenedFile file); } + + public sealed class AutoDetectDisplayBinding : IDisplayBinding + { + DisplayBindingDescriptor bestDescriptor; + + public DisplayBindingDescriptor BestDescriptor { + get { return bestDescriptor; } + } + + public bool IsPreferredBindingForFile(string fileName) + { + return false; + } + + public bool CanCreateContentForFile(string fileName) + { + return true; + } + + public double AutoDetectFileContent(string fileName, Stream fileContent, string detectedMimeType) + { + double max = double.MinValue; + +// foreach (var codon in DisplayBindingService.GetCodonsPerFileName(fileName)) { +// double value = codon.Binding.AutoDetectFileContent(fileName, fileContent); +// if (value > max) { +// max = value; +// bestDescriptor = codon; +// } +// } +// +// fileContent.Close(); + + return max; + } + + public IViewContent CreateContentForFile(OpenedFile file) + { + if (bestDescriptor == null) + throw new InvalidOperationException(); + + return bestDescriptor.Binding.CreateContentForFile(file); + } + } } diff --git a/src/Main/Base/Project/Src/Services/DisplayBinding/ShellExecuteDisplayBinding.cs b/src/Main/Base/Project/Src/Services/DisplayBinding/ShellExecuteDisplayBinding.cs index 35ce004763..88fc259288 100644 --- a/src/Main/Base/Project/Src/Services/DisplayBinding/ShellExecuteDisplayBinding.cs +++ b/src/Main/Base/Project/Src/Services/DisplayBinding/ShellExecuteDisplayBinding.cs @@ -15,7 +15,7 @@ namespace ICSharpCode.SharpDevelop { public bool CanCreateContentForFile(string fileName) { - return !FileUtility.IsUrl(fileName); + return true; } public ICSharpCode.SharpDevelop.Gui.IViewContent CreateContentForFile(OpenedFile file) @@ -32,5 +32,15 @@ namespace ICSharpCode.SharpDevelop } return null; } + + public bool IsPreferredBindingForFile(string fileName) + { + return false; + } + + public double AutoDetectFileContent(string fileName, Stream fileContent, string detectedMimeType) + { + return double.NegativeInfinity; + } } } diff --git a/src/Main/Base/Project/Src/Services/File/FileService.cs b/src/Main/Base/Project/Src/Services/File/FileService.cs index 1018253a8d..b9c8cf78f0 100644 --- a/src/Main/Base/Project/Src/Services/File/FileService.cs +++ b/src/Main/Base/Project/Src/Services/File/FileService.cs @@ -706,6 +706,16 @@ namespace ICSharpCode.SharpDevelop { return new SimpleViewContent(errorMessage) { TitleName = Path.GetFileName(file.FileName) }; } + + public bool IsPreferredBindingForFile(string fileName) + { + return false; + } + + public double AutoDetectFileContent(string fileName, Stream fileContent, string detectedMimeType) + { + return double.NegativeInfinity; + } } } } diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/FileFilterDoozer.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/FileFilterDoozer.cs index 942b2cb89e..139524b91e 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/FileFilterDoozer.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/FileFilterDoozer.cs @@ -36,7 +36,8 @@ namespace ICSharpCode.Core Codon codon = args.Codon; return new FileFilterDescriptor { Name = StringParser.Parse(codon.Properties["name"]), - Extensions = codon.Properties["extensions"] + Extensions = codon.Properties["extensions"], + MimeType = codon.Properties["mimeType"] }; } } @@ -45,6 +46,7 @@ namespace ICSharpCode.Core { public string Name { get; set; } public string Extensions { get; set; } + public string MimeType { get; set; } /// /// Gets whether this descriptor matches the specified file extension.