[pygobject] add overrides for the insert* apis of list_store and tree_store
- From: John Palmieri <johnp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pygobject] add overrides for the insert* apis of list_store and tree_store
- Date: Wed, 10 Nov 2010 01:03:18 +0000 (UTC)
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]