Enlightenment CVS committal

Author  : leviathan
Project : e17
Module  : proto

Dir     : e17/proto/etk-perl


Modified Files:
        Etk.xs EtkTypes.c EtkTypes.h typemap 


Log Message:
- Fixes to list stuff which now work.
- more tests

===================================================================
RCS file: /cvs/e/e17/proto/etk-perl/Etk.xs,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -3 -r1.34 -r1.35
--- Etk.xs      30 Jul 2006 19:22:31 -0000      1.34
+++ Etk.xs      4 Aug 2006 14:50:37 -0000       1.35
@@ -558,27 +558,6 @@
        return hv;
 }      
 
-AV *
-evas_list_to_perl(Evas_List * list) 
-{
-       dSP;
-       AV * av;
-       Evas_List * l;
-
-       ENTER;
-       SAVETMPS;
-       
-       av = newAV();
-       for (l = list; l; l = l->next)
-               av_push(av, newSViv((IV)(l->data)));
-       
-       PUTBACK;
-       FREETMPS;
-       LEAVE;
-
-       return av;
-}
-
 MODULE = Etk           PACKAGE = Etk   PREFIX = etk_
 
 INCLUDE: const-xs.inc
@@ -1324,20 +1303,9 @@
        float   xalign
        float   yalign
        
-void
+Evas_List *
 etk_container_children_get(container)
        Etk_Container   *container
-       PPCODE:
-       Evas_List * children;
-       AV * av;
-       int i;
-       
-       children = etk_container_children_get(container);
-       av = evas_list_to_perl(children);
-       for (i=0; i<=av_len(av); i++)
-       {
-               XPUSHs(sv_2mortal(newSViv(SvIV(av_shift(av)))));
-       }
 
 Etk_Bool
 etk_container_is_child(container, widget)
@@ -1566,7 +1534,7 @@
        char *  text
 
 
-MODULE = Etk::Filechooser      PACKAGE = Etk::Filechooser      PREFIX = 
etk_filechooser_
+MODULE = Etk::Filechooser      PACKAGE = Etk::Filechooser      PREFIX = 
etk_filechooser_widget_
        
 const char *
 etk_filechooser_widget_current_folder_get(filechooser_widget)
@@ -1603,22 +1571,9 @@
        Etk_Filechooser_Widget *        widget
        PPCODE:
        Evas_List * list;
-       AV * av;
-       int i;
 
        list = etk_filechooser_widget_selected_files_get(widget);
-       av = evas_list_to_perl(list);
-       for (i=0; i<=av_len(av); i++) 
-       {
-               SV * sv;
-               const char * filename;
-
-               filename = (const char *)SvIV(av_shift(av));
-               sv = newSVpv(filename, strlen(filename));
-
-               XPUSHs(sv_2mortal(sv));
-       }
-
+       XPUSHs(sv_2mortal(newSVCharEvasList(list)));
 
 Etk_Bool
 etk_filechooser_widget_show_hidden_get(filechooser_widget)
@@ -1777,11 +1732,17 @@
 SV *
 etk_iconbox_icon_data_get(icon)
        Etk_Iconbox_Icon *      icon
+       CODE:
+       RETVAL = newSVsv((SV*)etk_iconbox_icon_data_get(icon));
+       OUTPUT:
+       RETVAL
 
 void
 etk_iconbox_icon_data_set(icon, data)
        Etk_Iconbox_Icon *      icon
        SV *    data
+       CODE:
+       etk_iconbox_icon_data_set(icon, newSVsv(data));
 
 void
 etk_iconbox_icon_del(icon)
@@ -1872,7 +1833,7 @@
        Etk_Bool fill;
        Etk_Bool keep_aspect_ratio;
 
-       etk_iconbox_model_icon_geometry(model, &x, &y, &width, &height,
+       etk_iconbox_model_icon_geometry_get(model, &x, &y, &width, &height,
                                        &fill, &keep_aspect_ratio);
         EXTEND(SP, 6);
         PUSHs(sv_2mortal(newSViv(x)));
@@ -1893,7 +1854,7 @@
        Etk_Bool        keep_aspect_ratio
 
 void
-etk_iconbox_model_label_geometry_get(model, x, y, width, height, xalign, 
yalign)
+etk_iconbox_model_label_geometry_get(model)
        Etk_Iconbox_Model *     model
        PPCODE:
        int x;
@@ -1910,8 +1871,8 @@
         PUSHs(sv_2mortal(newSViv(y)));
         PUSHs(sv_2mortal(newSViv(width)));
         PUSHs(sv_2mortal(newSViv(height)));
-        PUSHs(sv_2mortal(newSViv(xalign)));
-        PUSHs(sv_2mortal(newSViv(yalign)));    
+        PUSHs(sv_2mortal(newSVnv(xalign)));
+        PUSHs(sv_2mortal(newSVnv(yalign)));    
 
 
 void
@@ -1925,8 +1886,13 @@
        float   yalign
 
 Etk_Iconbox_Model *
-etk_iconbox_model_new(iconbox)
+new(class, iconbox)
+       SV * class
        Etk_Iconbox *   iconbox
+       CODE:
+       RETVAL = etk_iconbox_model_new(iconbox);
+       OUTPUT:
+       RETVAL
 
 MODULE = Etk::Image    PACKAGE = Etk::Image    PREFIX = etk_image_
        
@@ -2069,7 +2035,7 @@
 void
 etk_label_set(label, text)
        Etk_Label *     label
-       char *  text
+       const char *    text
 
 
 MODULE = Etk::Main     PACKAGE = Etk::Main     PREFIX = etk_main_
@@ -2096,26 +2062,8 @@
 etk_main_toplevel_widget_remove(widget)
        Etk_Toplevel_Widget *   widget
 
-void
+Evas_List *
 etk_main_toplevel_widgets_get()
-       PPCODE:
-       Evas_List * list;
-       AV * av;
-       int i;
-
-       list = etk_main_toplevel_widgets_get();
-       av = evas_list_to_perl(list);
-
-       for (i = av_len(av); i>=0; i--)
-       {
-               SV * sv;
-               sv = newRV(newSViv(0));
-               /* FIXME */
-               sv_setref_iv(sv, "Etk_WidgetPtr", SvIV(av_shift(av)));
-
-               XPUSHs(sv_2mortal(sv));
-       }
-       av_undef(av);
 
 
 MODULE = Etk::Menu::Bar        PACKAGE = Etk::Menu::Bar        PREFIX = 
etk_menu_bar_
@@ -2338,27 +2286,9 @@
        Etk_Menu_Item * item
        int     position
 
-void
+Evas_List *
 etk_menu_shell_items_get(menu_shell)
        Etk_Menu_Shell *        menu_shell
-       PPCODE:
-       Evas_List * list;
-       AV * av;
-       int i;
-
-       list = etk_menu_shell_items_get(menu_shell);
-       av = evas_list_to_perl(list);
-
-        for (i = av_len(av) ; i >=0 ; i--)
-        {
-               SV * sv;
-               sv = newRV(newSViv(0));
-              /* FIXME */
-               sv_setref_iv(sv, "Etk_WidgetPtr", SvIV(av_shift(av)));
-   
-               XPUSHs(sv_2mortal(sv));
-        }
-         av_undef(av);  
 
 void
 etk_menu_shell_prepend(menu_shell, item)
@@ -3548,25 +3478,9 @@
 etk_tree_selected_row_get(tree)
        Etk_Tree *      tree
 
-void 
+Evas_List * 
 etk_tree_selected_rows_get(tree)
        Etk_Tree *      tree
-       PPCODE:
-       Evas_List * list;
-       AV * av;
-       int i;
-
-       list = etk_tree_selected_rows_get(tree);
-       av = evas_list_to_perl(list);
-       for (i=0; i<=av_len(av); i++) 
-       {
-               SV * sv;
-               sv = newRV(newSViv(0));
-               /* FIXME */
-               sv_setref_iv(sv, "Etk_WidgetPtr", SvIV(av_shift(av)));
-
-               XPUSHs(sv_2mortal(sv));
-       }
 
 void
 etk_tree_sort(tree, compare_cb, ascendant, col, data)
@@ -4257,23 +4171,8 @@
        Etk_Widget *    widget
        Etk_Bool        on
 
-void
+Evas_List *
 etk_widget_dnd_dest_widgets_get()
-       PPCODE:
-       AV * av;
-       int i;
-       
-       av = evas_list_to_perl(etk_widget_dnd_dest_widgets_get());
-       for (i = av_len(av) ; i >=0 ; i--)
-       {
-               SV * sv;
-               sv = newRV(newSViv(0));
-               sv_setref_iv(sv, "Etk_WidgetPtr", SvIV(av_shift(av)));
-               
-               XPUSHs(sv_2mortal(sv));
-       }
-       av_undef(av);
-
 
 void
 etk_widget_dnd_drag_data_set(widget, types, num_types, data, data_size)
===================================================================
RCS file: /cvs/e/e17/proto/etk-perl/EtkTypes.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- EtkTypes.c  30 Jul 2006 19:22:31 -0000      1.1
+++ EtkTypes.c  4 Aug 2006 14:50:37 -0000       1.2
@@ -86,6 +86,8 @@
                __("Entry", "Widget");
                __("Filechooser", "Widget");
                __("Iconbox", "Widget");
+                       __("Iconbox::Model", "Iconbox");
+                       __("Iconbox::Icon", "Iconbox");
                __("Image", "Widget");
                __("Label", "Widget");
                __("Menu::Shell", "Widget");
@@ -219,6 +221,55 @@
        return newRV((SV*)hv);
 }
 
+Evas_List * SvEvasList(SV *sv) {
+
+       AV * av;
+       Evas_List * list;
+       int i;
+       
+       if (!SvROK(sv)) {
+               printf("cannot convert to Evas_List. SV is not a reference\n");
+               return NULL;
+       }
+
+       av = (AV*)SvRV(sv);
+       list = NULL;
+       for (i=0; i<=av_len(av); i++) 
+               list = evas_list_append(list, *av_fetch(av, i, 0));
+
+       return list;
+
+}
+
+SV * newSVEvasList(Evas_List *list) {
+
+       AV * av;
+       SV * ret;
+       Evas_List * l;
+
+       av = newAV();
+       for (l = list; l; l = l->next) 
+               av_push(av, newSVEtkWidgetPtr((Etk_Widget *)(l->data)));
+
+       return newRV((SV*)av);
+
+}
+
+SV * newSVCharEvasList(Evas_List *list) {
+
+       AV * av;
+       SV * ret;
+       Evas_List * l;
+
+       av = newAV();
+       for (l = list; l; l = l->next) 
+               av_push(av, newSVpv((char *)(l->data), 0));
+
+       return newRV((SV*)av);
+
+}
+
+
 SV * newSVEtkAlignmentPtr(Etk_Alignment *o) { return newSVObj(o, 
"Etk::Alignment", 0); }
 Etk_Alignment * SvEtkAlignmentPtr(SV *data) { return SvObj(data, 
"Etk::Alignment"); }
 SV * newSVEtkBinPtr(Etk_Bin *o) { return newSVObj(o, "Etk::Bin", 0); }
@@ -238,6 +289,7 @@
 SV * newSVEtkContainerPtr(Etk_Container *o) { return newSVObj(o, 
"Etk::Container", 0); }
 Etk_Container * SvEtkContainerPtr(SV *data) { return SvObj(data, 
"Etk::Container"); }
 SV * newSVEtkDialogPtr(Etk_Dialog *o) { return newSVObj(o, "Etk::Dialog", 0); }
+Etk_Dialog * SvEtkDialogPtr(SV *data) { return SvObj(data, "Etk::Dialog"); }
 SV * newSVEtkDragPtr(Etk_Drag *o) { return newSVObj(o, "Etk::Drag", 0); }
 Etk_Drag * SvEtkDragPtr(SV *data) { return SvObj(data, "Etk::Drag"); }
 SV * newSVEtkEntryPtr(Etk_Entry *o) { return newSVObj(o, "Etk::Entry", 0); }
===================================================================
RCS file: /cvs/e/e17/proto/etk-perl/EtkTypes.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- EtkTypes.h  30 Jul 2006 19:22:31 -0000      1.1
+++ EtkTypes.h  4 Aug 2006 14:50:37 -0000       1.2
@@ -23,6 +23,10 @@
 SV *                   newSVGeometryPtr(Etk_Geometry * geo);
 Etk_Geometry *         SvGeometryPtr(SV * geo);
 
+Evas_List *            SvEvasList(SV *sv);
+SV *                   newSVEvasList(Evas_List *list);
+SV *                   newSVCharEvasList(Evas_List *list);
+
 SV *                   newSVEtkAlignmentPtr(Etk_Alignment *o); 
 Etk_Alignment *                SvEtkAlignmentPtr(SV *data); 
 SV *                   newSVEtkBinPtr(Etk_Bin *o); 
===================================================================
RCS file: /cvs/e/e17/proto/etk-perl/typemap,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- typemap     30 Jul 2006 19:22:31 -0000      1.6
+++ typemap     4 Aug 2006 14:50:37 -0000       1.7
@@ -30,7 +30,7 @@
 Etk_Geometry *                                 T_GEOMETRY_PTR
 Etk_Iconbox *                                  T_PTROBJ_ETK
 Etk_Iconbox_Icon *                             T_PTROBJ_ETK
-Etk_Iconbox_Model *                            T_PTROBJ
+Etk_Iconbox_Model *                            T_PTROBJ_ETK
 Etk_Image *                                    T_PTROBJ_ETK
 Etk_Label *                                    T_PTROBJ_ETK
 Etk_Marshaller                                 T_PTROBJ
@@ -96,7 +96,7 @@
 Etk_Widget *                                   T_PTROBJ_ETK
 Etk_Window *                                   T_PTROBJ_ETK
 Evas *                                         T_PTROBJ_ETK
-Evas_List *                                    T_PTROBJ
+Evas_List *                                    T_PTROBJ_EVAS_LIST
 Evas_List **                                   T_PTROBJ
 Evas_Object *                                  T_PTROBJ_ETK
 const Etk_String *                             T_PTROBJ
@@ -150,6 +150,11 @@
        if (!$arg || !SvOK($arg))
                croak(\"$var is not of type ${ntype}\");
        $var = SvGeometryPtr($arg);
+
+T_TROBJ_EVAS_LIST
+       if (!$arg || !SvOK($arg))
+               croak(\"$var is not of type ${ntype}\");
+       $var = SvEvasList($arg);
        
 
 #############################################################################
@@ -176,3 +181,9 @@
        do {
        $arg = sv_2mortal(newSVGeometryPtr($var));
        } while(0);
+
+T_PTROBJ_EVAS_LIST
+       do {
+       $arg = sv_2mortal(newSVEvasList($var));
+       } while(0);
+



-------------------------------------------------------------------------
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