[pygobject] add overrides for the insert* apis of list_store and tree_store



commit 540e9f1f349ba3625e28b7673c92210eb8974098
Author: John (J5) Palmieri <johnp redhat com>
Date:   Tue Nov 9 12:17:05 2010 -0500

    add overrides for the insert* apis of list_store and tree_store
    
    * add set_row to tree_model as convinience method for both list and tree stores
    
    https://bugzilla.gnome.org/show_bug.cgi?id=634423

 gi/overrides/Gtk.py     |   80 ++++++++++++++++++++++++++++++++++++----------
 tests/test_overrides.py |   53 ++++++++++++++++++++++++++++++-
 2 files changed, 114 insertions(+), 19 deletions(-)
---
diff --git a/gi/overrides/Gtk.py b/gi/overrides/Gtk.py
index 3160fc2..7616a66 100644
--- a/gi/overrides/Gtk.py
+++ b/gi/overrides/Gtk.py
@@ -625,6 +625,18 @@ class TreeModel(Gtk.TreeModel):
         if success:
             return parent_iter
 
+    def set_row(self, treeiter, row):
+        # TODO: Accept a dictionary for row
+        # model.append(None,{COLUMN_ICON: icon, COLUMN_NAME: name})
+
+        n_columns = self.get_n_columns();
+        if len(row) != n_columns:
+            raise ValueError('row sequence has the incorrect number of elements')
+
+        for i in range(n_columns):
+            if row[i] is not None:
+                self.set_value(treeiter, i, row[i])
+
 TreeModel = override(TreeModel)
 __all__.append('TreeModel')
 
@@ -640,7 +652,6 @@ class TreeSortable(Gtk.TreeSortable, ):
 TreeSortable = override(TreeSortable)
 __all__.append('TreeSortable')
 
-
 class ListStore(Gtk.ListStore, TreeModel, TreeSortable):
     def __init__(self, *column_types):
         Gtk.ListStore.__init__(self)
@@ -649,20 +660,37 @@ class ListStore(Gtk.ListStore, TreeModel, TreeSortable):
     def append(self, row=None):
         treeiter = Gtk.ListStore.append(self)
 
-        # TODO: Accept a dictionary for row
-        # model.append(None,{COLUMN_ICON: icon, COLUMN_NAME: name})
+        if row is not None:
+            self.set_row(treeiter, row)
+
+        return treeiter
+
+    def insert(self, position, row=None):
+        treeiter = Gtk.ListStore.insert(self, position)
 
         if row is not None:
-            n_columns = self.get_n_columns();
-            if len(row) != n_columns:
-                raise ValueError('row sequence has the incorrect number of elements')
+            self.set_row(treeiter, row)
+
+        return treeiter
 
-            for i in range(n_columns):
-                if row[i] is not None:
-                    self.set_value(treeiter, i, row[i])
+    def insert_before(self, sibling, row=None):
+        treeiter = Gtk.ListStore.insert_before(self, sibling)
+
+        if row is not None:
+            self.set_row(treeiter, row)
 
         return treeiter
 
+
+    def insert_after(self, sibling, row=None):
+        treeiter = Gtk.ListStore.insert_after(self, sibling)
+
+        if row is not None:
+            self.set_row(treeiter, row)
+
+        return treeiter
+
+
 ListStore = override(ListStore)
 __all__.append('ListStore')
 
@@ -788,23 +816,39 @@ class TreeStore(Gtk.TreeStore, TreeModel, TreeSortable):
         self.set_column_types(column_types)
 
     def append(self, parent, row=None):
-
         treeiter = Gtk.TreeStore.append(self, parent)
 
-        # TODO: Accept a dictionary for row
-        # model.append(None,{COLUMN_ICON: icon, COLUMN_NAME: name})
+        if row is not None:
+            self.set_row(treeiter, row)
+
+        return treeiter
+
+    def insert(self, parent, position, row=None):
+        treeiter = Gtk.TreeStore.insert(self, parent, position)
+
+        if row is not None:
+            self.set_row(treeiter, row)
+
+        return treeiter
+
+    def insert_before(self, parent, sibling, row=None):
+        treeiter = Gtk.TreeStore.insert_before(self, parent, sibling)
 
         if row is not None:
-            n_columns = self.get_n_columns();
-            if len(row) != n_columns:
-                raise ValueError('row sequence has the incorrect number of elements')
+            self.set_row(treeiter, row)
+
+        return treeiter
+
 
-            for i in range(n_columns):
-                if row[i] is not None:
-                    self.set_value(treeiter, i, row[i])
+    def insert_after(self, parent, sibling, row=None):
+        treeiter = Gtk.TreeStore.insert_after(self, parent, sibling)
+
+        if row is not None:
+            self.set_row(treeiter, row)
 
         return treeiter
 
+
 TreeStore = override(TreeStore)
 __all__.append('TreeStore')
 
diff --git a/tests/test_overrides.py b/tests/test_overrides.py
index 869a28a..d2add7b 100644
--- a/tests/test_overrides.py
+++ b/tests/test_overrides.py
@@ -332,7 +332,7 @@ class TestGtk(unittest.TestCase):
         test_pylist = [1,"2", "3"]
 
         list_store = Gtk.ListStore(int, str, 'GIOverrideTreeAPITest', object, object, object)
-        for i in range(100):
+        for i in range(95):
             label = 'this is row #%d' % i
             testobj = TestGtk.TestClass(self, i, label)
             parent = list_store.append((i,
@@ -342,14 +342,63 @@ class TestGtk(unittest.TestCase):
                                         test_pydict,
                                         test_pylist))
 
+        # add sorted items out of order to test insert* apis
+        i = 97
+        label = 'this is row #97'
+        treeiter = list_store.append((i,
+                                      label,
+                                      TestGtk.TestClass(self, i, label),
+                                      test_pyobj,
+                                      test_pydict,
+                                      test_pylist))
+        # this should append
+        i = 99
+        label = 'this is row #99'
+        list_store.insert(9999, (i,
+                                 label,
+                                 TestGtk.TestClass(self, i, label),
+                                 test_pyobj,
+                                 test_pydict,
+                                 test_pylist))
+
+        i = 96
+        label = 'this is row #96'
+        list_store.insert_before(treeiter, (i,
+                                            label,
+                                            TestGtk.TestClass(self, i, label),
+                                            test_pyobj,
+                                            test_pydict,
+                                            test_pylist))
+
+        i = 98
+        label = 'this is row #98'
+        list_store.insert_after(treeiter, (i,
+                                           label,
+                                           TestGtk.TestClass(self, i, label),
+                                           test_pyobj,
+                                           test_pydict,
+                                           test_pylist))
+
+
+        i = 95
+        label = 'this is row #95'
+        list_store.insert(95, (i,
+                               label,
+                               TestGtk.TestClass(self, i, label),
+                               test_pyobj,
+                               test_pydict,
+                               test_pylist))
+
         self.assertEquals(len(list_store), 100)
 
         # walk the list to see if the values were stored correctly
         i = 0
         treeiter = list_store.get_iter_first()
 
+        counter = 0
         while treeiter:
             i = list_store.get_value(treeiter, 0)
+            self.assertEquals(i, counter)
             s = list_store.get_value(treeiter, 1)
             obj = list_store.get_value(treeiter, 2)
             obj.check(i, s)
@@ -362,6 +411,8 @@ class TestGtk(unittest.TestCase):
             self.assertEquals(pylist, test_pylist)
             treeiter = list_store.iter_next(treeiter)
 
+            counter += 1
+
         self.assertEquals(i, 99)
 
     def test_tree_model(self):



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]