using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace Vestris.ResourceLib
{
///
/// An accelerator, RT_ACCELERATOR resource.
/// An accelerator provides the user with access to an application's command set.
///
public class AcceleratorResource : Resource
{
private List _accelerators = new List();
///
/// Accelerator keys.
///
public List Accelerators
{
get
{
return _accelerators;
}
set
{
_accelerators = value;
}
}
///
/// A new accelerator resource.
///
public AcceleratorResource()
: base(IntPtr.Zero,
IntPtr.Zero,
new ResourceId(Kernel32.ResourceTypes.RT_ACCELERATOR),
null,
ResourceUtil.NEUTRALLANGID,
0)
{
}
///
/// An existing accelerator resource.
///
/// Module handle.
/// Resource ID.
/// Resource type.
/// Resource name.
/// Language ID.
/// Resource size.
public AcceleratorResource(IntPtr hModule, IntPtr hResource, ResourceId type, ResourceId name, UInt16 language, int size)
: base(hModule, hResource, type, name, language, size)
{
}
///
/// Read the accelerators table.
///
/// Handle to a module.
/// Pointer to the beginning of the accelerator table.
/// Address of the end of the accelerator table.
internal override IntPtr Read(IntPtr hModule, IntPtr lpRes)
{
int count = _size / Marshal.SizeOf(typeof(User32.ACCEL));
for (int i = 0; i < count; i++)
{
Accelerator accelerator = new Accelerator();
lpRes = accelerator.Read(lpRes);
_accelerators.Add(accelerator);
}
return lpRes;
}
internal override void Write(System.IO.BinaryWriter w)
{
foreach (Accelerator accelerator in _accelerators)
{
accelerator.Write(w);
}
}
///
/// String representation of the accelerators resource.
///
///
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(string.Format("{0} ACCELERATORS", Name));
sb.AppendLine("BEGIN");
foreach(Accelerator accelerator in _accelerators)
{
sb.AppendLine(string.Format(" {0}", accelerator));
}
sb.AppendLine("END");
return sb.ToString();
}
}
}