diff --git a/invesalius/constants.py b/invesalius/constants.py index 70218e4..f348dca 100644 --- a/invesalius/constants.py +++ b/invesalius/constants.py @@ -488,8 +488,8 @@ VTK_WARNING = 0 [ID_DICOM_IMPORT, ID_PROJECT_OPEN, ID_PROJECT_SAVE_AS, ID_PROJECT_SAVE, ID_PROJECT_CLOSE, ID_PROJECT_INFO, ID_SAVE_SCREENSHOT, ID_DICOM_LOAD_NET, ID_PRINT_SCREENSHOT, ID_IMPORT_OTHERS_FILES, ID_PREFERENCES, ID_DICOM_NETWORK, -ID_TIFF_JPG_PNG, ID_VIEW_INTERPOLATED, ID_ANALYZE_IMPORT, ID_NIFTI_IMPORT, -ID_PARREC_IMPORT] = [wx.NewId() for number in range(17)] +ID_TIFF_JPG_PNG, ID_VIEW_INTERPOLATED, ID_MODE_NAVIGATION, ID_ANALYZE_IMPORT, +ID_NIFTI_IMPORT, ID_PARREC_IMPORT] = [wx.NewId() for number in range(18)] ID_EXIT = wx.ID_EXIT ID_ABOUT = wx.ID_ABOUT diff --git a/invesalius/gui/default_tasks.py b/invesalius/gui/default_tasks.py index 328037f..babb733 100644 --- a/invesalius/gui/default_tasks.py +++ b/invesalius/gui/default_tasks.py @@ -284,9 +284,11 @@ class UpperTaskPanel(wx.Panel): fold_panel.Expand(fold_panel.GetFoldPanel(0)) self.fold_panel = fold_panel + self.image_list = image_list sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(fold_panel, 1, wx.GROW|wx.EXPAND) + self.sizer = sizer self.SetSizerAndFit(sizer) self.SetStateProjectClose() @@ -298,6 +300,7 @@ class UpperTaskPanel(wx.Panel): Publisher.subscribe(self.OnOverwrite, 'Create surface from index') Publisher.subscribe(self.OnFoldSurface, 'Fold surface task') Publisher.subscribe(self.OnFoldExport, 'Fold export task') + Publisher.subscribe(self.SetNavigationMode, "Set navigation mode") def OnOverwrite(self, pubsub_evt): self.overwrite = pubsub_evt.data['options']['overwrite'] @@ -316,6 +319,37 @@ class UpperTaskPanel(wx.Panel): else: self.SetStateProjectClose() + def SetNavigationMode(self, pubsub_evt): + self.navigation_mode_status = status = pubsub_evt.data + name = _("Navigation system") + panel = navigator.TaskPanel + if status and (self.fold_panel.GetCount()<=4): + # Create panel + item = self.fold_panel.AddFoldPanel("%d. %s"%(5, name), + collapsed=True, + foldIcons=self.image_list) + style = self.fold_panel.GetCaptionStyle(item) + col = style.GetFirstColour() + + # Add panel to FoldPanel + self.fold_panel.AddFoldPanelWindow(item, + panel(item), + #Spacing=0, + leftSpacing=0, + rightSpacing=0) + self.enable_items.append(item) + if not self.fold_panel.GetFoldPanel(2).IsEnabled(): + item.Disable() + + elif status and (self.fold_panel.GetCount()>4): + self.fold_panel.GetFoldPanel(4).Show() + + else: + self.fold_panel.GetFoldPanel(4).Hide() + self.sizer.Layout() + + + def SetStateProjectClose(self): self.fold_panel.Expand(self.fold_panel.GetFoldPanel(0)) for item in self.enable_items: diff --git a/invesalius/gui/frame.py b/invesalius/gui/frame.py index 11c2f57..fc410a8 100644 --- a/invesalius/gui/frame.py +++ b/invesalius/gui/frame.py @@ -94,11 +94,13 @@ class Frame(wx.Frame): self.SetSize(self.GetSize()) #self.SetSize(wx.Size(1024, 748)) + self._show_navigator_message = True #to control check and unckeck of menu view -> interpolated_slices main_menu = MenuBar(self) self.actived_interpolated_slices = main_menu.view_menu + self.actived_navigation_mode = main_menu.mode_menu # Set menus, status and task bar self.SetMenuBar(main_menu) @@ -467,12 +469,22 @@ class Frame(wx.Frame): self.OnInterpolatedSlices(True) else: self.OnInterpolatedSlices(False) + + elif id == const.ID_MODE_NAVIGATION: + st = self.actived_navigation_mode.IsChecked(const.ID_MODE_NAVIGATION) + self.OnNavigationMode(st) + elif id == const.ID_CROP_MASK: self.OnCropMask() def OnInterpolatedSlices(self, status): Publisher.sendMessage('Set interpolated slices', status) + def OnNavigationMode(self, status): + if status and self._show_navigator_message and sys.platform != 'win32': + wx.MessageBox(_('Currently the Navigation mode is only working on Windows'), 'Info', wx.OK | wx.ICON_INFORMATION) + self._show_navigator_message = False + Publisher.sendMessage('Set navigation mode', status) def OnSize(self, evt): """ @@ -513,6 +525,7 @@ class Frame(wx.Frame): Publisher.sendMessage('Reset Reaycasting') Publisher.sendMessage('Update Slice Interpolation') Publisher.sendMessage('Update Slice Interpolation MenuBar') + Publisher.sendMessage('Update Navigation Mode MenuBar') Publisher.sendMessage('Update Surface Interpolation') def ShowAbout(self): @@ -660,11 +673,13 @@ class MenuBar(wx.MenuBar): sub(self.OnEnableState, "Enable state project") sub(self.OnEnableUndo, "Enable undo") sub(self.OnEnableRedo, "Enable redo") + sub(self.OnEnableNavigation, "Navigation Status") sub(self.OnAddMask, "Add mask") sub(self.OnRemoveMasks, "Remove masks") sub(self.OnShowMask, "Show mask") sub(self.OnUpdateSliceInterpolation, "Update Slice Interpolation MenuBar") + sub(self.OnUpdateNavigationMode, "Update Navigation Mode MenuBar") self.num_masks = 0 @@ -835,6 +850,15 @@ class MenuBar(wx.MenuBar): options_menu = wx.Menu() options_menu.Append(const.ID_PREFERENCES, _("Preferences...")) + #Mode + self.mode_menu = mode_menu = wx.Menu() + mode_menu.Append(const.ID_MODE_NAVIGATION, _(u'Navigation mode'), "", wx.ITEM_CHECK) + + v = self.NavigationModeStatus() + self.mode_menu.Check(const.ID_MODE_NAVIGATION, v) + + self.actived_navigation_mode = self.mode_menu + # HELP help_menu = wx.Menu() help_menu.Append(const.ID_START, _("Getting started...")) @@ -854,6 +878,7 @@ class MenuBar(wx.MenuBar): self.Append(tools_menu, _(u"Tools")) #self.Append(tools_menu, "Tools") self.Append(options_menu, _("Options")) + self.Append(mode_menu, _("Mode")) self.Append(help_menu, _("Help")) @@ -868,10 +893,21 @@ class MenuBar(wx.MenuBar): return v + def NavigationModeStatus(self): + status = int(ses.Session().mode) + + if status == 1: + return True + else: + return False + def OnUpdateSliceInterpolation(self, pubsub_evt): v = self.SliceInterpolationStatus() self.view_menu.Check(const.ID_VIEW_INTERPOLATED, v) + def OnUpdateNavigationMode(self, pubsub_evt): + v = self.NavigationModeStatus() + self.mode_menu.Check(const.ID_MODE_NAVIGATION, v) def OnEnableState(self, pubsub_evt): """ @@ -912,6 +948,17 @@ class MenuBar(wx.MenuBar): else: self.FindItemById(wx.ID_REDO).Enable(False) + def OnEnableNavigation(self, pubsub_evt): + """ + Disable mode menu when navigation is on. + :param pubsub_evt: Navigation status + """ + value = pubsub_evt.data + if value: + self.FindItemById(const.ID_MODE_NAVIGATION).Enable(False) + else: + self.FindItemById(const.ID_MODE_NAVIGATION).Enable(True) + def OnAddMask(self, pubsub_evt): self.num_masks += 1 self.bool_op_menu.Enable(self.num_masks >= 2) diff --git a/invesalius/gui/task_navigator.py b/invesalius/gui/task_navigator.py index 73c786f..b02b935 100644 --- a/invesalius/gui/task_navigator.py +++ b/invesalius/gui/task_navigator.py @@ -485,6 +485,8 @@ class NeuronavigationPanel(wx.Panel): if self.trigger_state: self.trigger = trig.Trigger(nav_id) + Publisher.sendMessage("Navigation Status", True) + self.correg = dcr.Coregistration((minv, n, q1, q2), nav_id, tracker_mode) else: @@ -502,6 +504,8 @@ class NeuronavigationPanel(wx.Panel): self.correg.stop() + Publisher.sendMessage("Navigation Status", False) + def ResetTrackerFiducials(self): for m in range(3, 6): for n in range(0, 3): -- libgit2 0.21.2