cvs: php-gtk /generator generator.php gtk.overrides override.php templates.php

From: Date: Mon, 05 Mar 2001 00:21:43 +0000
Subject: cvs: php-gtk /generator generator.php gtk.overrides override.php templates.php
Groups: php.gtk 
Request: Send a blank email to php-gtk+get-255@lists.php.net to get a copy of this message
andrei Sun Mar 4 16:21:43 2001 EDT Modified files: /php-gtk/generator generator.php gtk.overrides override.php templates.php Log: * Implemented support for menu creation via GtkItemFactory. * Implemented get_type() methods for every Gtk* class. * Enhanced overrides parsing to allow setting functions as class methods or moving methods from one class to another. * Renamed php_gtk_check_callable() to php_gtk_is_callable(). * Added an extra parameter to php_gtk_is_callable() that is filled in with the name of the callable. Now just need to use it everywhere. * Added php_gtk_parse_args_hash() internal function.

Index: php-gtk/generator/generator.php diff -u php-gtk/generator/generator.php:1.10 php-gtk/generator/generator.php:1.11 --- php-gtk/generator/generator.php:1.10 Sat Mar 3 10:42:16 2001 +++ php-gtk/generator/generator.php Sun Mar 4 16:21:42 2001 @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* $Id: generator.php,v 1.10 2001/03/03 18:42:16 fmk Exp $ */ +/* $Id: generator.php,v 1.11 2001/03/05 00:21:42 andrei Exp $ */ /* * Significant portions of this generator are based on the pygtk code generator @@ -335,7 +335,8 @@ { global $function_entry_tpl, $register_getter_tpl, - $init_class_tpl; + $init_class_tpl, + $get_type_tpl; foreach ($this->parser->objects as $object) { $object_module = strtolower($object->in_module); @@ -381,6 +382,14 @@ } } + /* insert get_type() as class method */ + $lclass = strtolower(substr(convert_typename($object->c_name), 1)); + $function_entry .= sprintf($function_entry_tpl, + 'get_type', + $lclass . '_get_type', + 'NULL'); + fwrite($fp, sprintf($get_type_tpl, $lclass, $lclass)); + foreach ($this->parser->find_methods($object) as $method) { if ($this->overrides->is_overriden($method->c_name)) { list($method_name, $method_override) = $this->overrides->get_override($method->c_name); @@ -402,6 +411,20 @@ } } + + if (isset($this->overrides->extra_methods[$object->c_name])) { + foreach ($this->overrides->extra_methods[$object->c_name] as $method_cname => $method_data) { + list($method_name, $method_override) = $method_data; + fwrite($fp, $method_override . "\n"); + if (!isset($method_name)) + $method_name = $method_cname; + $function_entry .= sprintf($function_entry_tpl, + strtolower($method_name), + strtolower($method_cname), + 'NULL'); + } + } + $function_entry .= $this->function_entry_end; fwrite($fp, $function_entry); Index: php-gtk/generator/gtk.overrides diff -u php-gtk/generator/gtk.overrides:1.20 php-gtk/generator/gtk.overrides:1.21 --- php-gtk/generator/gtk.overrides:1.20 Sat Mar 3 10:42:16 2001 +++ php-gtk/generator/gtk.overrides Sun Mar 4 16:21:42 2001 @@ -187,7 +187,7 @@ if (!php_gtk_parse_args(2, "iV", &interval, &func)) return; - if (!php_gtk_check_callable(func)) { + if (!php_gtk_is_callable(func, NULL)) { php_error(E_WARNING, "%s() expects argument 2 to be callable", get_active_function_name()); return; @@ -216,7 +216,7 @@ if (!php_gtk_parse_args(1, "V", &func)) return; - if (!php_gtk_check_callable(func)) { + if (!php_gtk_is_callable(func, NULL)) { php_error(E_WARNING, "%s() expects argument 1 to be callable", get_active_function_name()); return; @@ -246,7 +246,7 @@ if (!php_gtk_parse_args(2, "iV", &main_level, &func)) return; - if (!php_gtk_check_callable(func)) { + if (!php_gtk_is_callable(func, NULL)) { php_error(E_WARNING, "%s() expects argument 2 to be callable", get_active_function_name()); return; @@ -275,7 +275,7 @@ if (!php_gtk_parse_args(3, "iiV", &source, &condition, &func)) return; - if (!php_gtk_check_callable(func)) { + if (!php_gtk_is_callable(func, NULL)) { php_error(E_WARNING, "%s() expects argument 3 to be callable", get_active_function_name()); return; @@ -306,7 +306,7 @@ if (!php_gtk_parse_args(2, "sV", &name, &func)) return; - if (!php_gtk_check_callable(func)) { + if (!php_gtk_is_callable(func, NULL)) { php_error(E_WARNING, "%s() expects argument 2 to be callable", get_active_function_name()); return; @@ -346,7 +346,7 @@ add_next_index_zval(method, obj); add_next_index_string(method, func, 1); - if (!php_gtk_check_callable(method)) { + if (!php_gtk_is_callable(method, NULL)) { php_error(E_WARNING, "%s() expects argument 2 to be callable method of argument 3", get_active_function_name()); zval_dtor(method); return; @@ -608,7 +608,7 @@ } if (destroy_action) { - if (!php_gtk_check_callable(destroy_action)) { + if (!php_gtk_is_callable(destroy_action, NULL)) { php_error(E_WARNING, "%s() expects argument 2 to be callable", get_active_function_name()); return; @@ -621,7 +621,7 @@ } if (ok_action) { - if (!php_gtk_check_callable(ok_action)) { + if (!php_gtk_is_callable(ok_action, NULL)) { php_error(E_WARNING, "%s() expects argument 3 to be callable", get_active_function_name()); return; @@ -636,7 +636,7 @@ GTK_SIGNAL_FUNC(gtk_widget_destroy), (gpointer)wrapped_obj); if (cancel_action) { - if (!php_gtk_check_callable(cancel_action)) { + if (!php_gtk_is_callable(cancel_action, NULL)) { php_error(E_WARNING, "%s() expects argument 4 to be callable", get_active_function_name()); return; @@ -963,4 +963,71 @@ for (tmp = children; tmp; tmp = tmp->next) add_next_index_zval(return_value, php_gtk_new(tmp->data)); g_list_free(children); -} \ No newline at end of file +} +%% +override gtk_item_factory_create_items +static void item_factory_callback(zval *callback, guint action, GtkWidget *widget) +{ + zval *retval = NULL; + zval *action_arg, *widget_arg; + zval **args[2]; + char *callable_name = NULL; + ELS_FETCH(); + + if (!php_gtk_is_callable(callback, &callable_name)) { + php_error(E_WARNING, "unable to call item factory callback %s", callable_name); + g_free(callable_name); + return; + } + + MAKE_STD_ZVAL(action_arg); + ZVAL_LONG(action_arg, action); + widget_arg = php_gtk_new((GtkObject *)widget); + args[0] = &action_arg; + args[1] = &widget_arg; + + call_user_function_ex(EG(function_table), NULL, callback, &retval, 2, args, 1, NULL); + zval_ptr_dtor(&widget_arg); + if (retval) + zval_ptr_dtor(&retval); +} + +PHP_FUNCTION(wrap_gtk_item_factory_create_items) +{ + zval *list, **item, *callback; + GtkItemFactoryEntry entry; + GtkItemFactory *factory; + int i = 0; + + NOT_STATIC_METHOD(); + + if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "a", &list)) + return; + + factory = GTK_ITEM_FACTORY(PHP_GTK_GET(this_ptr)); + zend_hash_internal_pointer_reset(Z_ARRVAL_P(list)); + while (zend_hash_get_current_data(Z_ARRVAL_P(list), (void**)&item) == SUCCESS) { + if (Z_TYPE_PP(item) != IS_ARRAY || + !php_gtk_parse_args_hash(*item, "ssVis", &entry.path, + &entry.accelerator, &callback, + &entry.callback_action, &entry.item_type)) { + php_error(E_WARNING, "%s() was unable to parse item #%d in the input array", + get_active_function_name(), i+1); + return; + } + + if (Z_TYPE_P(callback) == IS_NULL) + entry.callback = NULL; + else { + zval_add_ref(&callback); + entry.callback = (GtkItemFactoryCallback)item_factory_callback; + } + + gtk_item_factory_create_item(factory, &entry, callback, 1); + + i++; + zend_hash_move_forward(Z_ARRVAL_P(list)); + } + + RETURN_TRUE; +} Index: php-gtk/generator/override.php diff -u php-gtk/generator/override.php:1.6 php-gtk/generator/override.php:1.7 --- php-gtk/generator/override.php:1.6 Sat Mar 3 11:13:22 2001 +++ php-gtk/generator/override.php Sun Mar 4 16:21:42 2001 @@ -19,12 +19,13 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* $Id: override.php,v 1.6 2001/03/03 19:13:22 fmk Exp $ */ +/* $Id: override.php,v 1.7 2001/03/05 00:21:42 andrei Exp $ */ class Overrides { var $ignores = array(); var $glob_ignores = array(); var $overrides = array(); + var $extra_methods = array(); function Overrides($file_name = null) { @@ -70,12 +71,15 @@ break; case 'override': - list($func_cname) = $words; + $func_cname = $words[0]; if (isset($words[1])) $func_name = $words[1]; else $func_name = $func_cname; - $this->overrides[$func_cname] = array($func_name, $rest); + if (isset($words[2])) + $this->extra_methods[$words[2]][$func_cname] = array($func_name, $rest); + else + $this->overrides[$func_cname] = array($func_name, $rest); break; } } Index: php-gtk/generator/templates.php diff -u php-gtk/generator/templates.php:1.6 php-gtk/generator/templates.php:1.7 --- php-gtk/generator/templates.php:1.6 Sat Mar 3 10:42:16 2001 +++ php-gtk/generator/templates.php Sun Mar 4 16:21:42 2001 @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* $Id: templates.php,v 1.6 2001/03/03 18:42:16 fmk Exp $ */ +/* $Id: templates.php,v 1.7 2001/03/05 00:21:42 andrei Exp $ */ $function_tpl = " PHP_FUNCTION(wrap_%s) @@ -88,5 +88,14 @@ }\n\n"; $init_class_tpl = "\n\tINIT_OVERLOADED_CLASS_ENTRY(ce, \"%s\", %s_functions, NULL, %s, NULL);\n"; + +$get_type_tpl = " +PHP_FUNCTION(wrap_%s_get_type) +{ + if (!php_gtk_parse_args(ZEND_NUM_ARGS(), \"\")) + return; + + RETURN_LONG(%s_get_type()); +}\n\n"; ?>
« previous php.gtk (#255) next »