diff --git a/base/qt/details_table.py b/base/qt/details_table.py index 1c45de1e..0a27c2ae 100644 --- a/base/qt/details_table.py +++ b/base/qt/details_table.py @@ -48,6 +48,8 @@ class DetailsModel(QAbstractTableModel): #--- Events def duplicateSelected(self): dupe = self._app.selected_dupe + if dupe is None: + return group = self._app.results.get_group_of_duplicate(dupe) ref = group.ref self._dupe_data = self._data.GetDisplayInfo(dupe, group) diff --git a/base/qt/main_window.py b/base/qt/main_window.py index 1f93d0f2..5b91a85e 100644 --- a/base/qt/main_window.py +++ b/base/qt/main_window.py @@ -7,7 +7,7 @@ from PyQt4.QtCore import Qt, QCoreApplication, QProcess, SIGNAL from PyQt4.QtGui import (QMainWindow, QMenu, QPixmap, QIcon, QToolButton, QLabel, QHeaderView, - QMessageBox, QInputDialog, QLineEdit) + QMessageBox, QInputDialog, QLineEdit, QItemSelectionModel) from hsutil.misc import nonone @@ -292,6 +292,12 @@ class MainWindow(QMainWindow, Ui_MainWindow): def resultsChanged(self): self.resultsView.model().reset() + dupe = self.app.selected_dupe + if dupe is not None: + [modelIndex] = self.resultsModel.indexesForDupes([dupe]) + if modelIndex.isValid(): + flags = QItemSelectionModel.ClearAndSelect | QItemSelectionModel.Rows + self.resultsView.selectionModel().select(modelIndex, flags) def resultsReset(self): self.resultsView.expandAll() diff --git a/base/qt/results_model.py b/base/qt/results_model.py index d28d6da3..cbffdfb8 100644 --- a/base/qt/results_model.py +++ b/base/qt/results_model.py @@ -102,6 +102,30 @@ class ResultsModel(TreeModel): nodes = [index.internalPointer() for index in indexes] return [node.dupe for node in nodes] + def indexesForDupes(self, dupes): + def index(dupe): + try: + if self.power_marker: + row = self._results.dupes.index(dupe) + node = self.nodes[row] + assert node.dupe is dupe + return self.createIndex(row, 0, node) + else: + group = self._results.get_group_of_duplicate(dupe) + row = self._results.groups.index(group) + node = self.nodes[row] + if dupe is group.ref: + assert node.dupe is dupe + return self.createIndex(row, 0, node) + subrow = group.dupes.index(dupe) + subnode = node.children[subrow] + assert subnode.dupe is dupe + return self.createIndex(subrow, 0, subnode) + except ValueError: # the dupe is not there anymore + return QModelIndex() + + return map(index, dupes) + def flags(self, index): if not index.isValid(): return Qt.ItemIsEnabled