2003-12-03 Mike Kestner <mkestner@speakeasy.net>
* generator/CallbackGen.cs : use new sig and isig classes. * generator/Ctor.cs : use new sig, isig, and body classes. * generator/ImportSignature.cs : isig code spun out from Parameters. * generator/Method.cs : use new sig, isig, and body classes. * generator/MethodBody.cs : spun Initialize, GetCallString, Finish, and Exception throwing methods from Parameters. * generator/Parameters.cs : Slayed the evilness that was CreateSignature. It is now essentially a container for Parameter classes instead of a tangled mess of code trying to do everything remotely related to parameter lists. Also completely killed the VAType/IsVarArgs stuff, as it can be done with the array and params attrs instead. * generator/Property.cs : use new sig class. * generator/Signature.cs : new method sig generator extracted from Parameters class. add "params" keyword support for tagged parameters. * gnome/Gnome.metadata : hide IconList.GetSearchPath (to be manual) * gnome/gnome-api.xml : regen * gtk/ListStore.custom : kill unneeded overload * gtk/TreeStore.custom : kill unneeded overload * gtk/Gtk.metadata : mark params/args on *store_newv * gtk/gtk-api.xml : regenerated svn path=/trunk/gtk-sharp/; revision=20755
This commit is contained in:
parent
7a10147c5c
commit
f61ac5c89c
15 changed files with 458 additions and 378 deletions
27
ChangeLog
27
ChangeLog
|
@ -1,13 +1,32 @@
|
||||||
|
2003-12-03 Mike Kestner <mkestner@speakeasy.net>
|
||||||
|
|
||||||
|
* generator/CallbackGen.cs : use new sig and isig classes.
|
||||||
|
* generator/Ctor.cs : use new sig, isig, and body classes.
|
||||||
|
* generator/ImportSignature.cs : isig code spun out from Parameters.
|
||||||
|
* generator/Method.cs : use new sig, isig, and body classes.
|
||||||
|
* generator/MethodBody.cs : spun Initialize, GetCallString,
|
||||||
|
Finish, and Exception throwing methods from Parameters.
|
||||||
|
* generator/Parameters.cs : Slayed the evilness that was CreateSignature.
|
||||||
|
It is now essentially a container for Parameter classes instead of a
|
||||||
|
tangled mess of code trying to do everything remotely related to
|
||||||
|
parameter lists. Also completely killed the VAType/IsVarArgs stuff,
|
||||||
|
as it can be done with the array and params attrs instead.
|
||||||
|
* generator/Property.cs : use new sig class.
|
||||||
|
* generator/Signature.cs : new method sig generator extracted from
|
||||||
|
Parameters class. add "params" keyword support for tagged parameters.
|
||||||
|
* gnome/Gnome.metadata : hide IconList.GetSearchPath (to be manual)
|
||||||
|
* gnome/gnome-api.xml : regen
|
||||||
|
* gtk/ListStore.custom : kill unneeded overload
|
||||||
|
* gtk/TreeStore.custom : kill unneeded overload
|
||||||
|
* gtk/Gtk.metadata : mark params/args on *store_newv
|
||||||
|
* gtk/gtk-api.xml : regenerated
|
||||||
|
|
||||||
2003-12-03 Ettore Perazzoli <ettore@ximian.com>
|
2003-12-03 Ettore Perazzoli <ettore@ximian.com>
|
||||||
|
|
||||||
* sample/TestDnd.cs: New.
|
* sample/TestDnd.cs: New.
|
||||||
|
|
||||||
* gtk/TargetEntry.custom: New.
|
* gtk/TargetEntry.custom: New.
|
||||||
|
|
||||||
* glue/dragcontext.c: New.
|
* glue/dragcontext.c: New.
|
||||||
|
|
||||||
* glib/Object.cs: New public property TypeName in class Object.
|
* glib/Object.cs: New public property TypeName in class Object.
|
||||||
|
|
||||||
* gdk/DragContext.custom: New.
|
* gdk/DragContext.custom: New.
|
||||||
|
|
||||||
2003-11-30 Mike Kestner <mkestner@speakeasy.net>
|
2003-11-30 Mike Kestner <mkestner@speakeasy.net>
|
||||||
|
|
|
@ -13,11 +13,15 @@ namespace GtkSharp.Generation {
|
||||||
public class CallbackGen : GenBase, IGeneratable {
|
public class CallbackGen : GenBase, IGeneratable {
|
||||||
|
|
||||||
private Parameters parms;
|
private Parameters parms;
|
||||||
|
private Signature sig = null;
|
||||||
|
private ImportSignature isig = null;
|
||||||
|
|
||||||
public CallbackGen (XmlElement ns, XmlElement elem) : base (ns, elem)
|
public CallbackGen (XmlElement ns, XmlElement elem) : base (ns, elem)
|
||||||
{
|
{
|
||||||
if (elem ["parameters"] != null)
|
if (elem ["parameters"] != null) {
|
||||||
parms = new Parameters (elem ["parameters"], NS);
|
parms = new Parameters (elem ["parameters"], NS);
|
||||||
|
parms.HideData = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string MarshalType {
|
public string MarshalType {
|
||||||
|
@ -59,6 +63,8 @@ namespace GtkSharp.Generation {
|
||||||
string wrapper = Name + "Native";
|
string wrapper = Name + "Native";
|
||||||
string qualname = ns + "Sharp." + wrapper;
|
string qualname = ns + "Sharp." + wrapper;
|
||||||
|
|
||||||
|
isig = new ImportSignature (parms, NS);
|
||||||
|
|
||||||
StreamWriter sw = gen_info.OpenStream (qualname);
|
StreamWriter sw = gen_info.OpenStream (qualname);
|
||||||
|
|
||||||
sw.WriteLine ("namespace " + ns + "Sharp {");
|
sw.WriteLine ("namespace " + ns + "Sharp {");
|
||||||
|
@ -67,15 +73,6 @@ namespace GtkSharp.Generation {
|
||||||
sw.WriteLine ();
|
sw.WriteLine ();
|
||||||
|
|
||||||
sw.WriteLine ("#region Autogenerated code");
|
sw.WriteLine ("#region Autogenerated code");
|
||||||
string import_sig = "";
|
|
||||||
string sig = "";
|
|
||||||
if (parms != null)
|
|
||||||
{
|
|
||||||
parms.HideData = true;
|
|
||||||
parms.CreateSignature (false);
|
|
||||||
import_sig = parms.ImportSig;
|
|
||||||
sig = parms.Signature;
|
|
||||||
}
|
|
||||||
|
|
||||||
SymbolTable table = SymbolTable.Table;
|
SymbolTable table = SymbolTable.Table;
|
||||||
|
|
||||||
|
@ -85,7 +82,7 @@ namespace GtkSharp.Generation {
|
||||||
string s_ret = table.GetCSType (rettype);
|
string s_ret = table.GetCSType (rettype);
|
||||||
ClassBase ret_wrapper = table.GetClassGen (rettype);
|
ClassBase ret_wrapper = table.GetClassGen (rettype);
|
||||||
|
|
||||||
sw.WriteLine ("\tinternal delegate " + m_ret + " " + wrapper + "(" + import_sig + ");");
|
sw.WriteLine ("\tinternal delegate " + m_ret + " " + wrapper + "(" + isig.ToString() + ");");
|
||||||
sw.WriteLine ();
|
sw.WriteLine ();
|
||||||
|
|
||||||
sw.WriteLine ("\tinternal class " + Name + "Wrapper : GLib.DelegateWrapper {");
|
sw.WriteLine ("\tinternal class " + Name + "Wrapper : GLib.DelegateWrapper {");
|
||||||
|
@ -100,7 +97,7 @@ namespace GtkSharp.Generation {
|
||||||
}
|
}
|
||||||
|
|
||||||
sw.WriteLine ();
|
sw.WriteLine ();
|
||||||
sw.WriteLine ("\t\tpublic " + m_ret + " NativeCallback (" + import_sig + ")");
|
sw.WriteLine ("\t\tpublic " + m_ret + " NativeCallback (" + isig.ToString() + ")");
|
||||||
sw.WriteLine ("\t\t{");
|
sw.WriteLine ("\t\t{");
|
||||||
|
|
||||||
int count = (parms != null) ? parms.Count : 0;
|
int count = (parms != null) ? parms.Count : 0;
|
||||||
|
@ -220,20 +217,15 @@ namespace GtkSharp.Generation {
|
||||||
parms = null;
|
parms = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
StreamWriter sw = gen_info.OpenStream (Name);
|
sig = new Signature (parms);
|
||||||
|
|
||||||
string sig = "";
|
StreamWriter sw = gen_info.OpenStream (Name);
|
||||||
if (parms != null) {
|
|
||||||
parms.HideData = true;
|
|
||||||
parms.CreateSignature (false);
|
|
||||||
sig = parms.Signature;
|
|
||||||
}
|
|
||||||
|
|
||||||
sw.WriteLine ("namespace " + NS + " {");
|
sw.WriteLine ("namespace " + NS + " {");
|
||||||
sw.WriteLine ();
|
sw.WriteLine ();
|
||||||
sw.WriteLine ("\tusing System;");
|
sw.WriteLine ("\tusing System;");
|
||||||
sw.WriteLine ();
|
sw.WriteLine ();
|
||||||
sw.WriteLine ("\tpublic delegate " + s_ret + " " + Name + "(" + sig + ");");
|
sw.WriteLine ("\tpublic delegate " + s_ret + " " + Name + "(" + sig.ToString() + ");");
|
||||||
sw.WriteLine ();
|
sw.WriteLine ();
|
||||||
sw.WriteLine ("}");
|
sw.WriteLine ("}");
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,9 @@ namespace GtkSharp.Generation {
|
||||||
private string libname;
|
private string libname;
|
||||||
private XmlElement elem;
|
private XmlElement elem;
|
||||||
private Parameters parms;
|
private Parameters parms;
|
||||||
|
private Signature sig = null;
|
||||||
|
private ImportSignature isig = null;
|
||||||
|
private MethodBody body = null;
|
||||||
private bool preferred;
|
private bool preferred;
|
||||||
private String clashName = null;
|
private String clashName = null;
|
||||||
private ClassBase container_type;
|
private ClassBase container_type;
|
||||||
|
@ -54,68 +57,53 @@ namespace GtkSharp.Generation {
|
||||||
Statistics.ThrottledCount++;
|
Statistics.ThrottledCount++;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
parms.CreateSignature (false);
|
|
||||||
}
|
}
|
||||||
|
sig = new Signature (parms);
|
||||||
|
isig = new ImportSignature (parms, container_type.NS);
|
||||||
|
body = new MethodBody (parms, container_type.NS);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void InitClashMap (Hashtable clash_map)
|
public void InitClashMap (Hashtable clash_map)
|
||||||
{
|
{
|
||||||
string sigtypes = (parms != null) ? parms.SignatureTypes : "";
|
if (clash_map.ContainsKey (sig.Types)) {
|
||||||
if (clash_map.ContainsKey (sigtypes)) {
|
int num = (int) clash_map[sig.Types];
|
||||||
int num = (int) clash_map[sigtypes];
|
clash_map[sig.Types] = ++num;
|
||||||
clash_map[sigtypes] = ++num;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
clash_map[sigtypes] = 0;
|
clash_map[sig.Types] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Initialize (Hashtable clash_map)
|
public void Initialize (Hashtable clash_map)
|
||||||
{
|
{
|
||||||
string sig = "()";
|
int clashes = (int) clash_map[sig.Types];
|
||||||
string sigtypes = "";
|
|
||||||
if (parms != null) {
|
|
||||||
sig = "(" + parms.Signature + ")";
|
|
||||||
sigtypes = parms.SignatureTypes;
|
|
||||||
}
|
|
||||||
int clashes = (int) clash_map[sigtypes];
|
|
||||||
string cname = elem.GetAttribute("cname");
|
string cname = elem.GetAttribute("cname");
|
||||||
if (force_static || (clashes > 0 && !Preferred)) {
|
if (force_static || (clashes > 0 && !Preferred)) {
|
||||||
String mname = cname.Substring(cname.IndexOf("new"));
|
string mname = cname.Substring(cname.IndexOf("new"));
|
||||||
mname = mname.Substring(0,1).ToUpper() + mname.Substring(1);
|
mname = mname.Substring(0,1).ToUpper() + mname.Substring(1);
|
||||||
int idx;
|
int idx;
|
||||||
while ((idx = mname.IndexOf("_")) > 0) {
|
while ((idx = mname.IndexOf("_")) > 0) {
|
||||||
mname = mname.Substring(0, idx) + mname.Substring(idx+1, 1).ToUpper() + mname.Substring(idx+2);
|
mname = mname.Substring(0, idx) + mname.Substring(idx+1, 1).ToUpper() + mname.Substring(idx+2);
|
||||||
}
|
}
|
||||||
clashName = mname + sig;
|
clashName = mname + "(" + sig.ToString () + ")";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Generate (GenerationInfo gen_info)
|
public void Generate (GenerationInfo gen_info)
|
||||||
{
|
{
|
||||||
StreamWriter sw = gen_info.Writer;
|
StreamWriter sw = gen_info.Writer;
|
||||||
string sigtypes = "";
|
|
||||||
string sig = "()";
|
|
||||||
string call = "()";
|
|
||||||
string isig = "();";
|
|
||||||
if (parms != null) {
|
|
||||||
call = "(" + parms.CallString + ")";
|
|
||||||
sig = "(" + parms.Signature + ")";
|
|
||||||
isig = "(" + parms.ImportSig + ");";
|
|
||||||
sigtypes = parms.SignatureTypes;
|
|
||||||
}
|
|
||||||
|
|
||||||
string cname = elem.GetAttribute("cname");
|
string cname = elem.GetAttribute("cname");
|
||||||
string name = ((XmlElement)elem.ParentNode).GetAttribute("name");
|
string name = ((XmlElement)elem.ParentNode).GetAttribute("name");
|
||||||
string safety;
|
string safety;
|
||||||
if (parms != null && parms.ThrowsException)
|
if (body.ThrowsException)
|
||||||
safety = "unsafe ";
|
safety = "unsafe ";
|
||||||
else
|
else
|
||||||
safety = "";
|
safety = "";
|
||||||
|
|
||||||
sw.WriteLine("\t\t[DllImport(\"" + libname + "\")]");
|
sw.WriteLine("\t\t[DllImport(\"" + libname + "\")]");
|
||||||
sw.WriteLine("\t\tstatic extern " + safety + "IntPtr " + cname + isig);
|
sw.WriteLine("\t\tstatic extern " + safety + "IntPtr " + cname + "(" + isig.ToString () + ");");
|
||||||
sw.WriteLine();
|
sw.WriteLine();
|
||||||
|
|
||||||
if (clashName != null) {
|
if (clashName != null) {
|
||||||
|
@ -136,25 +124,21 @@ namespace GtkSharp.Generation {
|
||||||
sw.WriteLine("\t\tpublic static " + safety + modifiers + name + " " + clashName);
|
sw.WriteLine("\t\tpublic static " + safety + modifiers + name + " " + clashName);
|
||||||
sw.WriteLine("\t\t{");
|
sw.WriteLine("\t\t{");
|
||||||
|
|
||||||
if (parms != null)
|
body.Initialize(gen_info, false, false, "");
|
||||||
parms.Initialize(gen_info, false, false, "");
|
|
||||||
|
|
||||||
sw.Write("\t\t\treturn ");
|
sw.Write("\t\t\treturn ");
|
||||||
if (container_type is StructBase)
|
if (container_type is StructBase)
|
||||||
sw.Write ("{0}.New (", name);
|
sw.Write ("{0}.New (", name);
|
||||||
else
|
else
|
||||||
sw.Write ("new {0} (", name);
|
sw.Write ("new {0} (", name);
|
||||||
sw.WriteLine (cname + call + ");");
|
sw.WriteLine (cname + "(" + body.GetCallString (false) + "));");
|
||||||
} else {
|
} else {
|
||||||
sw.WriteLine("\t\tpublic " + safety + name + sig);
|
sw.WriteLine("\t\tpublic " + safety + name + "(" + sig.ToString() + ")");
|
||||||
sw.WriteLine("\t\t{");
|
sw.WriteLine("\t\t{");
|
||||||
|
|
||||||
if (parms != null)
|
body.Initialize(gen_info, false, false, "");
|
||||||
parms.Initialize(gen_info, false, false, "");
|
sw.WriteLine("\t\t\t{0} = {1}({2});", container_type.AssignToName, cname, body.GetCallString (false));
|
||||||
sw.WriteLine("\t\t\t{0} = {1}{2};", container_type.AssignToName, cname, call);
|
body.HandleException (sw, "");
|
||||||
if (parms != null)
|
|
||||||
parms.HandleException (sw, "");
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sw.WriteLine("\t\t}");
|
sw.WriteLine("\t\t}");
|
||||||
|
|
55
generator/ImportSignature.cs
Normal file
55
generator/ImportSignature.cs
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
// GtkSharp.Generation.ImportSignature.cs - The ImportSignature Generation Class.
|
||||||
|
//
|
||||||
|
// Author: Mike Kestner <mkestner@speakeasy.net>
|
||||||
|
//
|
||||||
|
// (c) 2001-2003 Mike Kestner, (c) 2003 Novell, Inc.
|
||||||
|
|
||||||
|
namespace GtkSharp.Generation {
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
|
||||||
|
public class ImportSignature {
|
||||||
|
|
||||||
|
Parameters parameters;
|
||||||
|
string impl_ns;
|
||||||
|
|
||||||
|
public ImportSignature (Parameters parms, string impl_ns)
|
||||||
|
{
|
||||||
|
parameters = parms;
|
||||||
|
this.impl_ns = impl_ns;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool UsesHandle (IGeneratable igen)
|
||||||
|
{
|
||||||
|
return igen is ManualGen || igen is ObjectGen || igen is InterfaceGen || igen is OpaqueGen;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString ()
|
||||||
|
{
|
||||||
|
if (parameters == null)
|
||||||
|
return "";
|
||||||
|
|
||||||
|
string[] parms = new string [parameters.Count];
|
||||||
|
for (int i = 0; i < parameters.Count; i++) {
|
||||||
|
Parameter p = parameters [i];
|
||||||
|
string m_type = p.MarshalType;
|
||||||
|
if (p.Generatable is CallbackGen)
|
||||||
|
m_type = impl_ns + "Sharp" + p.MarshalType.Substring(p.MarshalType.IndexOf("."));
|
||||||
|
|
||||||
|
parms [i] = "";
|
||||||
|
if (p.CType == "GError**")
|
||||||
|
parms [i] += "out ";
|
||||||
|
else if (p.PassAs != "" && (!m_type.EndsWith ("IntPtr") || UsesHandle (p.Generatable)))
|
||||||
|
parms [i] += p.PassAs + " ";
|
||||||
|
parms [i] += m_type + " " + p.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
string import_sig = String.Join (", ", parms);
|
||||||
|
import_sig = import_sig.Replace ("out ref", "out");
|
||||||
|
import_sig = import_sig.Replace ("ref ref", "ref");
|
||||||
|
return import_sig;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//
|
//
|
||||||
// Author: Mike Kestner <mkestner@speakeasy.net>
|
// Author: Mike Kestner <mkestner@speakeasy.net>
|
||||||
//
|
//
|
||||||
// (c) 2001-2002 Mike Kestner
|
// (c) 2001-2003 Mike Kestner, (c) 2003 Novell, Inc.
|
||||||
|
|
||||||
namespace GtkSharp.Generation {
|
namespace GtkSharp.Generation {
|
||||||
|
|
||||||
|
@ -16,10 +16,13 @@ namespace GtkSharp.Generation {
|
||||||
private string libname;
|
private string libname;
|
||||||
private XmlElement elem;
|
private XmlElement elem;
|
||||||
private Parameters parms;
|
private Parameters parms;
|
||||||
|
private Signature sig;
|
||||||
|
private ImportSignature isig;
|
||||||
|
private MethodBody body;
|
||||||
private ClassBase container_type;
|
private ClassBase container_type;
|
||||||
|
|
||||||
private bool initialized = false;
|
private bool initialized = false;
|
||||||
private string sig, isig, call;
|
private string call;
|
||||||
private string rettype, m_ret, s_ret;
|
private string rettype, m_ret, s_ret;
|
||||||
private string element_type = null;
|
private string element_type = null;
|
||||||
private string name, cname, safety;
|
private string name, cname, safety;
|
||||||
|
@ -30,13 +33,13 @@ namespace GtkSharp.Generation {
|
||||||
public Method (string libname, XmlElement elem, ClassBase container_type)
|
public Method (string libname, XmlElement elem, ClassBase container_type)
|
||||||
{
|
{
|
||||||
this.elem = elem;
|
this.elem = elem;
|
||||||
if (elem["parameters"] != null)
|
if (elem["parameters"] != null) {
|
||||||
parms = new Parameters (elem["parameters"], container_type.NS);
|
parms = new Parameters (elem["parameters"], container_type.NS);
|
||||||
|
}
|
||||||
this.container_type = container_type;
|
this.container_type = container_type;
|
||||||
this.name = elem.GetAttribute("name");
|
this.name = elem.GetAttribute("name");
|
||||||
if (name == "GetType")
|
if (name == "GetType")
|
||||||
name = "GetGType";
|
name = "GetGType";
|
||||||
// override library - used in pixbuf API fixage
|
|
||||||
if (elem.HasAttribute ("library"))
|
if (elem.HasAttribute ("library"))
|
||||||
this.libname = elem.GetAttribute ("library");
|
this.libname = elem.GetAttribute ("library");
|
||||||
else
|
else
|
||||||
|
@ -59,6 +62,12 @@ namespace GtkSharp.Generation {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool IsShared {
|
||||||
|
get {
|
||||||
|
return elem.HasAttribute("shared");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public string Name {
|
public string Name {
|
||||||
get {
|
get {
|
||||||
return name;
|
return name;
|
||||||
|
@ -68,12 +77,6 @@ namespace GtkSharp.Generation {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Parameters Params {
|
|
||||||
get {
|
|
||||||
return parms;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Protection {
|
public string Protection {
|
||||||
get {
|
get {
|
||||||
return protection;
|
return protection;
|
||||||
|
@ -89,48 +92,31 @@ namespace GtkSharp.Generation {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Signature Signature {
|
||||||
|
get {
|
||||||
|
return sig;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override bool Equals (object o)
|
public override bool Equals (object o)
|
||||||
{
|
{
|
||||||
if (!(o is Method))
|
if (!(o is Method))
|
||||||
return false;
|
return false;
|
||||||
/*
|
|
||||||
return (this == (Method) o);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool operator == (Method a, Method b)
|
|
||||||
{
|
|
||||||
if (a == null)
|
|
||||||
return (b
|
|
||||||
*/
|
|
||||||
Method a = this;
|
Method a = this;
|
||||||
Method b = (Method) o;
|
Method b = (Method) o;
|
||||||
|
|
||||||
if (a.Name != b.Name)
|
if (a.Name != b.Name)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (a.Params == null)
|
if (a.Signature == null)
|
||||||
return b.Params == null;
|
return b.Signature == null;
|
||||||
|
|
||||||
if (b.Params == null)
|
if (b.Signature == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return (a.Params.SignatureTypes == b.Params.SignatureTypes);
|
return (a.Signature.Types == b.Signature.Types);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
public static bool operator != (Method a, Method b)
|
|
||||||
{
|
|
||||||
return !(
|
|
||||||
if (a.Name == b.Name)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (a.Params == null)
|
|
||||||
return b.Params != null;
|
|
||||||
|
|
||||||
if (b.Params == null)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return (a.Params.SignatureTypes != b.Params.SignatureTypes);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
private bool Initialize ()
|
private bool Initialize ()
|
||||||
{
|
{
|
||||||
if (initialized)
|
if (initialized)
|
||||||
|
@ -156,32 +142,27 @@ namespace GtkSharp.Generation {
|
||||||
cname = elem.GetAttribute("cname");
|
cname = elem.GetAttribute("cname");
|
||||||
if (ret_elem.HasAttribute("element_type"))
|
if (ret_elem.HasAttribute("element_type"))
|
||||||
element_type = ret_elem.GetAttribute("element_type");
|
element_type = ret_elem.GetAttribute("element_type");
|
||||||
bool is_shared = elem.HasAttribute("shared");
|
|
||||||
|
|
||||||
if (ret_elem.HasAttribute("array")) {
|
if (ret_elem.HasAttribute("array")) {
|
||||||
s_ret += "[]";
|
s_ret += "[]";
|
||||||
m_ret += "[]";
|
m_ret += "[]";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parms != null && parms.ThrowsException)
|
|
||||||
safety = "unsafe ";
|
|
||||||
else
|
|
||||||
safety = "";
|
|
||||||
|
|
||||||
is_get = (((parms != null && ((parms.IsAccessor && s_ret == "void") || (parms.Count == 0 && s_ret != "void"))) || (parms == null && s_ret != "void")) && Name.Length > 3 && (Name.StartsWith ("Get") || Name.StartsWith ("Is") || Name.StartsWith ("Has")));
|
is_get = (((parms != null && ((parms.IsAccessor && s_ret == "void") || (parms.Count == 0 && s_ret != "void"))) || (parms == null && s_ret != "void")) && Name.Length > 3 && (Name.StartsWith ("Get") || Name.StartsWith ("Is") || Name.StartsWith ("Has")));
|
||||||
is_set = ((parms != null && (parms.IsAccessor || (parms.Count == 1 && s_ret == "void"))) && (Name.Length > 3 && Name.Substring(0, 3) == "Set"));
|
is_set = ((parms != null && (parms.IsAccessor || (parms.Count == 1 && s_ret == "void"))) && (Name.Length > 3 && Name.Substring(0, 3) == "Set"));
|
||||||
|
|
||||||
if (parms != null) {
|
if (parms != null)
|
||||||
parms.Static = is_shared;
|
parms.Static = IsShared;
|
||||||
parms.CreateSignature (is_set);
|
|
||||||
sig = "(" + parms.Signature + ")";
|
sig = new Signature (parms);
|
||||||
isig = "(" + (is_shared ? "" : container_type.MarshalType + " raw, ") + parms.ImportSig + ");";
|
isig = new ImportSignature (parms, container_type.NS);
|
||||||
call = "(" + (is_shared ? "" : container_type.CallByName () + ", ") + parms.CallString + ")";
|
body = new MethodBody (parms, container_type.NS);
|
||||||
} else {
|
call = "(" + (IsShared ? "" : container_type.CallByName () + (parms != null ? ", " : "")) + body.GetCallString (is_set) + ")";
|
||||||
sig = "()";
|
|
||||||
isig = "(" + (is_shared ? "" : container_type.MarshalType + " raw") + ");";
|
if (body.ThrowsException)
|
||||||
call = "(" + (is_shared ? "" : container_type.CallByName ()) + ")";
|
safety = "unsafe ";
|
||||||
}
|
else
|
||||||
|
safety = "";
|
||||||
|
|
||||||
initialized = true;
|
initialized = true;
|
||||||
return true;
|
return true;
|
||||||
|
@ -217,16 +198,17 @@ namespace GtkSharp.Generation {
|
||||||
sw.Write("static ");
|
sw.Write("static ");
|
||||||
sw.Write(safety);
|
sw.Write(safety);
|
||||||
Method dup = null;
|
Method dup = null;
|
||||||
if (Name == "ToString" && Params == null)
|
if (container_type != null)
|
||||||
|
dup = container_type.GetMethodRecursively (Name);
|
||||||
|
if (implementor != null)
|
||||||
|
dup = implementor.GetMethodRecursively (Name);
|
||||||
|
|
||||||
|
if (Name == "ToString" && parms == null)
|
||||||
sw.Write("override ");
|
sw.Write("override ");
|
||||||
else if (Name == "GetGType" && container_type is ObjectGen)
|
else if (Name == "GetGType" && container_type is ObjectGen)
|
||||||
sw.Write("new ");
|
sw.Write("new ");
|
||||||
else if (elem.HasAttribute("new_flag") || (container_type != null && (dup = container_type.GetMethodRecursively (Name)) != null) || (implementor != null && (dup = implementor.GetMethodRecursively (Name)) != null)) {
|
else if (elem.HasAttribute("new_flag") || (dup != null && dup.Initialize () && ((dup.Signature != null && sig != null && dup.Signature.ToString() == sig.ToString()) || (dup.Signature == null && sig == null))))
|
||||||
if (dup != null && dup.parms != null)
|
sw.Write("new ");
|
||||||
dup.parms.CreateSignature (false);
|
|
||||||
if (elem.HasAttribute("new_flag") || (dup != null && ((dup.parms != null && dup.parms.Signature == parms.Signature) || (dup.parms == null && parms == null))))
|
|
||||||
sw.Write("new ");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_get || is_set) {
|
if (is_get || is_set) {
|
||||||
if (s_ret == "void")
|
if (s_ret == "void")
|
||||||
|
@ -239,7 +221,7 @@ namespace GtkSharp.Generation {
|
||||||
sw.Write (Name);
|
sw.Write (Name);
|
||||||
sw.WriteLine(" { ");
|
sw.WriteLine(" { ");
|
||||||
} else {
|
} else {
|
||||||
sw.Write(s_ret + " " + Name + sig);
|
sw.Write(s_ret + " " + Name + "(" + (sig != null ? sig.ToString() : "") + ")");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -282,8 +264,11 @@ namespace GtkSharp.Generation {
|
||||||
|
|
||||||
public void GenerateImport (StreamWriter sw)
|
public void GenerateImport (StreamWriter sw)
|
||||||
{
|
{
|
||||||
|
string import_sig = IsShared ? "" : container_type.MarshalType + " raw";
|
||||||
|
import_sig += !IsShared && parms != null ? ", " : "";
|
||||||
|
import_sig += isig.ToString();
|
||||||
sw.WriteLine("\t\t[DllImport(\"" + libname + "\")]");
|
sw.WriteLine("\t\t[DllImport(\"" + libname + "\")]");
|
||||||
sw.WriteLine("\t\tstatic extern " + safety + m_ret + " " + cname + isig);
|
sw.WriteLine("\t\tstatic extern " + safety + m_ret + " " + cname + "(" + import_sig + ");");
|
||||||
sw.WriteLine();
|
sw.WriteLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -308,8 +293,7 @@ namespace GtkSharp.Generation {
|
||||||
if (comp != null && is_set && parms.AccessorReturnType != comp.s_ret)
|
if (comp != null && is_set && parms.AccessorReturnType != comp.s_ret)
|
||||||
{
|
{
|
||||||
is_set = false;
|
is_set = false;
|
||||||
parms.CreateSignature (false);
|
call = "(Handle, " + body.GetCallString (false) + ")";
|
||||||
call = "(Handle, " + parms.CallString + ")";
|
|
||||||
comp = null;
|
comp = null;
|
||||||
}
|
}
|
||||||
/* some setters take more than one arg */
|
/* some setters take more than one arg */
|
||||||
|
@ -358,8 +342,7 @@ namespace GtkSharp.Generation {
|
||||||
{
|
{
|
||||||
StreamWriter sw = gen_info.Writer;
|
StreamWriter sw = gen_info.Writer;
|
||||||
sw.WriteLine(" {");
|
sw.WriteLine(" {");
|
||||||
if (parms != null)
|
body.Initialize(gen_info, is_get, is_set, indent);
|
||||||
parms.Initialize(gen_info, is_get, is_set, indent);
|
|
||||||
|
|
||||||
SymbolTable table = SymbolTable.Table;
|
SymbolTable table = SymbolTable.Table;
|
||||||
|
|
||||||
|
@ -388,10 +371,8 @@ namespace GtkSharp.Generation {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parms != null) {
|
body.Finish (sw, indent);
|
||||||
parms.Finish (sw, indent);
|
body.HandleException (sw, indent);
|
||||||
parms.HandleException (sw, indent);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_get && parms != null)
|
if (is_get && parms != null)
|
||||||
sw.WriteLine (indent + "\t\t\treturn " + parms.AccessorName + ";");
|
sw.WriteLine (indent + "\t\t\treturn " + parms.AccessorName + ";");
|
||||||
|
|
179
generator/MethodBody.cs
Normal file
179
generator/MethodBody.cs
Normal file
|
@ -0,0 +1,179 @@
|
||||||
|
// GtkSharp.Generation.MethodBody.cs - The MethodBody Generation Class.
|
||||||
|
//
|
||||||
|
// Author: Mike Kestner <mkestner@speakeasy.net>
|
||||||
|
//
|
||||||
|
// (c) 2001-2003 Mike Kestner, (c) 2003 Novell, Inc.
|
||||||
|
|
||||||
|
namespace GtkSharp.Generation {
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
public class MethodBody {
|
||||||
|
|
||||||
|
Parameters parameters;
|
||||||
|
private string impl_ns;
|
||||||
|
|
||||||
|
public MethodBody (Parameters parms, string impl_ns) {
|
||||||
|
|
||||||
|
parameters = parms;
|
||||||
|
this.impl_ns = impl_ns;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool UsesHandle (IGeneratable igen)
|
||||||
|
{
|
||||||
|
return igen is ManualGen || igen is ObjectGen || igen is InterfaceGen || igen is OpaqueGen;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string CastFromInt (string type)
|
||||||
|
{
|
||||||
|
return type != "int" ? "(" + type + ") " : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
private string CallArrayLength (Parameter array, Parameter length)
|
||||||
|
{
|
||||||
|
string result = array.NullOk ? array.Name + " != null ? " : "";
|
||||||
|
result += CastFromInt (length.CSType) + array.Name + ".Length";
|
||||||
|
result += array.NullOk ? ": 0" : "";
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetCallString (bool is_set)
|
||||||
|
{
|
||||||
|
if (parameters == null)
|
||||||
|
return "";
|
||||||
|
|
||||||
|
string[] result = new string [parameters.Count];
|
||||||
|
for (int i = 0; i < parameters.Count; i++) {
|
||||||
|
Parameter p = parameters [i];
|
||||||
|
IGeneratable igen = p.Generatable;
|
||||||
|
|
||||||
|
if (p.IsCount) {
|
||||||
|
if (i > 0 && parameters [i - 1].IsArray) {
|
||||||
|
result[i] = CallArrayLength (parameters[i - 1], p);
|
||||||
|
continue;
|
||||||
|
} else if (i < parameters.Count - 1 && parameters [i + 1].IsArray) {
|
||||||
|
result[i] = CallArrayLength (parameters[i + 1], p);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i > 0 && parameters [i - 1].IsString && p.IsLength) {
|
||||||
|
result[i] = CastFromInt (p.CSType) + parameters [i - 1].Name + ".Length";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
string call_parm = p.CallByName (is_set && i == 0 ? "value" : p.Name);
|
||||||
|
|
||||||
|
if (p.CType == "GError**") {
|
||||||
|
result [i] += "out ";
|
||||||
|
} else if (p.PassAs != "") {
|
||||||
|
if (!p.MarshalType.EndsWith ("IntPtr"))
|
||||||
|
result [i] += p.PassAs + " ";
|
||||||
|
|
||||||
|
if (igen is EnumGen)
|
||||||
|
call_parm = p.Name + "_as_int";
|
||||||
|
else if (UsesHandle (igen) || p.CSType == "GLib.Value") {
|
||||||
|
call_parm = p.PassAs + " " + call_parm.Replace (".Handle", "_handle");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p.CType == "GError**") {
|
||||||
|
call_parm = call_parm.Replace (p.Name, "error");
|
||||||
|
} else if (p.IsUserData && !parameters.HideData && (i == parameters.Count - 1)) {
|
||||||
|
call_parm = "IntPtr.Zero";
|
||||||
|
}
|
||||||
|
|
||||||
|
result [i] += call_parm;
|
||||||
|
}
|
||||||
|
|
||||||
|
string call_string = String.Join (", ", result);
|
||||||
|
call_string = call_string.Replace ("out ref", "out");
|
||||||
|
call_string = call_string.Replace ("ref ref", "ref");
|
||||||
|
return call_string;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Initialize (GenerationInfo gen_info, bool is_get, bool is_set, string indent)
|
||||||
|
{
|
||||||
|
if (parameters == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
StreamWriter sw = gen_info.Writer;
|
||||||
|
for (int i = 0; i < parameters.Count; i++) {
|
||||||
|
Parameter p = parameters [i];
|
||||||
|
|
||||||
|
IGeneratable gen = p.Generatable;
|
||||||
|
string name = p.Name;
|
||||||
|
if (is_set)
|
||||||
|
name = "value";
|
||||||
|
|
||||||
|
if (is_get) {
|
||||||
|
sw.WriteLine (indent + "\t\t\t" + p.CSType + " " + name + ";");
|
||||||
|
if (gen is ObjectGen || gen is OpaqueGen || p.CSType == "GLib.Value")
|
||||||
|
sw.WriteLine(indent + "\t\t\t" + name + " = new " + p.CSType + "();");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((is_get || p.PassAs == "out") && (UsesHandle (gen) || p.CSType == "GLib.Value"))
|
||||||
|
sw.WriteLine(indent + "\t\t\tIntPtr " + name + "_handle;");
|
||||||
|
|
||||||
|
if (p.PassAs == "out" && gen is EnumGen)
|
||||||
|
sw.WriteLine(indent + "\t\t\tint " + name + "_as_int;");
|
||||||
|
|
||||||
|
if (gen is CallbackGen) {
|
||||||
|
CallbackGen cbgen = gen as CallbackGen;
|
||||||
|
string wrapper = cbgen.GenWrapper(impl_ns, gen_info);
|
||||||
|
sw.WriteLine (indent + "\t\t\t{0} {1}_wrapper = null;", wrapper, name);
|
||||||
|
sw.Write (indent + "\t\t\t");
|
||||||
|
if (p.NullOk)
|
||||||
|
sw.Write ("if ({0} != null) ", name);
|
||||||
|
sw.WriteLine ("{1}_wrapper = new {0} ({1}, {2});", wrapper, p.Name, parameters.Static ? "null" : "this");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ThrowsException)
|
||||||
|
sw.WriteLine (indent + "\t\t\tIntPtr error = IntPtr.Zero;");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Finish (StreamWriter sw, string indent)
|
||||||
|
{
|
||||||
|
if (parameters == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
bool ref_owned_needed = true;
|
||||||
|
for (int i = 0; i < parameters.Count; i++) {
|
||||||
|
Parameter p = parameters [i];
|
||||||
|
|
||||||
|
if (p.PassAs == "out" && p.Generatable is EnumGen) {
|
||||||
|
sw.WriteLine(indent + "\t\t\t" + p.Name + " = (" + p.CSType + ") " + p.Name + "_as_int;");
|
||||||
|
}
|
||||||
|
|
||||||
|
IGeneratable gen = p.Generatable;
|
||||||
|
if (ref_owned_needed && (gen is ObjectGen || gen is InterfaceGen) && p.PassAs == "out") {
|
||||||
|
ref_owned_needed = false;
|
||||||
|
sw.WriteLine(indent + "\t\t\tbool ref_owned = false;");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p.PassAs == "out" && (UsesHandle (gen) || p.CSType == "GLib.Value"))
|
||||||
|
sw.WriteLine(indent + "\t\t\t" + p.Name + " = " + gen.FromNativeReturn (p.Name + "_handle") + ";");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void HandleException (StreamWriter sw, string indent)
|
||||||
|
{
|
||||||
|
if (!ThrowsException)
|
||||||
|
return;
|
||||||
|
sw.WriteLine (indent + "\t\t\tif (error != IntPtr.Zero) throw new GLib.GException (error);");
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ThrowsException {
|
||||||
|
get {
|
||||||
|
if (parameters == null || parameters.Count < 1)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return parameters [parameters.Count - 1].CType == "GError**";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -35,6 +35,8 @@ namespace GtkSharp.Generation {
|
||||||
if (cstype == "void")
|
if (cstype == "void")
|
||||||
cstype = "System.IntPtr";
|
cstype = "System.IntPtr";
|
||||||
if (IsArray) {
|
if (IsArray) {
|
||||||
|
if (IsParams)
|
||||||
|
cstype = "params " + cstype;
|
||||||
cstype += "[]";
|
cstype += "[]";
|
||||||
cstype = cstype.Replace ("ref ", "");
|
cstype = cstype.Replace ("ref ", "");
|
||||||
}
|
}
|
||||||
|
@ -100,6 +102,12 @@ namespace GtkSharp.Generation {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsParams {
|
||||||
|
get {
|
||||||
|
return elem.HasAttribute("params");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public bool IsString {
|
public bool IsString {
|
||||||
get {
|
get {
|
||||||
return (CSType == "string");
|
return (CSType == "string");
|
||||||
|
@ -108,7 +116,7 @@ namespace GtkSharp.Generation {
|
||||||
|
|
||||||
public bool IsUserData {
|
public bool IsUserData {
|
||||||
get {
|
get {
|
||||||
return CType == "gpointer" && (Name.EndsWith ("data") || Name.EndsWith ("data_or_owner"));
|
return CSType == "IntPtr" && (Name.EndsWith ("data") || Name.EndsWith ("data_or_owner"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,6 +163,24 @@ namespace GtkSharp.Generation {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string CallByName (string call_parm_name)
|
||||||
|
{
|
||||||
|
string call_parm;
|
||||||
|
if (Generatable is CallbackGen)
|
||||||
|
call_parm = SymbolTable.Table.CallByName (CType, call_parm_name + "_wrapper");
|
||||||
|
else
|
||||||
|
call_parm = SymbolTable.Table.CallByName(CType, call_parm_name);
|
||||||
|
|
||||||
|
if (NullOk && !CSType.EndsWith ("IntPtr") && !(Generatable is StructBase))
|
||||||
|
call_parm = String.Format ("({0} != null) ? {1} : {2}", call_parm_name, call_parm, Generatable is CallbackGen ? "null" : "IntPtr.Zero");
|
||||||
|
|
||||||
|
if (IsArray)
|
||||||
|
call_parm = call_parm.Replace ("ref ", "");
|
||||||
|
|
||||||
|
return call_parm;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public string StudlyName {
|
public string StudlyName {
|
||||||
get {
|
get {
|
||||||
string name = elem.GetAttribute("name");
|
string name = elem.GetAttribute("name");
|
||||||
|
@ -177,10 +203,6 @@ namespace GtkSharp.Generation {
|
||||||
private ArrayList param_list;
|
private ArrayList param_list;
|
||||||
private XmlElement elem;
|
private XmlElement elem;
|
||||||
private string impl_ns;
|
private string impl_ns;
|
||||||
private string import_sig = "";
|
|
||||||
private string call_string = "";
|
|
||||||
private string signature = "";
|
|
||||||
private string signature_types = "";
|
|
||||||
private bool hide_data;
|
private bool hide_data;
|
||||||
private bool is_static;
|
private bool is_static;
|
||||||
|
|
||||||
|
@ -196,12 +218,6 @@ namespace GtkSharp.Generation {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string CallString {
|
|
||||||
get {
|
|
||||||
return call_string;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int Count {
|
public int Count {
|
||||||
get {
|
get {
|
||||||
return param_list.Count;
|
return param_list.Count;
|
||||||
|
@ -214,30 +230,13 @@ namespace GtkSharp.Generation {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string ImportSig {
|
|
||||||
get {
|
|
||||||
return import_sig;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Signature {
|
|
||||||
get {
|
|
||||||
return signature;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string SignatureTypes {
|
|
||||||
get {
|
|
||||||
return signature_types;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool HideData {
|
public bool HideData {
|
||||||
get { return hide_data; }
|
get { return hide_data; }
|
||||||
set { hide_data = value; }
|
set { hide_data = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Static {
|
public bool Static {
|
||||||
|
get { return is_static; }
|
||||||
set { is_static = value; }
|
set { is_static = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -260,209 +259,12 @@ namespace GtkSharp.Generation {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CreateSignature (bool is_set)
|
|
||||||
{
|
|
||||||
import_sig = call_string = signature = signature_types = "";
|
|
||||||
bool need_sep = false;
|
|
||||||
bool has_callback = hide_data;
|
|
||||||
|
|
||||||
SymbolTable table = SymbolTable.Table;
|
|
||||||
|
|
||||||
for (int i = 0; i < Count; i++) {
|
|
||||||
|
|
||||||
string type = this [i].CType;
|
|
||||||
string cs_type = this [i].CSType;
|
|
||||||
string m_type = this [i].MarshalType;
|
|
||||||
string name = this [i].Name;
|
|
||||||
|
|
||||||
if (i > 0 && this [i - 1].IsArray && this [i].IsCount) {
|
|
||||||
call_string += ", " + this[i-1].Name + " != null ? " + (cs_type != "int" ? "(" + cs_type + ") " : "") + this [i - 1].Name + ".Length : 0";
|
|
||||||
import_sig += ", " + m_type + " " + name;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i > 0 && this [i - 1].IsString && this [i].IsLength) {
|
|
||||||
call_string += ", " + (cs_type != "int" ? "(" + cs_type + ") " : "") + this [i - 1].Name + ".Length";
|
|
||||||
import_sig += ", " + m_type + " " + name;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
string call_parm_name = name;
|
|
||||||
if (is_set && i == 0)
|
|
||||||
call_parm_name = "value";
|
|
||||||
|
|
||||||
string call_parm;
|
|
||||||
if (table.IsCallback (type)) {
|
|
||||||
has_callback = true;
|
|
||||||
call_parm = table.CallByName (type, call_parm_name + "_wrapper");
|
|
||||||
} else
|
|
||||||
call_parm = table.CallByName(type, call_parm_name);
|
|
||||||
|
|
||||||
if (this [i].NullOk && (this [i].IsArray || (!cs_type.EndsWith ("IntPtr") && !table.IsStruct (type))))
|
|
||||||
call_parm = String.Format ("({0} != null) ? {1} : {2}", call_parm_name, call_parm, table.IsCallback (type) || this[i].IsArray ? "null" : "IntPtr.Zero");
|
|
||||||
|
|
||||||
if (this [i].IsArray)
|
|
||||||
call_parm = call_parm.Replace ("ref ", "");
|
|
||||||
|
|
||||||
if (IsVarArgs && i == (Count - 1) && VAType == "length_param") {
|
|
||||||
cs_type = "params " + cs_type + "[]";
|
|
||||||
m_type += "[]";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (need_sep) {
|
|
||||||
call_string += ", ";
|
|
||||||
import_sig += ", ";
|
|
||||||
if (type != "GError**" && !(IsVarArgs && i == (Count - 1) && VAType == "length_param"))
|
|
||||||
{
|
|
||||||
signature += ", ";
|
|
||||||
signature_types += ":";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
need_sep = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type == "GError**") {
|
|
||||||
call_string += "out ";
|
|
||||||
import_sig += "out ";
|
|
||||||
} else if (this [i].PassAs != "" && !IsVarArgs) {
|
|
||||||
signature += this [i].PassAs + " ";
|
|
||||||
// We only need to do this for value types
|
|
||||||
if (type != "GError**" && m_type != "IntPtr" && m_type != "System.IntPtr")
|
|
||||||
{
|
|
||||||
import_sig += this [i].PassAs + " ";
|
|
||||||
call_string += this [i].PassAs + " ";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (table.IsEnum (type))
|
|
||||||
call_parm = name + "_as_int";
|
|
||||||
else if (table.IsObject (type) || table.IsInterface (type) || table.IsOpaque (type) || cs_type == "GLib.Value") {
|
|
||||||
call_parm = this [i].PassAs + " " + call_parm.Replace (".Handle", "_handle");
|
|
||||||
import_sig += this [i].PassAs + " ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IsVarArgs && i == (Count - 2) && VAType == "length_param") {
|
|
||||||
call_string += this [Count - 1].Name + ".Length";
|
|
||||||
} else {
|
|
||||||
if (!(type == "GError**" || (has_callback && (type == "gpointer" || type == "void*") && (i == Count - 1) && (name.EndsWith ("data") || name.EndsWith ("data_or_owner"))))) {
|
|
||||||
signature += (cs_type + " " + name);
|
|
||||||
signature_types += cs_type;
|
|
||||||
} else if (type == "GError**") {
|
|
||||||
call_parm = call_parm.Replace (name, "error");
|
|
||||||
} else if ((type == "gpointer" || type == "void*") && (i == Count - 1) && (name.EndsWith ("data") || name.EndsWith ("data_or_owner"))) {
|
|
||||||
call_parm = "IntPtr.Zero";
|
|
||||||
}
|
|
||||||
|
|
||||||
call_string += call_parm;
|
|
||||||
}
|
|
||||||
if (table.IsCallback (type))
|
|
||||||
m_type = impl_ns + "Sharp" + m_type.Substring(m_type.IndexOf("."));
|
|
||||||
import_sig += (m_type + " " + name);
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIXME: lame
|
|
||||||
call_string = call_string.Replace ("out ref", "out");
|
|
||||||
import_sig = import_sig.Replace ("out ref", "out");
|
|
||||||
call_string = call_string.Replace ("ref ref", "ref");
|
|
||||||
import_sig = import_sig.Replace ("ref ref", "ref");
|
|
||||||
|
|
||||||
// FIXME: this is also lame, I need to fix the need_sep algo
|
|
||||||
if (signature.EndsWith (", "))
|
|
||||||
signature = signature.Remove (signature.Length - 2, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Initialize (GenerationInfo gen_info, bool is_get, bool is_set, string indent)
|
|
||||||
{
|
|
||||||
StreamWriter sw = gen_info.Writer;
|
|
||||||
foreach (Parameter p in param_list) {
|
|
||||||
|
|
||||||
IGeneratable gen = p.Generatable;
|
|
||||||
string name = p.Name;
|
|
||||||
if (is_set)
|
|
||||||
name = "value";
|
|
||||||
|
|
||||||
if (is_get) {
|
|
||||||
sw.WriteLine (indent + "\t\t\t" + p.CSType + " " + name + ";");
|
|
||||||
if (gen is ObjectGen || gen is OpaqueGen || p.CSType == "GLib.Value")
|
|
||||||
sw.WriteLine(indent + "\t\t\t" + name + " = new " + p.CSType + "();");
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((is_get || p.PassAs == "out") && (gen is ObjectGen || gen is InterfaceGen || gen is OpaqueGen || p.CSType == "GLib.Value"))
|
|
||||||
sw.WriteLine(indent + "\t\t\tIntPtr " + name + "_handle;");
|
|
||||||
|
|
||||||
if (p.PassAs == "out" && gen is EnumGen)
|
|
||||||
sw.WriteLine(indent + "\t\t\tint " + name + "_as_int;");
|
|
||||||
|
|
||||||
if (gen is CallbackGen) {
|
|
||||||
CallbackGen cbgen = gen as CallbackGen;
|
|
||||||
string wrapper = cbgen.GenWrapper(impl_ns, gen_info);
|
|
||||||
sw.WriteLine (indent + "\t\t\t{0} {1}_wrapper = null;", wrapper, name);
|
|
||||||
sw.Write (indent + "\t\t\t");
|
|
||||||
if (p.NullOk)
|
|
||||||
sw.Write ("if ({0} != null) ", name);
|
|
||||||
sw.WriteLine ("{1}_wrapper = new {0} ({1}, {2});", wrapper, name, is_static ? "null" : "this");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ThrowsException)
|
|
||||||
sw.WriteLine (indent + "\t\t\tIntPtr error = IntPtr.Zero;");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Finish (StreamWriter sw, string indent)
|
|
||||||
{
|
|
||||||
bool ref_owned_needed = true;
|
|
||||||
foreach (Parameter p in param_list) {
|
|
||||||
|
|
||||||
if (p.PassAs == "out" && p.Generatable is EnumGen) {
|
|
||||||
sw.WriteLine(indent + "\t\t\t" + p.Name + " = (" + p.CSType + ") " + p.Name + "_as_int;");
|
|
||||||
}
|
|
||||||
|
|
||||||
IGeneratable gen = p.Generatable;
|
|
||||||
if (ref_owned_needed && (gen is ObjectGen || gen is InterfaceGen) && p.PassAs == "out") {
|
|
||||||
ref_owned_needed = false;
|
|
||||||
sw.WriteLine(indent + "\t\t\tbool ref_owned = false;");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p.PassAs == "out" && (gen is ObjectGen || gen is InterfaceGen || gen is OpaqueGen || p.CSType == "GLib.Value"))
|
|
||||||
sw.WriteLine(indent + "\t\t\t" + p.Name + " = " + gen.FromNativeReturn (p.Name + "_handle") + ";");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void HandleException (StreamWriter sw, string indent)
|
|
||||||
{
|
|
||||||
if (!ThrowsException)
|
|
||||||
return;
|
|
||||||
sw.WriteLine (indent + "\t\t\tif (error != IntPtr.Zero) throw new GLib.GException (error);");
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsAccessor {
|
public bool IsAccessor {
|
||||||
get {
|
get {
|
||||||
return Count == 1 && this [0].PassAs == "out";
|
return Count == 1 && this [0].PassAs == "out";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool ThrowsException {
|
|
||||||
get {
|
|
||||||
if (Count < 1)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return this [Count - 1].CType == "GError**";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsVarArgs {
|
|
||||||
get {
|
|
||||||
return elem.HasAttribute ("va_type");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string VAType {
|
|
||||||
get {
|
|
||||||
return elem.GetAttribute ("va_type");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string AccessorReturnType {
|
public string AccessorReturnType {
|
||||||
get {
|
get {
|
||||||
if (Count > 0)
|
if (Count > 0)
|
||||||
|
|
|
@ -103,8 +103,8 @@ namespace GtkSharp.Generation {
|
||||||
setter.GenerateImport(sw);
|
setter.GenerateImport(sw);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (has_setter && setter.Params[0].CSType != cs_type)
|
if (has_setter && setter.Signature.Types != cs_type)
|
||||||
cs_type = setter.Params[0].CSType;
|
cs_type = setter.Signature.Types;
|
||||||
else if (has_getter && getter.ReturnType != cs_type)
|
else if (has_getter && getter.ReturnType != cs_type)
|
||||||
cs_type = getter.ReturnType;
|
cs_type = getter.ReturnType;
|
||||||
|
|
||||||
|
|
75
generator/Signature.cs
Normal file
75
generator/Signature.cs
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
// GtkSharp.Generation.Signature.cs - The Signature Generation Class.
|
||||||
|
//
|
||||||
|
// Author: Mike Kestner <mkestner@ximian.com>
|
||||||
|
//
|
||||||
|
// (c) 2003 Novell, Inc.
|
||||||
|
|
||||||
|
namespace GtkSharp.Generation {
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Xml;
|
||||||
|
|
||||||
|
public class Signature {
|
||||||
|
|
||||||
|
private ArrayList parms = new ArrayList ();
|
||||||
|
|
||||||
|
public Signature (Parameters parms)
|
||||||
|
{
|
||||||
|
if (parms == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
bool has_cb = parms.HideData;
|
||||||
|
for (int i = 0; i < parms.Count; i++) {
|
||||||
|
Parameter p = parms [i];
|
||||||
|
|
||||||
|
if (i > 0 && p.IsLength && parms [i - 1].IsString)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (p.IsCount && ((i > 0 && parms [i - 1].IsArray) || (i < parms.Count - 1 && parms [i + 1].IsArray)))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
has_cb = has_cb || p.Generatable is CallbackGen;
|
||||||
|
if (p.IsUserData && has_cb && (i == parms.Count - 1))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (p.CType == "GError**")
|
||||||
|
continue;
|
||||||
|
|
||||||
|
this.parms.Add (p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString ()
|
||||||
|
{
|
||||||
|
if (parms.Count == 0)
|
||||||
|
return "";
|
||||||
|
|
||||||
|
string[] result = new string [parms.Count];
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
foreach (Parameter p in parms) {
|
||||||
|
result [i] = p.PassAs != "" ? p.PassAs + " " : "";
|
||||||
|
result [i++] += p.CSType + " " + p.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
return String.Join (", ", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Types {
|
||||||
|
get {
|
||||||
|
if (parms.Count == 0)
|
||||||
|
return "";
|
||||||
|
|
||||||
|
string[] result = new string [parms.Count];
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
foreach (Parameter p in parms)
|
||||||
|
result [i++] = p.CSType;
|
||||||
|
|
||||||
|
return String.Join (":", result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -66,6 +66,7 @@
|
||||||
<attr path="//object[@cname='GnomeIconList']/signal[@name='FocusIcon']" name="name">IconFocused</attr>
|
<attr path="//object[@cname='GnomeIconList']/signal[@name='FocusIcon']" name="name">IconFocused</attr>
|
||||||
<attr path="//object[@cname='GnomeIconList']/signal[@name='SelectIcon']" name="name">IconSelected</attr>
|
<attr path="//object[@cname='GnomeIconList']/signal[@name='SelectIcon']" name="name">IconSelected</attr>
|
||||||
<attr path="//object[@cname='GnomeIconList']/signal[@name='UnselectIcon']" name="name">IconUnselected</attr>
|
<attr path="//object[@cname='GnomeIconList']/signal[@name='UnselectIcon']" name="name">IconUnselected</attr>
|
||||||
|
<attr path="//object[@cname='GnomeIconTheme']/method[@name='GetSearchPath']" name="hidden">1</attr>
|
||||||
<attr path="//object[@cname='GnomePrintConfig']/method/*/*[@type='const-guchar*']" name="type">const-gchar*</attr>
|
<attr path="//object[@cname='GnomePrintConfig']/method/*/*[@type='const-guchar*']" name="type">const-gchar*</attr>
|
||||||
<attr path="//object[@cname='GnomePrintConfig']/method[@name='Get']/return-type" name="type">gchar*</attr>
|
<attr path="//object[@cname='GnomePrintConfig']/method[@name='Get']/return-type" name="type">gchar*</attr>
|
||||||
<attr path="//object[@cname='GnomePrintDialog']/method/*/*[@type='const-guchar*']" name="type">const-gchar*</attr>
|
<attr path="//object[@cname='GnomePrintDialog']/method/*/*[@type='const-guchar*']" name="type">const-gchar*</attr>
|
||||||
|
|
|
@ -3866,7 +3866,7 @@
|
||||||
<method name="GetExampleIconName" cname="gnome_icon_theme_get_example_icon_name">
|
<method name="GetExampleIconName" cname="gnome_icon_theme_get_example_icon_name">
|
||||||
<return-type type="char*" />
|
<return-type type="char*" />
|
||||||
</method>
|
</method>
|
||||||
<method name="GetSearchPath" cname="gnome_icon_theme_get_search_path">
|
<method name="GetSearchPath" cname="gnome_icon_theme_get_search_path" hidden="1">
|
||||||
<return-type type="void" />
|
<return-type type="void" />
|
||||||
<parameters>
|
<parameters>
|
||||||
<parameter type="char**" array="true" name="path" />
|
<parameter type="char**" array="true" name="path" />
|
||||||
|
|
|
@ -104,7 +104,8 @@
|
||||||
<attr path="/api/namespace/object[@cname='GtkLayout']/method[@name='SetHadjustment']/*/*[@type='GtkAdjustment*']" name="null_ok">1</attr>
|
<attr path="/api/namespace/object[@cname='GtkLayout']/method[@name='SetHadjustment']/*/*[@type='GtkAdjustment*']" name="null_ok">1</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GtkLayout']/method[@name='SetVadjustment']/*/*[@type='GtkAdjustment*']" name="null_ok">1</attr>
|
<attr path="/api/namespace/object[@cname='GtkLayout']/method[@name='SetVadjustment']/*/*[@type='GtkAdjustment*']" name="null_ok">1</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GtkLayout']/signal[@name='SetScrollAdjustments']" name="name">ScrollAdjustmentsSet</attr>
|
<attr path="/api/namespace/object[@cname='GtkLayout']/signal[@name='SetScrollAdjustments']" name="name">ScrollAdjustmentsSet</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GtkListStore']/constructor[@cname='gtk_list_store_newv']/parameters" name="va_type">length_param</attr>
|
<attr path="/api/namespace/object[@cname='GtkListStore']/constructor[@cname='gtk_list_store_newv']/*/*[@name='types']" name="array">1</attr>
|
||||||
|
<attr path="/api/namespace/object[@cname='GtkListStore']/constructor[@cname='gtk_list_store_newv']/*/*[@name='types']" name="params">1</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GtkListStore']/method[@name='Append']/*/*[@name='iter']" name="pass_as">out</attr>
|
<attr path="/api/namespace/object[@cname='GtkListStore']/method[@name='Append']/*/*[@name='iter']" name="pass_as">out</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GtkListStore']/method[@name='InsertAfter']/*/*[@name='iter']" name="pass_as">out</attr>
|
<attr path="/api/namespace/object[@cname='GtkListStore']/method[@name='InsertAfter']/*/*[@name='iter']" name="pass_as">out</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GtkListStore']/method[@name='InsertBefore']/*/*[@name='iter']" name="pass_as">out</attr>
|
<attr path="/api/namespace/object[@cname='GtkListStore']/method[@name='InsertBefore']/*/*[@name='iter']" name="pass_as">out</attr>
|
||||||
|
@ -188,7 +189,8 @@
|
||||||
<attr path="/api/namespace/object[@cname='GtkTreeModelSort']/method[@name='ConvertChildIterToIter']/*/*[@name='sort_iter']" name="pass_as">out</attr>
|
<attr path="/api/namespace/object[@cname='GtkTreeModelSort']/method[@name='ConvertChildIterToIter']/*/*[@name='sort_iter']" name="pass_as">out</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GtkTreeModelSort']/method[@name='ConvertIterToChildIter']/*/*[@name='child_iter']" name="pass_as">out</attr>
|
<attr path="/api/namespace/object[@cname='GtkTreeModelSort']/method[@name='ConvertIterToChildIter']/*/*[@name='child_iter']" name="pass_as">out</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GtkTreeSelection']/method[@name='GetSelected']/*/*" name="pass_as">out</attr>
|
<attr path="/api/namespace/object[@cname='GtkTreeSelection']/method[@name='GetSelected']/*/*" name="pass_as">out</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GtkTreeStore']/constructor[@cname='gtk_tree_store_newv']/parameters" name="va_type">length_param</attr>
|
<attr path="/api/namespace/object[@cname='GtkTreeStore']/constructor[@cname='gtk_tree_store_newv']/*/*[@name='types']" name="array">1</attr>
|
||||||
|
<attr path="/api/namespace/object[@cname='GtkTreeStore']/constructor[@cname='gtk_tree_store_newv']/*/*[@name='types']" name="params">1</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GtkTreeStore']/method[@name='Append']/*/*[@name='iter']" name="pass_as">out</attr>
|
<attr path="/api/namespace/object[@cname='GtkTreeStore']/method[@name='Append']/*/*[@name='iter']" name="pass_as">out</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GtkTreeStore']/method[@name='InsertAfter']/*/*[@name='iter']" name="pass_as">out</attr>
|
<attr path="/api/namespace/object[@cname='GtkTreeStore']/method[@name='InsertAfter']/*/*[@name='iter']" name="pass_as">out</attr>
|
||||||
<attr path="/api/namespace/object[@cname='GtkTreeStore']/method[@name='InsertBefore']/*/*[@name='iter']" name="pass_as">out</attr>
|
<attr path="/api/namespace/object[@cname='GtkTreeStore']/method[@name='InsertBefore']/*/*[@name='iter']" name="pass_as">out</attr>
|
||||||
|
|
|
@ -30,11 +30,6 @@
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetColumnTypes (params uint[] types)
|
|
||||||
{
|
|
||||||
SetColumnTypes (types.Length, types);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetValue (Gtk.TreeIter iter, int column, bool value) {
|
public void SetValue (Gtk.TreeIter iter, int column, bool value) {
|
||||||
SetValue (iter, column, new GLib.Value (value));
|
SetValue (iter, column, new GLib.Value (value));
|
||||||
}
|
}
|
||||||
|
|
|
@ -110,11 +110,6 @@
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetColumnTypes (params uint[] types)
|
|
||||||
{
|
|
||||||
SetColumnTypes (types.Length, types);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetValue (Gtk.TreeIter iter, int column, bool value) {
|
public void SetValue (Gtk.TreeIter iter, int column, bool value) {
|
||||||
SetValue (iter, column, new GLib.Value (value));
|
SetValue (iter, column, new GLib.Value (value));
|
||||||
}
|
}
|
||||||
|
|
|
@ -4396,9 +4396,9 @@
|
||||||
</parameters>
|
</parameters>
|
||||||
</constructor>
|
</constructor>
|
||||||
<constructor cname="gtk_list_store_newv">
|
<constructor cname="gtk_list_store_newv">
|
||||||
<parameters va_type="length_param">
|
<parameters>
|
||||||
<parameter type="gint" name="n_columns" />
|
<parameter type="gint" name="n_columns" />
|
||||||
<parameter type="GType*" name="types" />
|
<parameter type="GType*" name="types" array="1" params="1" />
|
||||||
</parameters>
|
</parameters>
|
||||||
</constructor>
|
</constructor>
|
||||||
<method name="Prepend" cname="gtk_list_store_prepend">
|
<method name="Prepend" cname="gtk_list_store_prepend">
|
||||||
|
@ -8449,9 +8449,9 @@
|
||||||
</parameters>
|
</parameters>
|
||||||
</constructor>
|
</constructor>
|
||||||
<constructor cname="gtk_tree_store_newv">
|
<constructor cname="gtk_tree_store_newv">
|
||||||
<parameters va_type="length_param">
|
<parameters>
|
||||||
<parameter type="gint" name="n_columns" />
|
<parameter type="gint" name="n_columns" />
|
||||||
<parameter type="GType*" name="types" />
|
<parameter type="GType*" name="types" array="1" params="1" />
|
||||||
</parameters>
|
</parameters>
|
||||||
</constructor>
|
</constructor>
|
||||||
<method name="Prepend" cname="gtk_tree_store_prepend">
|
<method name="Prepend" cname="gtk_tree_store_prepend">
|
||||||
|
|
Loading…
Reference in a new issue