Commit ed365dc5a0a038c1fbcf738a56b8a9625e7a328b

Authored by Renan
Committed by GitHub
2 parents f64959b9 0acb6ee2
Exists in master

Merge branch 'master' into multimodal_tracking

@@ -87,11 +87,11 @@ session = ses.Session() @@ -87,11 +87,11 @@ session = ses.Session()
87 if session.ReadSession(): 87 if session.ReadSession():
88 lang = session.GetLanguage() 88 lang = session.GetLanguage()
89 if lang: 89 if lang:
90 - LANG = lang  
91 try: 90 try:
92 _ = i18n.InstallLanguage(lang) 91 _ = i18n.InstallLanguage(lang)
  92 + LANG = lang
93 except FileNotFoundError: 93 except FileNotFoundError:
94 - LANG = None 94 + pass
95 95
96 96
97 class InVesalius(wx.App): 97 class InVesalius(wx.App):
@@ -134,7 +134,7 @@ class Inv3SplashScreen(SplashScreen): @@ -134,7 +134,7 @@ class Inv3SplashScreen(SplashScreen):
134 Splash screen to be shown in InVesalius initialization. 134 Splash screen to be shown in InVesalius initialization.
135 """ 135 """
136 def __init__(self): 136 def __init__(self):
137 - # Splash screen image will depend on currently language 137 + # Splash screen image will depend on the current language
138 lang = LANG 138 lang = LANG
139 self.locale = wx.Locale(wx.LANGUAGE_ENGLISH) 139 self.locale = wx.Locale(wx.LANGUAGE_ENGLISH)
140 140
@@ -143,22 +143,20 @@ class Inv3SplashScreen(SplashScreen): @@ -143,22 +143,20 @@ class Inv3SplashScreen(SplashScreen):
143 # should be created 143 # should be created
144 create_session = LANG is None 144 create_session = LANG is None
145 145
146 - install_lang = 0 146 + install_lang = False
147 if lang: 147 if lang:
148 _ = i18n.InstallLanguage(lang) 148 _ = i18n.InstallLanguage(lang)
149 - install_lang = 1  
150 - else:  
151 - install_lang = 0 149 + install_lang = True
152 150
153 # If no language is set into session file, show dialog so 151 # If no language is set into session file, show dialog so
154 # user can select language 152 # user can select language
155 - if install_lang == 0: 153 + if not install_lang:
156 dialog = lang_dlg.LanguageDialog() 154 dialog = lang_dlg.LanguageDialog()
157 155
158 # FIXME: This works ok in linux2, darwin and win32, 156 # FIXME: This works ok in linux2, darwin and win32,
159 # except on win64, due to wxWidgets bug 157 # except on win64, due to wxWidgets bug
160 try: 158 try:
161 - ok = (dialog.ShowModal() == wx.ID_OK) 159 + ok = dialog.ShowModal() == wx.ID_OK
162 except wx._core.PyAssertionError: 160 except wx._core.PyAssertionError:
163 ok = True 161 ok = True
164 finally: 162 finally:
@@ -174,9 +172,8 @@ class Inv3SplashScreen(SplashScreen): @@ -174,9 +172,8 @@ class Inv3SplashScreen(SplashScreen):
174 172
175 dialog.Destroy() 173 dialog.Destroy()
176 174
177 - # Session file should be created... So we set the recent  
178 - # choosen language  
179 - if (create_session): 175 + # Session file should be created... So we set the recently chosen language.
  176 + if create_session:
180 session.CreateItens() 177 session.CreateItens()
181 session.SetLanguage(lang) 178 session.SetLanguage(lang)
182 session.WriteSessionFile() 179 session.WriteSessionFile()
@@ -184,8 +181,7 @@ class Inv3SplashScreen(SplashScreen): @@ -184,8 +181,7 @@ class Inv3SplashScreen(SplashScreen):
184 # session.SaveConfigFileBackup() 181 # session.SaveConfigFileBackup()
185 182
186 183
187 - # Only after language was defined, splash screen will be  
188 - # shown 184 + # Only after language was defined, splash screen will be shown.
189 if lang: 185 if lang:
190 186
191 #import locale 187 #import locale
@@ -206,9 +202,7 @@ class Inv3SplashScreen(SplashScreen): @@ -206,9 +202,7 @@ class Inv3SplashScreen(SplashScreen):
206 abs_file_path = os.path.abspath(".." + os.sep) 202 abs_file_path = os.path.abspath(".." + os.sep)
207 path = abs_file_path 203 path = abs_file_path
208 path = os.path.join(path, 'icons', icon_file) 204 path = os.path.join(path, 'icons', icon_file)
209 -  
210 else: 205 else:
211 -  
212 path = os.path.join(inv_paths.ICON_DIR, icon_file) 206 path = os.path.join(inv_paths.ICON_DIR, icon_file)
213 if not os.path.exists(path): 207 if not os.path.exists(path):
214 path = os.path.join(inv_paths.ICON_DIR, "splash_en.png") 208 path = os.path.join(inv_paths.ICON_DIR, "splash_en.png")
@@ -241,7 +235,7 @@ class Inv3SplashScreen(SplashScreen): @@ -241,7 +235,7 @@ class Inv3SplashScreen(SplashScreen):
241 self.control = Controller(self.main) 235 self.control = Controller(self.main)
242 236
243 self.fc = wx.CallLater(200, self.ShowMain) 237 self.fc = wx.CallLater(200, self.ShowMain)
244 - options, args = parse_comand_line() 238 + options, args = parse_command_line()
245 wx.CallLater(1, use_cmd_optargs, options, args) 239 wx.CallLater(1, use_cmd_optargs, options, args)
246 240
247 # Check for updates 241 # Check for updates
@@ -292,7 +286,7 @@ def non_gui_startup(options, args): @@ -292,7 +286,7 @@ def non_gui_startup(options, args):
292 # ------------------------------------------------------------------ 286 # ------------------------------------------------------------------
293 287
294 288
295 -def parse_comand_line(): 289 +def parse_command_line():
296 """ 290 """
297 Handle command line arguments. 291 Handle command line arguments.
298 """ 292 """
@@ -302,7 +296,7 @@ def parse_comand_line(): @@ -302,7 +296,7 @@ def parse_comand_line():
302 # Parse command line arguments 296 # Parse command line arguments
303 parser = op.OptionParser() 297 parser = op.OptionParser()
304 298
305 - # -d or --debug: print all pubsub messagessent 299 + # -d or --debug: print all pubsub messages sent
306 parser.add_option("-d", "--debug", 300 parser.add_option("-d", "--debug",
307 action="store_true", 301 action="store_true",
308 dest="debug") 302 dest="debug")
@@ -353,12 +347,6 @@ def parse_comand_line(): @@ -353,12 +347,6 @@ def parse_comand_line():
353 347
354 348
355 def use_cmd_optargs(options, args): 349 def use_cmd_optargs(options, args):
356 - # If debug argument...  
357 - if options.debug:  
358 - Publisher.subscribe(print_events, Publisher.ALL_TOPICS)  
359 - session = ses.Session()  
360 - session.debug = 1  
361 -  
362 # If import DICOM argument... 350 # If import DICOM argument...
363 if options.dicom_dir: 351 if options.dicom_dir:
364 import_dir = options.dicom_dir 352 import_dir = options.dicom_dir
@@ -494,11 +482,18 @@ def print_events(topic=Publisher.AUTO_TOPIC, **msg_data): @@ -494,11 +482,18 @@ def print_events(topic=Publisher.AUTO_TOPIC, **msg_data):
494 """ 482 """
495 utils.debug("%s\n\tParameters: %s" % (topic, msg_data)) 483 utils.debug("%s\n\tParameters: %s" % (topic, msg_data))
496 484
  485 +
497 def main(): 486 def main():
498 """ 487 """
499 Initialize InVesalius GUI 488 Initialize InVesalius GUI
500 """ 489 """
501 - options, args = parse_comand_line() 490 + options, args = parse_command_line()
  491 +
  492 + session = ses.Session()
  493 + session.debug = options.debug
  494 +
  495 + if options.debug:
  496 + Publisher.subscribe(print_events, Publisher.ALL_TOPICS)
502 497
503 if options.remote_host is not None: 498 if options.remote_host is not None:
504 from invesalius.net.remote_control import RemoteControl 499 from invesalius.net.remote_control import RemoteControl
@@ -517,6 +512,7 @@ def main(): @@ -517,6 +512,7 @@ def main():
517 application = InVesalius(0) 512 application = InVesalius(0)
518 application.MainLoop() 513 application.MainLoop()
519 514
  515 +
520 if __name__ == '__main__': 516 if __name__ == '__main__':
521 #Is needed because of pyinstaller 517 #Is needed because of pyinstaller
522 multiprocessing.freeze_support() 518 multiprocessing.freeze_support()
invesalius/constants.py
@@ -655,6 +655,18 @@ BOOLEAN_DIFF = 2 @@ -655,6 +655,18 @@ BOOLEAN_DIFF = 2
655 BOOLEAN_AND = 3 655 BOOLEAN_AND = 3
656 BOOLEAN_XOR = 4 656 BOOLEAN_XOR = 4
657 657
  658 +# -------------- User interface ---------------------
  659 +
  660 +# The column order in the marker panel
  661 +#
  662 +ID_COLUMN = 0
  663 +SESSION_COLUMN = 1
  664 +LABEL_COLUMN = 2
  665 +TARGET_COLUMN = 3
  666 +X_COLUMN = 4
  667 +Y_COLUMN = 5
  668 +Z_COLUMN = 6
  669 +
658 #------------ Navigation defaults ------------------- 670 #------------ Navigation defaults -------------------
659 671
660 MARKER_COLOUR = (1.0, 1.0, 0.) 672 MARKER_COLOUR = (1.0, 1.0, 0.)
invesalius/gui/task_navigator.py
@@ -61,9 +61,11 @@ import invesalius.data.slice_ as sl @@ -61,9 +61,11 @@ import invesalius.data.slice_ as sl
61 import invesalius.data.tractography as dti 61 import invesalius.data.tractography as dti
62 import invesalius.data.record_coords as rec 62 import invesalius.data.record_coords as rec
63 import invesalius.data.vtk_utils as vtk_utils 63 import invesalius.data.vtk_utils as vtk_utils
  64 +import invesalius.data.bases as db
64 import invesalius.gui.dialogs as dlg 65 import invesalius.gui.dialogs as dlg
65 import invesalius.project as prj 66 import invesalius.project as prj
66 -import invesalius.data.bases as db 67 +import invesalius.session as ses
  68 +
67 from invesalius import utils 69 from invesalius import utils
68 from invesalius.gui import utils as gui_utils 70 from invesalius.gui import utils as gui_utils
69 from invesalius.navigation.icp import ICP 71 from invesalius.navigation.icp import ICP
@@ -1249,6 +1251,8 @@ class MarkersPanel(wx.Panel): @@ -1249,6 +1251,8 @@ class MarkersPanel(wx.Panel):
1249 1251
1250 self.__bind_events() 1252 self.__bind_events()
1251 1253
  1254 + self.session = ses.Session()
  1255 +
1252 self.current_coord = 0, 0, 0, 0, 0, 0 1256 self.current_coord = 0, 0, 0, 0, 0, 0
1253 self.current_angle = 0, 0, 0 1257 self.current_angle = 0, 0, 0
1254 self.current_seed = 0, 0, 0 1258 self.current_seed = 0, 0, 0
@@ -1309,21 +1313,27 @@ class MarkersPanel(wx.Panel): @@ -1309,21 +1313,27 @@ class MarkersPanel(wx.Panel):
1309 1313
1310 # List of markers 1314 # List of markers
1311 self.lc = wx.ListCtrl(self, -1, style=wx.LC_REPORT, size=wx.Size(0,120)) 1315 self.lc = wx.ListCtrl(self, -1, style=wx.LC_REPORT, size=wx.Size(0,120))
1312 - self.lc.InsertColumn(0, '#')  
1313 - self.lc.InsertColumn(1, 'X')  
1314 - self.lc.InsertColumn(2, 'Y')  
1315 - self.lc.InsertColumn(3, 'Z')  
1316 - self.lc.InsertColumn(4, 'Label')  
1317 - self.lc.InsertColumn(5, 'Target')  
1318 - self.lc.InsertColumn(6, 'Session')  
1319 -  
1320 - self.lc.SetColumnWidth(0, 28)  
1321 - self.lc.SetColumnWidth(1, 50)  
1322 - self.lc.SetColumnWidth(2, 50)  
1323 - self.lc.SetColumnWidth(3, 50)  
1324 - self.lc.SetColumnWidth(4, 60)  
1325 - self.lc.SetColumnWidth(5, 60)  
1326 - self.lc.SetColumnWidth(5, 50) 1316 + self.lc.InsertColumn(const.ID_COLUMN, '#')
  1317 + self.lc.SetColumnWidth(const.ID_COLUMN, 28)
  1318 +
  1319 + self.lc.InsertColumn(const.SESSION_COLUMN, 'Session')
  1320 + self.lc.SetColumnWidth(const.SESSION_COLUMN, 52)
  1321 +
  1322 + self.lc.InsertColumn(const.LABEL_COLUMN, 'Label')
  1323 + self.lc.SetColumnWidth(const.LABEL_COLUMN, 118)
  1324 +
  1325 + self.lc.InsertColumn(const.TARGET_COLUMN, 'Target')
  1326 + self.lc.SetColumnWidth(const.TARGET_COLUMN, 45)
  1327 +
  1328 + if self.session.debug:
  1329 + self.lc.InsertColumn(const.X_COLUMN, 'X')
  1330 + self.lc.SetColumnWidth(const.X_COLUMN, 45)
  1331 +
  1332 + self.lc.InsertColumn(const.Y_COLUMN, 'Y')
  1333 + self.lc.SetColumnWidth(const.Y_COLUMN, 45)
  1334 +
  1335 + self.lc.InsertColumn(const.Z_COLUMN, 'Z')
  1336 + self.lc.SetColumnWidth(const.Z_COLUMN, 45)
1327 1337
1328 self.lc.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self.OnMouseRightDown) 1338 self.lc.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self.OnMouseRightDown)
1329 self.lc.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemBlink) 1339 self.lc.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemBlink)
@@ -1341,7 +1351,6 @@ class MarkersPanel(wx.Panel): @@ -1341,7 +1351,6 @@ class MarkersPanel(wx.Panel):
1341 self.Update() 1351 self.Update()
1342 1352
1343 def __bind_events(self): 1353 def __bind_events(self):
1344 - # Publisher.subscribe(self.UpdateCurrentCoord, 'Co-registered points')  
1345 Publisher.subscribe(self.UpdateCurrentCoord, 'Set cross focal point') 1354 Publisher.subscribe(self.UpdateCurrentCoord, 'Set cross focal point')
1346 Publisher.subscribe(self.OnDeleteMultipleMarkers, 'Delete fiducial marker') 1355 Publisher.subscribe(self.OnDeleteMultipleMarkers, 'Delete fiducial marker')
1347 Publisher.subscribe(self.OnDeleteAllMarkers, 'Delete all markers') 1356 Publisher.subscribe(self.OnDeleteAllMarkers, 'Delete all markers')
@@ -1352,13 +1361,15 @@ class MarkersPanel(wx.Panel): @@ -1352,13 +1361,15 @@ class MarkersPanel(wx.Panel):
1352 Publisher.subscribe(self.UpdateRobotCoordinates, 'Update raw coordinates') 1361 Publisher.subscribe(self.UpdateRobotCoordinates, 'Update raw coordinates')
1353 1362
1354 def __find_target_marker(self): 1363 def __find_target_marker(self):
1355 - """Return the index of the marker currently selected as target (there  
1356 - should be at most one). If there is no such marker, return -1.""" 1364 + """
  1365 + Return the index of the marker currently selected as target (there
  1366 + should be at most one). If there is no such marker, return None.
  1367 + """
1357 for i in range(len(self.markers)): 1368 for i in range(len(self.markers)):
1358 if self.markers[i].is_target: 1369 if self.markers[i].is_target:
1359 return i 1370 return i
1360 1371
1361 - return -1 1372 + return None
1362 1373
1363 def __get_selected_items(self): 1374 def __get_selected_items(self):
1364 """ 1375 """
@@ -1368,14 +1379,15 @@ class MarkersPanel(wx.Panel): @@ -1368,14 +1379,15 @@ class MarkersPanel(wx.Panel):
1368 1379
1369 next = self.lc.GetFirstSelected() 1380 next = self.lc.GetFirstSelected()
1370 1381
1371 - while next != -1: 1382 + while next is not None:
1372 selection.append(next) 1383 selection.append(next)
1373 next = self.lc.GetNextSelected(next) 1384 next = self.lc.GetNextSelected(next)
1374 1385
1375 return selection 1386 return selection
1376 1387
1377 def __delete_multiple_markers(self, index): 1388 def __delete_multiple_markers(self, index):
1378 - """ Delete multiple markers indexed by index. index must be sorted in 1389 + """
  1390 + Delete multiple markers indexed by index. index must be sorted in
1379 the ascending order. 1391 the ascending order.
1380 """ 1392 """
1381 for i in reversed(index): 1393 for i in reversed(index):
@@ -1383,11 +1395,13 @@ class MarkersPanel(wx.Panel): @@ -1383,11 +1395,13 @@ class MarkersPanel(wx.Panel):
1383 del self.robot_markers[i] 1395 del self.robot_markers[i]
1384 self.lc.DeleteItem(i) 1396 self.lc.DeleteItem(i)
1385 for n in range(0, self.lc.GetItemCount()): 1397 for n in range(0, self.lc.GetItemCount()):
1386 - self.lc.SetItem(n, 0, str(n+1)) 1398 + self.lc.SetItem(n, 0, str(n + 1))
1387 Publisher.sendMessage('Remove multiple markers', index=index) 1399 Publisher.sendMessage('Remove multiple markers', index=index)
1388 1400
1389 def __set_marker_as_target(self, idx): 1401 def __set_marker_as_target(self, idx):
1390 - """Set marker indexed by idx as the new target. idx must be a valid index.""" 1402 + """
  1403 + Set marker indexed by idx as the new target. idx must be a valid index.
  1404 + """
1391 # Find the previous target 1405 # Find the previous target
1392 prev_idx = self.__find_target_marker() 1406 prev_idx = self.__find_target_marker()
1393 1407
@@ -1396,16 +1410,16 @@ class MarkersPanel(wx.Panel): @@ -1396,16 +1410,16 @@ class MarkersPanel(wx.Panel):
1396 return 1410 return
1397 1411
1398 # Unset the previous target 1412 # Unset the previous target
1399 - if prev_idx != -1: 1413 + if prev_idx is not None:
1400 self.markers[prev_idx].is_target = False 1414 self.markers[prev_idx].is_target = False
1401 self.lc.SetItemBackgroundColour(prev_idx, 'white') 1415 self.lc.SetItemBackgroundColour(prev_idx, 'white')
1402 Publisher.sendMessage('Set target transparency', status=False, index=prev_idx) 1416 Publisher.sendMessage('Set target transparency', status=False, index=prev_idx)
1403 - self.lc.SetItem(prev_idx, 5, "") 1417 + self.lc.SetItem(prev_idx, const.TARGET_COLUMN, "")
1404 1418
1405 # Set the new target 1419 # Set the new target
1406 self.markers[idx].is_target = True 1420 self.markers[idx].is_target = True
1407 self.lc.SetItemBackgroundColour(idx, 'RED') 1421 self.lc.SetItemBackgroundColour(idx, 'RED')
1408 - self.lc.SetItem(idx, 5, _("Yes")) 1422 + self.lc.SetItem(idx, const.TARGET_COLUMN, _("Yes"))
1409 1423
1410 Publisher.sendMessage('Update target', coord=self.markers[idx].coord) 1424 Publisher.sendMessage('Update target', coord=self.markers[idx].coord)
1411 Publisher.sendMessage('Set target transparency', status=True, index=idx) 1425 Publisher.sendMessage('Set target transparency', status=True, index=idx)
@@ -1471,9 +1485,9 @@ class MarkersPanel(wx.Panel): @@ -1471,9 +1485,9 @@ class MarkersPanel(wx.Panel):
1471 def OnMenuEditMarkerLabel(self, evt): 1485 def OnMenuEditMarkerLabel(self, evt):
1472 list_index = self.lc.GetFocusedItem() 1486 list_index = self.lc.GetFocusedItem()
1473 if list_index != -1: 1487 if list_index != -1:
1474 - new_label = dlg.ShowEnterMarkerID(self.lc.GetItemText(list_index, 4)) 1488 + new_label = dlg.ShowEnterMarkerID(self.lc.GetItemText(list_index, const.LABEL_COLUMN))
1475 self.markers[list_index].label = str(new_label) 1489 self.markers[list_index].label = str(new_label)
1476 - self.lc.SetItem(list_index, 4, new_label) 1490 + self.lc.SetItem(list_index, const.LABEL_COLUMN, new_label)
1477 else: 1491 else:
1478 wx.MessageBox(_("No data selected."), _("InVesalius 3")) 1492 wx.MessageBox(_("No data selected."), _("InVesalius 3"))
1479 1493
@@ -1500,7 +1514,7 @@ class MarkersPanel(wx.Panel): @@ -1500,7 +1514,7 @@ class MarkersPanel(wx.Panel):
1500 # XXX: Seems like a slightly too early point for rounding; better to round only when the value 1514 # XXX: Seems like a slightly too early point for rounding; better to round only when the value
1501 # is printed to the screen or file. 1515 # is printed to the screen or file.
1502 # 1516 #
1503 - self.markers[index].colour = [round(s/255.0, 3) for s in color_new] 1517 + self.markers[index].colour = [round(s / 255.0, 3) for s in color_new]
1504 1518
1505 Publisher.sendMessage('Set new color', index=index, color=color_new) 1519 Publisher.sendMessage('Set new color', index=index, color=color_new)
1506 1520
@@ -1514,15 +1528,12 @@ class MarkersPanel(wx.Panel): @@ -1514,15 +1528,12 @@ class MarkersPanel(wx.Panel):
1514 Publisher.sendMessage('Robot target matrix', robot_tracker_flag=True, m_change_robot_to_head=m_target_robot) 1528 Publisher.sendMessage('Robot target matrix', robot_tracker_flag=True, m_change_robot_to_head=m_target_robot)
1515 1529
1516 def OnDeleteAllMarkers(self, evt=None): 1530 def OnDeleteAllMarkers(self, evt=None):
1517 - if evt is None:  
1518 - result = wx.ID_OK  
1519 - else: 1531 + if evt is not None:
1520 result = dlg.ShowConfirmationDialog(msg=_("Remove all markers? Cannot be undone.")) 1532 result = dlg.ShowConfirmationDialog(msg=_("Remove all markers? Cannot be undone."))
  1533 + if result != wx.ID_OK:
  1534 + return
1521 1535
1522 - if result != wx.ID_OK:  
1523 - return  
1524 -  
1525 - if self.__find_target_marker() != -1: 1536 + if self.__find_target_marker() is not None:
1526 Publisher.sendMessage('Disable or enable coil tracker', status=False) 1537 Publisher.sendMessage('Disable or enable coil tracker', status=False)
1527 if evt is not None: 1538 if evt is not None:
1528 wx.MessageBox(_("Target deleted."), _("InVesalius 3")) 1539 wx.MessageBox(_("Target deleted."), _("InVesalius 3"))
@@ -1537,17 +1548,19 @@ class MarkersPanel(wx.Panel): @@ -1537,17 +1548,19 @@ class MarkersPanel(wx.Panel):
1537 # OnDeleteMultipleMarkers is used for both pubsub and button click events 1548 # OnDeleteMultipleMarkers is used for both pubsub and button click events
1538 # Pubsub is used for fiducial handle and button click for all others 1549 # Pubsub is used for fiducial handle and button click for all others
1539 1550
1540 - if not evt: # called through pubsub 1551 + # called through pubsub
  1552 + if not evt:
1541 index = [] 1553 index = []
1542 1554
1543 if label and (label in self.__list_fiducial_labels()): 1555 if label and (label in self.__list_fiducial_labels()):
1544 for id_n in range(self.lc.GetItemCount()): 1556 for id_n in range(self.lc.GetItemCount()):
1545 - item = self.lc.GetItem(id_n, 4) 1557 + item = self.lc.GetItem(id_n, const.LABEL_COLUMN)
1546 if item.GetText() == label: 1558 if item.GetText() == label:
1547 self.lc.Focus(item.GetId()) 1559 self.lc.Focus(item.GetId())
1548 index = [self.lc.GetFocusedItem()] 1560 index = [self.lc.GetFocusedItem()]
1549 1561
1550 - else: # called from button click 1562 + # called from button click
  1563 + else:
1551 index = self.__get_selected_items() 1564 index = self.__get_selected_items()
1552 1565
1553 if index: 1566 if index:
@@ -1599,13 +1612,12 @@ class MarkersPanel(wx.Panel): @@ -1599,13 +1612,12 @@ class MarkersPanel(wx.Panel):
1599 # If the new marker has is_target=True, we first create 1612 # If the new marker has is_target=True, we first create
1600 # a marker with is_target=False, and then call __set_marker_as_target 1613 # a marker with is_target=False, and then call __set_marker_as_target
1601 if marker.is_target: 1614 if marker.is_target:
1602 - self.__set_marker_as_target(len(self.markers)-1) 1615 + self.__set_marker_as_target(len(self.markers) - 1)
1603 1616
1604 except: 1617 except:
1605 wx.MessageBox(_("Invalid markers file."), _("InVesalius 3")) 1618 wx.MessageBox(_("Invalid markers file."), _("InVesalius 3"))
1606 1619
1607 def OnMarkersVisibility(self, evt, ctrl): 1620 def OnMarkersVisibility(self, evt, ctrl):
1608 -  
1609 if ctrl.GetValue(): 1621 if ctrl.GetValue():
1610 Publisher.sendMessage('Hide all markers', indexes=self.lc.GetItemCount()) 1622 Publisher.sendMessage('Hide all markers', indexes=self.lc.GetItemCount())
1611 ctrl.SetLabel('Show') 1623 ctrl.SetLabel('Show')
@@ -1640,8 +1652,8 @@ class MarkersPanel(wx.Panel): @@ -1640,8 +1652,8 @@ class MarkersPanel(wx.Panel):
1640 wx.MessageBox(_("Error writing markers file."), _("InVesalius 3")) 1652 wx.MessageBox(_("Error writing markers file."), _("InVesalius 3"))
1641 1653
1642 def OnSelectColour(self, evt, ctrl): 1654 def OnSelectColour(self, evt, ctrl):
1643 - #TODO: Make sure GetValue returns 3 numbers (without alpha)  
1644 - self.marker_colour = [colour/255.0 for colour in ctrl.GetValue()][:3] 1655 + # TODO: Make sure GetValue returns 3 numbers (without alpha)
  1656 + self.marker_colour = [colour / 255.0 for colour in ctrl.GetValue()][:3]
1645 1657
1646 def OnSelectSize(self, evt, ctrl): 1658 def OnSelectSize(self, evt, ctrl):
1647 self.marker_size = ctrl.GetValue() 1659 self.marker_size = ctrl.GetValue()
@@ -1678,11 +1690,14 @@ class MarkersPanel(wx.Panel): @@ -1678,11 +1690,14 @@ class MarkersPanel(wx.Panel):
1678 # Add item to list control in panel 1690 # Add item to list control in panel
1679 num_items = self.lc.GetItemCount() 1691 num_items = self.lc.GetItemCount()
1680 self.lc.InsertItem(num_items, str(num_items + 1)) 1692 self.lc.InsertItem(num_items, str(num_items + 1))
1681 - self.lc.SetItem(num_items, 1, str(round(new_marker.x, 2)))  
1682 - self.lc.SetItem(num_items, 2, str(round(new_marker.y, 2)))  
1683 - self.lc.SetItem(num_items, 3, str(round(new_marker.z, 2)))  
1684 - self.lc.SetItem(num_items, 4, new_marker.label)  
1685 - self.lc.SetItem(num_items, 6, str(new_marker.session_id)) 1693 + self.lc.SetItem(num_items, const.SESSION_COLUMN, str(new_marker.session_id))
  1694 + self.lc.SetItem(num_items, const.LABEL_COLUMN, new_marker.label)
  1695 +
  1696 + if self.session.debug:
  1697 + self.lc.SetItem(num_items, const.X_COLUMN, str(round(new_marker.x, 1)))
  1698 + self.lc.SetItem(num_items, const.Y_COLUMN, str(round(new_marker.y, 1)))
  1699 + self.lc.SetItem(num_items, const.Z_COLUMN, str(round(new_marker.z, 1)))
  1700 +
1686 self.lc.EnsureVisible(num_items) 1701 self.lc.EnsureVisible(num_items)
1687 1702
1688 class DbsPanel(wx.Panel): 1703 class DbsPanel(wx.Panel):
invesalius/i18n.py
@@ -21,7 +21,7 @@ @@ -21,7 +21,7 @@
21 21
22 try: 22 try:
23 import configparser as ConfigParser 23 import configparser as ConfigParser
24 -except(ImportError): 24 +except ImportError:
25 import ConfigParser 25 import ConfigParser
26 26
27 import locale 27 import locale
@@ -66,22 +66,21 @@ def GetLocaleOS(): @@ -66,22 +66,21 @@ def GetLocaleOS():
66 def InstallLanguage(language): 66 def InstallLanguage(language):
67 file_path = os.path.split(__file__)[0] 67 file_path = os.path.split(__file__)[0]
68 68
69 - if hasattr(sys,"frozen") and (sys.frozen == "windows_exe"\  
70 - or sys.frozen == "console_exe"): 69 + abs_file_path = os.path.abspath(file_path + os.sep + "..")
71 70
72 - abs_file_path = os.path.abspath(file_path + os.sep + ".." + os.sep + ".." + os.sep + "..")  
73 - language_dir = os.path.join(abs_file_path, 'locale')  
74 - else:  
75 - abs_file_path = os.path.abspath(file_path + os.sep + "..")  
76 - language_dir = os.path.join(abs_file_path, 'locale') 71 + if hasattr(sys, "frozen") and (sys.frozen == "windows_exe" or sys.frozen == "console_exe"):
  72 + abs_file_path = os.path.abspath(abs_file_path + os.sep + ".." + os.sep + "..")
77 73
78 - # MAC App 74 + language_dir = os.path.join(abs_file_path, 'locale')
  75 +
  76 + # MAC app
79 if not os.path.exists(language_dir): 77 if not os.path.exists(language_dir):
80 abs_file_path = os.path.abspath(os.path.join(file_path, '..', '..', '..', '..')) 78 abs_file_path = os.path.abspath(os.path.join(file_path, '..', '..', '..', '..'))
81 language_dir = os.path.join(abs_file_path, 'locale') 79 language_dir = os.path.join(abs_file_path, 'locale')
82 80
83 - lang = gettext.translation('invesalius', language_dir,\  
84 - languages=[language], codeset='utf8') 81 + lang = gettext.translation('invesalius', language_dir,
  82 + languages=[language], codeset='utf8')
  83 +
85 # Using unicode 84 # Using unicode
86 try: 85 try:
87 lang.install(unicode=1) 86 lang.install(unicode=1)