diff --git a/ChangeLog b/ChangeLog index 14dcc75fa..1487dfa10 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2003-02-18 Mark Crichton + + * generator/EnumGen.cs: Handle different enum types. + 2003-02-14 Duncan Mak * api/gtk-api.xml: diff --git a/generator/EnumGen.cs b/generator/EnumGen.cs index 579d35a56..da4f17742 100644 --- a/generator/EnumGen.cs +++ b/generator/EnumGen.cs @@ -61,9 +61,35 @@ namespace GtkSharp.Generation { if (Elem.GetAttribute("type") == "flags") sw.WriteLine ("\t[Flags]"); + // Ok, this is obscene. We need to go through the enums first + // to find "large" values. If we find some, we need to change + // the base type of the enum. + + string enum_type = null; + + foreach (XmlNode node in Elem.ChildNodes) { + if (!(node is XmlElement) || node.Name != "member") { + continue; + } + + XmlElement member = (XmlElement) node; + + if (member.HasAttribute("value")) { + string value = member.GetAttribute("value"); + if (value.EndsWith("U")) { + enum_type = "uint"; + member.SetAttribute("value", value.TrimEnd('U')); + } + } + } + sw.WriteLine ("#region Autogenerated code"); - - sw.WriteLine ("\tpublic enum " + Name + " {"); + + if (enum_type != null) + sw.WriteLine ("\tpublic enum " + Name + " : " + enum_type + " {"); + else + sw.WriteLine ("\tpublic enum " + Name + " {"); + sw.WriteLine (); foreach (XmlNode node in Elem.ChildNodes) {