From 2ba3584b7e9dd99879527d19f40dd1a6a7f9674b Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Tue, 12 Jul 2011 12:51:11 -0400 Subject: [PATCH] [#165 state:fixed] Don't collapse tree nodes on changing folder states. [Qt] --- core/app_cocoa_inter.py | 5 +++++ core/gui/directory_tree.py | 17 +++++++++++++++-- qt/base/directories_model.py | 9 ++++++--- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/core/app_cocoa_inter.py b/core/app_cocoa_inter.py index 7b3a73e1..daaf4e67 100644 --- a/core/app_cocoa_inter.py +++ b/core/app_cocoa_inter.py @@ -173,6 +173,11 @@ class PyDirectoryOutline(PyOutline): def addDirectory_(self, path): self.py.add_directory(path) + # python --> cocoa + def refresh_states(self): + # Under cocoa, both refresh() and refresh_states() do the same thing. + self.cocoa.refresh() + class PyResultTable(PyTable): py_class = ResultTable diff --git a/core/gui/directory_tree.py b/core/gui/directory_tree.py index 390111f5..050067c7 100644 --- a/core/gui/directory_tree.py +++ b/core/gui/directory_tree.py @@ -34,6 +34,11 @@ class DirectoryNode(Node): self.append(DirectoryNode(self._tree, path, path[-1])) self._loaded = True + def update_all_states(self): + self._state = STATE_ORDER.index(self._tree.app.directories.get_state(self._directory_path)) + for node in self: + node.update_all_states() + # The state propery is an index to the combobox @property def state(self): @@ -46,11 +51,14 @@ class DirectoryNode(Node): self._state = value state = STATE_ORDER[value] self._tree.app.directories.set_state(self._directory_path, state) - self._tree._refresh() - self._tree.view.refresh() + self._tree.update_all_states() class DirectoryTree(GUIObject, Tree): + #--- model -> view calls: + # refresh() + # refresh_states() # when only states label need to be refreshed + # def __init__(self, view, app): GUIObject.__init__(self, view, app) Tree.__init__(self) @@ -68,6 +76,11 @@ class DirectoryTree(GUIObject, Tree): def add_directory(self, path): self.app.add_directory(path) + def update_all_states(self): + for node in self: + node.update_all_states() + self.view.refresh_states() + #--- Event Handlers def directories_changed(self): self._refresh() diff --git a/qt/base/directories_model.py b/qt/base/directories_model.py index a2012ba2..05935fbc 100644 --- a/qt/base/directories_model.py +++ b/qt/base/directories_model.py @@ -8,7 +8,7 @@ import urllib.parse -from PyQt4.QtCore import pyqtSignal, Qt, QRect, QUrl +from PyQt4.QtCore import pyqtSignal, Qt, QRect, QUrl, QModelIndex from PyQt4.QtGui import (QComboBox, QStyledItemDelegate, QApplication, QBrush, QStyle, QStyleOptionComboBox, QStyleOptionViewItemV4) @@ -69,7 +69,7 @@ class DirectoriesModel(TreeModel): def _getChildren(self): return list(self.model) - def columnCount(self, parent): + def columnCount(self, parent=QModelIndex()): return 2 def data(self, index, role): @@ -100,7 +100,7 @@ class DirectoriesModel(TreeModel): data = bytes(mimeData.data('text/uri-list')).decode('ascii') unquoted = urllib.parse.unquote(data) urls = unquoted.split('\r\n') - paths = [str(QUrl(url).toLocalFile()) for url in urls if url] + paths = [QUrl(url).toLocalFile() for url in urls if url] for path in paths: self.model.add_directory(path) self.foldersAdded.emit(paths) @@ -143,3 +143,6 @@ class DirectoriesModel(TreeModel): def refresh(self): self.reset() + def refresh_states(self): + self.refreshData() +