Scroll to first sidebar search match
This commit is contained in:
parent
1b15069b24
commit
33e6662dda
@ -215,23 +215,35 @@ class SidebarTreeView(QTreeView):
|
||||
# start from a collapsed state, as it's faster
|
||||
self.collapseAll()
|
||||
self.setColumnHidden(0, not self.model().search(text))
|
||||
self._expand_where_necessary(self.model(), searching=True)
|
||||
self._expand_where_necessary(
|
||||
self.model(), searching=True, scroll_to_first_match=True
|
||||
)
|
||||
|
||||
def _expand_where_necessary(
|
||||
self,
|
||||
model: SidebarModel,
|
||||
parent: Optional[QModelIndex] = None,
|
||||
searching: bool = False,
|
||||
) -> None:
|
||||
scroll_to_first_match: bool = False,
|
||||
) -> bool:
|
||||
parent = parent or QModelIndex()
|
||||
for row in range(model.rowCount(parent)):
|
||||
idx = model.index(row, 0, parent)
|
||||
if not idx.isValid():
|
||||
continue
|
||||
self._expand_where_necessary(model, idx, searching)
|
||||
scroll_to_first_match = self._expand_where_necessary(
|
||||
model, idx, searching, scroll_to_first_match
|
||||
)
|
||||
if item := model.item_for_index(idx):
|
||||
if item.show_expanded(searching):
|
||||
self.setExpanded(idx, True)
|
||||
if item.is_highlighted() and scroll_to_first_match:
|
||||
self.selectionModel().setCurrentIndex(
|
||||
idx, QItemSelectionModel.SelectCurrent
|
||||
)
|
||||
self.scrollTo(idx)
|
||||
scroll_to_first_match = False
|
||||
return scroll_to_first_match
|
||||
|
||||
def update_search(
|
||||
self,
|
||||
|
Loading…
Reference in New Issue
Block a user