Commit 7eed215fe59573380aec4c396a454fcc58e2aae6

Authored by Thiago Franco de Moraes
1 parent 07680389

(Un)toggling toolbar buttons when (de)activating the relative style

invesalius/data/styles.py
@@ -132,6 +132,8 @@ class DefaultInteractorStyle(BaseImageInteractorStyle): @@ -132,6 +132,8 @@ class DefaultInteractorStyle(BaseImageInteractorStyle):
132 def __init__(self, viewer): 132 def __init__(self, viewer):
133 BaseImageInteractorStyle.__init__(self, viewer) 133 BaseImageInteractorStyle.__init__(self, viewer)
134 134
  135 + self.state_code = const.STATE_DEFAULT
  136 +
135 self.viewer = viewer 137 self.viewer = viewer
136 138
137 # Zoom using right button 139 # Zoom using right button
@@ -194,6 +196,8 @@ class CrossInteractorStyle(DefaultInteractorStyle): @@ -194,6 +196,8 @@ class CrossInteractorStyle(DefaultInteractorStyle):
194 def __init__(self, viewer): 196 def __init__(self, viewer):
195 DefaultInteractorStyle.__init__(self, viewer) 197 DefaultInteractorStyle.__init__(self, viewer)
196 198
  199 + self.state_code = const.SLICE_STATE_CROSS
  200 +
197 self.viewer = viewer 201 self.viewer = viewer
198 self.orientation = viewer.orientation 202 self.orientation = viewer.orientation
199 self.slice_actor = viewer.slice_data.actor 203 self.slice_actor = viewer.slice_data.actor
@@ -207,9 +211,13 @@ class CrossInteractorStyle(DefaultInteractorStyle): @@ -207,9 +211,13 @@ class CrossInteractorStyle(DefaultInteractorStyle):
207 211
208 def SetUp(self): 212 def SetUp(self):
209 self.viewer._set_cross_visibility(1) 213 self.viewer._set_cross_visibility(1)
  214 + Publisher.sendMessage('Toggle toolbar item',
  215 + (self.state_code, True))
210 216
211 def CleanUp(self): 217 def CleanUp(self):
212 self.viewer._set_cross_visibility(0) 218 self.viewer._set_cross_visibility(0)
  219 + Publisher.sendMessage('Toggle toolbar item',
  220 + (self.state_code, False))
213 221
214 def OnCrossMouseClick(self, obj, evt): 222 def OnCrossMouseClick(self, obj, evt):
215 iren = obj.GetInteractor() 223 iren = obj.GetInteractor()
@@ -259,6 +267,8 @@ class WWWLInteractorStyle(DefaultInteractorStyle): @@ -259,6 +267,8 @@ class WWWLInteractorStyle(DefaultInteractorStyle):
259 def __init__(self, viewer): 267 def __init__(self, viewer):
260 DefaultInteractorStyle.__init__(self, viewer) 268 DefaultInteractorStyle.__init__(self, viewer)
261 269
  270 + self.state_code = const.STATE_WL
  271 +
262 self.viewer = viewer 272 self.viewer = viewer
263 273
264 self.last_x = 0 274 self.last_x = 0
@@ -272,11 +282,15 @@ class WWWLInteractorStyle(DefaultInteractorStyle): @@ -272,11 +282,15 @@ class WWWLInteractorStyle(DefaultInteractorStyle):
272 282
273 def SetUp(self): 283 def SetUp(self):
274 self.viewer.on_wl = True 284 self.viewer.on_wl = True
  285 + Publisher.sendMessage('Toggle toolbar item',
  286 + (self.state_code, True))
275 self.viewer.canvas.draw_list.append(self.viewer.wl_text) 287 self.viewer.canvas.draw_list.append(self.viewer.wl_text)
276 self.viewer.UpdateCanvas() 288 self.viewer.UpdateCanvas()
277 289
278 def CleanUp(self): 290 def CleanUp(self):
279 self.viewer.on_wl = False 291 self.viewer.on_wl = False
  292 + Publisher.sendMessage('Toggle toolbar item',
  293 + (self.state_code, False))
280 if self.viewer.wl_text is not None: 294 if self.viewer.wl_text is not None:
281 self.viewer.canvas.draw_list.remove(self.viewer.wl_text) 295 self.viewer.canvas.draw_list.remove(self.viewer.wl_text)
282 self.viewer.UpdateCanvas() 296 self.viewer.UpdateCanvas()
@@ -319,6 +333,8 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): @@ -319,6 +333,8 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle):
319 def __init__(self, viewer): 333 def __init__(self, viewer):
320 DefaultInteractorStyle.__init__(self, viewer) 334 DefaultInteractorStyle.__init__(self, viewer)
321 335
  336 + self.state_code = const.STATE_MEASURE_DISTANCE
  337 +
322 self.viewer = viewer 338 self.viewer = viewer
323 self.orientation = viewer.orientation 339 self.orientation = viewer.orientation
324 self.slice_data = viewer.slice_data 340 self.slice_data = viewer.slice_data
@@ -354,6 +370,16 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): @@ -354,6 +370,16 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle):
354 self.AddObserver("MouseMoveEvent", self.OnMoveMeasurePoint) 370 self.AddObserver("MouseMoveEvent", self.OnMoveMeasurePoint)
355 self.AddObserver("LeaveEvent", self.OnLeaveMeasureInteractor) 371 self.AddObserver("LeaveEvent", self.OnLeaveMeasureInteractor)
356 372
  373 + def SetUp(self):
  374 + Publisher.sendMessage('Toggle toolbar item',
  375 + (self.state_code, True))
  376 +
  377 + def CleanUp(self):
  378 + Publisher.sendMessage('Toggle toolbar item',
  379 + (self.state_code, False))
  380 + self.picker.PickFromListOff()
  381 + Publisher.sendMessage("Remove incomplete measurements")
  382 +
357 def OnInsertMeasurePoint(self, obj, evt): 383 def OnInsertMeasurePoint(self, obj, evt):
358 slice_number = self.slice_data.number 384 slice_number = self.slice_data.number
359 x, y, z = self._get_pos_clicked() 385 x, y, z = self._get_pos_clicked()
@@ -442,10 +468,6 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): @@ -442,10 +468,6 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle):
442 self.viewer.UpdateCanvas() 468 self.viewer.UpdateCanvas()
443 self.viewer.scroll_enabled = True 469 self.viewer.scroll_enabled = True
444 470
445 - def CleanUp(self):  
446 - self.picker.PickFromListOff()  
447 - Publisher.sendMessage("Remove incomplete measurements")  
448 -  
449 def _get_pos_clicked(self): 471 def _get_pos_clicked(self):
450 iren = self.viewer.interactor 472 iren = self.viewer.interactor
451 mx,my = iren.GetEventPosition() 473 mx,my = iren.GetEventPosition()
@@ -496,6 +518,8 @@ class AngularMeasureInteractorStyle(LinearMeasureInteractorStyle): @@ -496,6 +518,8 @@ class AngularMeasureInteractorStyle(LinearMeasureInteractorStyle):
496 LinearMeasureInteractorStyle.__init__(self, viewer) 518 LinearMeasureInteractorStyle.__init__(self, viewer)
497 self._type = const.ANGULAR 519 self._type = const.ANGULAR
498 520
  521 + self.state_code = const.STATE_MEASURE_ANGLE
  522 +
499 523
500 class PanMoveInteractorStyle(DefaultInteractorStyle): 524 class PanMoveInteractorStyle(DefaultInteractorStyle):
501 """ 525 """
@@ -504,11 +528,21 @@ class PanMoveInteractorStyle(DefaultInteractorStyle): @@ -504,11 +528,21 @@ class PanMoveInteractorStyle(DefaultInteractorStyle):
504 def __init__(self, viewer): 528 def __init__(self, viewer):
505 DefaultInteractorStyle.__init__(self, viewer) 529 DefaultInteractorStyle.__init__(self, viewer)
506 530
  531 + self.state_code = const.STATE_PAN
  532 +
507 self.viewer = viewer 533 self.viewer = viewer
508 534
509 self.AddObserver("MouseMoveEvent", self.OnPanMove) 535 self.AddObserver("MouseMoveEvent", self.OnPanMove)
510 self.viewer.interactor.Bind(wx.EVT_LEFT_DCLICK, self.OnUnspan) 536 self.viewer.interactor.Bind(wx.EVT_LEFT_DCLICK, self.OnUnspan)
511 537
  538 + def SetUp(self):
  539 + Publisher.sendMessage('Toggle toolbar item',
  540 + (self.state_code, True))
  541 +
  542 + def CleanUp(self):
  543 + Publisher.sendMessage('Toggle toolbar item',
  544 + (self.state_code, False))
  545 +
512 def OnPanMove(self, obj, evt): 546 def OnPanMove(self, obj, evt):
513 if self.left_pressed: 547 if self.left_pressed:
514 obj.Pan() 548 obj.Pan()
@@ -529,11 +563,21 @@ class SpinInteractorStyle(DefaultInteractorStyle): @@ -529,11 +563,21 @@ class SpinInteractorStyle(DefaultInteractorStyle):
529 def __init__(self, viewer): 563 def __init__(self, viewer):
530 DefaultInteractorStyle.__init__(self, viewer) 564 DefaultInteractorStyle.__init__(self, viewer)
531 565
  566 + self.state_code = const.STATE_SPIN
  567 +
532 self.viewer = viewer 568 self.viewer = viewer
533 569
534 self.AddObserver("MouseMoveEvent", self.OnSpinMove) 570 self.AddObserver("MouseMoveEvent", self.OnSpinMove)
535 self.viewer.interactor.Bind(wx.EVT_LEFT_DCLICK, self.OnUnspin) 571 self.viewer.interactor.Bind(wx.EVT_LEFT_DCLICK, self.OnUnspin)
536 572
  573 + def SetUp(self):
  574 + Publisher.sendMessage('Toggle toolbar item',
  575 + (self.state_code, True))
  576 +
  577 + def CleanUp(self):
  578 + Publisher.sendMessage('Toggle toolbar item',
  579 + (self.state_code, False))
  580 +
537 def OnSpinMove(self, obj, evt): 581 def OnSpinMove(self, obj, evt):
538 iren = obj.GetInteractor() 582 iren = obj.GetInteractor()
539 mouse_x, mouse_y = iren.GetLastEventPosition() 583 mouse_x, mouse_y = iren.GetLastEventPosition()
@@ -563,11 +607,21 @@ class ZoomInteractorStyle(DefaultInteractorStyle): @@ -563,11 +607,21 @@ class ZoomInteractorStyle(DefaultInteractorStyle):
563 def __init__(self, viewer): 607 def __init__(self, viewer):
564 DefaultInteractorStyle.__init__(self, viewer) 608 DefaultInteractorStyle.__init__(self, viewer)
565 609
  610 + self.state_code = const.STATE_ZOOM
  611 +
566 self.viewer = viewer 612 self.viewer = viewer
567 613
568 self.AddObserver("MouseMoveEvent", self.OnZoomMoveLeft) 614 self.AddObserver("MouseMoveEvent", self.OnZoomMoveLeft)
569 self.viewer.interactor.Bind(wx.EVT_LEFT_DCLICK, self.OnUnZoom) 615 self.viewer.interactor.Bind(wx.EVT_LEFT_DCLICK, self.OnUnZoom)
570 616
  617 + def SetUp(self):
  618 + Publisher.sendMessage('Toggle toolbar item',
  619 + (self.state_code, True))
  620 +
  621 + def CleanUp(self):
  622 + Publisher.sendMessage('Toggle toolbar item',
  623 + (self.state_code, False))
  624 +
571 def OnZoomMoveLeft(self, obj, evt): 625 def OnZoomMoveLeft(self, obj, evt):
572 if self.left_pressed: 626 if self.left_pressed:
573 obj.Dolly() 627 obj.Dolly()
@@ -591,6 +645,16 @@ class ZoomSLInteractorStyle(vtk.vtkInteractorStyleRubberBandZoom): @@ -591,6 +645,16 @@ class ZoomSLInteractorStyle(vtk.vtkInteractorStyleRubberBandZoom):
591 self.viewer = viewer 645 self.viewer = viewer
592 self.viewer.interactor.Bind(wx.EVT_LEFT_DCLICK, self.OnUnZoom) 646 self.viewer.interactor.Bind(wx.EVT_LEFT_DCLICK, self.OnUnZoom)
593 647
  648 + self.state_code = const.STATE_ZOOM_SL
  649 +
  650 + def SetUp(self):
  651 + Publisher.sendMessage('Toggle toolbar item',
  652 + (self.state_code, True))
  653 +
  654 + def CleanUp(self):
  655 + Publisher.sendMessage('Toggle toolbar item',
  656 + (self.state_code, False))
  657 +
594 def OnUnZoom(self, evt): 658 def OnUnZoom(self, evt):
595 mouse_x, mouse_y = self.viewer.interactor.GetLastEventPosition() 659 mouse_x, mouse_y = self.viewer.interactor.GetLastEventPosition()
596 ren = self.viewer.interactor.FindPokedRenderer(mouse_x, mouse_y) 660 ren = self.viewer.interactor.FindPokedRenderer(mouse_x, mouse_y)
@@ -608,11 +672,21 @@ class ChangeSliceInteractorStyle(DefaultInteractorStyle): @@ -608,11 +672,21 @@ class ChangeSliceInteractorStyle(DefaultInteractorStyle):
608 def __init__(self, viewer): 672 def __init__(self, viewer):
609 DefaultInteractorStyle.__init__(self, viewer) 673 DefaultInteractorStyle.__init__(self, viewer)
610 674
  675 + self.state_code = const.SLICE_STATE_SCROLL
  676 +
611 self.viewer = viewer 677 self.viewer = viewer
612 678
613 self.AddObserver("MouseMoveEvent", self.OnChangeSliceMove) 679 self.AddObserver("MouseMoveEvent", self.OnChangeSliceMove)
614 self.AddObserver("LeftButtonPressEvent", self.OnChangeSliceClick) 680 self.AddObserver("LeftButtonPressEvent", self.OnChangeSliceClick)
615 681
  682 + def SetUp(self):
  683 + Publisher.sendMessage('Toggle toolbar item',
  684 + (self.state_code, True))
  685 +
  686 + def CleanUp(self):
  687 + Publisher.sendMessage('Toggle toolbar item',
  688 + (self.state_code, False))
  689 +
616 def OnChangeSliceMove(self, evt, obj): 690 def OnChangeSliceMove(self, evt, obj):
617 if self.left_pressed: 691 if self.left_pressed:
618 min = 0 692 min = 0
@@ -650,6 +724,8 @@ class EditorInteractorStyle(DefaultInteractorStyle): @@ -650,6 +724,8 @@ class EditorInteractorStyle(DefaultInteractorStyle):
650 def __init__(self, viewer): 724 def __init__(self, viewer):
651 DefaultInteractorStyle.__init__(self, viewer) 725 DefaultInteractorStyle.__init__(self, viewer)
652 726
  727 + self.state_code = const.SLICE_STATE_EDITOR
  728 +
653 self.viewer = viewer 729 self.viewer = viewer
654 self.orientation = self.viewer.orientation 730 self.orientation = self.viewer.orientation
655 731
@@ -935,6 +1011,8 @@ class WaterShedInteractorStyle(DefaultInteractorStyle): @@ -935,6 +1011,8 @@ class WaterShedInteractorStyle(DefaultInteractorStyle):
935 def __init__(self, viewer): 1011 def __init__(self, viewer):
936 DefaultInteractorStyle.__init__(self, viewer) 1012 DefaultInteractorStyle.__init__(self, viewer)
937 1013
  1014 + self.state_code = const.SLICE_STATE_WATERSHED
  1015 +
938 self.viewer = viewer 1016 self.viewer = viewer
939 self.orientation = self.viewer.orientation 1017 self.orientation = self.viewer.orientation
940 self.matrix = None 1018 self.matrix = None
@@ -1402,6 +1480,8 @@ class ReorientImageInteractorStyle(DefaultInteractorStyle): @@ -1402,6 +1480,8 @@ class ReorientImageInteractorStyle(DefaultInteractorStyle):
1402 def __init__(self, viewer): 1480 def __init__(self, viewer):
1403 DefaultInteractorStyle.__init__(self, viewer) 1481 DefaultInteractorStyle.__init__(self, viewer)
1404 1482
  1483 + self.state_code = const.SLICE_STATE_REORIENT
  1484 +
1405 self.viewer = viewer 1485 self.viewer = viewer
1406 1486
1407 self.line1 = None 1487 self.line1 = None
@@ -1648,6 +1728,8 @@ class FloodFillMaskInteractorStyle(DefaultInteractorStyle): @@ -1648,6 +1728,8 @@ class FloodFillMaskInteractorStyle(DefaultInteractorStyle):
1648 def __init__(self, viewer): 1728 def __init__(self, viewer):
1649 DefaultInteractorStyle.__init__(self, viewer) 1729 DefaultInteractorStyle.__init__(self, viewer)
1650 1730
  1731 + self.state_code = const.SLICE_STATE_MASK_FFILL
  1732 +
1651 self.viewer = viewer 1733 self.viewer = viewer
1652 self.orientation = self.viewer.orientation 1734 self.orientation = self.viewer.orientation
1653 1735
@@ -1753,20 +1835,22 @@ class FloodFillMaskInteractorStyle(DefaultInteractorStyle): @@ -1753,20 +1835,22 @@ class FloodFillMaskInteractorStyle(DefaultInteractorStyle):
1753 1835
1754 1836
1755 class RemoveMaskPartsInteractorStyle(FloodFillMaskInteractorStyle): 1837 class RemoveMaskPartsInteractorStyle(FloodFillMaskInteractorStyle):
1756 - def __init__(self, viewer):  
1757 - FloodFillMaskInteractorStyle.__init__(self, viewer)  
1758 - # InVesalius uses the following values to mark selected parts in a  
1759 - # mask:  
1760 - # 255 - Threshold  
1761 - # 254 - Manual edition and floodfill  
1762 - # 253 - Watershed  
1763 - self.t0 = 253  
1764 - self.t1 = 255  
1765 - self.fill_value = 1  
1766 -  
1767 - self._dlg_title = _(u"Remove parts")  
1768 - self._progr_title = _(u"Remove part")  
1769 - self._progr_msg = _(u"Removing part ...") 1838 + def __init__(self, viewer):
  1839 + FloodFillMaskInteractorStyle.__init__(self, viewer)
  1840 +
  1841 + self.state_code = const.SLICE_STATE_REMOVE_MASK_PARTS
  1842 + # InVesalius uses the following values to mark selected parts in a
  1843 + # mask:
  1844 + # 255 - Threshold
  1845 + # 254 - Manual edition and floodfill
  1846 + # 253 - Watershed
  1847 + self.t0 = 253
  1848 + self.t1 = 255
  1849 + self.fill_value = 1
  1850 +
  1851 + self._dlg_title = _(u"Remove parts")
  1852 + self._progr_title = _(u"Remove part")
  1853 + self._progr_msg = _(u"Removing part ...")
1770 1854
1771 class CropMaskConfig(object): 1855 class CropMaskConfig(object):
1772 __metaclass__= utils.Singleton 1856 __metaclass__= utils.Singleton
@@ -1774,17 +1858,18 @@ class CropMaskConfig(object): @@ -1774,17 +1858,18 @@ class CropMaskConfig(object):
1774 self.dlg_visible = False 1858 self.dlg_visible = False
1775 1859
1776 class CropMaskInteractorStyle(DefaultInteractorStyle): 1860 class CropMaskInteractorStyle(DefaultInteractorStyle):
1777 -  
1778 def __init__(self, viewer): 1861 def __init__(self, viewer):
1779 DefaultInteractorStyle.__init__(self, viewer) 1862 DefaultInteractorStyle.__init__(self, viewer)
1780 1863
  1864 + self.state_code = const.SLICE_STATE_CROP_MASK
  1865 +
1781 self.viewer = viewer 1866 self.viewer = viewer
1782 self.orientation = self.viewer.orientation 1867 self.orientation = self.viewer.orientation
1783 self.picker = vtk.vtkWorldPointPicker() 1868 self.picker = vtk.vtkWorldPointPicker()
1784 self.slice_actor = viewer.slice_data.actor 1869 self.slice_actor = viewer.slice_data.actor
1785 self.slice_data = viewer.slice_data 1870 self.slice_data = viewer.slice_data
1786 self.draw_retangle = None 1871 self.draw_retangle = None
1787 - 1872 +
1788 self.config = CropMaskConfig() 1873 self.config = CropMaskConfig()
1789 1874
1790 def __evts__(self): 1875 def __evts__(self):
@@ -1883,6 +1968,8 @@ class SelectMaskPartsInteractorStyle(DefaultInteractorStyle): @@ -1883,6 +1968,8 @@ class SelectMaskPartsInteractorStyle(DefaultInteractorStyle):
1883 def __init__(self, viewer): 1968 def __init__(self, viewer):
1884 DefaultInteractorStyle.__init__(self, viewer) 1969 DefaultInteractorStyle.__init__(self, viewer)
1885 1970
  1971 + self.state_code = const.SLICE_STATE_SELECT_MASK_PARTS
  1972 +
1886 self.viewer = viewer 1973 self.viewer = viewer
1887 self.orientation = self.viewer.orientation 1974 self.orientation = self.viewer.orientation
1888 1975
@@ -2003,6 +2090,8 @@ class FloodFillSegmentInteractorStyle(DefaultInteractorStyle): @@ -2003,6 +2090,8 @@ class FloodFillSegmentInteractorStyle(DefaultInteractorStyle):
2003 def __init__(self, viewer): 2090 def __init__(self, viewer):
2004 DefaultInteractorStyle.__init__(self, viewer) 2091 DefaultInteractorStyle.__init__(self, viewer)
2005 2092
  2093 + self.state_code = const.SLICE_STATE_FFILL_SEGMENTATION
  2094 +
2006 self.viewer = viewer 2095 self.viewer = viewer
2007 self.orientation = self.viewer.orientation 2096 self.orientation = self.viewer.orientation
2008 2097
@@ -2237,9 +2326,6 @@ def get_style(style): @@ -2237,9 +2326,6 @@ def get_style(style):
2237 const.SLICE_STATE_REMOVE_MASK_PARTS: RemoveMaskPartsInteractorStyle, 2326 const.SLICE_STATE_REMOVE_MASK_PARTS: RemoveMaskPartsInteractorStyle,
2238 const.SLICE_STATE_SELECT_MASK_PARTS: SelectMaskPartsInteractorStyle, 2327 const.SLICE_STATE_SELECT_MASK_PARTS: SelectMaskPartsInteractorStyle,
2239 const.SLICE_STATE_FFILL_SEGMENTATION: FloodFillSegmentInteractorStyle, 2328 const.SLICE_STATE_FFILL_SEGMENTATION: FloodFillSegmentInteractorStyle,
2240 - const.SLICE_STATE_CROP_MASK:CropMaskInteractorStyle, 2329 + const.SLICE_STATE_CROP_MASK: CropMaskInteractorStyle,
2241 } 2330 }
2242 return STYLES[style] 2331 return STYLES[style]
2243 -  
2244 -  
2245 -  
invesalius/gui/frame.py
@@ -1302,6 +1302,7 @@ class ObjectToolBar(AuiToolBar): @@ -1302,6 +1302,7 @@ class ObjectToolBar(AuiToolBar):
1302 sub(self._UntoggleAllItems, 'Untoggle object toolbar items') 1302 sub(self._UntoggleAllItems, 'Untoggle object toolbar items')
1303 sub(self._ToggleLinearMeasure, "Set tool linear measure") 1303 sub(self._ToggleLinearMeasure, "Set tool linear measure")
1304 sub(self._ToggleAngularMeasure, "Set tool angular measure") 1304 sub(self._ToggleAngularMeasure, "Set tool angular measure")
  1305 + sub(self.ToggleItem, 'Toggle toolbar item')
1305 1306
1306 def __bind_events_wx(self): 1307 def __bind_events_wx(self):
1307 """ 1308 """
@@ -1487,6 +1488,12 @@ class ObjectToolBar(AuiToolBar): @@ -1487,6 +1488,12 @@ class ObjectToolBar(AuiToolBar):
1487 self.ToggleTool(item, False) 1488 self.ToggleTool(item, False)
1488 evt.Skip() 1489 evt.Skip()
1489 1490
  1491 + def ToggleItem(self, evt):
  1492 + _id, value = evt.data
  1493 + if _id in self.enable_items:
  1494 + self.ToggleTool(_id, value)
  1495 + self.Refresh()
  1496 +
1490 def SetStateProjectClose(self): 1497 def SetStateProjectClose(self):
1491 """ 1498 """
1492 Disable menu items (e.g. zoom) when project is closed. 1499 Disable menu items (e.g. zoom) when project is closed.
@@ -1567,6 +1574,7 @@ class SliceToolBar(AuiToolBar): @@ -1567,6 +1574,7 @@ class SliceToolBar(AuiToolBar):
1567 sub(self._EnableState, "Enable state project") 1574 sub(self._EnableState, "Enable state project")
1568 sub(self._UntoggleAllItems, 'Untoggle slice toolbar items') 1575 sub(self._UntoggleAllItems, 'Untoggle slice toolbar items')
1569 sub(self.OnToggle, 'Toggle Cross') 1576 sub(self.OnToggle, 'Toggle Cross')
  1577 + sub(self.ToggleItem, 'Toggle toolbar item')
1570 1578
1571 def __bind_events_wx(self): 1579 def __bind_events_wx(self):
1572 """ 1580 """
@@ -1632,6 +1640,11 @@ class SliceToolBar(AuiToolBar): @@ -1632,6 +1640,11 @@ class SliceToolBar(AuiToolBar):
1632 ##print ">>>", self.sst.IsToggled() 1640 ##print ">>>", self.sst.IsToggled()
1633 #print ">>>", self.sst.GetState() 1641 #print ">>>", self.sst.GetState()
1634 1642
  1643 + def ToggleItem(self, evt):
  1644 + _id, value = evt.data
  1645 + if _id in self.enable_items:
  1646 + self.ToggleTool(_id, value)
  1647 + self.Refresh()
1635 1648
1636 def SetStateProjectClose(self): 1649 def SetStateProjectClose(self):
1637 """ 1650 """
invesalius/style.py
@@ -111,7 +111,6 @@ class StyleStateManager(object): @@ -111,7 +111,6 @@ class StyleStateManager(object):
111 return self.stack[max_level] 111 return self.stack[max_level]
112 112
113 def GetActualState(self): 113 def GetActualState(self):
114 - print self.stack.keys()  
115 max_level = max(self.stack.keys()) 114 max_level = max(self.stack.keys())
116 state = self.stack[max_level] 115 state = self.stack[max_level]
117 return state 116 return state