mirror of
https://github.com/Ryujinx/GtkSharp.git
synced 2024-09-08 07:53:17 +02:00
Apply the parts of the generator reorganization from #69514 that
don't actually affect the generated output * generator/PropertyBase.cs: new base class for fields and properties (mostly containing code formerly in Property.cs). * generator/Property.cs: derive from PropertyBase * generator/FieldBase.cs: base class for fields (containing some code formerly in Field.cs) * generator/StructField.cs: class for struct fields (the rest of what used to be Field.cs) * generator/StructBase.cs: s/Field/StructField/ * gnome/Gnome.metadata: hide a few funky _get_ methods that the generator is just now noticing, to preserve the old output. svn path=/trunk/gtk-sharp/; revision=43896
This commit is contained in:
commit
5825f7f4fe
21
ChangeLog
21
ChangeLog
@ -1,3 +1,24 @@
|
|||||||
|
2005-05-02 Dan Winship <danw@novell.com>
|
||||||
|
|
||||||
|
Apply the parts of the generator reorganization from #69514 that
|
||||||
|
don't actually affect the generated output
|
||||||
|
|
||||||
|
* generator/PropertyBase.cs: new base class for fields and
|
||||||
|
properties (mostly containing code formerly in Property.cs).
|
||||||
|
|
||||||
|
* generator/Property.cs: derive from PropertyBase
|
||||||
|
|
||||||
|
* generator/FieldBase.cs: base class for fields (containing some
|
||||||
|
code formerly in Field.cs)
|
||||||
|
|
||||||
|
* generator/StructField.cs: class for struct fields (the rest of
|
||||||
|
what used to be Field.cs)
|
||||||
|
|
||||||
|
* generator/StructBase.cs: s/Field/StructField/
|
||||||
|
|
||||||
|
* gnome/Gnome.metadata: hide a few _get_ methods that the
|
||||||
|
generator is just now noticing, to preserve the old output.
|
||||||
|
|
||||||
2005-05-02 Mike Kestner <mkestner@novell.com>
|
2005-05-02 Mike Kestner <mkestner@novell.com>
|
||||||
|
|
||||||
* generator/Property.cs : fix interface setter generation.
|
* generator/Property.cs : fix interface setter generation.
|
||||||
|
70
generator/FieldBase.cs
Normal file
70
generator/FieldBase.cs
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
// GtkSharp.Generation.FieldBase.cs - base class for struct and object
|
||||||
|
// fields
|
||||||
|
//
|
||||||
|
// Copyright (c) 2004 Novell, Inc.
|
||||||
|
//
|
||||||
|
// This program is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of version 2 of the GNU General Public
|
||||||
|
// License as published by the Free Software Foundation.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
// General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public
|
||||||
|
// License along with this program; if not, write to the
|
||||||
|
// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
// Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
|
||||||
|
namespace GtkSharp.Generation {
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.IO;
|
||||||
|
using System.Xml;
|
||||||
|
|
||||||
|
public abstract class FieldBase : PropertyBase {
|
||||||
|
public FieldBase (XmlElement elem, ClassBase container_type) : base (elem, container_type) {}
|
||||||
|
|
||||||
|
protected virtual bool Readable {
|
||||||
|
get {
|
||||||
|
return elem.GetAttribute ("readable") != "false";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual bool Writable {
|
||||||
|
get {
|
||||||
|
return elem.GetAttribute ("writeable") != "false";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract string DefaultAccess { get; }
|
||||||
|
|
||||||
|
protected string Access {
|
||||||
|
get {
|
||||||
|
return elem.HasAttribute ("access") ? elem.GetAttribute ("access") : DefaultAccess;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsArray {
|
||||||
|
get {
|
||||||
|
return elem.HasAttribute("array_len") || elem.HasAttribute("array");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsBitfield {
|
||||||
|
get {
|
||||||
|
return elem.HasAttribute("bits");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Ignored {
|
||||||
|
get {
|
||||||
|
return IsArray || Access == "private";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -18,7 +18,7 @@ sources = \
|
|||||||
ConstStringGen.cs \
|
ConstStringGen.cs \
|
||||||
Ctor.cs \
|
Ctor.cs \
|
||||||
EnumGen.cs \
|
EnumGen.cs \
|
||||||
Field.cs \
|
FieldBase.cs \
|
||||||
GenBase.cs \
|
GenBase.cs \
|
||||||
GenerationInfo.cs \
|
GenerationInfo.cs \
|
||||||
IGeneratable.cs \
|
IGeneratable.cs \
|
||||||
@ -38,6 +38,7 @@ sources = \
|
|||||||
Parameters.cs \
|
Parameters.cs \
|
||||||
Parser.cs \
|
Parser.cs \
|
||||||
Property.cs \
|
Property.cs \
|
||||||
|
PropertyBase.cs \
|
||||||
ReturnValue.cs \
|
ReturnValue.cs \
|
||||||
Signal.cs \
|
Signal.cs \
|
||||||
Signature.cs \
|
Signature.cs \
|
||||||
@ -45,6 +46,7 @@ sources = \
|
|||||||
SimpleGen.cs \
|
SimpleGen.cs \
|
||||||
Statistics.cs \
|
Statistics.cs \
|
||||||
StructBase.cs \
|
StructBase.cs \
|
||||||
|
StructField.cs \
|
||||||
StructGen.cs \
|
StructGen.cs \
|
||||||
SymbolTable.cs \
|
SymbolTable.cs \
|
||||||
VirtualMethod.cs \
|
VirtualMethod.cs \
|
||||||
|
@ -27,31 +27,14 @@ namespace GtkSharp.Generation {
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
|
|
||||||
public class Property {
|
public class Property : PropertyBase {
|
||||||
|
|
||||||
protected XmlElement elem;
|
public Property (XmlElement elem, ClassBase container_type) : base (elem, container_type) {}
|
||||||
protected ClassBase container_type;
|
|
||||||
|
|
||||||
public string Name {
|
|
||||||
get {
|
|
||||||
return elem.GetAttribute ("name");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Property (XmlElement elem, ClassBase container_type)
|
|
||||||
{
|
|
||||||
this.elem = elem;
|
|
||||||
this.container_type = container_type;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Validate ()
|
public bool Validate ()
|
||||||
{
|
{
|
||||||
string c_type = elem.GetAttribute("type");
|
if (CSType == "" && !Hidden) {
|
||||||
SymbolTable table = SymbolTable.Table;
|
Console.Write("Property has unknown Type {0} ", CType);
|
||||||
string cs_type = table.GetCSType(c_type);
|
|
||||||
|
|
||||||
if (cs_type == "") {
|
|
||||||
Console.Write("Property has unknown Type {0} ", c_type);
|
|
||||||
Statistics.ThrottledCount++;
|
Statistics.ThrottledCount++;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -59,6 +42,19 @@ namespace GtkSharp.Generation {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Readable {
|
||||||
|
get {
|
||||||
|
return elem.GetAttribute ("readable") == "true";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Writable {
|
||||||
|
get {
|
||||||
|
return elem.GetAttribute ("writeable") == "true" &&
|
||||||
|
!elem.HasAttribute ("construct-only");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected virtual string PropertyAttribute (string qpname) {
|
protected virtual string PropertyAttribute (string qpname) {
|
||||||
return "[GLib.Property (" + qpname + ")]";
|
return "[GLib.Property (" + qpname + ")]";
|
||||||
}
|
}
|
||||||
@ -71,92 +67,57 @@ namespace GtkSharp.Generation {
|
|||||||
return "SetProperty(" + qpname + ", val)";
|
return "SetProperty(" + qpname + ", val)";
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Generate (GenerationInfo gen_info, string indent)
|
public override void Generate (GenerationInfo gen_info, string indent)
|
||||||
{
|
{
|
||||||
SymbolTable table = SymbolTable.Table;
|
SymbolTable table = SymbolTable.Table;
|
||||||
StreamWriter sw = gen_info.Writer;
|
StreamWriter sw = gen_info.Writer;
|
||||||
|
|
||||||
string c_type = elem.GetAttribute("type");
|
if (Hidden || (!Readable && !Writable))
|
||||||
string cs_type = table.GetCSType(c_type);
|
return;
|
||||||
|
|
||||||
string modifiers = "";
|
string modifiers = "";
|
||||||
|
|
||||||
if (elem.HasAttribute("new_flag") || (container_type.Parent != null && container_type.Parent.GetPropertyRecursively (Name) != null))
|
if (IsNew || (container_type.Parent != null && container_type.Parent.GetPropertyRecursively (Name) != null))
|
||||||
modifiers = "new ";
|
modifiers = "new ";
|
||||||
|
|
||||||
string name = Name;
|
string name = Name;
|
||||||
if (name == container_type.Name) {
|
if (name == container_type.Name) {
|
||||||
name += "Prop";
|
name += "Prop";
|
||||||
}
|
}
|
||||||
string qpname = "\"" + elem.GetAttribute("cname") + "\"";
|
string qpname = "\"" + CName + "\"";
|
||||||
|
|
||||||
string v_type = "";
|
string v_type = "";
|
||||||
if (table.IsEnum(c_type)) {
|
if (table.IsEnum(CType)) {
|
||||||
v_type = "(int) (GLib.EnumWrapper)";
|
v_type = "(int) (GLib.EnumWrapper)";
|
||||||
} else if (table.IsObject(c_type) || table.IsInterface (c_type)) {
|
} else if (table.IsObject(CType) || table.IsInterface (CType)) {
|
||||||
v_type = "(GLib.UnwrappedObject)";
|
v_type = "(GLib.UnwrappedObject)";
|
||||||
} else if (table.IsBoxed (c_type)) {
|
} else if (table.IsBoxed (CType)) {
|
||||||
v_type = "(GLib.Boxed)";
|
v_type = "(GLib.Boxed)";
|
||||||
} else if (table.IsOpaque (c_type)) {
|
} else if (table.IsOpaque (CType)) {
|
||||||
v_type = "(GLib.Opaque)";
|
v_type = "(GLib.Opaque)";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (elem.HasAttribute("construct-only") && !elem.HasAttribute("readable")) {
|
GenerateImports (gen_info, indent);
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool has_getter = false;
|
|
||||||
bool has_setter = false;
|
|
||||||
string getter_type = String.Empty;
|
|
||||||
string setter_type = String.Empty;
|
|
||||||
|
|
||||||
Method getter = container_type.GetMethod("Get" + Name);
|
|
||||||
if (getter != null && getter.Validate () && getter.IsGetter)
|
|
||||||
getter_type = getter.ReturnType;
|
|
||||||
|
|
||||||
Method setter = container_type.GetMethod("Set" + Name);
|
|
||||||
if (setter != null && setter.Validate () && setter.IsSetter)
|
|
||||||
setter_type = setter.Signature.Types;
|
|
||||||
|
|
||||||
if (getter_type != String.Empty && getter_type == setter_type) {
|
|
||||||
has_getter = has_setter = true;
|
|
||||||
getter.GenerateImport (sw);
|
|
||||||
setter.GenerateImport (sw);
|
|
||||||
cs_type = getter_type;
|
|
||||||
} else {
|
|
||||||
if (getter_type == cs_type) {
|
|
||||||
has_getter = true;
|
|
||||||
getter.GenerateImport(sw);
|
|
||||||
}
|
|
||||||
if (setter_type != String.Empty) {
|
|
||||||
has_setter = true;
|
|
||||||
setter.GenerateImport(sw);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (has_setter && setter_type != cs_type)
|
|
||||||
cs_type = setter_type;
|
|
||||||
else if (has_getter && getter_type != cs_type)
|
|
||||||
cs_type = getter_type;
|
|
||||||
}
|
|
||||||
|
|
||||||
sw.WriteLine (indent + PropertyAttribute (qpname));
|
sw.WriteLine (indent + PropertyAttribute (qpname));
|
||||||
sw.WriteLine (indent + "public " + modifiers + cs_type + " " + name + " {");
|
sw.WriteLine (indent + "public " + modifiers + CSType + " " + name + " {");
|
||||||
indent += "\t";
|
indent += "\t";
|
||||||
|
|
||||||
if (has_getter) {
|
if (Getter != null) {
|
||||||
sw.Write(indent + "get ");
|
sw.Write(indent + "get ");
|
||||||
getter.GenerateBody(gen_info, "\t");
|
Getter.GenerateBody(gen_info, "\t");
|
||||||
sw.WriteLine();
|
sw.WriteLine();
|
||||||
} else if (elem.HasAttribute("readable")) {
|
} else if (Readable) {
|
||||||
sw.WriteLine(indent + "get {");
|
sw.WriteLine(indent + "get {");
|
||||||
sw.WriteLine(indent + "\tGLib.Value val = " + RawGetter (qpname) + ";");
|
sw.WriteLine(indent + "\tGLib.Value val = " + RawGetter (qpname) + ";");
|
||||||
if (table.IsObject (c_type) || table.IsInterface (c_type)) {
|
if (table.IsObject (CType) || table.IsInterface (CType)) {
|
||||||
sw.WriteLine(indent + "\tSystem.IntPtr raw_ret = (System.IntPtr) {0} val;", v_type);
|
sw.WriteLine(indent + "\tSystem.IntPtr raw_ret = (System.IntPtr) {0} val;", v_type);
|
||||||
sw.WriteLine(indent + "\t" + cs_type + " ret = " + table.FromNativeReturn(c_type, "raw_ret") + ";");
|
sw.WriteLine(indent + "\t" + CSType + " ret = " + table.FromNativeReturn(CType, "raw_ret") + ";");
|
||||||
} else if (table.IsOpaque (c_type) || table.IsBoxed (c_type)) {
|
} else if (table.IsOpaque (CType) || table.IsBoxed (CType)) {
|
||||||
sw.WriteLine(indent + "\t" + cs_type + " ret = (" + cs_type + ") val;");
|
sw.WriteLine(indent + "\t" + CSType + " ret = (" + CSType + ") val;");
|
||||||
} else {
|
} else {
|
||||||
sw.Write(indent + "\t" + cs_type + " ret = ");
|
sw.Write(indent + "\t" + CSType + " ret = ");
|
||||||
sw.Write ("(" + cs_type + ") ");
|
sw.Write ("(" + CSType + ") ");
|
||||||
if (v_type != "") {
|
if (v_type != "") {
|
||||||
sw.Write(v_type + " ");
|
sw.Write(v_type + " ");
|
||||||
}
|
}
|
||||||
@ -168,22 +129,22 @@ namespace GtkSharp.Generation {
|
|||||||
sw.WriteLine(indent + "}");
|
sw.WriteLine(indent + "}");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (has_setter) {
|
if (Setter != null) {
|
||||||
sw.Write(indent + "set ");
|
sw.Write(indent + "set ");
|
||||||
setter.GenerateBody(gen_info, "\t");
|
Setter.GenerateBody(gen_info, "\t");
|
||||||
sw.WriteLine();
|
sw.WriteLine();
|
||||||
} else if (elem.HasAttribute("writeable") && !elem.HasAttribute("construct-only")) {
|
} else if (Writable) {
|
||||||
sw.WriteLine(indent + "set {");
|
sw.WriteLine(indent + "set {");
|
||||||
sw.Write(indent + "\tGLib.Value val = ");
|
sw.Write(indent + "\tGLib.Value val = ");
|
||||||
if (table.IsEnum(c_type)) {
|
if (table.IsEnum(CType)) {
|
||||||
sw.WriteLine("new GLib.Value(new GLib.EnumWrapper ((int) value, {0}), \"{1}\");", table.IsEnumFlags (c_type) ? "true" : "false", c_type);
|
sw.WriteLine("new GLib.Value(new GLib.EnumWrapper ((int) value, {0}), \"{1}\");", table.IsEnumFlags (CType) ? "true" : "false", CType);
|
||||||
} else if (table.IsBoxed (c_type)) {
|
} else if (table.IsBoxed (CType)) {
|
||||||
sw.WriteLine("(GLib.Value) value;");
|
sw.WriteLine("(GLib.Value) value;");
|
||||||
} else if (table.IsOpaque (c_type)) {
|
} else if (table.IsOpaque (CType)) {
|
||||||
sw.WriteLine("new GLib.Value(value, \"{0}\");", c_type);
|
sw.WriteLine("new GLib.Value(value, \"{0}\");", CType);
|
||||||
} else {
|
} else {
|
||||||
sw.Write("new GLib.Value(");
|
sw.Write("new GLib.Value(");
|
||||||
if (v_type != "" && !(table.IsObject (c_type) || table.IsInterface (c_type) || table.IsOpaque (c_type))) {
|
if (v_type != "" && !(table.IsObject (CType) || table.IsInterface (CType) || table.IsOpaque (CType))) {
|
||||||
sw.Write(v_type + " ");
|
sw.Write(v_type + " ");
|
||||||
}
|
}
|
||||||
sw.WriteLine("value);");
|
sw.WriteLine("value);");
|
||||||
|
120
generator/PropertyBase.cs
Normal file
120
generator/PropertyBase.cs
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
// GtkSharp.Generation.PropertyBase.cs - base class for properties and
|
||||||
|
// fields
|
||||||
|
//
|
||||||
|
// Copyright (c) 2005 Novell, Inc.
|
||||||
|
//
|
||||||
|
// This program is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of version 2 of the GNU General Public
|
||||||
|
// License as published by the Free Software Foundation.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
// General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public
|
||||||
|
// License along with this program; if not, write to the
|
||||||
|
// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
// Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
|
||||||
|
namespace GtkSharp.Generation {
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Xml;
|
||||||
|
|
||||||
|
public abstract class PropertyBase {
|
||||||
|
|
||||||
|
protected XmlElement elem;
|
||||||
|
protected ClassBase container_type;
|
||||||
|
|
||||||
|
public PropertyBase (XmlElement elem, ClassBase container_type)
|
||||||
|
{
|
||||||
|
this.elem = elem;
|
||||||
|
this.container_type = container_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Name {
|
||||||
|
get {
|
||||||
|
return elem.GetAttribute ("name");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string CName {
|
||||||
|
get {
|
||||||
|
return elem.GetAttribute ("cname");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected string ctype;
|
||||||
|
public string CType {
|
||||||
|
get {
|
||||||
|
if (ctype == null)
|
||||||
|
ctype = elem.GetAttribute ("type");
|
||||||
|
return ctype;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected string cstype;
|
||||||
|
public string CSType {
|
||||||
|
get {
|
||||||
|
if (cstype == null)
|
||||||
|
cstype = SymbolTable.Table.GetCSType (CType);
|
||||||
|
return cstype;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Hidden {
|
||||||
|
get {
|
||||||
|
return elem.HasAttribute("hidden");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected bool IsNew {
|
||||||
|
get {
|
||||||
|
return elem.HasAttribute("new_flag");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method getter;
|
||||||
|
protected Method Getter {
|
||||||
|
get {
|
||||||
|
if (getter == null) {
|
||||||
|
getter = container_type.GetMethod ("Get" + Name);
|
||||||
|
if (getter != null && getter.Name == "Get" + Name &&
|
||||||
|
getter.Validate () && getter.IsGetter)
|
||||||
|
cstype = getter.ReturnType;
|
||||||
|
else
|
||||||
|
getter = null;
|
||||||
|
}
|
||||||
|
return getter;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method setter;
|
||||||
|
protected Method Setter {
|
||||||
|
get {
|
||||||
|
if (setter == null) {
|
||||||
|
setter = container_type.GetMethod ("Set" + Name);
|
||||||
|
if (setter != null && setter.Name == "Set" + Name &&
|
||||||
|
setter.Validate () && setter.IsSetter)
|
||||||
|
cstype = setter.Signature.Types;
|
||||||
|
else
|
||||||
|
setter = null;
|
||||||
|
}
|
||||||
|
return setter;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void GenerateImports (GenerationInfo gen_info, string indent)
|
||||||
|
{
|
||||||
|
if (Getter != null)
|
||||||
|
Getter.GenerateImport (gen_info.Writer);
|
||||||
|
if (Setter != null)
|
||||||
|
Setter.GenerateImport (gen_info.Writer);
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract void Generate (GenerationInfo gen_info, string indent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -40,7 +40,7 @@ namespace GtkSharp.Generation {
|
|||||||
|
|
||||||
switch (node.Name) {
|
switch (node.Name) {
|
||||||
case "field":
|
case "field":
|
||||||
fields.Add (new Field (member));
|
fields.Add (new StructField (member, this));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "callback":
|
case "callback":
|
||||||
@ -112,11 +112,11 @@ namespace GtkSharp.Generation {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void GenFields (StreamWriter sw)
|
protected void GenFields (GenerationInfo gen_info)
|
||||||
{
|
{
|
||||||
Field.bitfields = 0;
|
StructField.bitfields = 0;
|
||||||
bool need_field = true;
|
bool need_field = true;
|
||||||
foreach (Field field in fields) {
|
foreach (StructField field in fields) {
|
||||||
if (field.IsBit) {
|
if (field.IsBit) {
|
||||||
if (need_field)
|
if (need_field)
|
||||||
need_field = false;
|
need_field = false;
|
||||||
@ -124,13 +124,13 @@ namespace GtkSharp.Generation {
|
|||||||
continue;
|
continue;
|
||||||
} else
|
} else
|
||||||
need_field = true;
|
need_field = true;
|
||||||
field.Generate (sw);
|
field.Generate (gen_info, "\t\t");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Validate ()
|
public bool Validate ()
|
||||||
{
|
{
|
||||||
foreach (Field field in fields) {
|
foreach (StructField field in fields) {
|
||||||
if (!field.Validate ()) {
|
if (!field.Validate ()) {
|
||||||
Console.WriteLine ("in Struct " + QualifiedName);
|
Console.WriteLine ("in Struct " + QualifiedName);
|
||||||
return false;
|
return false;
|
||||||
@ -162,7 +162,7 @@ namespace GtkSharp.Generation {
|
|||||||
sw.WriteLine ("\tpublic struct " + Name + " {");
|
sw.WriteLine ("\tpublic struct " + Name + " {");
|
||||||
sw.WriteLine ();
|
sw.WriteLine ();
|
||||||
|
|
||||||
GenFields (sw);
|
GenFields (gen_info);
|
||||||
sw.WriteLine ();
|
sw.WriteLine ();
|
||||||
GenCtors (gen_info);
|
GenCtors (gen_info);
|
||||||
GenMethods (gen_info, null, null);
|
GenMethods (gen_info, null, null);
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
// GtkSharp.Generation.Field.cs - The Field generation Class.
|
// GtkSharp.Generation.StructField.cs - The Structure Field generation
|
||||||
|
// Class.
|
||||||
//
|
//
|
||||||
// Author: Mike Kestner <mkestner@ximian.com>
|
// Author: Mike Kestner <mkestner@ximian.com>
|
||||||
//
|
//
|
||||||
@ -25,20 +26,15 @@ namespace GtkSharp.Generation {
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
|
|
||||||
public class Field {
|
public class StructField : FieldBase {
|
||||||
|
|
||||||
public static int bitfields;
|
public static int bitfields;
|
||||||
|
|
||||||
XmlElement elem;
|
public StructField (XmlElement elem, ClassBase container_type) : base (elem, container_type) {}
|
||||||
|
|
||||||
public Field (XmlElement elem)
|
protected override string DefaultAccess {
|
||||||
{
|
|
||||||
this.elem = elem;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Access {
|
|
||||||
get {
|
get {
|
||||||
return elem.HasAttribute ("access") ? elem.GetAttribute ("access") : "public";
|
return "public";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,9 +55,9 @@ namespace GtkSharp.Generation {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string CSType {
|
public new string CSType {
|
||||||
get {
|
get {
|
||||||
string type = SymbolTable.Table.GetCSType (CType);
|
string type = base.CSType;
|
||||||
if (IsArray)
|
if (IsArray)
|
||||||
type += "[]";
|
type += "[]";
|
||||||
else if (IsBit)
|
else if (IsBit)
|
||||||
@ -75,34 +71,15 @@ namespace GtkSharp.Generation {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string CType {
|
|
||||||
get {
|
|
||||||
return elem.GetAttribute ("type");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Hidden {
|
|
||||||
get {
|
|
||||||
return elem.HasAttribute("hidden");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsArray {
|
|
||||||
get {
|
|
||||||
return elem.HasAttribute("array_len");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsBit {
|
public bool IsBit {
|
||||||
get {
|
get {
|
||||||
return (elem.HasAttribute("bits") && (elem.GetAttribute("bits") == "1"));
|
return elem.GetAttribute("bits") == "1";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsPadding {
|
public bool IsPadding {
|
||||||
get {
|
get {
|
||||||
string c_name = elem.GetAttribute ("cname");
|
return (CName.StartsWith ("dummy") || CName.StartsWith ("padding"));
|
||||||
return (c_name.StartsWith ("dummy") || c_name.StartsWith ("padding"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,7 +89,7 @@ namespace GtkSharp.Generation {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Name {
|
public new string Name {
|
||||||
get {
|
get {
|
||||||
string result = "";
|
string result = "";
|
||||||
if ((IsPointer || SymbolTable.Table.IsOpaque (CType)) && CSType != "string")
|
if ((IsPointer || SymbolTable.Table.IsOpaque (CType)) && CSType != "string")
|
||||||
@ -121,7 +98,7 @@ namespace GtkSharp.Generation {
|
|||||||
if (IsBit)
|
if (IsBit)
|
||||||
result = String.Format ("_bitfield{0}", bitfields++);
|
result = String.Format ("_bitfield{0}", bitfields++);
|
||||||
else
|
else
|
||||||
result += SymbolTable.Table.MangleName (elem.GetAttribute ("cname"));
|
result += SymbolTable.Table.MangleName (CName);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -129,14 +106,14 @@ namespace GtkSharp.Generation {
|
|||||||
|
|
||||||
public string StudlyName {
|
public string StudlyName {
|
||||||
get {
|
get {
|
||||||
string studly = elem.GetAttribute ("name");
|
string studly = base.Name;
|
||||||
if (studly != "")
|
if (studly != "")
|
||||||
return studly;
|
return studly;
|
||||||
|
|
||||||
// FIXME: this is backward compatibility for API files
|
// FIXME: this is backward compatibility for API files
|
||||||
// output by older versions of the parser. It can go
|
// output by older versions of the parser. It can go
|
||||||
// away at some point.
|
// away at some point.
|
||||||
string name = elem.GetAttribute ("cname");
|
string name = CName;
|
||||||
string[] segs = name.Split('_');
|
string[] segs = name.Split('_');
|
||||||
foreach (string s in segs) {
|
foreach (string s in segs) {
|
||||||
if (s.Trim () == "")
|
if (s.Trim () == "")
|
||||||
@ -150,74 +127,75 @@ namespace GtkSharp.Generation {
|
|||||||
public bool Validate ()
|
public bool Validate ()
|
||||||
{
|
{
|
||||||
if (CSType == "" && !Hidden) {
|
if (CSType == "" && !Hidden) {
|
||||||
Console.Write ("Field has unknown Type {0} ", CType);
|
Console.Write ("Field {0} has unknown Type {1} ", Name, CType);
|
||||||
Statistics.ThrottledCount++;
|
Statistics.ThrottledCount++;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Generate (StreamWriter sw)
|
public override void Generate (GenerationInfo gen_info, string indent)
|
||||||
{
|
{
|
||||||
if (Hidden)
|
if (Hidden)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
StreamWriter sw = gen_info.Writer;
|
||||||
SymbolTable table = SymbolTable.Table;
|
SymbolTable table = SymbolTable.Table;
|
||||||
|
|
||||||
if (IsArray)
|
if (IsArray)
|
||||||
sw.WriteLine ("\t\t[MarshalAs (UnmanagedType.ByValArray, SizeConst=" + ArrayLength + ")]");
|
sw.WriteLine (indent + "[MarshalAs (UnmanagedType.ByValArray, SizeConst=" + ArrayLength + ")]");
|
||||||
|
|
||||||
string wrapped = table.GetCSType (CType);
|
string wrapped = table.GetCSType (CType);
|
||||||
string wrapped_name = SymbolTable.Table.MangleName (elem.GetAttribute ("cname"));
|
string wrapped_name = SymbolTable.Table.MangleName (CName);
|
||||||
IGeneratable gen = table [CType];
|
IGeneratable gen = table [CType];
|
||||||
|
|
||||||
if (IsArray) {
|
if (IsArray) {
|
||||||
sw.WriteLine ("\t\t{0} {1} {2};", Access, CSType, StudlyName);
|
sw.WriteLine (indent + "{0} {1} {2};", Access, CSType, StudlyName);
|
||||||
} else if (IsPadding) {
|
} else if (IsPadding) {
|
||||||
sw.WriteLine ("\t\tprivate {0} {1};", CSType, Name);
|
sw.WriteLine (indent + "private {0} {1};", CSType, Name);
|
||||||
} else if (IsBit) {
|
} else if (IsBit) {
|
||||||
// FIXME
|
// FIXME
|
||||||
sw.WriteLine ("\t\tprivate {0} {1};", CSType, Name);
|
sw.WriteLine (indent + "private {0} {1};", CSType, Name);
|
||||||
} else if (table.IsCallback (CType)) {
|
} else if (table.IsCallback (CType)) {
|
||||||
// FIXME
|
// FIXME
|
||||||
sw.WriteLine ("\t\tprivate {0} {1};", CSType, Name);
|
sw.WriteLine (indent + "private {0} {1};", CSType, Name);
|
||||||
} else if (gen is LPGen || gen is LPUGen) {
|
} else if (gen is LPGen || gen is LPUGen) {
|
||||||
sw.WriteLine ("\t\tprivate " + gen.MarshalType + " " + Name + ";");
|
sw.WriteLine (indent + "private " + gen.MarshalType + " " + Name + ";");
|
||||||
sw.WriteLine ("\t\tpublic " + CSType + " " + StudlyName + " {");
|
sw.WriteLine (indent + "public " + CSType + " " + StudlyName + " {");
|
||||||
sw.WriteLine ("\t\t\tget {");
|
sw.WriteLine (indent + "\tget {");
|
||||||
sw.WriteLine ("\t\t\t\treturn " + gen.FromNative (Name) + ";");
|
sw.WriteLine (indent + "\t\treturn " + gen.FromNative (Name) + ";");
|
||||||
sw.WriteLine ("\t\t\t}");
|
sw.WriteLine (indent + "\t}");
|
||||||
sw.WriteLine ("\t\t\tset {");
|
sw.WriteLine (indent + "\tset {");
|
||||||
sw.WriteLine ("\t\t\t\t" + Name + " = " + gen.CallByName ("value") + ";");
|
sw.WriteLine (indent + "\t\t" + Name + " = " + gen.CallByName ("value") + ";");
|
||||||
sw.WriteLine ("\t\t\t}");
|
sw.WriteLine (indent + "\t}");
|
||||||
sw.WriteLine ("\t\t}");
|
sw.WriteLine (indent + "}");
|
||||||
} else if (table.IsObject (CType) || table.IsOpaque (CType)) {
|
} else if (table.IsObject (CType) || table.IsOpaque (CType)) {
|
||||||
sw.WriteLine ("\t\tprivate {0} {1};", CSType, Name);
|
sw.WriteLine (indent + "private {0} {1};", CSType, Name);
|
||||||
|
|
||||||
if (Access != "private") {
|
if (Access != "private") {
|
||||||
sw.WriteLine ("\t\t" + Access + " " + wrapped + " " + wrapped_name + " {");
|
sw.WriteLine (indent + "" + Access + " " + wrapped + " " + wrapped_name + " {");
|
||||||
sw.WriteLine ("\t\t\tget { ");
|
sw.WriteLine (indent + "\tget { ");
|
||||||
sw.WriteLine ("\t\t\t\treturn " + table.FromNativeReturn(CType, Name) + ";");
|
sw.WriteLine (indent + "\t\treturn " + table.FromNativeReturn(CType, Name) + ";");
|
||||||
sw.WriteLine ("\t\t\t}");
|
sw.WriteLine (indent + "\t}");
|
||||||
|
|
||||||
sw.WriteLine ("\t\t\tset { " + Name + " = " + table.CallByName (CType, "value") + "; }");
|
sw.WriteLine (indent + "\tset { " + Name + " = " + table.CallByName (CType, "value") + "; }");
|
||||||
sw.WriteLine ("\t\t}");
|
sw.WriteLine (indent + "}");
|
||||||
}
|
}
|
||||||
} else if (IsPointer && (table.IsStruct (CType) || table.IsBoxed (CType))) {
|
} else if (IsPointer && (table.IsStruct (CType) || table.IsBoxed (CType))) {
|
||||||
sw.WriteLine ("\t\tprivate {0} {1};", CSType, Name);
|
sw.WriteLine (indent + "private {0} {1};", CSType, Name);
|
||||||
sw.WriteLine ();
|
sw.WriteLine ();
|
||||||
if (Access != "private") {
|
if (Access != "private") {
|
||||||
sw.WriteLine ("\t\t" + Access + " " + wrapped + " " + wrapped_name + " {");
|
sw.WriteLine (indent + "" + Access + " " + wrapped + " " + wrapped_name + " {");
|
||||||
sw.WriteLine ("\t\t\tget { return " + table.FromNativeReturn (CType, Name) + "; }");
|
sw.WriteLine (indent + "\tget { return " + table.FromNativeReturn (CType, Name) + "; }");
|
||||||
sw.WriteLine ("\t\t}");
|
sw.WriteLine (indent + "}");
|
||||||
}
|
}
|
||||||
} else if (IsPointer && CSType != "string") {
|
} else if (IsPointer && CSType != "string") {
|
||||||
// FIXME: probably some fields here which should be visible.
|
// FIXME: probably some fields here which should be visible.
|
||||||
sw.WriteLine ("\t\tprivate {0} {1};", CSType, Name);
|
sw.WriteLine (indent + "private {0} {1};", CSType, Name);
|
||||||
} else if (Access != "public") {
|
} else if (Access != "public") {
|
||||||
sw.WriteLine ("\t\t{0} {1} {2};", Access, CSType, Name);
|
sw.WriteLine (indent + "{0} {1} {2};", Access, CSType, Name);
|
||||||
} else {
|
} else {
|
||||||
sw.WriteLine ("\t\tpublic {0} {1};", CSType, StudlyName);
|
sw.WriteLine (indent + "public {0} {1};", CSType, StudlyName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -55,6 +55,7 @@
|
|||||||
<attr path="/api/namespace/object[@cname='GnomeCanvasShape']/property[@name='Dash']" name="type">ArtVpathDash</attr>
|
<attr path="/api/namespace/object[@cname='GnomeCanvasShape']/property[@name='Dash']" name="type">ArtVpathDash</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeClient']/signal[@name='Connect']" name="name">Connected</attr>
|
<attr path="/api/namespace/object[@cname='GnomeClient']/signal[@name='Connect']" name="name">Connected</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeClient']/signal[@name='Disconnect']" name="name">Disconnected</attr>
|
<attr path="/api/namespace/object[@cname='GnomeClient']/signal[@name='Disconnect']" name="name">Disconnected</attr>
|
||||||
|
<attr path="/api/namespace/object[@cname='GnomeDateEdit']/method[@name='GetInitialTime']" name="hidden">1</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeDialog']/method[@name='Close']" name="hidden">1</attr>
|
<attr path="/api/namespace/object[@cname='GnomeDialog']/method[@name='Close']" name="hidden">1</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeDialog']/method[@name='SetClose']" name="hidden">1</attr>
|
<attr path="/api/namespace/object[@cname='GnomeDialog']/method[@name='SetClose']" name="hidden">1</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeDialog']/method[@name='SetDefault']" name="new_flag">1</attr>
|
<attr path="/api/namespace/object[@cname='GnomeDialog']/method[@name='SetDefault']" name="new_flag">1</attr>
|
||||||
@ -68,7 +69,7 @@
|
|||||||
<attr path="/api/namespace/object[@cname='GnomeDruidPageEdge']/constructor[@cname='gnome_druid_page_edge_new']" name="hidden">1</attr>
|
<attr path="/api/namespace/object[@cname='GnomeDruidPageEdge']/constructor[@cname='gnome_druid_page_edge_new']" name="hidden">1</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeDruidPageEdge']/constructor[@cname='gnome_druid_page_edge_new_with_vals']" name="hidden">1</attr>
|
<attr path="/api/namespace/object[@cname='GnomeDruidPageEdge']/constructor[@cname='gnome_druid_page_edge_new_with_vals']" name="hidden">1</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeDruidPageEdge']/constructor[@cname='gnome_druid_page_edge_new_aa']" name="hidden">1</attr>
|
<attr path="/api/namespace/object[@cname='GnomeDruidPageEdge']/constructor[@cname='gnome_druid_page_edge_new_aa']" name="hidden">1</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeEntry']/method[@name='GtkEntry']" name="name">GetGtkEntry</attr>
|
<attr path="/api/namespace/object[@cname='GnomeEntry']/method[@name='GtkEntry']" name="hidden">1</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeEntry']/signal[@name='Activate']" name="name">Activated</attr>
|
<attr path="/api/namespace/object[@cname='GnomeEntry']/signal[@name='Activate']" name="name">Activated</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeFileEntry']/method[@name='GnomeEntry']" name="hidden">1</attr>
|
<attr path="/api/namespace/object[@cname='GnomeFileEntry']/method[@name='GnomeEntry']" name="hidden">1</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeFileEntry']/method[@name='GtkEntry']" name="hidden">1</attr>
|
<attr path="/api/namespace/object[@cname='GnomeFileEntry']/method[@name='GtkEntry']" name="hidden">1</attr>
|
||||||
@ -78,14 +79,16 @@
|
|||||||
<attr path="/api/namespace/object[@cname='GnomeFont']/method[@name='StyleList']" name="hidden">1</attr>
|
<attr path="/api/namespace/object[@cname='GnomeFont']/method[@name='StyleList']" name="hidden">1</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeFont']/method[@name='StyleListFree']" name="hidden">1</attr>
|
<attr path="/api/namespace/object[@cname='GnomeFont']/method[@name='StyleListFree']" name="hidden">1</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeFont']/method/*/*[@type='const-guchar*']" name="type">const-gchar*</attr>
|
<attr path="/api/namespace/object[@cname='GnomeFont']/method/*/*[@type='const-guchar*']" name="type">const-gchar*</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeFont']/method/*/*[@type='const-guchar*']" name="type">const-gchar*</attr>
|
<attr path="/api/namespace/object[@cname='GnomeFont']/method[@name='GetFamilyName']/return-type" name="type">const-gchar*</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeFontPreview']/method/*/*[@type='const-guchar*']" name="type">const-gchar*</attr>
|
<attr path="/api/namespace/object[@cname='GnomeFont']/method[@name='GetFullName']/return-type" name="type">gchar*</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeFontFace']/method/return-type[@type='const-guchar*']" name="type">const-gchar*</attr>
|
<attr path="/api/namespace/object[@cname='GnomeFontFace']/method/return-type[@type='const-guchar*']" name="type">const-gchar*</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeFontFace']/method/*/*[@type='const-guchar*']" name="type">const-gchar*</attr>
|
<attr path="/api/namespace/object[@cname='GnomeFontFace']/method/*/*[@type='const-guchar*']" name="type">const-gchar*</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeFontFamily']/method[@name='List']" name="hidden">1</attr>
|
<attr path="/api/namespace/object[@cname='GnomeFontFamily']/method[@name='List']" name="hidden">1</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeFontFamily']/method[@name='ListFree']" name="hidden">1</attr>
|
<attr path="/api/namespace/object[@cname='GnomeFontFamily']/method[@name='ListFree']" name="hidden">1</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeFontFamily']/method[@name='StyleList']" name="hidden">1</attr>
|
<attr path="/api/namespace/object[@cname='GnomeFontFamily']/method[@name='StyleList']" name="hidden">1</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeFontFamily']/method[@name='StyleListFree']" name="hidden">1</attr>
|
<attr path="/api/namespace/object[@cname='GnomeFontFamily']/method[@name='StyleListFree']" name="hidden">1</attr>
|
||||||
|
<attr path="/api/namespace/object[@cname='GnomeFontPicker']/method[@name='GetFont']" name="hidden">1</attr>
|
||||||
|
<attr path="/api/namespace/object[@cname='GnomeFontPreview']/method/*/*[@type='const-guchar*']" name="type">const-gchar*</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeIconEntry']/method[@name='PickDialog']" name="hidden">1</attr>
|
<attr path="/api/namespace/object[@cname='GnomeIconEntry']/method[@name='PickDialog']" name="hidden">1</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeIconList']/constructor[@cname='gnome_icon_list_new']" name="hidden">1</attr>
|
<attr path="/api/namespace/object[@cname='GnomeIconList']/constructor[@cname='gnome_icon_list_new']" name="hidden">1</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GnomeIconList']/method[@name='GetSelection']" name="hidden">1</attr>
|
<attr path="/api/namespace/object[@cname='GnomeIconList']/method[@name='GetSelection']" name="hidden">1</attr>
|
||||||
|
Loading…
Reference in New Issue
Block a user