com gtk/php-gtk: Fixed NTRVTRP methods GtkTreeModelSort::co nvert_iter_to_child_iter GtkTreeModelSort::conver t_child_iter_to_iter: TODO2 ext/gtk+/gtktreevie w.overrides test/unittests/GtkTreeModelSortTest.php

[email protected] (David Soria Parra)
Newsgroups php.gtk.cvs
Message-ID <[email protected]>
Commit:    94d463291926ece9b07d1dae2b1d61d94998ae9c
Author:    Christian Weiske <[email protected]>         Sat, 1 Jul 2006 10:39:02 +0000
Parents:   33623929708c2d883e8b311712106902f91505b3
Branches:  master

Link:       http://git.php.net/?p=gtk/php-gtk.git;a=commitdiff;h=94d463291926ece9b07d1dae2b1d61d94998ae9c

Log:
Fixed NTRVTRP methods
GtkTreeModelSort::convert_iter_to_child_iter
GtkTreeModelSort::convert_child_iter_to_iter

The script leaks memory, but this is because of
http://bugzilla.gnome.org/show_bug.cgi?id=346341

Changed paths:
  M  TODO2
  M  ext/gtk+/gtktreeview.overrides
  M  test/unittests/GtkTreeModelSortTest.php


Diff:
94d463291926ece9b07d1dae2b1d61d94998ae9c
diff --git a/TODO2 b/TODO2
index 85f383d..81abbff 100644
--- a/TODO2
+++ b/TODO2
@@ -64,9 +64,6 @@ Classes and Functions
 * GtkTreeModelFilter
     memleak when using get_property('virtual-root')
     second constructor parameter doesn't work (see unit test)
-* GtkTreeModelSort
-    NTRVNRP: convert_child_iter_to_iter(GtkTreeIter sort_iter, GtkTreeIter child_iter)
-    NTRVNRP: convert_iter_to_child_iter(GtkTreeIter child_iter, GtkTreeIter sorted_iter);
 * GtkTreeStore
 	method      GtkTreeStore::reorder: unknown type 'gint*'
 	method      GtkTreeStore::set_column_types: unknown type 'GType*'
diff --git a/ext/gtk+/gtktreeview.overrides b/ext/gtk+/gtktreeview.overrides
index 06ac1fb..aafe928 100644
--- a/ext/gtk+/gtktreeview.overrides
+++ b/ext/gtk+/gtktreeview.overrides
@@ -1556,6 +1556,74 @@ PHP_METHOD
 
 %% }}}
 
+%% {{{ GtkTreeModelSort
+
+%%
+add-arginfo GtkTreeModelSort convert_child_iter_to_iter
+static
+ZEND_BEGIN_ARG_INFO(ARGINFO_NAME, 0)
+    ZEND_ARG_OBJ_INFO(0, child_iter, GtkTreeIter, 1)
+ZEND_END_ARG_INFO();
+
+%%
+override gtk_tree_model_sort_convert_child_iter_to_iter
+PHP_METHOD
+{
+    GtkTreeIter sort_iter, *child_iter = NULL;
+    zval *php_child_iter;
+
+    NOT_STATIC_METHOD();
+
+    if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "O", &php_child_iter, gboxed_ce))
+        return;
+
+    if (phpg_gboxed_check(php_child_iter, GTK_TYPE_TREE_ITER, FALSE TSRMLS_CC)) {
+        child_iter = (GtkTreeIter *) PHPG_GBOXED(php_child_iter);
+    } else {
+        php_error(E_WARNING, "%s::%s() expects child_iter argument to be a valid GtkTreeIter object",
+                  get_active_class_name(NULL TSRMLS_CC), get_active_function_name(TSRMLS_C));
+        return;
+    }
+
+    gtk_tree_model_sort_convert_child_iter_to_iter(GTK_TREE_MODEL_SORT(PHPG_GOBJECT(this_ptr)), &sort_iter, child_iter);
+
+    phpg_gboxed_new(&return_value, GTK_TYPE_TREE_ITER, &sort_iter, TRUE, TRUE TSRMLS_CC);
+}
+
+%%
+add-arginfo GtkTreeModelSort convert_iter_to_child_iter
+static
+ZEND_BEGIN_ARG_INFO(ARGINFO_NAME, 0)
+    ZEND_ARG_OBJ_INFO(0, sort_iter, GtkTreeIter, 1)
+ZEND_END_ARG_INFO();
+
+%%
+override gtk_tree_model_sort_convert_iter_to_child_iter
+PHP_METHOD
+{
+    GtkTreeIter child_iter, *sort_iter = NULL;
+    zval *php_sort_iter;
+
+    NOT_STATIC_METHOD();
+
+    if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "O", &php_sort_iter, gboxed_ce))
+        return;
+
+    if (phpg_gboxed_check(php_sort_iter, GTK_TYPE_TREE_ITER, FALSE TSRMLS_CC)) {
+        sort_iter = (GtkTreeIter *) PHPG_GBOXED(php_sort_iter);
+    } else {
+        php_error(E_WARNING, "%s::%s() expects sort_iter argument to be a valid GtkTreeIter object",
+                  get_active_class_name(NULL TSRMLS_CC), get_active_function_name(TSRMLS_C));
+        return;
+    }
+
+    gtk_tree_model_sort_convert_iter_to_child_iter(GTK_TREE_MODEL_SORT(PHPG_GOBJECT(this_ptr)), &child_iter, sort_iter);
+
+    phpg_gboxed_new(&return_value, GTK_TYPE_TREE_ITER, &child_iter, TRUE, TRUE TSRMLS_CC);
+}
+
+%% }}}
+
 %% {{{ GtkTreeSelection
 
 %%
diff --git a/test/unittests/GtkTreeModelSortTest.php b/test/unittests/GtkTreeModelSortTest.php
index 8b3978c..b804146 100644
--- a/test/unittests/GtkTreeModelSortTest.php
+++ b/test/unittests/GtkTreeModelSortTest.php
@@ -37,6 +37,14 @@ class GtkTreeModelSortTest extends PHPUnit2_Framework_TestCase {
      * @access protected
      */
     protected function setUp() {
+        $this->mod = new GtkTreeStore(Gtk::TYPE_STRING);
+        $this->a = $this->mod->append(null, array('a'));
+        $this->b = $this->mod->append(null, array('b'));
+        $this->c = $this->mod->append(null, array('c'));
+
+        $this->tms = new GtkTreeModelSort($this->mod);
+        $this->tms->set_default_sort_func(array($this, 'sortCallback'));
+        $this->tms->set_sort_column_id(0, Gtk::SORT_ASCENDING);
     }
 
     /**
@@ -48,6 +56,10 @@ class GtkTreeModelSortTest extends PHPUnit2_Framework_TestCase {
     protected function tearDown() {
     }
 
+    public function sortCallback($model, $iter1, $iter2) {
+        var_dump($model, $iter1, $iter2);
+    }
+
     /**
      * @todo Implement testClear_cache().
      */
@@ -57,11 +69,21 @@ class GtkTreeModelSortTest extends PHPUnit2_Framework_TestCase {
     }
 
     /**
-     * @todo Implement testConvert_child_iter_to_iter().
+     *
      */
     public function testConvert_child_iter_to_iter() {
-        // Remove the following line when you implement this test.
-        throw new PHPUnit2_Framework_IncompleteTestError;
+        $child_a = $this->mod->get_iter_first();
+        $this->assertNotNull($child_a);
+        $this->assertType('GtkTreeIter', $child_a);
+
+        $sort_a = $this->tms->convert_child_iter_to_iter($child_a);
+        $this->assertNotNull($sort_a);
+        $this->assertType('GtkTreeIter', $sort_a);
+
+        $this->assertEquals(
+            $this->mod->get_value($child_a, 0),
+            $this->tms->get_value($sort_a, 0)
+        );
     }
 
     /**
@@ -73,11 +95,21 @@ class GtkTreeModelSortTest extends PHPUnit2_Framework_TestCase {
     }
 
     /**
-     * @todo Implement testConvert_iter_to_child_iter().
+     *
      */
     public function testConvert_iter_to_child_iter() {
-        // Remove the following line when you implement this test.
-        throw new PHPUnit2_Framework_IncompleteTestError;
+        $sort_a = $this->tms->get_iter_first();
+        $this->assertNotNull($sort_a);
+        $this->assertType('GtkTreeIter', $sort_a);
+
+        $child_a = $this->tms->convert_iter_to_child_iter($sort_a);
+        $this->assertNotNull($child_a);
+        $this->assertType('GtkTreeIter', $child_a);
+
+        $this->assertEquals(
+            $this->tms->get_value($sort_a, 0),
+            $this->mod->get_value($child_a, 0)
+        );
     }
 
     /**
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.