// GtkSharp.Generation.Property.cs - The Property Generatable. // // Author: Mike Kestner // // (c) 2001-2002 Mike Kestner namespace GtkSharp.Generation { using System; using System.Collections; using System.IO; using System.Xml; public class Property { private XmlElement elem; public Property (XmlElement elem) { this.elem = elem; } public bool Validate () { string c_type = elem.GetAttribute("type"); string cs_type = SymbolTable.GetCSType(c_type); if (cs_type == "") { Console.Write("Property has unknown Type {0} ", c_type); Statistics.ThrottledCount++; return false; } if (SymbolTable.IsInterface(c_type)) { // FIXME: Handle interface props properly. Console.Write("Interface property detected "); Statistics.ThrottledCount++; return false; } return true; } public void Generate (StreamWriter sw) { string c_type = elem.GetAttribute("type"); string cs_type = SymbolTable.GetCSType(c_type); XmlElement parent = (XmlElement) elem.ParentNode; string name = elem.GetAttribute("name"); if (name == parent.GetAttribute("name")) { name += "Prop"; } string v_type = ""; if (SymbolTable.IsEnum(c_type)) { v_type = "int"; } else if (SymbolTable.IsInterface(c_type)) { // FIXME: Handle interface props properly. Console.Write("Interface property detected "); Statistics.ThrottledCount++; return; } else if (SymbolTable.IsObject(c_type)) { v_type = "GLib.Object"; } if (elem.HasAttribute("construct-only") && !elem.HasAttribute("readable")) { return; } sw.WriteLine("\t\tpublic " + cs_type + " " + name + " {"); if (elem.HasAttribute("readable")) { sw.WriteLine("\t\t\tget {"); sw.WriteLine("\t\t\t\tGLib.Value val;"); sw.WriteLine("\t\t\t\tGetProperty(\"" + elem.GetAttribute("cname") + "\", out val);"); sw.Write("\t\t\t\treturn (" + cs_type + ") "); if (v_type != "") { sw.Write("(" + v_type + ") "); } sw.WriteLine("val;"); sw.WriteLine("\t\t\t}"); } if (elem.HasAttribute("writeable") && !elem.HasAttribute("construct-only")) { sw.WriteLine("\t\t\tset {"); sw.Write("\t\t\t\tSetProperty(\"" + elem.GetAttribute("cname") + "\", new GLib.Value("); if (v_type != "") { sw.Write("(" + v_type + ") "); } sw.WriteLine("value));"); sw.WriteLine("\t\t\t}"); } sw.WriteLine("\t\t}"); sw.WriteLine(); Statistics.PropCount++; } } }