Enlightenment CVS committal Author : leviathan Project : e17 Module : proto
Dir : e17/proto/etk-perl Modified Files: Etk.xs test.pl Log Message: Big fat changes. Breakage ahead! Many changes to the API (it's now kind of unstable and very in-development) take a look at test.pl for new access methods. I'm porting etk_test.pl as I implement stuff. =================================================================== RCS file: /cvs/e/e17/proto/etk-perl/Etk.xs,v retrieving revision 1.30 retrieving revision 1.31 diff -u -3 -r1.30 -r1.31 --- Etk.xs 17 Jul 2006 23:26:17 -0000 1.30 +++ Etk.xs 18 Jul 2006 22:14:34 -0000 1.31 @@ -24,6 +24,7 @@ { char *signal_name; /* etk signal name */ Etk_Object *object; /* object signal is connected to */ + SV *perl_object; /* reference to the perl object */ SV *perl_callback; /* perl callback to be called */ void *perl_data; /* perl data to pass to the perl callback */ }; @@ -76,6 +77,7 @@ cbd = data; PUSHMARK(SP); + XPUSHs(sv_2mortal(newSVsv(cbd->perl_object))); XPUSHs(sv_2mortal(newSVsv(cbd->perl_data))); PUTBACK ; @@ -92,6 +94,7 @@ cbd = data; PUSHMARK(SP) ; + XPUSHs(sv_2mortal(newSVsv(cbd->perl_object))); XPUSHs(sv_2mortal(newSViv(value))); XPUSHs(sv_2mortal(newSVsv(cbd->perl_data))); PUTBACK ; @@ -109,6 +112,7 @@ cbd = data; PUSHMARK(SP) ; + XPUSHs(sv_2mortal(newSVsv(cbd->perl_object))); XPUSHs(sv_2mortal(newSVnv(value))); XPUSHs(sv_2mortal(newSVsv(cbd->perl_data))); PUTBACK ; @@ -169,6 +173,7 @@ } PUSHMARK(SP) ; + XPUSHs(sv_2mortal(newSVsv(cbd->perl_object))); XPUSHs(sv_2mortal(event_rv)); XPUSHs(sv_2mortal(newSVsv(cbd->perl_data))); PUTBACK ; @@ -186,6 +191,7 @@ cbd = data; PUSHMARK(SP) ; + XPUSHs(sv_2mortal(newSVsv(cbd->perl_object))); //XPUSHs(sv_2mortal(newSViv(value))); XPUSHs(sv_2mortal(newSVsv(cbd->perl_data))); PUTBACK ; @@ -203,6 +209,7 @@ cbd = data; PUSHMARK(SP) ; + XPUSHs(sv_2mortal(newSVsv(cbd->perl_object))); XPUSHs(sv_2mortal(newSViv(val1))); XPUSHs(sv_2mortal(newSVsv(cbd->perl_data))); PUTBACK ; @@ -220,6 +227,7 @@ cbd = data; PUSHMARK(SP) ; + XPUSHs(sv_2mortal(newSVsv(cbd->perl_object))); XPUSHs(sv_2mortal(newSVsv(cbd->perl_data))); PUTBACK ; @@ -236,6 +244,7 @@ cbd = data; PUSHMARK(SP) ; + XPUSHs(sv_2mortal(newSVsv(cbd->perl_object))); XPUSHs(sv_2mortal(newSVnv(value))); XPUSHs(sv_2mortal(newSVsv(cbd->perl_data))); PUTBACK ; @@ -253,6 +262,7 @@ cbd = data; PUSHMARK(SP) ; + XPUSHs(sv_2mortal(newSVsv(cbd->perl_object))); //XPUSHs(sv_2mortal(newSViv(value))); XPUSHs(sv_2mortal(newSVsv(cbd->perl_data))); PUTBACK ; @@ -262,7 +272,7 @@ } static void -__etk_signal_connect_full(char *signal_name, Etk_Widget *object, SV *callback, SV *data, Etk_Bool swapped, Etk_Bool after) +__etk_signal_connect_full(char *signal_name, SV *object, SV *callback, SV *data, Etk_Bool swapped, Etk_Bool after) { dSP; @@ -271,18 +281,25 @@ Etk_Signal *sig = NULL; Etk_Marshaller marsh; - obj = ETK_OBJECT(object); - + HV * ref; + SV ** o; + ENTER; SAVETMPS; + ref = (HV *)SvRV(object); + o = hv_fetch( ref, "WIDGET", strlen("WIDGET"), 0); + + obj = ETK_OBJECT( (void *) SvIV(SvRV(*o)) ); + cbd = calloc(1, sizeof(Callback_Signal_Data)); cbd->signal_name = strdup(signal_name); - cbd->object = ETK_OBJECT(object); + cbd->object = obj; + cbd->perl_object = newSVsv(object); cbd->perl_data = newSVsv(data); cbd->perl_callback = newSVsv(callback); - sig = etk_signal_lookup(signal_name, ETK_OBJECT(object)->type); + sig = etk_signal_lookup(signal_name, obj->type); if(!sig) printf("CANT GET SIG!\n"); marsh = etk_signal_marshaller_get(sig); @@ -3088,7 +3105,7 @@ void etk_signal_connect(signal_name, object, callback, data) char * signal_name - Etk_Widget * object + SV * object SV * callback SV * data @@ -3098,7 +3115,7 @@ void etk_signal_connect_after(signal_name, object, callback, data) char * signal_name - Etk_Widget * object + SV * object SV * callback SV * data @@ -3107,7 +3124,7 @@ void etk_signal_connect_full(signal_name, object, callback, data, swapped, after) char * signal_name - Etk_Widget * object + SV * object SV * callback SV * data Etk_Bool swapped @@ -3119,7 +3136,7 @@ void etk_signal_connect_swapped(signal_name, object, callback, data) char * signal_name - Etk_Widget * object + SV * object SV * callback SV * data @@ -3133,35 +3150,43 @@ void etk_signal_disconnect(signal_name, object, callback) char * signal_name - Etk_Widget * object + SV * object SV * callback CODE: Etk_Signal *sig = NULL; Etk_Marshaller marsh; + Etk_Object * obj; + HV * ref; + SV ** o; - sig = etk_signal_lookup(signal_name, ETK_OBJECT(object)->type); + ref = (HV *)SvRV(object); + o = hv_fetch( ref, "WIDGET", strlen("WIDGET"), 0); + + obj = ETK_OBJECT( (void *) SvIV(SvRV(*o)) ); + + sig = etk_signal_lookup(signal_name, obj->type); if(!sig) printf("CANT GET SIG!\n"); marsh = etk_signal_marshaller_get(sig); if(marsh == etk_marshaller_VOID__VOID) - etk_signal_disconnect(signal_name, ETK_OBJECT(object), ETK_CALLBACK(callback_VOID__VOID)); + etk_signal_disconnect(signal_name, obj, ETK_CALLBACK(callback_VOID__VOID)); else if(marsh == etk_marshaller_VOID__INT) - etk_signal_disconnect(signal_name, ETK_OBJECT(object), ETK_CALLBACK(callback_VOID__INT)); + etk_signal_disconnect(signal_name, obj, ETK_CALLBACK(callback_VOID__INT)); else if(marsh == etk_marshaller_VOID__DOUBLE) - etk_signal_disconnect(signal_name, ETK_OBJECT(object), ETK_CALLBACK(callback_VOID__DOUBLE)); + etk_signal_disconnect(signal_name, obj, ETK_CALLBACK(callback_VOID__DOUBLE)); else if(marsh == etk_marshaller_VOID__POINTER) - etk_signal_disconnect(signal_name, ETK_OBJECT(object), ETK_CALLBACK(callback_VOID__POINTER)); + etk_signal_disconnect(signal_name, obj, ETK_CALLBACK(callback_VOID__POINTER)); else if(marsh == etk_marshaller_VOID__INT_POINTER) - etk_signal_disconnect(signal_name, ETK_OBJECT(object), ETK_CALLBACK(callback_VOID__INT_POINTER)); + etk_signal_disconnect(signal_name, obj, ETK_CALLBACK(callback_VOID__INT_POINTER)); else if(marsh == etk_marshaller_BOOL__VOID) - etk_signal_disconnect(signal_name, ETK_OBJECT(object), ETK_CALLBACK(callback_BOOL__VOID)); + etk_signal_disconnect(signal_name, obj, ETK_CALLBACK(callback_BOOL__VOID)); else if(marsh == etk_marshaller_BOOL__DOUBLE) - etk_signal_disconnect(signal_name, ETK_OBJECT(object), ETK_CALLBACK(callback_BOOL__DOUBLE)); + etk_signal_disconnect(signal_name, obj, ETK_CALLBACK(callback_BOOL__DOUBLE)); else if(marsh == etk_marshaller_BOOL__POINTER_POINTER) - etk_signal_disconnect(signal_name, ETK_OBJECT(object), ETK_CALLBACK(callback_BOOL__POINTER_POINTER)); + etk_signal_disconnect(signal_name, obj, ETK_CALLBACK(callback_BOOL__POINTER_POINTER)); else - etk_signal_disconnect(signal_name, ETK_OBJECT(object), ETK_CALLBACK(callback_VOID__VOID)); + etk_signal_disconnect(signal_name, obj, ETK_CALLBACK(callback_VOID__VOID)); void etk_signal_emit(signal, object, return_value, ...) =================================================================== RCS file: /cvs/e/e17/proto/etk-perl/test.pl,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- test.pl 15 Jul 2006 19:19:05 -0000 1.4 +++ test.pl 18 Jul 2006 22:14:34 -0000 1.5 @@ -1,39 +1,34 @@ use strict; use Etk; -use Etk::Tree::Model::Text; -use Etk::Tree::Model::ProgressBar; -use Etk::Tree::Col; my $win = Etk::Window->new(); -my $button1 = $win->AddButton("click me!"); -my $button2 = $win->AddButton("click me too!"); + my $vbox = $win->AddVBox(0, 0); -my $tree = $win->AddTree(); -my $col1 = Etk::Tree::Col->new($tree, "Col 1", - Etk::Tree::Model::Text->new($tree), 90); -my $col2 = Etk::Tree::Col->new($tree, "Col 2", - Etk::Tree::Model::ProgressBar->new($tree), "90"); +$vbox->AddButton("click me!")->SignalConnect("clicked", + \&click_cb1, "click_cb1_data")->PackStart(1, 1, 5); +$vbox->AddButton("click me too!")->SignalConnect("clicked", + \&click_cb2)->PackStart(0, 0, 2); +my $tree = $vbox->AddTree(); + +$tree->AddCols( + ["Col 1", "Text", 90], + ["Col 2", "ProgressBar", 90] +); $tree->SizeRequestSet(320, 400); $tree->Build(); -my $row1 = $tree->Append(); -$row1->FieldTextSet($col1, "Weee!"); -$row1->FieldProgressBarSet($col2, 0.5, " Loading ... "); - -my $row2 = $tree->Append(); -$row2->FieldTextSet($col1, "Second line"); -$row2->FieldProgressBarSet($col2, 0.2, " Reading ... "); - -$vbox->PackStart($button1, 1, 1, 5); -$vbox->PackStart($button2, 0, 0, 2); -$vbox->PackStart($tree, 0, 0, 0); +$tree->AddRows( + [ + "Weee!!!", [ 0.5, " Loading ... "] + ], + [ + "Second Line", [ 0.2, " Reading ... "] + ] +); -$win->Add($vbox); +$tree->PackStart(0, 0, 0); $win->ShowAll(); - -$button1->SignalConnect("clicked", \&click_cb1, "click_cb1_data"); -$button2->SignalConnect("clicked", \&click_cb2); $win->SignalConnect("delete_event", \&quit_cb); Etk::Main::Run(); @@ -41,9 +36,10 @@ sub click_cb1 { + my $self = shift; my $data = shift; print "click_cb1! (data=$data)\n"; - my ($padding, $expand, $fill, $pack_end) = $vbox->ChildPackingGet($button1); + my ($padding, $expand, $fill, $pack_end) = $vbox->ChildPackingGet($self); print "padding = $padding, expand = $expand, fill = $fill, pack_end = $pack_end\n"; } ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs