diff --git a/ChangeLog b/ChangeLog index 3dfb77009..ffcc7d966 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2002-07-17 Radek Doulik + + * gtk/ScrolledWindow.custom: new file with ScrolledWindow custom + default constructor + + * parser/Metadata.pm: addClassData subroutine to add + + + * parser/Gtk.metadata: disable default constructor for + ScrolledWindow + + * generator/ObjectGen.cs: added hasDefaultConstructor flag, dont + generate default protected empty constructor if + hasDefaultConstructor is false, it will be provided by .custom + file + + * generator/makefile (RUNTIME): use RUNTIME variable + 2002-07-17 Rachel Hestilow * parser/Gtk.metadata: Tag MenuItem.SetSubmenu as null-ok. diff --git a/generator/ObjectGen.cs b/generator/ObjectGen.cs index 7a22b7e3d..46bee874f 100644 --- a/generator/ObjectGen.cs +++ b/generator/ObjectGen.cs @@ -15,6 +15,7 @@ namespace GtkSharp.Generation { private ArrayList ctors = new ArrayList(); private ArrayList strings = new ArrayList(); + private bool hasDefaultConstructor = true; private bool ctors_initted = false; private Hashtable clash_map; @@ -34,6 +35,10 @@ namespace GtkSharp.Generation { case "constructor": ctors.Add (new Ctor (LibraryName, member, this)); break; + + case "disabledefaultconstructor": + hasDefaultConstructor = false; + break; case "static-string": strings.Add (node); @@ -218,7 +223,7 @@ namespace GtkSharp.Generation { } } - if (!clash_map.ContainsKey("")) { + if (!clash_map.ContainsKey("") && hasDefaultConstructor) { sw.WriteLine("\t\tprotected " + Name + "() : base(){}"); sw.WriteLine(); } diff --git a/generator/makefile b/generator/makefile index 3e753bdc8..a475416d2 100644 --- a/generator/makefile +++ b/generator/makefile @@ -1,4 +1,5 @@ MCS=mcs +RUNTIME=mono all: linux @@ -9,7 +10,7 @@ windows: *.cs linux: generated-stamp generated-stamp: codegen.exe gtkapi.xml - mono ./codegen.exe gtkapi.xml && touch generated-stamp + $(RUNTIME) ./codegen.exe gtkapi.xml && touch generated-stamp clean: rm -f *.exe diff --git a/gtk/ScrolledWindow.custom b/gtk/ScrolledWindow.custom new file mode 100644 index 000000000..9adad988a --- /dev/null +++ b/gtk/ScrolledWindow.custom @@ -0,0 +1,13 @@ + // + // Gtk.ScrolledWindow.custom - Gtk ScrolledWindow class customizations + // + // Author: Radek Doulik (rodo@ximian.com) + // + // Copyright (C) 2002 Ximian, Inc. + // + // This code is inserted after the automatically generated code. + // + + public ScrolledWindow () : this (new Adjustment (IntPtr.Zero), new Adjustment (IntPtr.Zero)) { + SetPolicy (PolicyType.Automatic, PolicyType.Automatic); + } \ No newline at end of file diff --git a/parser/GAPI/Metadata.pm b/parser/GAPI/Metadata.pm index e5c5d8577..9e96ad6ac 100644 --- a/parser/GAPI/Metadata.pm +++ b/parser/GAPI/Metadata.pm @@ -80,7 +80,7 @@ sub load { @data = parseData ($node); } } - + push @{$self->{rules}}, [\%classes, \@data]; } } @@ -127,8 +127,25 @@ sub fixupParams { } } +sub addClassData { + my ($doc, $node, $class, $data_list_ref) = @_; + + foreach $data (@$data_list_ref) { + if ($$data[1] eq "class") { + my @nodes = $node->getChildrenByTagName ($$data[5]); + + if (0 == scalar @nodes) { + print STDERR "DEBUG> $class $$data[0] $$data[1] $$data[2] $$data[3] $$data[4] $$data[5] $$data[6]\n"; + my $new_node = $doc->createElement ($$data[5]); + $node->appendChild ($new_node); + } + next; + } + } +} + sub fixupNamespace { - my ($self, $ns_node) = @_; + my ($self, $doc, $ns_node) = @_; my $node; foreach $rule (@{$self->{rules}}) { my ($classes_ref, $data_list_ref) = @$rule; @@ -145,6 +162,11 @@ sub fixupNamespace { my %classes = %$classes_ref; $methods_ref = $classes{$class}[0]; $signals_ref = $classes{$class}[1]; + + if ({%$classes_ref}->{$class}) { + addClassData ($doc, $node, $class, $data_list_ref); + } + next if not ($methods_ref or $signals_ref); for ($method_node = $node->firstChild; $method_node; $method_node = $method_node->nextSibling ()) { @@ -196,7 +218,7 @@ sub fixup { if (not ($metadata and $metadata->{namespace} eq $namespace)) { $metadata = new Metadata ($namespace); } - $metadata->fixupNamespace ($ns_node); + $metadata->fixupNamespace ($doc, $ns_node); } } } diff --git a/parser/Gtk.metadata b/parser/Gtk.metadata index 78a67000b..9b64898cd 100644 --- a/parser/Gtk.metadata +++ b/parser/Gtk.metadata @@ -1188,6 +1188,16 @@ + + + + + + disabledefaultconstructor + + + + diff --git a/parser/Metadata.pm b/parser/Metadata.pm index e5c5d8577..9e96ad6ac 100644 --- a/parser/Metadata.pm +++ b/parser/Metadata.pm @@ -80,7 +80,7 @@ sub load { @data = parseData ($node); } } - + push @{$self->{rules}}, [\%classes, \@data]; } } @@ -127,8 +127,25 @@ sub fixupParams { } } +sub addClassData { + my ($doc, $node, $class, $data_list_ref) = @_; + + foreach $data (@$data_list_ref) { + if ($$data[1] eq "class") { + my @nodes = $node->getChildrenByTagName ($$data[5]); + + if (0 == scalar @nodes) { + print STDERR "DEBUG> $class $$data[0] $$data[1] $$data[2] $$data[3] $$data[4] $$data[5] $$data[6]\n"; + my $new_node = $doc->createElement ($$data[5]); + $node->appendChild ($new_node); + } + next; + } + } +} + sub fixupNamespace { - my ($self, $ns_node) = @_; + my ($self, $doc, $ns_node) = @_; my $node; foreach $rule (@{$self->{rules}}) { my ($classes_ref, $data_list_ref) = @$rule; @@ -145,6 +162,11 @@ sub fixupNamespace { my %classes = %$classes_ref; $methods_ref = $classes{$class}[0]; $signals_ref = $classes{$class}[1]; + + if ({%$classes_ref}->{$class}) { + addClassData ($doc, $node, $class, $data_list_ref); + } + next if not ($methods_ref or $signals_ref); for ($method_node = $node->firstChild; $method_node; $method_node = $method_node->nextSibling ()) { @@ -196,7 +218,7 @@ sub fixup { if (not ($metadata and $metadata->{namespace} eq $namespace)) { $metadata = new Metadata ($namespace); } - $metadata->fixupNamespace ($ns_node); + $metadata->fixupNamespace ($doc, $ns_node); } } } diff --git a/sources/Gtk.metadata b/sources/Gtk.metadata index 78a67000b..9b64898cd 100644 --- a/sources/Gtk.metadata +++ b/sources/Gtk.metadata @@ -1188,6 +1188,16 @@ + + + + + + disabledefaultconstructor + + + +