* parser/gapi2xml.pl (parseInitFunc): handle interface properties

as well as class properties

	* gtk/gtk-api-2.4.raw: 
	* gtk/gtk-api-2.6.raw: Regen (adding properties to GtkFileChooser).

	* generator/Property.cs (GenerateDecl): new method to generate
	just a property declaration (for an interface).
	(Generate): Add an "implementor" arg as with Method.Generate.

	* generator/InterfaceGen.cs (Generate): Generate properties. Also,
	validate methods *before* checking if they should be ignored,
	since certain Method properties aren't set until Validate-time.

	* generator/*.cs: misc minor changes/reorg for the above.

svn path=/trunk/gtk-sharp/; revision=47563
This commit is contained in:
Dan Winship 2005-07-22 18:35:37 +00:00
parent 455d319d34
commit d37d940eb8
14 changed files with 213 additions and 41 deletions

View file

@ -1,3 +1,21 @@
2005-07-21 Dan Winship <danw@novell.com>
* parser/gapi2xml.pl (parseInitFunc): handle interface properties
as well as class properties
* gtk/gtk-api-2.4.raw:
* gtk/gtk-api-2.6.raw: Regen (adding properties to GtkFileChooser).
* generator/Property.cs (GenerateDecl): new method to generate
just a property declaration (for an interface).
(Generate): Add an "implementor" arg as with Method.Generate.
* generator/InterfaceGen.cs (Generate): Generate properties. Also,
validate methods *before* checking if they should be ignored,
since certain Method properties aren't set until Validate-time.
* generator/*.cs: misc minor changes/reorg for the above.
2005-07-19 Todd Berman <tberman@off.net>
* gtk/TreeSelection.custom: Add an overload for GetSelected to remove

View file

@ -524,7 +524,11 @@
<value>To be added.</value>
<remarks>To be added.</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="extra-widget")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="CurrentName">
<MemberSignature Language="C#" Value="public string CurrentName { set; };" />
<MemberType>Property</MemberType>
@ -548,7 +552,11 @@
<value>To be added.</value>
<remarks>To be added.</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="show-hidden")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="Filter">
<MemberSignature Language="C#" Value="public Gtk.FileFilter Filter { set; get; };" />
<MemberType>Property</MemberType>
@ -560,7 +568,11 @@
<value>To be added.</value>
<remarks>To be added.</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="filter")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="LocalOnly">
<MemberSignature Language="C#" Value="public bool LocalOnly { set; get; };" />
<MemberType>Property</MemberType>
@ -572,7 +584,11 @@
<value>To be added.</value>
<remarks>To be added.</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="local-only")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="PreviewWidgetActive">
<MemberSignature Language="C#" Value="public bool PreviewWidgetActive { set; get; };" />
<MemberType>Property</MemberType>
@ -584,7 +600,11 @@
<value>To be added.</value>
<remarks>To be added.</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="preview-widget-active")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="PreviewFilename">
<MemberSignature Language="C#" Value="public string PreviewFilename { get; };" />
<MemberType>Property</MemberType>
@ -620,7 +640,11 @@
<value>To be added.</value>
<remarks>To be added.</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="use-preview-label")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="Filename">
<MemberSignature Language="C#" Value="public string Filename { get; };" />
<MemberType>Property</MemberType>
@ -656,7 +680,11 @@
<value>To be added.</value>
<remarks>To be added.</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="select-multiple")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="PreviewWidget">
<MemberSignature Language="C#" Value="public Gtk.Widget PreviewWidget { set; get; };" />
<MemberType>Property</MemberType>
@ -668,7 +696,11 @@
<value>To be added.</value>
<remarks>To be added.</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="preview-widget")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="Action">
<MemberSignature Language="C#" Value="public Gtk.FileChooserAction Action { set; get; };" />
<MemberType>Property</MemberType>
@ -680,7 +712,11 @@
<value>To be added.</value>
<remarks>To be added.</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="action")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="CurrentFolder">
<MemberSignature Language="C#" Value="public string CurrentFolder { get; };" />
<MemberType>Property</MemberType>

View file

@ -472,7 +472,11 @@
<remarks>
</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="extra-widget")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="CurrentName">
<MemberSignature Language="C#" Value="public string CurrentName { set; };" />
<MemberType>Property</MemberType>
@ -505,7 +509,11 @@
<remarks>
</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="filter")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="LocalOnly">
<MemberSignature Language="C#" Value="public bool LocalOnly { set; get; };" />
<MemberType>Property</MemberType>
@ -531,7 +539,11 @@
<see cref="M:Gtk.FileChooser.GetUri" />.
</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="local-only")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="PreviewWidgetActive">
<MemberSignature Language="C#" Value="public bool PreviewWidgetActive { set; get; };" />
<MemberType>Property</MemberType>
@ -549,7 +561,11 @@
may display an internally generated preview of the current file
or it may display no preview at all.</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="preview-widget-active")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="PreviewFilename">
<MemberSignature Language="C#" Value="public string PreviewFilename { get; };" />
<MemberType>Property</MemberType>
@ -601,7 +617,11 @@
to false and display the name themselves in their preview widget.
</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="use-preview-label")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="Filename">
<MemberSignature Language="C#" Value="public string Filename { get; };" />
<MemberType>Property</MemberType>
@ -649,7 +669,11 @@
It cannot be set with either of the folder actions.
</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="select-multiple")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="PreviewWidget">
<MemberSignature Language="C#" Value="public Gtk.Widget PreviewWidget { set; get; };" />
<MemberType>Property</MemberType>
@ -685,7 +709,11 @@
</para>
</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="preview-widget")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="Action">
<MemberSignature Language="C#" Value="public Gtk.FileChooserAction Action { set; get; };" />
<MemberType>Property</MemberType>
@ -706,7 +734,11 @@
<see cref="M:Gtk.FileChooserAction.Open" />.
</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="action")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="CurrentFolder">
<MemberSignature Language="C#" Value="public string CurrentFolder { get; };" />
<MemberType>Property</MemberType>
@ -978,6 +1010,10 @@
<remarks>To be added</remarks>
<since version="Gtk# 2.6" />
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="show-hidden")</AttributeName>
</Attribute>
</Attributes></Member>
</Members>
</Type>

View file

@ -495,7 +495,11 @@
<remarks>
</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="extra-widget")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="CurrentName">
<MemberSignature Language="C#" Value="public string CurrentName { set; };" />
<MemberType>Property</MemberType>
@ -528,7 +532,11 @@
<remarks>
</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="filter")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="LocalOnly">
<MemberSignature Language="C#" Value="public bool LocalOnly { set; get; };" />
<MemberType>Property</MemberType>
@ -554,7 +562,11 @@
<see cref="M:Gtk.FileChooser.GetUri" />.
</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="local-only")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="PreviewWidgetActive">
<MemberSignature Language="C#" Value="public bool PreviewWidgetActive { set; get; };" />
<MemberType>Property</MemberType>
@ -572,7 +584,11 @@
may display an internally generated preview of the current file
or it may display no preview at all.</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="preview-widget-active")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="PreviewFilename">
<MemberSignature Language="C#" Value="public string PreviewFilename { get; };" />
<MemberType>Property</MemberType>
@ -624,7 +640,11 @@
to false and display the name themselves in their preview widget.
</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="use-preview-label")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="Filename">
<MemberSignature Language="C#" Value="public string Filename { get; };" />
<MemberType>Property</MemberType>
@ -672,7 +692,11 @@
It cannot be set with either of the folder actions.
</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="select-multiple")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="PreviewWidget">
<MemberSignature Language="C#" Value="public Gtk.Widget PreviewWidget { set; get; };" />
<MemberType>Property</MemberType>
@ -708,7 +732,11 @@
</para>
</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="preview-widget")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="Action">
<MemberSignature Language="C#" Value="public Gtk.FileChooserAction Action { set; get; };" />
<MemberType>Property</MemberType>
@ -729,7 +757,11 @@
<see cref="M:Gtk.FileChooserAction.Open" />.
</remarks>
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="action")</AttributeName>
</Attribute>
</Attributes></Member>
<Member MemberName="CurrentFolder">
<MemberSignature Language="C#" Value="public string CurrentFolder { get; };" />
<MemberType>Property</MemberType>
@ -927,6 +959,10 @@
<remarks>To be added</remarks>
<since version="Gtk# 2.6" />
</Docs>
</Member>
<Attributes>
<Attribute>
<AttributeName>GLib.Property(Name="show-hidden")</AttributeName>
</Attribute>
</Attributes></Member>
</Members>
</Type>

View file

@ -156,14 +156,14 @@ namespace GtkSharp.Generation {
}
}
protected void GenProperties (GenerationInfo gen_info)
public void GenProperties (GenerationInfo gen_info, ClassBase implementor)
{
if (props.Count == 0)
return;
foreach (Property prop in props.Values) {
if (prop.Validate ())
prop.Generate (gen_info, "\t\t");
prop.Generate (gen_info, "\t\t", implementor);
else
Console.WriteLine("in Object " + QualifiedName);
}

View file

@ -77,7 +77,7 @@ namespace GtkSharp.Generation {
sw.WriteLine (" {");
sw.WriteLine ();
GenProperties (gen_info);
GenProperties (gen_info, null);
GenMethods (gen_info, null, null);
sw.WriteLine ("#endregion");

View file

@ -135,7 +135,7 @@ namespace GtkSharp.Generation {
base.GenerateImports (gen_info, indent);
}
public override void Generate (GenerationInfo gen_info, string indent)
public virtual void Generate (GenerationInfo gen_info, string indent)
{
if (Ignored || Hidden)
return;

View file

@ -279,11 +279,17 @@ namespace GtkSharp.Generation {
}
foreach (Method method in methods.Values) {
if (IgnoreMethod (method))
continue;
if (method.Validate ())
if (method.Validate ()) {
if (IgnoreMethod (method))
continue;
method.GenerateDecl (sw);
} else
Console.WriteLine ("of interface " + QualifiedName);
}
foreach (Property prop in props.Values) {
if (prop.Validate ())
prop.GenerateDecl (sw, "\t\t");
else
Console.WriteLine ("of interface " + QualifiedName);
}

View file

@ -154,7 +154,7 @@ namespace GtkSharp.Generation {
sw.WriteLine ();
GenCtors (gen_info);
GenProperties (gen_info);
GenProperties (gen_info, null);
GenFields (gen_info);
GenChildProperties (gen_info);
@ -202,6 +202,7 @@ namespace GtkSharp.Generation {
continue;
ClassBase igen = table.GetClassGen (iface);
igen.GenMethods (gen_info, collisions, this);
igen.GenProperties (gen_info, this);
igen.GenSignals (gen_info, this);
}
}
@ -275,7 +276,7 @@ namespace GtkSharp.Generation {
foreach (ChildProperty prop in childprops.Values) {
if (prop.Validate ())
prop.Generate (gen_info, "\t\t\t");
prop.Generate (gen_info, "\t\t\t", null);
else
Console.WriteLine("in Object " + QualifiedName);
}

View file

@ -67,7 +67,26 @@ namespace GtkSharp.Generation {
return "SetProperty(" + qpname + ", val)";
}
public override void Generate (GenerationInfo gen_info, string indent)
public void GenerateDecl (StreamWriter sw, string indent)
{
if (Hidden || (!Readable && !Writable))
return;
string name = Name;
if (name == container_type.Name)
name += "Prop";
sw.WriteLine (indent + CSType + " " + name + " {");
sw.Write (indent + "\t");
if (Readable || Getter != null)
sw.Write ("get; ");
if (Writable || Setter != null)
sw.Write ("set;");
sw.WriteLine ();
sw.WriteLine (indent + "}");
}
public void Generate (GenerationInfo gen_info, string indent, ClassBase implementor)
{
SymbolTable table = SymbolTable.Table;
StreamWriter sw = gen_info.Writer;
@ -79,6 +98,8 @@ namespace GtkSharp.Generation {
if (IsNew || (container_type.Parent != null && container_type.Parent.GetPropertyRecursively (Name) != null))
modifiers = "new ";
else if (implementor != null && implementor.Parent.GetPropertyRecursively (Name) != null)
modifiers = "new ";
string name = Name;
if (name == container_type.Name) {

View file

@ -117,8 +117,6 @@ namespace GtkSharp.Generation {
if (Setter != null)
Setter.GenerateImport (gen_info.Writer);
}
public abstract void Generate (GenerationInfo gen_info, string indent);
}
}

View file

@ -1231,6 +1231,16 @@
<parameter type="GtkFileChooser*" name="chooser" />
</parameters>
</signal>
<property name="Action" cname="action" type="GtkFileChooserAction" readable="true" writeable="true" />
<property name="FileSystemBackend" cname="file-system-backend" type="gchar*" writeable="true" construct-only="true" />
<property name="Filter" cname="filter" type="GtkFileFilter" readable="true" writeable="true" />
<property name="LocalOnly" cname="local-only" type="gboolean" readable="true" writeable="true" />
<property name="PreviewWidget" cname="preview-widget" type="GtkWidget" readable="true" writeable="true" />
<property name="PreviewWidgetActive" cname="preview-widget-active" type="gboolean" readable="true" writeable="true" />
<property name="UsePreviewLabel" cname="use-preview-label" type="gboolean" readable="true" writeable="true" />
<property name="ExtraWidget" cname="extra-widget" type="GtkWidget" readable="true" writeable="true" />
<property name="SelectMultiple" cname="select-multiple" type="gboolean" readable="true" writeable="true" />
<property name="ShowHidden" cname="show-hidden" type="gboolean" readable="true" writeable="true" />
<virtual_method name="SetCurrentFolder" cname="set_current_folder">
<return-type type="gboolean" />
<parameters>

View file

@ -1272,6 +1272,16 @@
<parameter type="GtkFileChooser*" name="chooser" />
</parameters>
</signal>
<property name="Action" cname="action" type="GtkFileChooserAction" readable="true" writeable="true" />
<property name="FileSystemBackend" cname="file-system-backend" type="gchar*" writeable="true" construct-only="true" />
<property name="Filter" cname="filter" type="GtkFileFilter" readable="true" writeable="true" />
<property name="LocalOnly" cname="local-only" type="gboolean" readable="true" writeable="true" />
<property name="PreviewWidget" cname="preview-widget" type="GtkWidget" readable="true" writeable="true" />
<property name="PreviewWidgetActive" cname="preview-widget-active" type="gboolean" readable="true" writeable="true" />
<property name="UsePreviewLabel" cname="use-preview-label" type="gboolean" readable="true" writeable="true" />
<property name="ExtraWidget" cname="extra-widget" type="GtkWidget" readable="true" writeable="true" />
<property name="SelectMultiple" cname="select-multiple" type="gboolean" readable="true" writeable="true" />
<property name="ShowHidden" cname="show-hidden" type="gboolean" readable="true" writeable="true" />
<virtual_method name="SetCurrentFolder" cname="set_current_folder">
<return-type type="gboolean" />
<parameters>

View file

@ -1001,7 +1001,7 @@ sub parseInitFunc
if ($line =~ /#define/) {
# FIXME: This ignores the bool helper macro thingie.
} elsif ($line =~ /g_object_class_install_prop/) {
} elsif ($line =~ /g_object_(class|interface)_install_prop/) {
my $prop = $line;
do {
$prop .= $init_lines[++$linenum];