Re: Re: cvs: php-gtk-doc /manual/en/reference/gtk gtkliststore.xml

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


« previous php.gtk.dev (#3481) next »