From bcecd46be818edcf620015b4b0ad55b51fd53e46 Mon Sep 17 00:00:00 2001 From: Oliver Sanders Date: Tue, 28 Mar 2017 12:38:41 +0100 Subject: [PATCH] Maintain selection when updating dot view. --- lib/cylc/gui/updater_dot.py | 39 +++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/lib/cylc/gui/updater_dot.py b/lib/cylc/gui/updater_dot.py index c2e82f03f0d..21ec3661388 100644 --- a/lib/cylc/gui/updater_dot.py +++ b/lib/cylc/gui/updater_dot.py @@ -78,6 +78,7 @@ def __init__(self, cfg, updater, treeview, info_bar, theme, dot_size): self.task_list = [] self.family_tree = {} self.expanded_rows = [] + self.selected_rows = [] # generate task state icons dotm = DotMaker(theme, size=dot_size) @@ -303,9 +304,38 @@ def _get_expanded_rows(self): self.expanded_rows.append(self.led_treestore.get_value( self.led_treestore.get_iter(row), 0)) + def _get_selected_rows(self): + """Make a note of currently selected rows. + + Populates self.selected_rows with the value of the first column of all + selected rows. + + """ + self.selected_rows = [] + _, selected_paths = self.led_treeview.get_selection( + ).get_selected_rows() + model = self.led_treeview.get_model() + for path in selected_paths: + self.selected_rows.append(model.get_value(model.get_iter(path), 0)) + + def _set_selected_rows(self): + """Re-Selects previously selected rows where possible. + + Uses self.selected_rows to determine which rows to select. + Warning: This method has not been tested with multiple selection. + + """ + def should_select_row(model, path, iter_, selection): + if model.get_value(iter_, 0) in self.selected_rows: + selection.select_iter(iter_) + + selection = self.led_treeview.get_selection() + model = self.led_treeview.get_model() + model.foreach(should_select_row, selection) + def ledview_widgets(self): - # Make note of expanded rows. - self._get_expanded_rows() + self._get_expanded_rows() # Make a note of expanded rows. + self._get_selected_rows() # Make a note of selected rows. if not self.should_transpose_view: types = [str] + [gtk.gdk.Pixbuf] * len(self.point_strings) @@ -460,6 +490,11 @@ def update_gui(self): self._update_gui_transpose(tasks_by_point_string, state_summary) self.led_treeview.columns_autosize() + + if self.is_transposed == self.should_transpose_view: + # Only select rows if we have not changed view mode. + self._set_selected_rows() + return False def _update_gui_transpose(self, tasks_by_point_string, state_summary):