Skip to content

Commit

Permalink
Maintain selection when updating dot view.
Browse files Browse the repository at this point in the history
  • Loading branch information
oliver-sanders committed Mar 28, 2017
1 parent 74d51d1 commit 15c8c6e
Showing 1 changed file with 38 additions and 2 deletions.
40 changes: 38 additions & 2 deletions lib/cylc/gui/updater_dot.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -303,9 +304,39 @@ 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()
# Do this with a selected_foreach?
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)
Expand Down Expand Up @@ -460,6 +491,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):
Expand Down

0 comments on commit 15c8c6e

Please sign in to comment.