2001-12-04 Mike Kestner <mkestner@speakeasy.net>
* codegen/defs-parse.pl : Index %structs by cname, not name. Derive structs from class to facilitate marshalling since Value types can't use the Marshal.PtrToStructure method. Generate StructLayout attr for struct class defs. Stuff the signal args into a SignalArgs inst to pass to the EventHandlers. * sample/HelloWorld.cs : some cleanup and temporary signal playcode. svn path=/trunk/gtk-sharp/; revision=1526
This commit is contained in:
parent
82646f231e
commit
354b306274
5 changed files with 45 additions and 13 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2001-12-04 Mike Kestner <mkestner@speakeasy.net>
|
||||||
|
|
||||||
|
* codegen/defs-parse.pl : Index %structs by cname, not name. Derive
|
||||||
|
structs from class to facilitate marshalling since Value types can't
|
||||||
|
use the Marshal.PtrToStructure method. Generate StructLayout attr
|
||||||
|
for struct class defs. Stuff the signal args into a SignalArgs inst
|
||||||
|
to pass to the EventHandlers.
|
||||||
|
* sample/HelloWorld.cs : some cleanup and temporary signal playcode.
|
||||||
|
|
||||||
2001-12-01 Mike Kestner <mkestner@speakeasy.net>
|
2001-12-01 Mike Kestner <mkestner@speakeasy.net>
|
||||||
|
|
||||||
* makefile : Make ROOT /cygdrive/, not //.
|
* makefile : Make ROOT /cygdrive/, not //.
|
||||||
|
|
|
@ -36,7 +36,7 @@ while ($def = get_def()) {
|
||||||
$def =~ /c-name "(\w+)"/;
|
$def =~ /c-name "(\w+)"/;
|
||||||
$cname=$1;
|
$cname=$1;
|
||||||
$def =~ s/\n\s*//g;
|
$def =~ s/\n\s*//g;
|
||||||
$structs{$name} = $def;
|
$structs{$cname} = $def;
|
||||||
$maptypes{$cname} = $name;
|
$maptypes{$cname} = $name;
|
||||||
$marshaltypes{$cname} = $name;
|
$marshaltypes{$cname} = $name;
|
||||||
} elsif ($def =~ /^\(define-object (\w+)/) {
|
} elsif ($def =~ /^\(define-object (\w+)/) {
|
||||||
|
@ -172,18 +172,16 @@ sub gen_enum
|
||||||
close (OUTFILE);
|
close (OUTFILE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Code generation for the structure definitions.
|
||||||
sub gen_struct
|
sub gen_struct
|
||||||
{
|
{
|
||||||
my ($name, $def) = @_;
|
my ($cname, $def) = @_;
|
||||||
|
|
||||||
$def =~ /c-name "(\w+)"/;
|
$def =~ /define-struct (\w+)/;
|
||||||
$cname = $1;
|
$name = $1;
|
||||||
$def =~ /in-module "(\w+)"/;
|
$def =~ /in-module "(\w+)"/;
|
||||||
$namespace = $1;
|
$namespace = $1;
|
||||||
|
|
||||||
$maptypes{$cname} = $name;
|
|
||||||
$marshaltypes{$cname} = $name;
|
|
||||||
|
|
||||||
$dir = "../" . lc ($namespace) . "/generated";
|
$dir = "../" . lc ($namespace) . "/generated";
|
||||||
open (OUTFILE, ">$dir/$name.cs") || die "can't open file";
|
open (OUTFILE, ">$dir/$name.cs") || die "can't open file";
|
||||||
|
|
||||||
|
@ -196,7 +194,8 @@ sub gen_struct
|
||||||
print OUTFILE "\t/// <remarks>\n\t///\tFIXME: Add docs.\n";
|
print OUTFILE "\t/// <remarks>\n\t///\tFIXME: Add docs.\n";
|
||||||
print OUTFILE "\t/// </remarks>\n\n";
|
print OUTFILE "\t/// </remarks>\n\n";
|
||||||
|
|
||||||
print OUTFILE "\tpublic struct $name {\n";
|
print OUTFILE "\t[StructLayout(LayoutKind.Sequential)]\n";
|
||||||
|
print OUTFILE "\tpublic class $name {\n";
|
||||||
|
|
||||||
if ($def =~ /fields'\((.*)\)\)\)/) {
|
if ($def =~ /fields'\((.*)\)\)\)/) {
|
||||||
foreach $parm (split(/\)'\(/, $1)) {
|
foreach $parm (split(/\)'\(/, $1)) {
|
||||||
|
@ -303,6 +302,7 @@ sub gen_object
|
||||||
close (OUTFILE);
|
close (OUTFILE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Code generation for signal definitions.
|
||||||
sub gen_signal
|
sub gen_signal
|
||||||
{
|
{
|
||||||
my ($name, $def, $dll) = @_;
|
my ($name, $def, $dll) = @_;
|
||||||
|
@ -344,6 +344,7 @@ sub gen_signal
|
||||||
return $code;
|
return $code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Code generation for property definitions.
|
||||||
sub gen_prop
|
sub gen_prop
|
||||||
{
|
{
|
||||||
my ($name, $def, $dll) = @_;
|
my ($name, $def, $dll) = @_;
|
||||||
|
@ -522,6 +523,7 @@ sub gen_param_strings
|
||||||
return ($call, $pinv, $sig);
|
return ($call, $pinv, $sig);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Code generation for signal handlers.
|
||||||
sub get_sighandler
|
sub get_sighandler
|
||||||
{
|
{
|
||||||
my ($def) = @_;
|
my ($def) = @_;
|
||||||
|
@ -589,6 +591,24 @@ sub get_sighandler
|
||||||
print SIGFILE "\t\t\t\tthrow new Exception(\"Unexpected signal key\");";
|
print SIGFILE "\t\t\t\tthrow new Exception(\"Unexpected signal key\");";
|
||||||
print SIGFILE "\n\n\t\t\t$sname inst = ($sname) _Instances[key];\n";
|
print SIGFILE "\n\n\t\t\t$sname inst = ($sname) _Instances[key];\n";
|
||||||
print SIGFILE "\t\t\tSignalArgs args = new SignalArgs ();\n";
|
print SIGFILE "\t\t\tSignalArgs args = new SignalArgs ();\n";
|
||||||
|
if ($def =~ /parameters'\((.*)\)\)\)/) {
|
||||||
|
my (@parms) = split(/\)'\(/, $1);
|
||||||
|
print "$sname pcnt=$#parms\n";
|
||||||
|
for ($idx=0; $idx < $#parms; $idx++) {
|
||||||
|
$parms[$idx+1] =~ s/\*//g;
|
||||||
|
$parms[$idx+1] =~ /"(\S*)" "(\S*)"/;
|
||||||
|
$ptype = $1;
|
||||||
|
$pname = $2;
|
||||||
|
$pname =~ s/object/objekt/;
|
||||||
|
$pname =~ s/event/ev3nt/;
|
||||||
|
print "$ptype $pname\n";
|
||||||
|
if (exists($objects{$ptype})) {
|
||||||
|
print SIGFILE "\t\t\targs.Args[$idx] = GLib.Object.GetObject($pname);\n";
|
||||||
|
} elsif (exists($maptypes{$ptype})) {
|
||||||
|
print SIGFILE "\t\t\targs.Args[$idx] = $pname;\n";
|
||||||
|
} else { warn "Whassup wit $ptype?"; }
|
||||||
|
}
|
||||||
|
}
|
||||||
print SIGFILE "\t\t\tinst._handler (inst._obj, args);\n";
|
print SIGFILE "\t\t\tinst._handler (inst._obj, args);\n";
|
||||||
if ($ret ne "none") {
|
if ($ret ne "none") {
|
||||||
print SIGFILE "\t\t\treturn ($maptypes{$ret}) args.RetVal;\n";
|
print SIGFILE "\t\t\treturn ($maptypes{$ret}) args.RetVal;\n";
|
||||||
|
|
|
@ -73,6 +73,7 @@ namespace Gdk {
|
||||||
SimpleEvent se = (SimpleEvent) _Instances [inst_key];
|
SimpleEvent se = (SimpleEvent) _Instances [inst_key];
|
||||||
Event evnt = new Event ();
|
Event evnt = new Event ();
|
||||||
Marshal.PtrToStructure (e, evnt);
|
Marshal.PtrToStructure (e, evnt);
|
||||||
|
// Marshal.PtrToStructure (e, (object) evnt);
|
||||||
EventArgs args = new SimpleEventArgs (evnt);
|
EventArgs args = new SimpleEventArgs (evnt);
|
||||||
se._handler (se._obj, args);
|
se._handler (se._obj, args);
|
||||||
return true; //FIXME: How do we manage the return value?
|
return true; //FIXME: How do we manage the return value?
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
namespace GtkSamples {
|
namespace GtkSamples {
|
||||||
|
|
||||||
using Gtk;
|
using Gtk;
|
||||||
|
using Gdk;
|
||||||
|
using GtkSharp;
|
||||||
using System;
|
using System;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
|
|
||||||
|
@ -16,10 +18,7 @@ namespace GtkSamples {
|
||||||
{
|
{
|
||||||
Application.Init (ref args);
|
Application.Init (ref args);
|
||||||
Window win = new Window ("Gtk# Hello World");
|
Window win = new Window ("Gtk# Hello World");
|
||||||
win.DefaultSize = new Size (400, 400);
|
win.DefaultSize = new Size (200, 150);
|
||||||
System.Console.WriteLine (win.Title);
|
|
||||||
System.Console.WriteLine (win.DefaultSize);
|
|
||||||
System.Console.WriteLine (win.AllowShrink);
|
|
||||||
win.Deleted += new EventHandler (Window_Delete);
|
win.Deleted += new EventHandler (Window_Delete);
|
||||||
win.Show ();
|
win.Show ();
|
||||||
Application.Run ();
|
Application.Run ();
|
||||||
|
@ -28,6 +27,9 @@ namespace GtkSamples {
|
||||||
|
|
||||||
static void Window_Delete (object obj, EventArgs args)
|
static void Window_Delete (object obj, EventArgs args)
|
||||||
{
|
{
|
||||||
|
SimpleEventArgs sa = (SimpleEventArgs) args;
|
||||||
|
|
||||||
|
Console.WriteLine(sa.Event.type);
|
||||||
Application.Quit ();
|
Application.Quit ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ all:
|
||||||
@echo "'make unix' is broken for now."
|
@echo "'make unix' is broken for now."
|
||||||
|
|
||||||
windows:
|
windows:
|
||||||
$(CSC) /unsafe /out:gtk-hello-world.exe /r:../glib/glib-sharp.dll /r:../gtk/gtk-sharp.dll HelloWorld.cs
|
$(CSC) /unsafe /out:gtk-hello-world.exe /r:../glib/glib-sharp.dll /r:../gtk/gtk-sharp.dll /r:../gdk/gdk-sharp.dll HelloWorld.cs
|
||||||
$(CSC) /unsafe /out:button.exe /r:../glib/glib-sharp.dll /r:../gtk/gtk-sharp.dll ButtonApp.cs
|
$(CSC) /unsafe /out:button.exe /r:../glib/glib-sharp.dll /r:../gtk/gtk-sharp.dll ButtonApp.cs
|
||||||
|
|
||||||
unix:
|
unix:
|
||||||
|
|
Loading…
Reference in a new issue