Browse Source

Add IResourceService interface.

newNRvisualizers
Daniel Grunwald 13 years ago
parent
commit
92da3798b3
  1. 3
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SearchPanelLocalization.cs
  2. 2
      src/Main/Base/Project/Src/Gui/Pads/ErrorList/ErrorListPad.cs
  3. 2
      src/Main/Base/Project/Src/Gui/Pads/TaskList/TaskListPad.cs
  4. 2
      src/Main/Base/Project/Src/Services/Language/LanguageService.cs
  5. 5
      src/Main/Base/Project/Src/Services/SD.cs
  6. 1
      src/Main/Core/Project/ICSharpCode.Core.csproj
  7. 4
      src/Main/Core/Project/Src/AddInTree/AddInTree.cs
  8. 3
      src/Main/Core/Project/Src/AddInTree/CoreStartup.cs
  9. 4
      src/Main/Core/Project/Src/Services/PropertyService/PropertyService.cs
  10. 60
      src/Main/Core/Project/Src/Services/ResourceService/IResourceService.cs
  11. 9
      src/Main/Core/Project/Src/Services/ResourceService/ResourceNotFoundException.cs
  12. 100
      src/Main/Core/Project/Src/Services/ResourceService/ResourceService.cs
  13. 6
      src/Main/ICSharpCode.Core.Presentation/LanguageChangeWeakEventManager.cs
  14. 10
      src/Main/ICSharpCode.Core.Presentation/PresentationResourceService.cs
  15. 5
      src/Main/ICSharpCode.Core.WinForms/ToolBar/ToolBarService.cs
  16. 11
      src/Main/ICSharpCode.Core.WinForms/WinFormsResourceService.cs
  17. 7
      src/Main/SharpDevelop/Sda/CallHelper.cs
  18. 4
      src/Main/SharpDevelop/Workbench/AvalonWorkbenchWindow.cs
  19. 2
      src/Main/SharpDevelop/Workbench/ChooseLayoutCommand.cs
  20. 2
      src/Main/SharpDevelop/Workbench/WpfWorkbench.cs

3
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SearchPanelLocalization.cs

@ -6,6 +6,7 @@ using System.ComponentModel;
using ICSharpCode.AvalonEdit.Search; using ICSharpCode.AvalonEdit.Search;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.Core.Presentation; using ICSharpCode.Core.Presentation;
using ICSharpCode.SharpDevelop;
namespace ICSharpCode.AvalonEdit.AddIn namespace ICSharpCode.AvalonEdit.AddIn
{ {
@ -23,7 +24,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
public SearchPanelLocalization() public SearchPanelLocalization()
{ {
ResourceService.LanguageChanged += delegate { PropertiesChanged(); }; SD.ResourceService.LanguageChanged += delegate { PropertiesChanged(); };
} }
public override string ErrorText { public override string ErrorText {

2
src/Main/Base/Project/Src/Gui/Pads/ErrorList/ErrorListPad.cs

@ -77,7 +77,7 @@ namespace ICSharpCode.SharpDevelop.Gui
properties = PropertyService.NestedProperties("ErrorListPad"); properties = PropertyService.NestedProperties("ErrorListPad");
RedrawContent(); RedrawContent();
ResourceService.LanguageChanged += delegate { RedrawContent(); }; SD.ResourceService.LanguageChanged += delegate { RedrawContent(); };
TaskService.Cleared += new EventHandler(TaskServiceCleared); TaskService.Cleared += new EventHandler(TaskServiceCleared);
TaskService.Added += new TaskEventHandler(TaskServiceAdded); TaskService.Added += new TaskEventHandler(TaskServiceAdded);

2
src/Main/Base/Project/Src/Gui/Pads/TaskList/TaskListPad.cs

@ -61,7 +61,7 @@ namespace ICSharpCode.SharpDevelop.Gui
this.displayedTokens = new Dictionary<string, bool>(); this.displayedTokens = new Dictionary<string, bool>();
RedrawContent(); RedrawContent();
ResourceService.LanguageChanged += delegate { RedrawContent(); }; SD.ResourceService.LanguageChanged += delegate { RedrawContent(); };
InitializeToolStrip(); InitializeToolStrip();

2
src/Main/Base/Project/Src/Services/Language/LanguageService.cs

@ -64,7 +64,7 @@ namespace ICSharpCode.SharpDevelop
/// </summary> /// </summary>
public static void ValidateLanguage() public static void ValidateLanguage()
{ {
ResourceService.Language = GetLanguage(ResourceService.Language).Code; SD.ResourceService.Language = GetLanguage(SD.ResourceService.Language).Code;
} }
} }
} }

5
src/Main/Base/Project/Src/Services/SD.cs

@ -4,6 +4,7 @@
using System; using System;
using System.ComponentModel; using System.ComponentModel;
using System.ComponentModel.Design; using System.ComponentModel.Design;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.Core.Implementation; using ICSharpCode.Core.Implementation;
using ICSharpCode.SharpDevelop.Editor; using ICSharpCode.SharpDevelop.Editor;
@ -84,6 +85,10 @@ namespace ICSharpCode.SharpDevelop
get { return GetRequiredService<IPropertyService>(); } get { return GetRequiredService<IPropertyService>(); }
} }
public static Core.IResourceService ResourceService {
get { return GetRequiredService<Core.IResourceService>(); }
}
public static IEditorControlService EditorControlService { public static IEditorControlService EditorControlService {
get { return GetRequiredService<IEditorControlService>(); } get { return GetRequiredService<IEditorControlService>(); }
} }

1
src/Main/Core/Project/ICSharpCode.Core.csproj

@ -122,6 +122,7 @@
<Compile Include="Src\Services\PropertyService\Properties.cs" /> <Compile Include="Src\Services\PropertyService\Properties.cs" />
<Compile Include="Src\Services\PropertyService\PropertyService.cs" /> <Compile Include="Src\Services\PropertyService\PropertyService.cs" />
<Compile Include="Src\Services\PropertyService\PropertyServiceImpl.cs" /> <Compile Include="Src\Services\PropertyService\PropertyServiceImpl.cs" />
<Compile Include="Src\Services\ResourceService\IResourceService.cs" />
<Compile Include="Src\Services\ResourceService\ResourceNotFoundException.cs" /> <Compile Include="Src\Services\ResourceService\ResourceNotFoundException.cs" />
<Compile Include="Src\Services\ResourceService\ResourceService.cs" /> <Compile Include="Src\Services\ResourceService\ResourceService.cs" />
<Compile Include="Src\Services\ServiceSingleton.cs" /> <Compile Include="Src\Services\ServiceSingleton.cs" />

4
src/Main/Core/Project/Src/AddInTree/AddInTree.cs

@ -234,14 +234,14 @@ namespace ICSharpCode.Core
{ {
string path = Path.Combine(addInRoot, bitmapResource); string path = Path.Combine(addInRoot, bitmapResource);
ResourceManager resourceManager = ResourceManager.CreateFileBasedResourceManager(Path.GetFileNameWithoutExtension(path), Path.GetDirectoryName(path), null); ResourceManager resourceManager = ResourceManager.CreateFileBasedResourceManager(Path.GetFileNameWithoutExtension(path), Path.GetDirectoryName(path), null);
ResourceService.RegisterNeutralImages(resourceManager); ServiceSingleton.ServiceProvider.GetRequiredService<IResourceService>().RegisterNeutralImages(resourceManager);
} }
foreach(string stringResource in addIn.StringResources) foreach(string stringResource in addIn.StringResources)
{ {
string path = Path.Combine(addInRoot, stringResource); string path = Path.Combine(addInRoot, stringResource);
ResourceManager resourceManager = ResourceManager.CreateFileBasedResourceManager(Path.GetFileNameWithoutExtension(path), Path.GetDirectoryName(path), null); ResourceManager resourceManager = ResourceManager.CreateFileBasedResourceManager(Path.GetFileNameWithoutExtension(path), Path.GetDirectoryName(path), null);
ResourceService.RegisterNeutralStrings(resourceManager); ServiceSingleton.ServiceProvider.GetRequiredService<IResourceService>().RegisterNeutralStrings(resourceManager);
} }
} }
addIns.Add(addIn); addIns.Add(addIn);

3
src/Main/Core/Project/Src/AddInTree/CoreStartup.cs

@ -207,7 +207,8 @@ namespace ICSharpCode.Core
dataDirectory ?? Path.Combine(FileUtility.ApplicationRootPath, "data"), dataDirectory ?? Path.Combine(FileUtility.ApplicationRootPath, "data"),
propertiesName); propertiesName);
container.AddService(typeof(IPropertyService), propertyService); container.AddService(typeof(IPropertyService), propertyService);
ResourceService.InitializeService(Path.Combine(propertyService.DataDirectory, "resources"), propertyService); container.AddService(typeof(IResourceService), new ResourceServiceImpl(
Path.Combine(propertyService.DataDirectory, "resources"), propertyService));
StringParser.RegisterStringTagProvider(new AppNameProvider { appName = applicationName }); StringParser.RegisterStringTagProvider(new AppNameProvider { appName = applicationName });
} }

4
src/Main/Core/Project/Src/Services/PropertyService/PropertyService.cs

@ -12,6 +12,10 @@ using System.Xml;
namespace ICSharpCode.Core namespace ICSharpCode.Core
{ {
/// <summary>
/// Compatibility class; forwards calls to the IPropertyService.
/// TODO: Remove
/// </summary>
public static class PropertyService public static class PropertyService
{ {
static IPropertyService Service { static IPropertyService Service {

60
src/Main/Core/Project/Src/Services/ResourceService/IResourceService.cs

@ -0,0 +1,60 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Reflection;
using System.Resources;
namespace ICSharpCode.Core
{
/// <summary>
/// Provides string and bitmap resources.
/// </summary>
public interface IResourceService
{
/// <summary>
/// Gets/Sets the current UI language.
/// </summary>
string Language { get; set; }
event EventHandler LanguageChanged;
/// <summary>
/// Returns a string from the resource database, it handles localization
/// transparent for the user.
/// </summary>
/// <returns>
/// The string in the (localized) resource database.
/// </returns>
/// <param name="name">
/// The name of the requested resource.
/// </param>
/// <exception cref="ResourceNotFoundException">
/// Is thrown when the GlobalResource manager can't find a requested resource.
/// </exception>
string GetString(string name);
object GetImageResource(string name);
/// <summary>
/// Registers string resources in the resource service.
/// </summary>
/// <param name="baseResourceName">The base name of the resource file embedded in the assembly.</param>
/// <param name="assembly">The assembly which contains the resource file.</param>
/// <example><c>ResourceService.RegisterStrings("TestAddin.Resources.StringResources", GetType().Assembly);</c></example>
void RegisterStrings(string baseResourceName, Assembly assembly);
void RegisterNeutralStrings(ResourceManager stringManager);
/// <summary>
/// Registers image resources in the resource service.
/// </summary>
/// <param name="baseResourceName">The base name of the resource file embedded in the assembly.</param>
/// <param name="assembly">The assembly which contains the resource file.</param>
/// <example><c>ResourceService.RegisterImages("TestAddin.Resources.BitmapResources", GetType().Assembly);</c></example>
void RegisterImages(string baseResourceName, Assembly assembly);
void RegisterNeutralImages(ResourceManager imageManager);
}
}

9
src/Main/Core/Project/Src/Services/ResourceService/ResourceNotFoundException.cs

@ -13,16 +13,21 @@ namespace ICSharpCode.Core
[Serializable()] [Serializable()]
public class ResourceNotFoundException : CoreException public class ResourceNotFoundException : CoreException
{ {
public ResourceNotFoundException(string resource) : base("Resource not found : " + resource) string resourceName;
public string ResourceName { get { return resourceName; } }
public ResourceNotFoundException(string resourceName) : base("Resource not found : " + resourceName)
{ {
this.resourceName = resourceName;
} }
public ResourceNotFoundException() : base() public ResourceNotFoundException() : base()
{ {
} }
public ResourceNotFoundException(string message, Exception innerException) : base(message, innerException) public ResourceNotFoundException(string resourceName, Exception innerException) : base("Resource not found : " + resourceName, innerException)
{ {
this.resourceName = resourceName;
} }
protected ResourceNotFoundException(SerializationInfo info, StreamingContext context) : base(info, context) protected ResourceNotFoundException(SerializationInfo info, StreamingContext context) : base(info, context)

100
src/Main/Core/Project/Src/Services/ResourceService/ResourceService.cs

@ -12,34 +12,54 @@ using System.Threading;
namespace ICSharpCode.Core namespace ICSharpCode.Core
{ {
/// <summary>
/// Compatibility class; forwards calls to the IResourceService.
/// TODO: Remove
/// </summary>
public static class ResourceService
{
static IResourceService Service {
get { return ServiceSingleton.ServiceProvider.GetRequiredService<IResourceService>(); }
}
public static string GetString(string resourceName)
{
return Service.GetString(resourceName);
}
public static string Language {
get { return Service.Language; }
}
}
/// <summary> /// <summary>
/// This Class contains two ResourceManagers, which handle string and image resources /// This Class contains two ResourceManagers, which handle string and image resources
/// for the application. It do handle localization strings on this level. /// for the application. It do handle localization strings on this level.
/// </summary> /// </summary>
public static class ResourceService public class ResourceServiceImpl : IResourceService
{ {
const string uiLanguageProperty = "CoreProperties.UILanguage"; const string uiLanguageProperty = "CoreProperties.UILanguage";
const string stringResources = "StringResources"; const string stringResources = "StringResources";
const string imageResources = "BitmapResources"; const string imageResources = "BitmapResources";
static string resourceDirectory; string resourceDirectory;
static IPropertyService propertyService; IPropertyService propertyService;
public static void InitializeService(string resourceDirectory, IPropertyService propertyService) public ResourceServiceImpl(string resourceDirectory, IPropertyService propertyService)
{ {
if (ResourceService.resourceDirectory != null)
throw new InvalidOperationException("Service is already initialized.");
if (resourceDirectory == null) if (resourceDirectory == null)
throw new ArgumentNullException("resourceDirectory"); throw new ArgumentNullException("resourceDirectory");
if (propertyService == null)
throw new ArgumentNullException("propertyService");
ResourceService.resourceDirectory = resourceDirectory; this.resourceDirectory = resourceDirectory;
ResourceService.propertyService = propertyService; this.propertyService = propertyService;
propertyService.PropertyChanged += new PropertyChangedEventHandler(OnPropertyChange); propertyService.PropertyChanged += new PropertyChangedEventHandler(OnPropertyChange);
LoadLanguageResources(ResourceService.Language); LoadLanguageResources(this.Language);
} }
public static string Language { public string Language {
get { get {
return propertyService.Get(uiLanguageProperty, Thread.CurrentThread.CurrentUICulture.Name); return propertyService.Get(uiLanguageProperty, Thread.CurrentThread.CurrentUICulture.Name);
} }
@ -50,33 +70,35 @@ namespace ICSharpCode.Core
} }
} }
static readonly object loadLock = new object(); readonly object loadLock = new object();
/// <summary>English strings (list of resource managers)</summary> /// <summary>English strings (list of resource managers)</summary>
static List<ResourceManager> strings = new List<ResourceManager>(); List<ResourceManager> strings = new List<ResourceManager>();
/// <summary>Neutral/English images (list of resource managers)</summary> /// <summary>Neutral/English images (list of resource managers)</summary>
static List<ResourceManager> icons = new List<ResourceManager>(); List<ResourceManager> icons = new List<ResourceManager>();
/// <summary>Hashtable containing the local strings from the main application.</summary> /// <summary>Hashtable containing the local strings from the main application.</summary>
static Hashtable localStrings = null; Hashtable localStrings = null;
static Hashtable localIcons = null; Hashtable localIcons = null;
/// <summary>Strings resource managers for the current language</summary> /// <summary>Strings resource managers for the current language</summary>
static List<ResourceManager> localStringsResMgrs = new List<ResourceManager>(); List<ResourceManager> localStringsResMgrs = new List<ResourceManager>();
/// <summary>Image resource managers for the current language</summary> /// <summary>Image resource managers for the current language</summary>
static List<ResourceManager> localIconsResMgrs = new List<ResourceManager>(); List<ResourceManager> localIconsResMgrs = new List<ResourceManager>();
/// <summary>List of ResourceAssembly</summary> /// <summary>List of ResourceAssembly</summary>
static List<ResourceAssembly> resourceAssemblies = new List<ResourceAssembly>(); List<ResourceAssembly> resourceAssemblies = new List<ResourceAssembly>();
class ResourceAssembly class ResourceAssembly
{ {
ResourceServiceImpl service;
Assembly assembly; Assembly assembly;
string baseResourceName; string baseResourceName;
bool isIcons; bool isIcons;
public ResourceAssembly(Assembly assembly, string baseResourceName, bool isIcons) public ResourceAssembly(ResourceServiceImpl service, Assembly assembly, string baseResourceName, bool isIcons)
{ {
this.service = service;
this.assembly = assembly; this.assembly = assembly;
this.baseResourceName = baseResourceName; this.baseResourceName = baseResourceName;
this.isIcons = isIcons; this.isIcons = isIcons;
@ -98,6 +120,7 @@ namespace ICSharpCode.Core
public void Load() public void Load()
{ {
string currentLanguage = service.currentLanguage;
string logMessage = "Loading resources " + baseResourceName + "." + currentLanguage + ": "; string logMessage = "Loading resources " + baseResourceName + "." + currentLanguage + ": ";
ResourceManager manager = null; ResourceManager manager = null;
if (assembly.GetManifestResourceInfo(baseResourceName + "." + currentLanguage + ".resources") != null) { if (assembly.GetManifestResourceInfo(baseResourceName + "." + currentLanguage + ".resources") != null) {
@ -119,9 +142,9 @@ namespace ICSharpCode.Core
LoggingService.Warn(logMessage + "NOT FOUND"); LoggingService.Warn(logMessage + "NOT FOUND");
} else { } else {
if (isIcons) if (isIcons)
localIconsResMgrs.Add(manager); service.localIconsResMgrs.Add(manager);
else else
localStringsResMgrs.Add(manager); service.localStringsResMgrs.Add(manager);
} }
} }
} }
@ -132,15 +155,15 @@ namespace ICSharpCode.Core
/// <param name="baseResourceName">The base name of the resource file embedded in the assembly.</param> /// <param name="baseResourceName">The base name of the resource file embedded in the assembly.</param>
/// <param name="assembly">The assembly which contains the resource file.</param> /// <param name="assembly">The assembly which contains the resource file.</param>
/// <example><c>ResourceService.RegisterStrings("TestAddin.Resources.StringResources", GetType().Assembly);</c></example> /// <example><c>ResourceService.RegisterStrings("TestAddin.Resources.StringResources", GetType().Assembly);</c></example>
public static void RegisterStrings(string baseResourceName, Assembly assembly) public void RegisterStrings(string baseResourceName, Assembly assembly)
{ {
RegisterNeutralStrings(new ResourceManager(baseResourceName, assembly)); RegisterNeutralStrings(new ResourceManager(baseResourceName, assembly));
ResourceAssembly ra = new ResourceAssembly(assembly, baseResourceName, false); ResourceAssembly ra = new ResourceAssembly(this, assembly, baseResourceName, false);
resourceAssemblies.Add(ra); resourceAssemblies.Add(ra);
ra.Load(); ra.Load();
} }
public static void RegisterNeutralStrings(ResourceManager stringManager) public void RegisterNeutralStrings(ResourceManager stringManager)
{ {
strings.Add(stringManager); strings.Add(stringManager);
} }
@ -151,35 +174,33 @@ namespace ICSharpCode.Core
/// <param name="baseResourceName">The base name of the resource file embedded in the assembly.</param> /// <param name="baseResourceName">The base name of the resource file embedded in the assembly.</param>
/// <param name="assembly">The assembly which contains the resource file.</param> /// <param name="assembly">The assembly which contains the resource file.</param>
/// <example><c>ResourceService.RegisterImages("TestAddin.Resources.BitmapResources", GetType().Assembly);</c></example> /// <example><c>ResourceService.RegisterImages("TestAddin.Resources.BitmapResources", GetType().Assembly);</c></example>
public static void RegisterImages(string baseResourceName, Assembly assembly) public void RegisterImages(string baseResourceName, Assembly assembly)
{ {
RegisterNeutralImages(new ResourceManager(baseResourceName, assembly)); RegisterNeutralImages(new ResourceManager(baseResourceName, assembly));
ResourceAssembly ra = new ResourceAssembly(assembly, baseResourceName, true); ResourceAssembly ra = new ResourceAssembly(this, assembly, baseResourceName, true);
resourceAssemblies.Add(ra); resourceAssemblies.Add(ra);
ra.Load(); ra.Load();
} }
public static void RegisterNeutralImages(ResourceManager imageManager) public void RegisterNeutralImages(ResourceManager imageManager)
{ {
icons.Add(imageManager); icons.Add(imageManager);
} }
static void OnPropertyChange(object sender, PropertyChangedEventArgs e) void OnPropertyChange(object sender, PropertyChangedEventArgs e)
{ {
if (e.PropertyName == uiLanguageProperty) { if (e.PropertyName == uiLanguageProperty) {
LoadLanguageResources(Language); LoadLanguageResources(Language);
EventHandler handler = LanguageChanged; EventHandler handler = LanguageChanged;
if (handler != null) if (handler != null)
handler(null, e); handler(this, e);
} }
} }
public static event EventHandler ClearCaches; public event EventHandler LanguageChanged;
string currentLanguage;
public static event EventHandler LanguageChanged;
static string currentLanguage;
static void LoadLanguageResources(string language) void LoadLanguageResources(string language)
{ {
lock (loadLock) { lock (loadLock) {
try { try {
@ -207,12 +228,9 @@ namespace ICSharpCode.Core
ra.Load(); ra.Load();
} }
} }
EventHandler handler = ClearCaches;
if (handler != null)
handler(null, EventArgs.Empty);
} }
static Hashtable Load(string fileName) Hashtable Load(string fileName)
{ {
if (File.Exists(fileName)) { if (File.Exists(fileName)) {
Hashtable resources = new Hashtable(); Hashtable resources = new Hashtable();
@ -226,7 +244,7 @@ namespace ICSharpCode.Core
return null; return null;
} }
static Hashtable Load(string name, string language) Hashtable Load(string name, string language)
{ {
return Load(resourceDirectory + Path.DirectorySeparatorChar + name + "." + language + ".resources"); return Load(resourceDirectory + Path.DirectorySeparatorChar + name + "." + language + ".resources");
} }
@ -244,7 +262,7 @@ namespace ICSharpCode.Core
/// <exception cref="ResourceNotFoundException"> /// <exception cref="ResourceNotFoundException">
/// Is thrown when the GlobalResource manager can't find a requested resource. /// Is thrown when the GlobalResource manager can't find a requested resource.
/// </exception> /// </exception>
public static string GetString(string name) public string GetString(string name)
{ {
lock (loadLock) { lock (loadLock) {
if (localStrings != null && localStrings[name] != null) { if (localStrings != null && localStrings[name] != null) {
@ -283,7 +301,7 @@ namespace ICSharpCode.Core
} }
} }
public static object GetImageResource(string name) public object GetImageResource(string name)
{ {
lock (loadLock) { lock (loadLock) {
object iconobj = null; object iconobj = null;

6
src/Main/ICSharpCode.Core.Presentation/LanguageChangeWeakEventManager.cs

@ -39,14 +39,16 @@ namespace ICSharpCode.Core.Presentation
} }
} }
readonly IResourceService resourceService = ServiceSingleton.ServiceProvider.GetRequiredService<IResourceService>();
protected override void StartListening(object source) protected override void StartListening(object source)
{ {
ResourceService.LanguageChanged += DeliverEvent; resourceService.LanguageChanged += DeliverEvent;
} }
protected override void StopListening(object source) protected override void StopListening(object source)
{ {
ResourceService.LanguageChanged -= DeliverEvent; resourceService.LanguageChanged -= DeliverEvent;
} }
} }
} }

10
src/Main/ICSharpCode.Core.Presentation/PresentationResourceService.cs

@ -17,13 +17,15 @@ namespace ICSharpCode.Core.Presentation
public static class PresentationResourceService public static class PresentationResourceService
{ {
static readonly Dictionary<string, BitmapSource> bitmapCache = new Dictionary<string, BitmapSource>(); static readonly Dictionary<string, BitmapSource> bitmapCache = new Dictionary<string, BitmapSource>();
static readonly IResourceService resourceService;
static PresentationResourceService() static PresentationResourceService()
{ {
ResourceService.ClearCaches += ResourceService_ClearCaches; resourceService = ServiceSingleton.ServiceProvider.GetRequiredService<IResourceService>();
resourceService.LanguageChanged += OnLanguageChanged;
} }
static void ResourceService_ClearCaches(object sender, EventArgs e) static void OnLanguageChanged(object sender, EventArgs e)
{ {
lock (bitmapCache) { lock (bitmapCache) {
bitmapCache.Clear(); bitmapCache.Clear();
@ -59,11 +61,13 @@ namespace ICSharpCode.Core.Presentation
/// </exception> /// </exception>
public static BitmapSource GetBitmapSource(string name) public static BitmapSource GetBitmapSource(string name)
{ {
if (resourceService == null)
throw new ArgumentNullException("resourceService");
lock (bitmapCache) { lock (bitmapCache) {
BitmapSource bs; BitmapSource bs;
if (bitmapCache.TryGetValue(name, out bs)) if (bitmapCache.TryGetValue(name, out bs))
return bs; return bs;
System.Drawing.Bitmap bmp = (System.Drawing.Bitmap)ResourceService.GetImageResource(name); System.Drawing.Bitmap bmp = (System.Drawing.Bitmap)resourceService.GetImageResource(name);
if (bmp == null) { if (bmp == null) {
throw new ResourceNotFoundException(name); throw new ResourceNotFoundException(name);
} }

5
src/Main/ICSharpCode.Core.WinForms/ToolBar/ToolBarService.cs

@ -74,17 +74,18 @@ namespace ICSharpCode.Core.WinForms
} }
class LanguageChangeWatcher { class LanguageChangeWatcher {
readonly IResourceService resourceService = ServiceSingleton.ServiceProvider.GetRequiredService<IResourceService>();
ToolStrip toolStrip; ToolStrip toolStrip;
public LanguageChangeWatcher(ToolStrip toolStrip) { public LanguageChangeWatcher(ToolStrip toolStrip) {
this.toolStrip = toolStrip; this.toolStrip = toolStrip;
toolStrip.Disposed += Disposed; toolStrip.Disposed += Disposed;
ResourceService.LanguageChanged += OnLanguageChanged; resourceService.LanguageChanged += OnLanguageChanged;
} }
void OnLanguageChanged(object sender, EventArgs e) { void OnLanguageChanged(object sender, EventArgs e) {
ToolbarService.UpdateToolbarText(toolStrip); ToolbarService.UpdateToolbarText(toolStrip);
} }
void Disposed(object sender, EventArgs e) { void Disposed(object sender, EventArgs e) {
ResourceService.LanguageChanged -= OnLanguageChanged; resourceService.LanguageChanged -= OnLanguageChanged;
} }
} }

11
src/Main/ICSharpCode.Core.WinForms/WinFormsResourceService.cs

@ -17,12 +17,15 @@ namespace ICSharpCode.Core.WinForms
static Dictionary<string, Icon> iconCache = new Dictionary<string, Icon>(); static Dictionary<string, Icon> iconCache = new Dictionary<string, Icon>();
static Dictionary<string, Bitmap> bitmapCache = new Dictionary<string, Bitmap>(); static Dictionary<string, Bitmap> bitmapCache = new Dictionary<string, Bitmap>();
static readonly IResourceService resourceService;
static WinFormsResourceService() static WinFormsResourceService()
{ {
ResourceService.ClearCaches += ResourceService_ClearCaches; resourceService = ServiceSingleton.ServiceProvider.GetRequiredService<IResourceService>();
resourceService.LanguageChanged += OnLanguageChanged;
} }
static void ResourceService_ClearCaches(object sender, EventArgs e) static void OnLanguageChanged(object sender, EventArgs e)
{ {
lock (iconCache) { lock (iconCache) {
iconCache.Clear(); iconCache.Clear();
@ -162,7 +165,7 @@ namespace ICSharpCode.Core.WinForms
if (iconCache.TryGetValue(name, out ico)) if (iconCache.TryGetValue(name, out ico))
return ico; return ico;
object iconobj = ResourceService.GetImageResource(name); object iconobj = resourceService.GetImageResource(name);
if (iconobj == null) { if (iconobj == null) {
return null; return null;
} }
@ -218,7 +221,7 @@ namespace ICSharpCode.Core.WinForms
Bitmap bmp; Bitmap bmp;
if (bitmapCache.TryGetValue(name, out bmp)) if (bitmapCache.TryGetValue(name, out bmp))
return bmp; return bmp;
bmp = (Bitmap)ResourceService.GetImageResource(name); bmp = (Bitmap)resourceService.GetImageResource(name);
if (bmp == null) { if (bmp == null) {
throw new ResourceNotFoundException(name); throw new ResourceNotFoundException(name);
} }

7
src/Main/SharpDevelop/Sda/CallHelper.cs

@ -62,8 +62,8 @@ namespace ICSharpCode.SharpDevelop.Sda
startup.StartCoreServices(); startup.StartCoreServices();
Assembly exe = Assembly.Load(properties.ResourceAssemblyName); Assembly exe = Assembly.Load(properties.ResourceAssemblyName);
ResourceService.RegisterNeutralStrings(new ResourceManager("ICSharpCode.SharpDevelop.Resources.StringResources", exe)); SD.ResourceService.RegisterNeutralStrings(new ResourceManager("ICSharpCode.SharpDevelop.Resources.StringResources", exe));
ResourceService.RegisterNeutralImages(new ResourceManager("ICSharpCode.SharpDevelop.Resources.BitmapResources", exe)); SD.ResourceService.RegisterNeutralImages(new ResourceManager("ICSharpCode.SharpDevelop.Resources.BitmapResources", exe));
MenuCommand.LinkCommandCreator = delegate(string link) { return new LinkCommand(link); }; MenuCommand.LinkCommandCreator = delegate(string link) { return new LinkCommand(link); };
MenuCommand.KnownCommandCreator = CreateICommandForWPFCommand; MenuCommand.KnownCommandCreator = CreateICommandForWPFCommand;
@ -181,8 +181,9 @@ namespace ICSharpCode.SharpDevelop.Sda
LoggingService.Info("Unloading services..."); LoggingService.Info("Unloading services...");
try { try {
WorkbenchSingleton.OnWorkbenchUnloaded(); WorkbenchSingleton.OnWorkbenchUnloaded();
var propertyService = SD.PropertyService;
((IDisposable)SD.Services).Dispose(); // dispose all services ((IDisposable)SD.Services).Dispose(); // dispose all services
PropertyService.Save(); propertyService.Save();
} catch (Exception ex) { } catch (Exception ex) {
LoggingService.Warn("Exception during unloading", ex); LoggingService.Warn("Exception during unloading", ex);
if (exception == null) { if (exception == null) {

4
src/Main/SharpDevelop/Workbench/AvalonWorkbenchWindow.cs

@ -34,7 +34,7 @@ namespace ICSharpCode.SharpDevelop.Workbench
this.dockLayout = dockLayout; this.dockLayout = dockLayout;
viewContents = new ViewContentCollection(this); viewContents = new ViewContentCollection(this);
ResourceService.LanguageChanged += OnTabPageTextChanged; SD.ResourceService.LanguageChanged += OnTabPageTextChanged;
} }
protected override void FocusContent() protected override void FocusContent()
@ -284,7 +284,7 @@ namespace ICSharpCode.SharpDevelop.Workbench
void Dispose() void Dispose()
{ {
ResourceService.LanguageChanged -= OnTabPageTextChanged; SD.ResourceService.LanguageChanged -= OnTabPageTextChanged;
// DetachContent must be called before the controls are disposed // DetachContent must be called before the controls are disposed
List<IViewContent> viewContents = this.ViewContents.ToList(); List<IViewContent> viewContents = this.ViewContents.ToList();
this.ViewContents.Clear(); this.ViewContents.Clear();

2
src/Main/SharpDevelop/Workbench/ChooseLayoutCommand.cs

@ -22,7 +22,7 @@ namespace ICSharpCode.SharpDevelop.Workbench
public ChooseLayoutCommand() public ChooseLayoutCommand()
{ {
LayoutConfiguration.LayoutChanged += new EventHandler(LayoutChanged); LayoutConfiguration.LayoutChanged += new EventHandler(LayoutChanged);
ResourceService.LanguageChanged += new EventHandler(ResourceService_LanguageChanged); SD.ResourceService.LanguageChanged += new EventHandler(ResourceService_LanguageChanged);
} }
void ResourceService_LanguageChanged(object sender, EventArgs e) void ResourceService_LanguageChanged(object sender, EventArgs e)

2
src/Main/SharpDevelop/Workbench/WpfWorkbench.cs

@ -133,7 +133,7 @@ namespace ICSharpCode.SharpDevelop.Workbench
requerySuggestedEventHandler = new EventHandler(CommandManager_RequerySuggested); requerySuggestedEventHandler = new EventHandler(CommandManager_RequerySuggested);
CommandManager.RequerySuggested += requerySuggestedEventHandler; CommandManager.RequerySuggested += requerySuggestedEventHandler;
ResourceService.LanguageChanged += OnLanguageChanged; SD.ResourceService.LanguageChanged += OnLanguageChanged;
SD.StatusBar.SetMessage("${res:MainWindow.StatusBar.ReadyMessage}"); SD.StatusBar.SetMessage("${res:MainWindow.StatusBar.ReadyMessage}");
} }

Loading…
Cancel
Save