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

Reply via email to