Browse Source

add support for url-based IDisplayBinding implementations

pull/80/head
Siegfried Pammer 12 years ago
parent
commit
f9aeac6366
  1. 18
      src/Main/SharpDevelop/Workbench/DisplayBinding/DisplayBindingService.cs

18
src/Main/SharpDevelop/Workbench/DisplayBinding/DisplayBindingService.cs

@ -15,15 +15,18 @@ namespace ICSharpCode.SharpDevelop.Workbench
sealed class DisplayBindingService : IDisplayBindingService sealed class DisplayBindingService : IDisplayBindingService
{ {
const string displayBindingPath = "/SharpDevelop/Workbench/DisplayBindings"; const string displayBindingPath = "/SharpDevelop/Workbench/DisplayBindings";
const string urlBasedDisplayBindingPath = "/SharpDevelop/Workbench/DisplayBindings/UrlBased";
Properties displayBindingServiceProperties; Properties displayBindingServiceProperties;
List<DisplayBindingDescriptor> bindings; List<DisplayBindingDescriptor> bindings;
List<DisplayBindingDescriptor> urlBasedBindings;
List<ExternalProcessDisplayBinding> externalProcessDisplayBindings = new List<ExternalProcessDisplayBinding>(); List<ExternalProcessDisplayBinding> externalProcessDisplayBindings = new List<ExternalProcessDisplayBinding>();
public DisplayBindingService() public DisplayBindingService()
{ {
bindings = AddInTree.BuildItems<DisplayBindingDescriptor>(displayBindingPath, null, true); bindings = AddInTree.BuildItems<DisplayBindingDescriptor>(displayBindingPath, null, true);
urlBasedBindings = AddInTree.BuildItems<DisplayBindingDescriptor>(urlBasedDisplayBindingPath, null, false);
displayBindingServiceProperties = SD.PropertyService.NestedProperties("DisplayBindingService"); displayBindingServiceProperties = SD.PropertyService.NestedProperties("DisplayBindingService");
foreach (var binding in displayBindingServiceProperties.GetList<ExternalProcessDisplayBinding>("ExternalProcesses")) { foreach (var binding in displayBindingServiceProperties.GetList<ExternalProcessDisplayBinding>("ExternalProcesses")) {
if (binding != null) { if (binding != null) {
@ -84,7 +87,7 @@ namespace ICSharpCode.SharpDevelop.Workbench
if (FileUtility.IsUrl(filename)) { if (FileUtility.IsUrl(filename)) {
// The normal display binding dispatching code can't handle URLs (e.g. because it uses Path.GetExtension), // The normal display binding dispatching code can't handle URLs (e.g. because it uses Path.GetExtension),
// so we'll directly return the browser display binding. // so we'll directly return the browser display binding.
return new BrowserDisplayBinding.BrowserDisplayBinding(); return GetBindingForUrl(filename);
} }
DisplayBindingDescriptor codon = GetDefaultCodonPerFileName(filename); DisplayBindingDescriptor codon = GetDefaultCodonPerFileName(filename);
return codon == null ? null : codon.Binding; return codon == null ? null : codon.Binding;
@ -112,13 +115,24 @@ namespace ICSharpCode.SharpDevelop.Workbench
if (IsPrimaryBindingValidForFileName(binding, filename)) { if (IsPrimaryBindingValidForFileName(binding, filename)) {
if (binding.Binding.IsPreferredBindingForFile(filename)) if (binding.Binding.IsPreferredBindingForFile(filename))
return binding; return binding;
else if (binding.Binding is AutoDetectDisplayBinding) if (binding.Binding is AutoDetectDisplayBinding)
autoDetectDescriptor = binding; autoDetectDescriptor = binding;
} }
} }
return autoDetectDescriptor; return autoDetectDescriptor;
} }
IDisplayBinding GetBindingForUrl(FileName url)
{
foreach (DisplayBindingDescriptor binding in urlBasedBindings) {
if (IsPrimaryBindingValidForFileName(binding, url)) {
if (binding.Binding.IsPreferredBindingForFile(url))
return binding.Binding;
}
}
return new BrowserDisplayBinding.BrowserDisplayBinding();
}
public void SetDefaultCodon(string extension, DisplayBindingDescriptor bindingDescriptor) public void SetDefaultCodon(string extension, DisplayBindingDescriptor bindingDescriptor)
{ {
SD.MainThread.VerifyAccess(); SD.MainThread.VerifyAccess();

Loading…
Cancel
Save