Re: Re: cvs: php-gtk-doc /manual/en/reference/gtk gtkliststore.xml
| From: | Andrei Zmievski | Date: | Sat, 21 Oct 2006 21:45:51 +0000 |
| Subject: | Re: Re: cvs: php-gtk-doc /manual/en/reference/gtk gtkliststore.xml | ||
| References: | 1 2 3 4 5 | Groups: | php.gtk.dev |
| Request: | Send a blank email to php-gtk-dev+get-3481@lists.php.net to get a copy of this message | ||
Looks good, committed. Go ahead and commit the 'before' version.
-Andrei
On Oct 16, 2006, at 11:53 AM, Scott Mattocks wrote:
Andrei Zmievski wrote:Sure, send me a patch.Here is a patch for GtkListStore::insert_after(). It is mostly pieced together from surrounding sections in the overrides file. Please let me know what stupid things I am doing that I shouldn't. I am pretty sure that I should be using gtk_list_store_set_valist() instead of gtk_list_store_set_value() in a loop, but I don't know how to build a va_list from an array. Overriding gtk_list_store_insert_before() should be pretty much the same as this method, but I don't want to duplicate the same stupid things twice so once, this method is good enough, I will do the same for the other. Thanks, Scott <?php $win = new GtkWindow(); $win->connect_simple('destroy', array('Gtk', 'main_quit')); $list = new GtkListStore(Gtk::TYPE_LONG); // Resulting list should be in correct numerical order (1,2,3,4,5) $iter1 = $list->append(array(1)); $list->append(array(5)); $iter2 = $list->insert_after($iter1, array(3)); $list->insert_after($iter1, array(2)); $list->insert_after($iter2, array(4)); $view = new GtkTreeView($list); $column = new GtkTreeViewColumn(); $cellRenderer = new GtkCellRendererText(); $column->pack_start($cellRenderer, true); $column->add_attribute($cellRenderer, 'text', 0); $view->append_column($column); $win->add($view); $win->show_all(); Gtk::main(); ?>Index: ext/gtk+/gtktreeview.overrides =================================================================== RCS file: /repository/php-gtk/ext/gtk+/gtktreeview.overrides,v retrieving revision 1.71 diff -u -r1.71 gtktreeview.overrides --- ext/gtk+/gtktreeview.overrides 3 Oct 2006 23:19:12 -0000 1.71 +++ ext/gtk+/gtktreeview.overrides 16 Oct 2006 18:49:16 -0000 @@ -445,6 +445,58 @@phpg_gboxed_new(&return_value, GTK_TYPE_TREE_ITER, &iter, TRUE, TRUE TSRMLS_CC);} + +%% +override gtk_list_store_insert_after +PHP_METHOD +{+ GtkTreeIter iter; + GtkTreeIter *sibling = NULL; + GtkTreeModel *model; + zval *items = NULL; + zval *php_iter = NULL;++ NOT_STATIC_METHOD();++ if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "O|a", &php_iter, gtktreeiter_ce, &items)) + return;++ sibling = (GtkTreeIter *) PHPG_GBOXED(php_iter);++ model = GTK_TREE_MODEL(PHPG_GOBJECT(this_ptr));++ gtk_list_store_insert_after(GTK_LIST_STORE(model), &iter, sibling);++ if (items) { + gint n_cols, i; + GValue value = { 0 }; + zval **item;++ n_cols = gtk_tree_model_get_n_columns(model); + if (zend_hash_num_elements(Z_ARRVAL_P(items)) != n_cols) { + php_error(E_WARNING, "Cannot set row: number of row elements does not match the model"); + return; + }++ for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(items)), i = 0; + zend_hash_get_current_data(Z_ARRVAL_P(items), (void **)&item) == SUCCESS; + zend_hash_move_forward(Z_ARRVAL_P(items)), i++) {++ g_value_init(&value, gtk_tree_model_get_column_type(model, i));++ if (phpg_gvalue_from_zval(&value, *item, TRUE TSRMLS_CC) == FAILURE) { + php_error(E_WARNING, "Cannot set row: type of element %d does not match the model", i); + g_value_unset(&value); + return; + } + gtk_list_store_set_value(GTK_LIST_STORE(model), &iter, i, &value); + } + g_value_unset(&value); + }++ phpg_gboxed_new(&return_value, GTK_TYPE_TREE_ITER, &iter, TRUE, TRUE TSRMLS_CC);+} + %% add-arginfo GtkListStore set static --PHP-GTK Development Mailing List (http://gtk.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php