public void VisitEnum(EnumData field)
{
SeekToOffset(field.Offset);
switch (field.Type)
{
case EnumType.Enum8:
field.Value = _reader.ReadSByte();
break;
case EnumType.Enum16:
field.Value = _reader.ReadInt16();
break;
case EnumType.Enum32:
field.Value = _reader.ReadInt32();
break;
}
// Search for the corresponding option and select it
EnumValue selected = null;
foreach (EnumValue option in field.Values)
{
// Typecast the field value and the option value based upon the enum type
switch (field.Type)
{
case EnumType.Enum8:
if ((sbyte) option.Value == (sbyte) field.Value)
selected = option;
break;
case EnumType.Enum16:
if ((short) option.Value == (short) field.Value)
selected = option;
break;
case EnumType.Enum32:
if (option.Value == field.Value)
selected = option;
break;
}
if (selected != null)
break;
}
if (selected == null)
{
// Nothing matched, so just add an option for it
selected = new EnumValue(field.Value.ToString(), field.Value);
field.Values.Add(selected);
}
field.SelectedValue = selected;
}