Commit 6a015bc0ffb69dbf4200c5fbe1e9c13d863e9a80

Authored by okahilak
Committed by GitHub
1 parent eddf4890
Exists in master

MOD: Allow setting tracker fiducials by pedal (#335)

* MOD: Allow setting tracker fiducials by pedal

* Review comments: Improve style in boolean check

* Review comments: Remove hardcoded size from fiducial buttons
Showing 1 changed file with 37 additions and 9 deletions   Show diff stats
invesalius/gui/task_navigator.py
@@ -64,6 +64,7 @@ import invesalius.data.vtk_utils as vtk_utils @@ -64,6 +64,7 @@ import invesalius.data.vtk_utils as vtk_utils
64 import invesalius.gui.dialogs as dlg 64 import invesalius.gui.dialogs as dlg
65 import invesalius.project as prj 65 import invesalius.project as prj
66 from invesalius import utils 66 from invesalius import utils
  67 +from invesalius.gui import utils as gui_utils
67 68
68 HAS_PEDAL_CONNECTION = True 69 HAS_PEDAL_CONNECTION = True
69 try: 70 try:
@@ -718,6 +719,7 @@ class NeuronavigationPanel(wx.Panel): @@ -718,6 +719,7 @@ class NeuronavigationPanel(wx.Panel):
718 self.icp = ICP() 719 self.icp = ICP()
719 720
720 self.nav_status = False 721 self.nav_status = False
  722 + self.tracker_fiducial_being_set = None
721 723
722 # Initialize list of buttons and numctrls for wx objects 724 # Initialize list of buttons and numctrls for wx objects
723 self.btns_set_fiducial = [None, None, None, None, None, None] 725 self.btns_set_fiducial = [None, None, None, None, None, None]
@@ -750,9 +752,12 @@ class NeuronavigationPanel(wx.Panel): @@ -750,9 +752,12 @@ class NeuronavigationPanel(wx.Panel):
750 label = fiducial['label'] 752 label = fiducial['label']
751 tip = fiducial['tip'] 753 tip = fiducial['tip']
752 754
753 - self.btns_set_fiducial[n] = wx.ToggleButton(self, button_id, label=label, size=wx.Size(45, 23))  
754 - self.btns_set_fiducial[n].SetToolTip(wx.ToolTip(tip))  
755 - self.btns_set_fiducial[n].Bind(wx.EVT_TOGGLEBUTTON, partial(self.OnImageFiducials, n)) 755 + ctrl = wx.ToggleButton(self, button_id, label=label)
  756 + ctrl.SetMinSize((gui_utils.calc_width_needed(ctrl, 3), -1))
  757 + ctrl.SetToolTip(wx.ToolTip(tip))
  758 + ctrl.Bind(wx.EVT_TOGGLEBUTTON, partial(self.OnImageFiducials, n))
  759 +
  760 + self.btns_set_fiducial[n] = ctrl
756 761
757 # Push buttons for tracker fiducials 762 # Push buttons for tracker fiducials
758 for n, fiducial in enumerate(const.TRACKER_FIDUCIALS): 763 for n, fiducial in enumerate(const.TRACKER_FIDUCIALS):
@@ -760,9 +765,12 @@ class NeuronavigationPanel(wx.Panel): @@ -760,9 +765,12 @@ class NeuronavigationPanel(wx.Panel):
760 label = fiducial['label'] 765 label = fiducial['label']
761 tip = fiducial['tip'] 766 tip = fiducial['tip']
762 767
763 - self.btns_set_fiducial[n + 3] = wx.Button(self, button_id, label=label, size=wx.Size(45, 23))  
764 - self.btns_set_fiducial[n + 3].SetToolTip(wx.ToolTip(tip))  
765 - self.btns_set_fiducial[n + 3].Bind(wx.EVT_BUTTON, partial(self.OnTrackerFiducials, n)) 768 + ctrl = wx.ToggleButton(self, button_id, label=label)
  769 + ctrl.SetMinSize((gui_utils.calc_width_needed(ctrl, 3), -1))
  770 + ctrl.SetToolTip(wx.ToolTip(tip))
  771 + ctrl.Bind(wx.EVT_TOGGLEBUTTON, partial(self.OnTrackerFiducials, n, ctrl=ctrl))
  772 +
  773 + self.btns_set_fiducial[n + 3] = ctrl
766 774
767 # TODO: Find a better allignment between FRE, text and navigate button 775 # TODO: Find a better allignment between FRE, text and navigate button
768 txt_fre = wx.StaticText(self, -1, _('FRE:')) 776 txt_fre = wx.StaticText(self, -1, _('FRE:'))
@@ -1041,9 +1049,29 @@ class NeuronavigationPanel(wx.Panel): @@ -1041,9 +1049,29 @@ class NeuronavigationPanel(wx.Panel):
1041 Publisher.sendMessage('Set image fiducial', fiducial_name=fiducial_name, coord=np.nan) 1049 Publisher.sendMessage('Set image fiducial', fiducial_name=fiducial_name, coord=np.nan)
1042 Publisher.sendMessage('Delete fiducial marker', marker_id=marker_id) 1050 Publisher.sendMessage('Delete fiducial marker', marker_id=marker_id)
1043 1051
1044 - def OnTrackerFiducials(self, n, evt):  
1045 - fiducial_name = const.TRACKER_FIDUCIALS[n]['fiducial_name']  
1046 - Publisher.sendMessage('Set tracker fiducial', fiducial_name=fiducial_name) 1052 + def OnTrackerFiducials(self, n, evt, ctrl):
  1053 +
  1054 + # Do not allow several tracker fiducials to be set at the same time.
  1055 + if self.tracker_fiducial_being_set is not None and self.tracker_fiducial_being_set != n:
  1056 + ctrl.SetValue(False)
  1057 + return
  1058 +
  1059 + # Called when the button for setting the tracker fiducial is enabled and either pedal is pressed
  1060 + # or the button is pressed again.
  1061 + #
  1062 + def set_fiducial_callback():
  1063 + fiducial_name = const.TRACKER_FIDUCIALS[n]['fiducial_name']
  1064 + Publisher.sendMessage('Set tracker fiducial', fiducial_name=fiducial_name)
  1065 + self.pedal_connection.remove_callback('fiducial')
  1066 +
  1067 + ctrl.SetValue(False)
  1068 + self.tracker_fiducial_being_set = None
  1069 +
  1070 + if ctrl.GetValue():
  1071 + self.tracker_fiducial_being_set = n
  1072 + self.pedal_connection.add_callback('fiducial', set_fiducial_callback)
  1073 + else:
  1074 + set_fiducial_callback()
1047 1075
1048 def OnStopNavigation(self): 1076 def OnStopNavigation(self):
1049 select_tracker_elem = self.select_tracker_elem 1077 select_tracker_elem = self.select_tracker_elem