246 lines
7.1 KiB
C#
246 lines
7.1 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Globalization;
|
|
using System.IO;
|
|
using System.Resources;
|
|
using JD.TeaBoxAddinSystem.Addins.Description.FileReferences;
|
|
using JD.WinFormExtensions;
|
|
|
|
namespace JD.TeaBoxAddinSystem.Addins.Description
|
|
{
|
|
/// <summary>
|
|
/// Module resources.
|
|
/// </summary>
|
|
internal class ModuleResources : IResources
|
|
{
|
|
#region Variables
|
|
|
|
private readonly Module m_owner;
|
|
|
|
#endregion
|
|
|
|
#region Constructor
|
|
|
|
/// <summary>
|
|
/// Constructor.
|
|
/// </summary>
|
|
/// <param name="owner"></param>
|
|
internal ModuleResources(Module owner)
|
|
{
|
|
System.Diagnostics.Debug.Assert(owner != null);
|
|
m_owner = owner;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Properties
|
|
|
|
/// <summary>
|
|
/// All Resources.
|
|
/// </summary>
|
|
public IEnumerable<KeyValuePair<string, object>> AllResources
|
|
{
|
|
get
|
|
{
|
|
foreach (AssemblyFileReference assembly in m_owner.Assemblies)
|
|
{
|
|
foreach (ResourceFileReference resource in assembly.ResourceFiles)
|
|
{
|
|
ResourceManager resourceManager = resource.Resources;
|
|
if (resourceManager != null)
|
|
{
|
|
ResourceSet resourceSet = resourceManager.GetResourceSet(CultureInfo.InvariantCulture, true, false);
|
|
|
|
if (resourceSet != null)
|
|
{
|
|
foreach (DictionaryEntry de in resourceSet)
|
|
{
|
|
yield return new KeyValuePair<string, object>(de.Key.ToString(), de.Value);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach (ResourceFileReference resource in m_owner.ResourceFiles)
|
|
{
|
|
ResourceManager resourceManager = resource.Resources;
|
|
if (resourceManager != null)
|
|
{
|
|
ResourceSet resourceSet = resourceManager.GetResourceSet(CultureInfo.InvariantCulture, true, false);
|
|
|
|
if (resourceSet != null)
|
|
{
|
|
foreach (DictionaryEntry de in resourceSet)
|
|
{
|
|
yield return new KeyValuePair<string, object>(de.Key.ToString(), de.Value);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Methods
|
|
|
|
public object GetObject(string name)
|
|
{
|
|
if (string.IsNullOrEmpty(name))
|
|
{
|
|
return null;
|
|
}
|
|
|
|
object o;
|
|
foreach (AssemblyFileReference assembly in m_owner.Assemblies)
|
|
{
|
|
foreach (ResourceFileReference resource in assembly.ResourceFiles)
|
|
{
|
|
ResourceManager resourceManager = resource.Resources;
|
|
o = resourceManager != null ? resourceManager.GetObject(name) : null;
|
|
if (o != null)
|
|
{
|
|
return o;
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach (ResourceFileReference resource in m_owner.ResourceFiles)
|
|
{
|
|
ResourceManager resourceManager = resource.Resources;
|
|
o = resourceManager != null ? resourceManager.GetObject(name) : null;
|
|
if (o != null)
|
|
{
|
|
return o;
|
|
}
|
|
}
|
|
|
|
// Not found, look in main module
|
|
if (m_owner.Addin != null && !m_owner.IsMainModule)
|
|
{
|
|
o = m_owner.Addin.MainModule.InternalResources.GetObject(name);
|
|
if (o != null)
|
|
{
|
|
return o;
|
|
}
|
|
}
|
|
|
|
// Not found, look in dependent addins
|
|
foreach (Module dependencyModule in AddinManager.SessionService.GetLoadedDependencies(m_owner))
|
|
{
|
|
o = dependencyModule.InternalResources.GetObject(name);
|
|
if (o != null)
|
|
{
|
|
return o;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public ImageOrIcon GetImageOrIcon(string name)
|
|
{
|
|
if (string.IsNullOrEmpty(name))
|
|
return null;
|
|
|
|
ImageOrIcon image = GDIObjectManager.Instance.GetImageOrIcon(name);
|
|
|
|
if (image != null)
|
|
return image;
|
|
|
|
object o = GetObject(name);
|
|
if (o is Bitmap)
|
|
{
|
|
GDIObjectManager.Instance.Register(name, (Bitmap)o);
|
|
return GetImageOrIcon(name);
|
|
}
|
|
else if (o is Icon)
|
|
{
|
|
GDIObjectManager.Instance.Register(name, (Icon)o);
|
|
return GetImageOrIcon(name);
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public Bitmap GetImage(string name)
|
|
{
|
|
if (string.IsNullOrEmpty(name))
|
|
return null;
|
|
|
|
Bitmap image = GDIObjectManager.Instance.GetBitmap(name);
|
|
|
|
if (image != null)
|
|
return image;
|
|
|
|
object o = GetObject(name);
|
|
if (o is Bitmap)
|
|
{
|
|
GDIObjectManager.Instance.Register(name, (Bitmap)o);
|
|
return GetImage(name);
|
|
}
|
|
else if (o is Icon)
|
|
{
|
|
GDIObjectManager.Instance.Register(name, (Icon)o);
|
|
return GetImage(name);
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public Icon GetIcon(string name)
|
|
{
|
|
if (string.IsNullOrEmpty(name))
|
|
return null;
|
|
|
|
Icon icon = GDIObjectManager.Instance.GetIcon(name);
|
|
|
|
if (icon != null)
|
|
return icon;
|
|
|
|
object o = GetObject(name);
|
|
if (o is Bitmap)
|
|
{
|
|
GDIObjectManager.Instance.Register(name, (Bitmap)o);
|
|
return GetIcon(name);
|
|
}
|
|
else if (o is Icon)
|
|
{
|
|
GDIObjectManager.Instance.Register(name, (Icon)o);
|
|
return GetIcon(name);
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public string GetString(string name)
|
|
{
|
|
object o = GetObject(name);
|
|
return o == null ? null : o.ToString();
|
|
}
|
|
|
|
public Stream Open(string name)
|
|
{
|
|
object o = GetObject(name);
|
|
Stream stream = o as Stream;
|
|
|
|
if (stream == null && o is byte[])
|
|
{
|
|
byte[] array = (byte[])o;
|
|
stream = new MemoryStream(array);
|
|
}
|
|
|
|
return stream;
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|