com gtk/php-gtk: Implement GtkTreeModel::foreach(): TODO2 ext/gtk+/gtktreeview.overrides

[email protected] (David Soria Parra) Sat, 01 Oct 2005 21:29:28 +0000
Newsgroups php.gtk.cvs
Message-ID <[email protected]>
Commit:    28dcb5bda4b38797e2c6dd1d9411546d87312dd3=0AAuthor:    Andrei Zmi=
evski <[email protected]>         Sat, 1 Oct 2005 21:29:28 +0000=0AParents:   =
4446e13c0bfc2649741ca43c1ae996c164c6451c=0ABranches:  master=0A=0ALink:    =
   http://git.php.net/?p=3Dgtk/php-gtk.git;a=3Dcommitdiff;h=3D28dcb5bda4b38=
797e2c6dd1d9411546d87312dd3=0A=0ALog:=0AImplement GtkTreeModel::foreach()=
=0A=0AChanged paths:=0A  M  TODO2=0A  M  ext/gtk+/gtktreeview.overrides=0A=
=0A=0ADiff:=0A28dcb5bda4b38797e2c6dd1d9411546d87312dd3=0Adiff --git a/TODO2=
 b/TODO2=0Aindex 61069c6..c41304e 100644=0A--- a/TODO2=0A+++ b/TODO2=0A@@ -=
26,7 +26,6 @@ Classes and Functions=0A =09implement property access (read/w=
rite)=0A * GtkListStore=0A * GtkTreeModel=0A-=09* foreach()=0A * GtkTreeSto=
re=0A =09Some iterator functions as get_iter() are expecting a GBoxed param=
eter.=0A * GtkTreeView=0Adiff --git a/ext/gtk+/gtktreeview.overrides b/ext/=
gtk+/gtktreeview.overrides=0Aindex c78fd79..4ac6914 100644=0A--- a/ext/gtk+=
/gtktreeview.overrides=0A+++ b/ext/gtk+/gtktreeview.overrides=0A@@ -464,6 +=
464,76 @@ PHP_METHOD=0A     }=0A }=0A =0A+%%=0A+override gtk_tree_model_for=
each=0A+=0A+gboolean phpg_tree_model_foreach_marshal(GtkTreeModel *model,=
=0A+                                         GtkTreePath  *path,=0A+       =
                                  GtkTreeIter  *iter,=0A+                  =
                       gpointer      data)=0A+{=0A+    phpg_cb_data_t *cbd =
=3D (phpg_cb_data_t *) data;=0A+    zval *retval =3D NULL;=0A+    zval ***a=
rgs =3D NULL;=0A+    int n_args =3D 0;=0A+    char *callback_name;=0A+    z=
val *php_model =3D NULL, *php_path =3D NULL, *php_iter =3D NULL;=0A+    gbo=
olean ret;=0A+    TSRMLS_FETCH();=0A+=0A+    if (!zend_is_callable(cbd->cal=
lback, 0, &callback_name)) {=0A+        php_error(E_WARNING, "Unable to inv=
oke callback '%s' specified in %s on line %ld", callback_name, cbd->src_fil=
ename, cbd->src_lineno);=0A+        efree(callback_name);=0A+        return=
 TRUE;=0A+    }=0A+=0A+    phpg_gobject_new(&php_model,       (GObject*)mod=
el       TSRMLS_CC);=0A+    phpg_tree_path_to_zval(path, &php_path TSRMLS_C=
C);=0A+    phpg_gboxed_new(&php_iter, GTK_TYPE_TREE_ITER, iter, TRUE, TRUE =
TSRMLS_CC);=0A+=0A+    args =3D php_gtk_hash_as_array_offset(cbd->user_args=
, 3, &n_args);=0A+    args[0] =3D &php_model;=0A+    args[1] =3D &php_path;=
=0A+    args[2] =3D &php_iter;=0A+=0A+    call_user_function_ex(EG(function=
_table), NULL, cbd->callback, &retval, n_args, args, 0, NULL TSRMLS_CC);=0A=
+=0A+    zval_ptr_dtor(&php_model);=0A+    zval_ptr_dtor(&php_path);=0A+   =
 zval_ptr_dtor(&php_iter);=0A+=0A+    if (retval) {=0A+        ret =3D zend=
_is_true(retval);=0A+        zval_ptr_dtor(&retval);=0A+    } else {=0A+   =
     ret =3D TRUE;=0A+    }=0A+=0A+    efree(callback_name);=0A+    efree(a=
rgs);=0A+=0A+    return ret;=0A+}=0A+=0A+PHP_METHOD=0A+{=0A+    zval *callb=
ack, *extra;=0A+    phpg_cb_data_t *cb_data;=0A+=0A+    NOT_STATIC_METHOD()=
;=0A+=0A+    if (!php_gtk_parse_varargs(ZEND_NUM_ARGS(), 1, &extra, "V", &c=
allback)) {=0A+        return;=0A+    }=0A+=0A+    zval_add_ref(&callback);=
=0A+    cb_data =3D phpg_cb_data_new(callback, extra TSRMLS_CC);=0A+=0A+   =
 gtk_tree_model_foreach(GTK_TREE_MODEL(PHPG_GOBJECT(this_ptr)),=0A+        =
                   phpg_tree_model_foreach_marshal, cb_data);=0A+    phpg_c=
b_data_destroy(cb_data);=0A+}=0A+=0A %% }}}=0A =0A %% {{{ GtkTreeSelection=
=0A