com gtk/php-gtk: Committing GtkTreeSortable::set_sort_f unc GtkTreeSortable::set_default_sort_func GtkTre eFilterModel constructor GtkTreeFilterModel::set_visi ble_func after applying Andrei's suggestions: e xt/gtk+/gtk.defs ext/gtk+/gtktreeview.overrides
[email protected] (David Soria Parra)
| Newsgroups | php.gtk.cvs |
|---|---|
| Message-ID | <[email protected]> |
Commit: 1daf7764805c9d79f7dda900f356a9774a82b718 Author: Christian Weiske <[email protected]> Fri, 9 Jun 2006 18:19:00 +0000 Parents: 203e28d382564cbb07e9bd9660f212aad0868fa7 Branches: master Link: http://git.php.net/?p=gtk/php-gtk.git;a=commitdiff;h=1daf7764805c9d79f7dda900f356a9774a82b718 Log: Committing GtkTreeSortable::set_sort_func GtkTreeSortable::set_default_sort_func GtkTreeFilterModel constructor GtkTreeFilterModel::set_visible_func after applying Andrei's suggestions Changed paths: M ext/gtk+/gtk.defs M ext/gtk+/gtktreeview.overrides
diff_1daf7764805c9d79f7dda900f356a9774a82b718.txt
(text/plain, 8.4 KB)
1daf7764805c9d79f7dda900f356a9774a82b718
diff --git a/ext/gtk+/gtk.defs b/ext/gtk+/gtk.defs
index 756d0fd..95f2c05 100644
--- a/ext/gtk+/gtk.defs
+++ b/ext/gtk+/gtk.defs
@@ -17632,6 +17632,21 @@
(return-type "GType")
)
+(define-function gtk_tree_model_filter_new
+ (is-constructor-of "GtkTreeModelFilter")
+ (c-name "gtk_tree_model_filter_new")
+ (caller-owns-return #t)
+ (return-type "GtkTreeModel*")
+ (parameters
+ '("GtkTreeModel*" "child-model")
+ '("GtkTreePath*" "virtual-root")
+ )
+ (properties
+ '("child-model")
+ '("virtual-root")
+ )
+)
+
(define-method clear_cache
(of-object "GtkTreeModelFilter")
(c-name "gtk_tree_model_filter_clear_cache")
diff --git a/ext/gtk+/gtktreeview.overrides b/ext/gtk+/gtktreeview.overrides
index 2b99aa6..ff0ebdc 100644
--- a/ext/gtk+/gtktreeview.overrides
+++ b/ext/gtk+/gtktreeview.overrides
@@ -11,6 +11,8 @@ static zval* phpg_gtktreemodel_read_dimension_handler(zval *object, zval *offset
static int phpg_gtktreemodel_has_dimension_handler(zval *object, zval *offset, int check_empty TSRMLS_DC);
static void phpg_gtktreemodel_write_dimension_handler(zval *object, zval *offset, zval *value TSRMLS_DC);
static int phpg_gtktreemodel_count_elements_handler(zval *object, long *count TSRMLS_DC);
+static gint phpg_tree_iter_compare_func_marshal(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer data);
+static gboolean phpg_tree_model_filter_visible_func_marshal(GtkTreeModel *model, GtkTreeIter *iter, gpointer data);
static gboolean phpg_tree_view_row_separator_func_marshal (GtkTreeModel *model, GtkTreeIter *iter, gpointer data);
%%
@@ -1338,6 +1340,122 @@ PHP_METHOD
%% }}}
+%% {{{ GtkTreeModelFilter
+
+%%
+add-arginfo GtkTreeModelFilter __construct
+static
+ZEND_BEGIN_ARG_INFO_EX(ARGINFO_NAME, 0, 0, 1)
+ ZEND_ARG_OBJ_INFO(0, model, GtkTreeModel, 1)
+ ZEND_ARG_INFO(0, root)
+ZEND_END_ARG_INFO();
+
+%%
+override gtk_tree_model_filter_new
+PHP_METHOD
+{
+ GObject *wrapped_obj;
+ GtkTreePath *path = NULL;
+ zval *php_model = NULL, *php_path = NULL;
+
+ if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "V|s", &php_model, gtktreemodel_ce, &php_path))
+ return;
+
+ if (php_path && phpg_tree_path_from_zval(php_path, &path TSRMLS_CC) == FAILURE) {
+ php_error(E_WARNING, "%s::%s() expects path argument to be a valid tree path specification", get_active_class_name(NULL TSRMLS_CC), get_active_function_name(TSRMLS_C));
+ return;
+ }
+
+
+ wrapped_obj = g_object_new(phpg_gtype_from_zval(this_ptr),
+ "child-model", GTK_TREE_MODEL(PHPG_GOBJECT(php_model)),
+ "virtual-root", path,
+ NULL);
+
+ if (path) {
+ gtk_tree_path_free(path);
+ }
+
+ if (!wrapped_obj) {
+ PHPG_THROW_CONSTRUCT_EXCEPTION(GtkTreeModelFilter);
+ }
+
+ phpg_gobject_set_wrapper(this_ptr, wrapped_obj TSRMLS_CC);
+}
+
+%%
+add-arginfo GtkTreeModelFilter set_visible_func
+static
+ZEND_BEGIN_ARG_INFO(ARGINFO_NAME, 0)
+ ZEND_ARG_INFO(0, callback)
+ZEND_END_ARG_INFO();
+
+%%
+override gtk_tree_model_filter_set_visible_func
+static gboolean phpg_tree_model_filter_visible_func_marshal(GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
+{
+ phpg_cb_data_t *cbd = (phpg_cb_data_t *) data;
+ zval *retval = NULL;
+ zval ***args = NULL;
+ int n_args = 0;
+ char *callback_name;
+ zval *php_model = NULL, *php_iter = NULL;
+ gboolean show = TRUE;
+ TSRMLS_FETCH();
+
+ if (!zend_is_callable(cbd->callback, 0, &callback_name)) {
+ php_error(E_WARNING, "Unable to invoke callback '%s' specified in %s on line %ld", callback_name, cbd->src_filename, cbd->src_lineno);
+ efree(callback_name);
+ return 0;
+ }
+
+ phpg_gobject_new(&php_model, (GObject*)model TSRMLS_CC);
+ phpg_gboxed_new(&php_iter, GTK_TYPE_TREE_ITER, iter, TRUE, TRUE TSRMLS_CC);
+
+ args = php_gtk_hash_as_array_offset(cbd->user_args, 2, &n_args);
+ args[0] = &php_model;
+ args[1] = &php_iter;
+
+ call_user_function_ex(EG(function_table), NULL, cbd->callback, &retval, n_args, args, 0, NULL TSRMLS_CC);
+
+ zval_ptr_dtor(&php_model);
+ zval_ptr_dtor(&php_iter);
+
+ if (retval) {
+ show = zend_is_true(retval);
+ zval_ptr_dtor(&retval);
+ } else {
+ show = TRUE;
+ }
+
+ phpg_handle_marshaller_exception(TSRMLS_C);
+
+ efree(callback_name);
+ efree(args);
+
+ return show;
+}
+
+PHP_METHOD
+{
+ zval *callback, *extra;
+ phpg_cb_data_t *cb_data;
+
+ NOT_STATIC_METHOD();
+
+ if (!php_gtk_parse_varargs(ZEND_NUM_ARGS(), 1, &extra, "V", &callback))
+ return;
+
+ zval_add_ref(&callback);
+ cb_data = phpg_cb_data_new(callback, extra TSRMLS_CC);
+
+ gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(PHPG_GOBJECT(this_ptr)),
+ (GtkTreeModelFilterVisibleFunc)phpg_tree_model_filter_visible_func_marshal,
+ cb_data, phpg_cb_data_destroy);
+}
+
+%% }}}
+
%% {{{ GtkTreeSelection
%%
@@ -1406,6 +1524,117 @@ PHP_METHOD
%% }}}
+%% {{{ GtkTreeSortable
+
+%%
+add-arginfo GtkTreeSortable set_default_sort_func
+static
+ZEND_BEGIN_ARG_INFO(ARGINFO_NAME, 0)
+ ZEND_ARG_INFO(0, callback)
+ZEND_END_ARG_INFO();
+
+%%
+override gtk_tree_sortable_set_default_sort_func
+
+PHP_METHOD
+{
+ zval *callback, *extra;
+ phpg_cb_data_t *cb_data;
+
+ NOT_STATIC_METHOD();
+
+ if (!php_gtk_parse_varargs(ZEND_NUM_ARGS(), 1, &extra, "V", &callback))
+ return;
+
+ zval_add_ref(&callback);
+ cb_data = phpg_cb_data_new(callback, extra TSRMLS_CC);
+
+ gtk_tree_sortable_set_default_sort_func(GTK_TREE_SORTABLE(PHPG_GOBJECT(this_ptr)),
+ (GtkTreeIterCompareFunc)phpg_tree_iter_compare_func_marshal,
+ cb_data, phpg_cb_data_destroy);
+}
+
+%%
+add-arginfo GtkTreeSortable set_sort_func
+static
+ZEND_BEGIN_ARG_INFO(ARGINFO_NAME, 0)
+ ZEND_ARG_INFO(0, column)
+ ZEND_ARG_INFO(0, callback)
+ZEND_END_ARG_INFO();
+
+%%
+override gtk_tree_sortable_set_sort_func
+
+static gint phpg_tree_iter_compare_func_marshal(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer data)
+{
+ phpg_cb_data_t *cbd = (phpg_cb_data_t *) data;
+ zval *retval = NULL;
+ zval ***args = NULL;
+ int n_args = 0;
+ char *callback_name;
+ zval *php_model = NULL, *php_iter_a = NULL, *php_iter_b = NULL;
+ gint compared = 0;
+ TSRMLS_FETCH();
+
+ if (!zend_is_callable(cbd->callback, 0, &callback_name)) {
+ php_error(E_WARNING, "Unable to invoke callback '%s' specified in %s on line %ld", callback_name, cbd->src_filename, cbd->src_lineno);
+ efree(callback_name);
+ return 0;
+ }
+
+ phpg_gobject_new(&php_model, (GObject*)model TSRMLS_CC);
+ phpg_gboxed_new(&php_iter_a, GTK_TYPE_TREE_ITER, a, TRUE, TRUE TSRMLS_CC);
+ phpg_gboxed_new(&php_iter_b, GTK_TYPE_TREE_ITER, b, TRUE, TRUE TSRMLS_CC);
+
+ args = php_gtk_hash_as_array_offset(cbd->user_args, 3, &n_args);
+ args[0] = &php_model;
+ args[1] = &php_iter_a;
+ args[2] = &php_iter_b;
+
+ call_user_function_ex(EG(function_table), NULL, cbd->callback, &retval, n_args, args, 0, NULL TSRMLS_CC);
+
+ zval_ptr_dtor(&php_model);
+ zval_ptr_dtor(&php_iter_a);
+ zval_ptr_dtor(&php_iter_b);
+
+ if (retval) {
+ convert_to_long(retval);
+ compared = Z_LVAL_P(retval);
+ zval_ptr_dtor(&retval);
+ } else {
+ compared = 0;
+ }
+
+ phpg_handle_marshaller_exception(TSRMLS_C);
+
+ efree(callback_name);
+ efree(args);
+
+ return compared;
+}
+
+PHP_METHOD
+{
+ gint sort_column_id;
+ zval *callback, *extra;
+ phpg_cb_data_t *cb_data;
+
+ NOT_STATIC_METHOD();
+
+ if (!php_gtk_parse_varargs(ZEND_NUM_ARGS(), 2, &extra, "iV", &sort_column_id, &callback))
+ return;
+
+ zval_add_ref(&callback);
+ cb_data = phpg_cb_data_new(callback, extra TSRMLS_CC);
+
+ gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(PHPG_GOBJECT(this_ptr)),
+ sort_column_id,
+ (GtkTreeIterCompareFunc)phpg_tree_iter_compare_func_marshal,
+ cb_data, phpg_cb_data_destroy);
+}
+
+%% }}}
+
%% {{{ GtkTreeView
%%