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 @@
@@ -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.