Commit 7eed215fe59573380aec4c396a454fcc58e2aae6
1 parent
07680389
Exists in
master
and in
6 other branches
(Un)toggling toolbar buttons when (de)activating the relative style
Showing
3 changed files
with
123 additions
and
25 deletions
Show diff stats
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 |