Commit 298539e5125a90407f2f4b550efe619e2e0bf294

Authored by Renan
Committed by Thiago Franco de Moraes
1 parent 9aa5db75

Menu enable navigation (#72)

Created a mode menu, whose is possible to actived navigation mode.
-This menu was based on view menu.
-Once the navigation fold_panel is created the navigation mode button just show/hide the fold_panel.
-If mode config file is set 0 the navigation mode item is unchecked, if is set 1 the navigation mode item is checked.
-If navigation is ON the navigation mode button is disable.
-Navigation mode restricted to windows platform
invesalius/constants.py
@@ -488,8 +488,8 @@ VTK_WARNING = 0 @@ -488,8 +488,8 @@ VTK_WARNING = 0
488 [ID_DICOM_IMPORT, ID_PROJECT_OPEN, ID_PROJECT_SAVE_AS, ID_PROJECT_SAVE, 488 [ID_DICOM_IMPORT, ID_PROJECT_OPEN, ID_PROJECT_SAVE_AS, ID_PROJECT_SAVE,
489 ID_PROJECT_CLOSE, ID_PROJECT_INFO, ID_SAVE_SCREENSHOT, ID_DICOM_LOAD_NET, 489 ID_PROJECT_CLOSE, ID_PROJECT_INFO, ID_SAVE_SCREENSHOT, ID_DICOM_LOAD_NET,
490 ID_PRINT_SCREENSHOT, ID_IMPORT_OTHERS_FILES, ID_PREFERENCES, ID_DICOM_NETWORK, 490 ID_PRINT_SCREENSHOT, ID_IMPORT_OTHERS_FILES, ID_PREFERENCES, ID_DICOM_NETWORK,
491 -ID_TIFF_JPG_PNG, ID_VIEW_INTERPOLATED, ID_ANALYZE_IMPORT, ID_NIFTI_IMPORT,  
492 -ID_PARREC_IMPORT] = [wx.NewId() for number in range(17)] 491 +ID_TIFF_JPG_PNG, ID_VIEW_INTERPOLATED, ID_MODE_NAVIGATION, ID_ANALYZE_IMPORT,
  492 +ID_NIFTI_IMPORT, ID_PARREC_IMPORT] = [wx.NewId() for number in range(18)]
493 ID_EXIT = wx.ID_EXIT 493 ID_EXIT = wx.ID_EXIT
494 ID_ABOUT = wx.ID_ABOUT 494 ID_ABOUT = wx.ID_ABOUT
495 495
invesalius/gui/default_tasks.py
@@ -284,9 +284,11 @@ class UpperTaskPanel(wx.Panel): @@ -284,9 +284,11 @@ class UpperTaskPanel(wx.Panel):
284 284
285 fold_panel.Expand(fold_panel.GetFoldPanel(0)) 285 fold_panel.Expand(fold_panel.GetFoldPanel(0))
286 self.fold_panel = fold_panel 286 self.fold_panel = fold_panel
  287 + self.image_list = image_list
287 288
288 sizer = wx.BoxSizer(wx.VERTICAL) 289 sizer = wx.BoxSizer(wx.VERTICAL)
289 sizer.Add(fold_panel, 1, wx.GROW|wx.EXPAND) 290 sizer.Add(fold_panel, 1, wx.GROW|wx.EXPAND)
  291 + self.sizer = sizer
290 self.SetSizerAndFit(sizer) 292 self.SetSizerAndFit(sizer)
291 293
292 self.SetStateProjectClose() 294 self.SetStateProjectClose()
@@ -298,6 +300,7 @@ class UpperTaskPanel(wx.Panel): @@ -298,6 +300,7 @@ class UpperTaskPanel(wx.Panel):
298 Publisher.subscribe(self.OnOverwrite, 'Create surface from index') 300 Publisher.subscribe(self.OnOverwrite, 'Create surface from index')
299 Publisher.subscribe(self.OnFoldSurface, 'Fold surface task') 301 Publisher.subscribe(self.OnFoldSurface, 'Fold surface task')
300 Publisher.subscribe(self.OnFoldExport, 'Fold export task') 302 Publisher.subscribe(self.OnFoldExport, 'Fold export task')
  303 + Publisher.subscribe(self.SetNavigationMode, "Set navigation mode")
301 304
302 def OnOverwrite(self, pubsub_evt): 305 def OnOverwrite(self, pubsub_evt):
303 self.overwrite = pubsub_evt.data['options']['overwrite'] 306 self.overwrite = pubsub_evt.data['options']['overwrite']
@@ -316,6 +319,37 @@ class UpperTaskPanel(wx.Panel): @@ -316,6 +319,37 @@ class UpperTaskPanel(wx.Panel):
316 else: 319 else:
317 self.SetStateProjectClose() 320 self.SetStateProjectClose()
318 321
  322 + def SetNavigationMode(self, pubsub_evt):
  323 + self.navigation_mode_status = status = pubsub_evt.data
  324 + name = _("Navigation system")
  325 + panel = navigator.TaskPanel
  326 + if status and (self.fold_panel.GetCount()<=4):
  327 + # Create panel
  328 + item = self.fold_panel.AddFoldPanel("%d. %s"%(5, name),
  329 + collapsed=True,
  330 + foldIcons=self.image_list)
  331 + style = self.fold_panel.GetCaptionStyle(item)
  332 + col = style.GetFirstColour()
  333 +
  334 + # Add panel to FoldPanel
  335 + self.fold_panel.AddFoldPanelWindow(item,
  336 + panel(item),
  337 + #Spacing=0,
  338 + leftSpacing=0,
  339 + rightSpacing=0)
  340 + self.enable_items.append(item)
  341 + if not self.fold_panel.GetFoldPanel(2).IsEnabled():
  342 + item.Disable()
  343 +
  344 + elif status and (self.fold_panel.GetCount()>4):
  345 + self.fold_panel.GetFoldPanel(4).Show()
  346 +
  347 + else:
  348 + self.fold_panel.GetFoldPanel(4).Hide()
  349 + self.sizer.Layout()
  350 +
  351 +
  352 +
319 def SetStateProjectClose(self): 353 def SetStateProjectClose(self):
320 self.fold_panel.Expand(self.fold_panel.GetFoldPanel(0)) 354 self.fold_panel.Expand(self.fold_panel.GetFoldPanel(0))
321 for item in self.enable_items: 355 for item in self.enable_items:
invesalius/gui/frame.py
@@ -94,11 +94,13 @@ class Frame(wx.Frame): @@ -94,11 +94,13 @@ class Frame(wx.Frame):
94 self.SetSize(self.GetSize()) 94 self.SetSize(self.GetSize())
95 #self.SetSize(wx.Size(1024, 748)) 95 #self.SetSize(wx.Size(1024, 748))
96 96
  97 + self._show_navigator_message = True
97 98
98 #to control check and unckeck of menu view -> interpolated_slices 99 #to control check and unckeck of menu view -> interpolated_slices
99 main_menu = MenuBar(self) 100 main_menu = MenuBar(self)
100 101
101 self.actived_interpolated_slices = main_menu.view_menu 102 self.actived_interpolated_slices = main_menu.view_menu
  103 + self.actived_navigation_mode = main_menu.mode_menu
102 104
103 # Set menus, status and task bar 105 # Set menus, status and task bar
104 self.SetMenuBar(main_menu) 106 self.SetMenuBar(main_menu)
@@ -467,12 +469,22 @@ class Frame(wx.Frame): @@ -467,12 +469,22 @@ class Frame(wx.Frame):
467 self.OnInterpolatedSlices(True) 469 self.OnInterpolatedSlices(True)
468 else: 470 else:
469 self.OnInterpolatedSlices(False) 471 self.OnInterpolatedSlices(False)
  472 +
  473 + elif id == const.ID_MODE_NAVIGATION:
  474 + st = self.actived_navigation_mode.IsChecked(const.ID_MODE_NAVIGATION)
  475 + self.OnNavigationMode(st)
  476 +
470 elif id == const.ID_CROP_MASK: 477 elif id == const.ID_CROP_MASK:
471 self.OnCropMask() 478 self.OnCropMask()
472 479
473 def OnInterpolatedSlices(self, status): 480 def OnInterpolatedSlices(self, status):
474 Publisher.sendMessage('Set interpolated slices', status) 481 Publisher.sendMessage('Set interpolated slices', status)
475 482
  483 + def OnNavigationMode(self, status):
  484 + if status and self._show_navigator_message and sys.platform != 'win32':
  485 + wx.MessageBox(_('Currently the Navigation mode is only working on Windows'), 'Info', wx.OK | wx.ICON_INFORMATION)
  486 + self._show_navigator_message = False
  487 + Publisher.sendMessage('Set navigation mode', status)
476 488
477 def OnSize(self, evt): 489 def OnSize(self, evt):
478 """ 490 """
@@ -513,6 +525,7 @@ class Frame(wx.Frame): @@ -513,6 +525,7 @@ class Frame(wx.Frame):
513 Publisher.sendMessage('Reset Reaycasting') 525 Publisher.sendMessage('Reset Reaycasting')
514 Publisher.sendMessage('Update Slice Interpolation') 526 Publisher.sendMessage('Update Slice Interpolation')
515 Publisher.sendMessage('Update Slice Interpolation MenuBar') 527 Publisher.sendMessage('Update Slice Interpolation MenuBar')
  528 + Publisher.sendMessage('Update Navigation Mode MenuBar')
516 Publisher.sendMessage('Update Surface Interpolation') 529 Publisher.sendMessage('Update Surface Interpolation')
517 530
518 def ShowAbout(self): 531 def ShowAbout(self):
@@ -660,11 +673,13 @@ class MenuBar(wx.MenuBar): @@ -660,11 +673,13 @@ class MenuBar(wx.MenuBar):
660 sub(self.OnEnableState, "Enable state project") 673 sub(self.OnEnableState, "Enable state project")
661 sub(self.OnEnableUndo, "Enable undo") 674 sub(self.OnEnableUndo, "Enable undo")
662 sub(self.OnEnableRedo, "Enable redo") 675 sub(self.OnEnableRedo, "Enable redo")
  676 + sub(self.OnEnableNavigation, "Navigation Status")
663 677
664 sub(self.OnAddMask, "Add mask") 678 sub(self.OnAddMask, "Add mask")
665 sub(self.OnRemoveMasks, "Remove masks") 679 sub(self.OnRemoveMasks, "Remove masks")
666 sub(self.OnShowMask, "Show mask") 680 sub(self.OnShowMask, "Show mask")
667 sub(self.OnUpdateSliceInterpolation, "Update Slice Interpolation MenuBar") 681 sub(self.OnUpdateSliceInterpolation, "Update Slice Interpolation MenuBar")
  682 + sub(self.OnUpdateNavigationMode, "Update Navigation Mode MenuBar")
668 683
669 self.num_masks = 0 684 self.num_masks = 0
670 685
@@ -835,6 +850,15 @@ class MenuBar(wx.MenuBar): @@ -835,6 +850,15 @@ class MenuBar(wx.MenuBar):
835 options_menu = wx.Menu() 850 options_menu = wx.Menu()
836 options_menu.Append(const.ID_PREFERENCES, _("Preferences...")) 851 options_menu.Append(const.ID_PREFERENCES, _("Preferences..."))
837 852
  853 + #Mode
  854 + self.mode_menu = mode_menu = wx.Menu()
  855 + mode_menu.Append(const.ID_MODE_NAVIGATION, _(u'Navigation mode'), "", wx.ITEM_CHECK)
  856 +
  857 + v = self.NavigationModeStatus()
  858 + self.mode_menu.Check(const.ID_MODE_NAVIGATION, v)
  859 +
  860 + self.actived_navigation_mode = self.mode_menu
  861 +
838 # HELP 862 # HELP
839 help_menu = wx.Menu() 863 help_menu = wx.Menu()
840 help_menu.Append(const.ID_START, _("Getting started...")) 864 help_menu.Append(const.ID_START, _("Getting started..."))
@@ -854,6 +878,7 @@ class MenuBar(wx.MenuBar): @@ -854,6 +878,7 @@ class MenuBar(wx.MenuBar):
854 self.Append(tools_menu, _(u"Tools")) 878 self.Append(tools_menu, _(u"Tools"))
855 #self.Append(tools_menu, "Tools") 879 #self.Append(tools_menu, "Tools")
856 self.Append(options_menu, _("Options")) 880 self.Append(options_menu, _("Options"))
  881 + self.Append(mode_menu, _("Mode"))
857 self.Append(help_menu, _("Help")) 882 self.Append(help_menu, _("Help"))
858 883
859 884
@@ -868,10 +893,21 @@ class MenuBar(wx.MenuBar): @@ -868,10 +893,21 @@ class MenuBar(wx.MenuBar):
868 893
869 return v 894 return v
870 895
  896 + def NavigationModeStatus(self):
  897 + status = int(ses.Session().mode)
  898 +
  899 + if status == 1:
  900 + return True
  901 + else:
  902 + return False
  903 +
871 def OnUpdateSliceInterpolation(self, pubsub_evt): 904 def OnUpdateSliceInterpolation(self, pubsub_evt):
872 v = self.SliceInterpolationStatus() 905 v = self.SliceInterpolationStatus()
873 self.view_menu.Check(const.ID_VIEW_INTERPOLATED, v) 906 self.view_menu.Check(const.ID_VIEW_INTERPOLATED, v)
874 907
  908 + def OnUpdateNavigationMode(self, pubsub_evt):
  909 + v = self.NavigationModeStatus()
  910 + self.mode_menu.Check(const.ID_MODE_NAVIGATION, v)
875 911
876 def OnEnableState(self, pubsub_evt): 912 def OnEnableState(self, pubsub_evt):
877 """ 913 """
@@ -912,6 +948,17 @@ class MenuBar(wx.MenuBar): @@ -912,6 +948,17 @@ class MenuBar(wx.MenuBar):
912 else: 948 else:
913 self.FindItemById(wx.ID_REDO).Enable(False) 949 self.FindItemById(wx.ID_REDO).Enable(False)
914 950
  951 + def OnEnableNavigation(self, pubsub_evt):
  952 + """
  953 + Disable mode menu when navigation is on.
  954 + :param pubsub_evt: Navigation status
  955 + """
  956 + value = pubsub_evt.data
  957 + if value:
  958 + self.FindItemById(const.ID_MODE_NAVIGATION).Enable(False)
  959 + else:
  960 + self.FindItemById(const.ID_MODE_NAVIGATION).Enable(True)
  961 +
915 def OnAddMask(self, pubsub_evt): 962 def OnAddMask(self, pubsub_evt):
916 self.num_masks += 1 963 self.num_masks += 1
917 self.bool_op_menu.Enable(self.num_masks >= 2) 964 self.bool_op_menu.Enable(self.num_masks >= 2)
invesalius/gui/task_navigator.py
@@ -485,6 +485,8 @@ class NeuronavigationPanel(wx.Panel): @@ -485,6 +485,8 @@ class NeuronavigationPanel(wx.Panel):
485 if self.trigger_state: 485 if self.trigger_state:
486 self.trigger = trig.Trigger(nav_id) 486 self.trigger = trig.Trigger(nav_id)
487 487
  488 + Publisher.sendMessage("Navigation Status", True)
  489 +
488 self.correg = dcr.Coregistration((minv, n, q1, q2), nav_id, tracker_mode) 490 self.correg = dcr.Coregistration((minv, n, q1, q2), nav_id, tracker_mode)
489 491
490 else: 492 else:
@@ -502,6 +504,8 @@ class NeuronavigationPanel(wx.Panel): @@ -502,6 +504,8 @@ class NeuronavigationPanel(wx.Panel):
502 504
503 self.correg.stop() 505 self.correg.stop()
504 506
  507 + Publisher.sendMessage("Navigation Status", False)
  508 +
505 def ResetTrackerFiducials(self): 509 def ResetTrackerFiducials(self):
506 for m in range(3, 6): 510 for m in range(3, 6):
507 for n in range(0, 3): 511 for n in range(0, 3):