Commit 5c132b7aff93f96fc8877a16d869c779e0ce01dd

Authored by tfmoraes
1 parent ae891895

Fixed some inconsistencies in the undo/redo tool:

1. Only disabling undo and redo when user deletes a mask is visible
2. When user sets a new threshold the undo/redo history is cleared.
This won't be needed when undo/redo will work with threshold changing.

Squashed commit of the following:

commit f49d8d6713b67807772958faad0e7f98d17d288c
Author: Thiago Franco de Moraes <totonixsame@gmail.com>
Date:   Thu Oct 11 10:18:38 2012 -0300

    When user sets a new threshold the undo/redo history is cleared

commit 65e94cbd896e4df0c7d797ac98960e5e129c5f3e
Author: Thiago Franco de Moraes <totonixsame@gmail.com>
Date:   Thu Oct 11 09:25:35 2012 -0300

    Only disabling undo and redo when user deletes a mask is visible
invesalius/data/mask.py
@@ -174,6 +174,12 @@ class EditionHistory(object): @@ -174,6 +174,12 @@ class EditionHistory(object):
174 Publisher.sendMessage("Enable undo", v_undo) 174 Publisher.sendMessage("Enable undo", v_undo)
175 Publisher.sendMessage("Enable redo", v_redo) 175 Publisher.sendMessage("Enable redo", v_redo)
176 176
  177 + def clear_history(self):
  178 + self.history = []
  179 + self.index = -1
  180 + Publisher.sendMessage("Enable undo", False)
  181 + Publisher.sendMessage("Enable redo", False)
  182 +
177 183
178 class Mask(): 184 class Mask():
179 general_index = -1 185 general_index = -1
@@ -288,5 +294,9 @@ class Mask(): @@ -288,5 +294,9 @@ class Mask():
288 shape = shape[0] + 1, shape[1] + 1, shape[2] + 1 294 shape = shape[0] + 1, shape[1] + 1, shape[2] + 1
289 self.matrix = numpy.memmap(self.temp_file, mode='w+', dtype='uint8', shape=shape) 295 self.matrix = numpy.memmap(self.temp_file, mode='w+', dtype='uint8', shape=shape)
290 296
  297 + def clear_history(self):
  298 + self.history.clear_history()
  299 +
291 def __del__(self): 300 def __del__(self):
292 - self.history._config_undo_redo(False) 301 + if self.is_shown:
  302 + self.history._config_undo_redo(False)
invesalius/data/slice_.py
@@ -258,6 +258,23 @@ class Slice(object): @@ -258,6 +258,23 @@ class Slice(object):
258 index = self.current_mask.index 258 index = self.current_mask.index
259 self.num_gradient += 1 259 self.num_gradient += 1
260 self.current_mask.matrix[:] = 0 260 self.current_mask.matrix[:] = 0
  261 + self.current_mask.clear_history()
  262 +
  263 + # TODO: merge this code with apply_slice_buffer_to_mask
  264 + b_mask = self.buffer_slices["AXIAL"].mask
  265 + n = self.buffer_slices["AXIAL"].index + 1
  266 + self.current_mask.matrix[n, 1:, 1:] = b_mask
  267 + self.current_mask.matrix[n, 0, 0] = 1
  268 +
  269 + b_mask = self.buffer_slices["CORONAL"].mask
  270 + n = self.buffer_slices["CORONAL"].index + 1
  271 + self.current_mask.matrix[1:, n, 1:] = b_mask
  272 + self.current_mask.matrix[0, n, 0] = 1
  273 +
  274 + b_mask = self.buffer_slices["SAGITAL"].mask
  275 + n = self.buffer_slices["SAGITAL"].index + 1
  276 + self.current_mask.matrix[1:, 1:, n] = b_mask
  277 + self.current_mask.matrix[0, 0, n] = 1
261 278
262 def __set_current_mask_threshold_actual_slice(self, evt_pubsub): 279 def __set_current_mask_threshold_actual_slice(self, evt_pubsub):
263 threshold_range = evt_pubsub.data 280 threshold_range = evt_pubsub.data