From 731e68f1647e0054f0cbc69119dd04ae59d9f5c8 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Wed, 16 Mar 2011 09:31:16 +0100 Subject: [PATCH] [#153 state:fixed] Fixed a refresh bug in directory panel. --- core/gui/directory_tree.py | 16 +++++++++------- core/tests/app_test.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/core/gui/directory_tree.py b/core/gui/directory_tree.py index c5a1eac5..ad633cba 100644 --- a/core/gui/directory_tree.py +++ b/core/gui/directory_tree.py @@ -16,12 +16,12 @@ STATE_ORDER = [STATE_NORMAL, STATE_REFERENCE, STATE_EXCLUDED] # Lazily loads children class DirectoryNode(Node): - def __init__(self, app, path, name): + def __init__(self, tree, path, name): Node.__init__(self, name) - self._app = app + self._tree = tree self._directory_path = path self._loaded = False - self._state = STATE_ORDER.index(self._app.directories.get_state(path)) + self._state = STATE_ORDER.index(self._tree.app.directories.get_state(path)) def __len__(self): if not self._loaded: @@ -30,9 +30,9 @@ class DirectoryNode(Node): def _load(self): self.clear() - subpaths = self._app.directories.get_subfolders(self._directory_path) + subpaths = self._tree.app.directories.get_subfolders(self._directory_path) for path in subpaths: - self.append(DirectoryNode(self._app, path, path[-1])) + self.append(DirectoryNode(self._tree, path, path[-1])) self._loaded = True # The state propery is an index to the combobox @@ -46,7 +46,9 @@ class DirectoryNode(Node): return self._state = value state = STATE_ORDER[value] - self._app.directories.set_state(self._directory_path, state) + self._tree.app.directories.set_state(self._directory_path, state) + self._tree._refresh() + self._tree.view.refresh() class DirectoryTree(GUIObject, Tree): @@ -62,7 +64,7 @@ class DirectoryTree(GUIObject, Tree): def _refresh(self): self.clear() for path in self.app.directories: - self.append(DirectoryNode(self.app, path, str(path))) + self.append(DirectoryNode(self, path, str(path))) def add_directory(self, path): self.app.add_directory(path) diff --git a/core/tests/app_test.py b/core/tests/app_test.py index 1de54008..0fd04469 100644 --- a/core/tests/app_test.py +++ b/core/tests/app_test.py @@ -462,3 +462,31 @@ class TestCaseDupeGuru_renameSelected: assert 'foo bar 2' in names eq_(g.dupes[0].name, 'foo bar 2') + +class TestAppWithDirectoriesInTree: + def pytest_funcarg__do_setup(self, request): + tmpdir = request.getfuncargvalue('tmpdir') + p = Path(str(tmpdir)) + io.mkdir(p + 'sub1') + io.mkdir(p + 'sub2') + io.mkdir(p + 'sub3') + self.app = DupeGuru() + self.dtree_gui = CallLogger() + self.dtree = DirectoryTree(self.dtree_gui, self.app) + self.dtree.connect() + self.dtree.add_directory(p) + self.dtree_gui.clear_calls() + + def test_set_root_as_ref_makes_subfolders_ref_as_well(self, do_setup): + # Setting a node state to something also affect subnodes. These subnodes must be correctly + # refreshed. + node = self.dtree[0] + eq_(len(node), 3) # a len() call is required for subnodes to be loaded + subnode = node[0] + node.state = 1 # the state property is a state index + node = self.dtree[0] + eq_(len(node), 3) + subnode = node[0] + eq_(subnode.state, 1) + self.dtree_gui.check_gui_calls(['refresh']) +