diff --git a/src/calibre/gui2/tag_browser/model.py b/src/calibre/gui2/tag_browser/model.py index 64c830b7d0..10ffc91f29 100644 --- a/src/calibre/gui2/tag_browser/model.py +++ b/src/calibre/gui2/tag_browser/model.py @@ -83,6 +83,14 @@ class TagTreeItem(object): # {{{ self.tooltip = tooltip or '' + @property + def name_id(self): + if self.type == self.CATEGORY: + return self.category_key + ':' + self.name + elif self.type == self.TAG: + return self.tag.original_name + return '' + def break_cycles(self): del self.parent del self.children @@ -104,10 +112,9 @@ class TagTreeItem(object): # {{{ if self.type == self.ROOT: return 'ROOT' if self.type == self.CATEGORY: - return 'CATEGORY:'+str( - self.name)+':%d'%len(getattr(self, - 'children', [])) - return 'TAG: %s'%self.tag.name + return 'CATEGORY(category_key={!r}, name={!r}, num_children={!r})'.format( + self.category_key, self.name, len(self.children)) + return 'TAG(name=%r)'%self.tag.name def row(self): if self.parent is not None: @@ -1039,7 +1046,7 @@ class TagsModel(QAbstractItemModel): # {{{ return idx def index_for_category(self, name): - for row, category in enumerate(self.category_nodes): + for row, category in enumerate(self.root_item.children): if category.category_key == name: return self.index(row, 0, QModelIndex()) @@ -1203,6 +1210,31 @@ class TagsModel(QAbstractItemModel): # {{{ def supportedDropActions(self): return Qt.CopyAction|Qt.MoveAction + def named_path_for_index(self, index): + ans = [] + while index.isValid(): + node = self.get_node(index) + if node is self.root_item: + break + ans.append(node.name_id) + index = self.parent(index) + return ans + + def index_for_named_path(self, named_path): + parent = self.root_item + ipath = [] + path = named_path[:] + while path: + q = path.pop() + for i, c in enumerate(parent.children): + if c.name_id == q: + ipath.append(i) + parent = c + break + else: + break + return self.index_for_path(ipath) + def path_for_index(self, index): ans = [] while index.isValid(): diff --git a/src/calibre/gui2/tag_browser/view.py b/src/calibre/gui2/tag_browser/view.py index 450ace0879..702ec114a5 100644 --- a/src/calibre/gui2/tag_browser/view.py +++ b/src/calibre/gui2/tag_browser/view.py @@ -770,7 +770,7 @@ class TagsView(QTreeView): # {{{ ci = self.currentIndex() if not ci.isValid(): ci = self.indexAt(QPoint(10, 10)) - path = self.model().path_for_index(ci) if self.is_visible(ci) else None + path = self.model().named_path_for_index(ci) if self.is_visible(ci) else None expanded_categories, state_map = self.get_state() self._model.rebuild_node_tree(state_map=state_map) self.blockSignals(True) @@ -778,7 +778,10 @@ class TagsView(QTreeView): # {{{ idx = self._model.index_for_category(category) if idx is not None and idx.isValid(): self.expand(idx) - self.show_item_at_path(path) + if path is not None: + index = self._model.index_for_named_path(path) + if index.isValid(): + self.show_item_at_index(index) self.blockSignals(False) def show_item_at_path(self, path, box=False,