From 1db06cb6f573242f8aebed8aa7c8e7a11c60d862 Mon Sep 17 00:00:00 2001 From: tatiana Date: Thu, 11 Feb 2010 01:47:07 +0000 Subject: [PATCH] FIX: Problems related to remove mask and eye on data notebook --- invesalius/data/slice_.py | 16 ++++++---------- invesalius/gui/data_notebook.py | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------- 2 files changed, 68 insertions(+), 44 deletions(-) diff --git a/invesalius/data/slice_.py b/invesalius/data/slice_.py index e2f8af4..f3dd7ac 100644 --- a/invesalius/data/slice_.py +++ b/invesalius/data/slice_.py @@ -88,15 +88,13 @@ class Slice(object): ps.Publisher().subscribe(self.OnDuplicateMasks, 'Duplicate masks') def OnRemoveMasks(self, pubsub_evt): - print "OnRemoveMasks" selected_items = pubsub_evt.data - print "selected_items" proj = Project() for item in selected_items: proj.RemoveMask(item) - - index = self.current_mask.index - if (proj.mask_dict) and (index in selected_items): + #index = self.current_mask.index + if (proj.mask_dict) and (self.current_mask.index in selected_items): + self.current_mask = proj.mask_dict[0] self.SelectCurrentMask(0) elif not proj.mask_dict: self.blend_filter.SetOpacity(1, 0) @@ -245,7 +243,7 @@ class Slice(object): colour_wx = [r*255, g*255, b*255] ps.Publisher().sendMessage('Change mask colour in notebook', - (self.current_mask.index, (r,g,b))) + (index, (r,g,b))) ps.Publisher().sendMessage('Set GUI items colour', colour_wx) if update: ps.Publisher().sendMessage('Update slice viewer') @@ -368,22 +366,20 @@ class Slice(object): self.current_mask = future_mask colour = future_mask.colour - index = future_mask.index + #index = future_mask.index self.SetMaskColour(index, colour, update=False) imagedata = future_mask.imagedata self.img_colours_mask.SetInput(imagedata) if self.current_mask.is_shown: - print 1 self.blend_filter.SetOpacity(1, self.current_mask.opacity) else: - print 2 self.blend_filter.SetOpacity(1, 0) self.blend_filter.Update() ps.Publisher().sendMessage('Set mask threshold in notebook', - (self.current_mask.index, + (index, self.current_mask.threshold_range)) ps.Publisher().sendMessage('Set threshold values in gradient', self.current_mask.threshold_range) diff --git a/invesalius/gui/data_notebook.py b/invesalius/gui/data_notebook.py index ff076f5..c6b3c3e 100644 --- a/invesalius/gui/data_notebook.py +++ b/invesalius/gui/data_notebook.py @@ -148,11 +148,13 @@ class ButtonControlPanel(wx.Panel): ps.Publisher().sendMessage('Create new mask', mask_name) def OnRemove(self): + print "button -- OnRemove" selected_items = self.parent.listctrl.GetSelected() if selected_items: + print selected_items + ps.Publisher().sendMessage('Remove masks', selected_items) for item in selected_items: self.parent.listctrl.RemoveMask(item) - ps.Publisher().sendMessage('Remove masks', selected_items) else: dlg.MaskSelectionRequiredForRemoval() @@ -175,6 +177,7 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): wx.ListCtrl.__init__(self, parent, ID, pos, size, style=wx.LC_REPORT) listmix.TextEditMixin.__init__(self) self.mask_list_index = {} + self.current_index = 0 self.__init_columns() self.__init_image_list() self.__bind_events_wx() @@ -201,12 +204,14 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): # Delete key if (sys.platform == 'darwin') and (keycode == wx.WXK_BACK): selected = self.GetSelected() - self.__remove_items() + #self.__remove_items() + ps.Publisher().sendMessage('Remove masks', selected) for item in selected: self.RemoveMask(item) elif (keycode == wx.WXK_DELETE): selected = self.GetSelected() - self.__remove_items() + #self.__remove_items() + ps.Publisher().sendMessage('Remove masks', selected) for item in selected: self.RemoveMask(item) @@ -220,6 +225,48 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): self.RemoveMask(item) ps.Publisher().sendMessage('Remove masks', selected_items) + def RemoveMask(self, index): + """ + Remove item given its index. + """ + print "Remove item" + # it is necessary to update internal dictionary + # that maps bitmap given item index + old_dict = self.mask_list_index + print "current_index", self.current_index + print "old_dict", old_dict + new_dict = {} + for i in old_dict: + if i < index: + new_dict[i] = old_dict[i] + if i > index: + new_dict[i-1] = old_dict[i] + self.mask_list_index = new_dict + print "new_dict", new_dict + + if new_dict and not index: + print "gotta case" + for key in new_dict: + if key == 0: + print ":)", key + self.SetItemImage(key, 1) + ps.Publisher().sendMessage('Show mask', (key, 1)) + else: + print ":(" + self.SetItemImage(key, 0) + + self.DeleteItem(index) + + if new_dict: + if self.current_index > index: + self.current_index -= 1 + elif self.current_index == index: + print "XXXXXXXXXXXXX" + self.current_index = 0 + self.SetItemImage(0, 1) + ps.Publisher().sendMessage('Show mask', (0, 1)) + + def OnCloseProject(self, pubsub_evt): @@ -229,7 +276,10 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): def OnChangeCurrentMask(self, pubsub_evt): mask_index = pubsub_evt.data try: + print "try" self.SetItemImage(mask_index, 1) + self.current_index = mask_index + print "except" except wx._core.PyAssertionError: #in SetItem(): invalid item index in SetItem pass @@ -279,6 +329,7 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): if key != index: self.SetItemImage(key, 0) ps.Publisher().sendMessage('Change mask selected',index) + self.current_index = index ps.Publisher().sendMessage('Show mask', (index, flag)) def CreateColourBitmap(self, colour): @@ -309,6 +360,8 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): for key in self.mask_list_index.keys(): if key != index: self.SetItemImage(key, 0) + self.current_index = index + def AddMask(self, pubsub_evt): index, mask_name, threshold_range, colour = pubsub_evt.data @@ -316,9 +369,10 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): image_index = self.imagelist.Add(image) self.mask_list_index[index] = image_index self.InsertNewItem(index, mask_name, str(threshold_range)) - + def EditMaskThreshold(self, pubsub_evt): index, threshold_range = pubsub_evt.data + print "EditMaskThreshold: ", index self.SetStringItem(index, 2, str(threshold_range)) def EditMaskColour(self, pubsub_evt): @@ -342,33 +396,7 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): selected.sort(reverse=True) return selected - def RemoveMask(self, index): - """ - Remove item given its index. - """ - # it is necessary to update internal dictionary - # that maps bitmap given item index - old_dict = self.mask_list_index - new_dict = {} - for i in old_dict: - if i < index: - new_dict[i] = old_dict[i] - if i > index: - new_dict[i-1] = old_dict[i] - self.mask_list_index = new_dict - if new_dict: - for key in new_dict: - if key == 0: - self.SetItemImage(key, 1) - ps.Publisher().sendMessage('Show mask', (key, 1)) - - # TODO: Understand why this is occuring and enhace code, so - # this excpet is not necessary - try: - self.DeleteItem(index) - except wx._core.PyAssertionError: - ul.debug("tried to remove inexistent index") #------------------------------------------------- class SurfacePage(wx.Panel): @@ -738,9 +766,11 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): """ Remove item given its index. """ + print "RemoveSurface" # it is necessary to update internal dictionary # that maps bitmap given item index old_dict = self.surface_list_index + print old_dict new_dict = {} for i in old_dict: if i < index: @@ -748,11 +778,9 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): if i > index: new_dict[i-1] = old_dict[i] self.surface_list_index = new_dict + print new_dict - try: - self.DeleteItem(index) - except wx._core.PyAssertionError: - ul.debug("tried to remove inexistent index") + self.DeleteItem(index) #------------------------------------------------- -- libgit2 0.21.2