Rev 167: Implement index and rowCount in http://bazaar.launchpad.net/~jameinel/bzr-explorer/wt_model
John Arbash Meinel
john at arbash-meinel.com
Tue Jul 7 22:37:32 BST 2009
At http://bazaar.launchpad.net/~jameinel/bzr-explorer/wt_model
------------------------------------------------------------
revno: 167
revision-id: john at arbash-meinel.com-20090707213728-1p71ophh8c5genbk
parent: john at arbash-meinel.com-20090707211314-06872uxsiog4blas
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: wt_model
timestamp: Tue 2009-07-07 16:37:28 -0500
message:
Implement index and rowCount
by using hasIndex they really need to be implemented concurrently.
-------------- next part --------------
=== modified file 'lib/wt_model.py'
--- a/lib/wt_model.py 2009-07-07 21:13:14 +0000
+++ b/lib/wt_model.py 2009-07-07 21:37:28 +0000
@@ -86,9 +86,10 @@
'path',
]
- def __init__(self, path, parent=None):
+ def __init__(self, wt, parent=None):
QtCore.QAbstractItemModel.__init__(self, parent)
- self._wt = workingtree.WorkingTree.open(path)
+ self._wt = wt
+ self._root_wt_item = _WTItem.create_from_wt(self._wt)
def index(self, row, column, parent=None):
"""Return the QModelIndex for the given item.
@@ -102,12 +103,29 @@
:return: The index object to reference the given data
:rtype: QModelIndex
"""
- # Der broken
- return None
+ if parent is None:
+ parent = QtCore.QModelIndex()
+ parent_item = self._root_wt_item
+ if not self.hasIndex(row, column, parent):
+ return QtCore.QModelIndex()
+
+ if not parent.isValid():
+ parent_item = self._root_wt_item
+ else:
+ parent_item = parent.internalPointer()
+ child = parent_item.children[row]
+ return self.createIndex(row, column, child)
# def parent(self, ...):
- # def rowCount(self, ...):
+ def rowCount(self, parent=None):
+ if parent is None or not parent.isValid():
+ parent_item = self._root_wt_item
+ else:
+ parent_item = parent.internalPointer()
+ return len(parent_item.children)
+
+
# implement def hasChildren(self, ...) if rowCount is expensive
def columnCount(self, parent=None):
=== modified file 'tests/test_wt_model.py'
--- a/tests/test_wt_model.py 2009-07-07 21:13:14 +0000
+++ b/tests/test_wt_model.py 2009-07-07 21:37:28 +0000
@@ -29,9 +29,65 @@
class TestWTModel(tests.TestCaseWithTransport):
+ def test_index_invalid(self):
+ wt = self.make_branch_and_tree('.')
+ model = wt_model.WorkingTreeModel(wt)
+ res = model.index(100, 100, None)
+ self.assertIsInstance(res, QtCore.QModelIndex)
+ self.assertFalse(res.isValid())
+
+ def test_index_empty(self):
+ wt = self.make_branch_and_tree('.')
+ model = wt_model.WorkingTreeModel(wt)
+ res = model.index(0, 0, None)
+ self.assertIsInstance(res, QtCore.QModelIndex)
+ self.assertFalse(res.isValid())
+
+ def test_index_one_item(self):
+ wt = self.make_branch_and_tree('.')
+ self.build_tree(['a_file'])
+ model = wt_model.WorkingTreeModel(wt)
+ res = model.index(0, 0, None)
+ self.assertIsInstance(res, QtCore.QModelIndex)
+ self.assertTrue(res.isValid())
+ self.assertEqual('a_file', res.internalPointer().name)
+
+ def test_index_subdir(self):
+ wt = self.make_branch_and_tree('.')
+ self.build_tree(['dir/', 'dir/a_file', 'b_file'])
+ wt.add(['dir', 'dir/a_file', 'b_file'],
+ ['dir-id', 'a-id', 'b-id'])
+ model = wt_model.WorkingTreeModel(wt)
+ res = model.index(1, 0, None)
+ self.assertIsInstance(res, QtCore.QModelIndex)
+ self.assertTrue(res.isValid())
+ self.assertEqual('dir', res.internalPointer().name)
+ res = model.index(0, 0, res)
+ self.assertIsInstance(res, QtCore.QModelIndex)
+ self.assertTrue(res.isValid())
+ self.assertEqual('a_file', res.internalPointer().name)
+
+ def test_rowCount_simple(self):
+ wt = self.make_branch_and_tree('.')
+ model = wt_model.WorkingTreeModel(wt)
+ self.assertEqual(0, model.rowCount())
+
+ def test_rowCount_subdirs(self):
+ wt = self.make_branch_and_tree('.')
+ self.build_tree(['dir/', 'dir/a_file', 'b_file'])
+ wt.add(['dir', 'dir/a_file', 'b_file'],
+ ['dir-id', 'a-id', 'b-id'])
+ model = wt_model.WorkingTreeModel(wt)
+ self.assertEqual(2, model.rowCount())
+ dir_index = model.index(1, 0, None)
+ self.assertIsInstance(dir_index, QtCore.QModelIndex)
+ self.assertTrue(dir_index.isValid())
+ self.assertEqual('dir', dir_index.internalPointer().name)
+ self.assertEqual(1, model.rowCount(dir_index))
+
def test_headerData(self):
- self.make_branch_and_tree('.')
- model = wt_model.WorkingTreeModel('.')
+ wt = self.make_branch_and_tree('.')
+ model = wt_model.WorkingTreeModel(wt)
self.assertEqual(6, model.columnCount())
res = model.headerData(0, QtCore.Qt.Horizontal, QtCore.Qt.DisplayRole)
self.assertIsInstance(res, QtCore.QVariant)
More information about the bazaar-commits
mailing list