Commit a343ff3be889983ad0e39f47a070ac23d18fa21e

Authored by tatiana
1 parent 50d89b62

STL: Added comments / cleaned up code

Showing 1 changed file with 430 additions and 320 deletions   Show diff stats
invesalius/gui/frame.py
... ... @@ -35,10 +35,10 @@ import project as prj
35 35 import session as ses
36 36 import utils
37 37  
38   -
39   -# Layout tools' IDs - this is used only locally, therefore doesn't need
40   -# to be defined in constants.py
41   -VIEW_TOOLS = [ID_LAYOUT, ID_TEXT] = [wx.NewId() for number in range(2)]
  38 +# Layout tools' IDs - this is used only locally, therefore doesn't
  39 +# need to be defined in constants.py
  40 +VIEW_TOOLS = [ID_LAYOUT, ID_TEXT] =\
  41 + [wx.NewId() for number in range(2)]
42 42  
43 43 class Frame(wx.Frame):
44 44 """
... ... @@ -53,19 +53,15 @@ class Frame(wx.Frame):
53 53 size=wx.Size(1024, 748), #size = wx.DisplaySize(),
54 54 style=wx.DEFAULT_FRAME_STYLE, title='InVesalius 3')
55 55 self.Center(wx.BOTH)
56   - self.SetIcon(wx.Icon(os.path.join(const.ICON_DIR, "invesalius.ico"),
57   - wx.BITMAP_TYPE_ICO))
58   - self.Maximize()
  56 + icon_path = os.path.join(const.ICON_DIR, "invesalius.ico")
  57 + self.SetIcon(wx.Icon(icon_path, wx.BITMAP_TYPE_ICO))
  58 + #self.Maximize()
59 59  
60 60 # Set menus, status and task bar
61 61 self.SetMenuBar(MenuBar(self))
62 62 self.SetStatusBar(StatusBar(self))
63 63  
64   - # TaskBarIcon has different behaviours according to the
65   - # platform:
66   - # - win32: Show icon on "Notification Area" at "Task Bar"
67   - # - darwin: Show icon on Dock
68   - # - linux2: ? - TODO: find what it does
  64 + # Set TaskBarIcon
69 65 TaskBarIcon(self)
70 66  
71 67 # Create aui manager and insert content in it
... ... @@ -79,18 +75,19 @@ class Frame(wx.Frame):
79 75 """
80 76 Bind events related to pubsub.
81 77 """
82   - ps.Publisher().subscribe(self._BeginBusyCursor, 'Begin busy cursor')
83   - ps.Publisher().subscribe(self._ShowContentPanel, 'Cancel DICOM load')
84   - ps.Publisher().subscribe(self._Exit, 'Close Window')
85   - ps.Publisher().subscribe(self._EndBusyCursor, 'End busy cursor')
86   - ps.Publisher().subscribe(self._HideContentPanel, 'Hide content panel')
87   - ps.Publisher().subscribe(self._HideImportPanel, 'Hide import panel')
88   - ps.Publisher().subscribe(self._HideTask, 'Hide task panel')
89   - ps.Publisher().subscribe(self._SetProjectName, 'Set project name')
90   - ps.Publisher().subscribe(self._ShowContentPanel, 'Show content panel')
91   - ps.Publisher().subscribe(self._ShowImportPanel, 'Show import panel in frame')
92   - ps.Publisher().subscribe(self._ShowTask, 'Show task panel')
93   - ps.Publisher().subscribe(self._UpdateAUI, 'Update AUI')
  78 + sub = ps.Publisher().subscribe
  79 + sub(self._BeginBusyCursor, 'Begin busy cursor')
  80 + sub(self._ShowContentPanel, 'Cancel DICOM load')
  81 + sub(self._Exit, 'Close Window')
  82 + sub(self._EndBusyCursor, 'End busy cursor')
  83 + sub(self._HideContentPanel, 'Hide content panel')
  84 + sub(self._HideImportPanel, 'Hide import panel')
  85 + sub(self._HideTask, 'Hide task panel')
  86 + sub(self._SetProjectName, 'Set project name')
  87 + sub(self._ShowContentPanel, 'Show content panel')
  88 + sub(self._ShowImportPanel, 'Show import panel in frame')
  89 + sub(self._ShowTask, 'Show task panel')
  90 + sub(self._UpdateAUI, 'Update AUI')
94 91  
95 92 def __bind_events_wx(self):
96 93 """
... ... @@ -123,16 +120,16 @@ class Frame(wx.Frame):
123 120 aui_manager.AddPane(viewers.Panel(self), wx.aui.AuiPaneInfo().
124 121 Caption(_("Data panel")).CaptionVisible(False).
125 122 Centre().CloseButton(False).Floatable(False).
126   - Hide().Layer(1).MaximizeButton(True).Name("Data").
127   - Position(1))
  123 + Hide().Layer(1).MaximizeButton(True).
  124 + Name("Data").Position(1))
128 125  
129 126 # This is the DICOM import panel. When the two panels above
130 127 # are shown, this should be hiden
  128 + caption = _("Preview medical data to be reconstructed")
131 129 aui_manager.AddPane(imp.Panel(self), wx.aui.AuiPaneInfo().
132 130 Name("Import").Centre().Hide().
133 131 MaximizeButton(True).Floatable(True).
134   - Caption(_("Preview medical data to be reconstructed")).
135   - CaptionVisible(True))
  132 + Caption(caption).CaptionVisible(True))
136 133  
137 134 # Add toolbars to manager
138 135 # This is pretty tricky -- order on win32 is inverted when
... ... @@ -189,7 +186,7 @@ class Frame(wx.Frame):
189 186 try:
190 187 wx.EndBusyCursor()
191 188 except wx._core.PyAssertionError:
192   - #xEndBusyCursor(): no matching wxBeginBusyCursor() for wxEndBusyCursor()
  189 + #no matching wxBeginBusyCursor() for wxEndBusyCursor()
193 190 pass
194 191  
195 192 def _Exit(self, pubsub_evt):
... ... @@ -330,7 +327,8 @@ class Frame(wx.Frame):
330 327 """
331 328 Show getting started window.
332 329 """
333   - path = os.path.join(const.DOC_DIR, "user_guide_invesalius3a.pdf")
  330 + path = os.path.join(const.DOC_DIR,
  331 + "user_guide_invesalius3a.pdf")
334 332 webbrowser.open(path)
335 333  
336 334 def ShowImportDicomPanel(self):
... ... @@ -357,7 +355,8 @@ class Frame(wx.Frame):
357 355  
358 356 class MenuBar(wx.MenuBar):
359 357 """
360   - MenuBar which contains menus used to control project, tools and help.
  358 + MenuBar which contains menus used to control project, tools and
  359 + help.
361 360 """
362 361 def __init__(self, parent):
363 362 wx.MenuBar.__init__(self)
... ... @@ -382,7 +381,8 @@ class MenuBar(wx.MenuBar):
382 381 # events should be binded directly from wx.Menu / wx.MenuBar
383 382 # message "Binding events of wx.MenuBar" on [wxpython-users]
384 383 # mail list in Oct 20 2008
385   - ps.Publisher().subscribe(self.OnEnableState, "Enable state project")
  384 + sub = ps.Publisher().subscribe
  385 + sub(self.OnEnableState, "Enable state project")
386 386  
387 387 def __init_items(self):
388 388 """
... ... @@ -392,48 +392,54 @@ class MenuBar(wx.MenuBar):
392 392  
393 393 # FILE
394 394 file_menu = wx.Menu()
395   - file_menu.Append(const.ID_DICOM_IMPORT, _("Import DICOM...\tCtrl+I"))
396   - #file_menu.Append(const.ID_DICOM_LOAD_NET, _("Import DICOM from PACS..."))
397   - file_menu.Append(const.ID_PROJECT_OPEN, _("Open Project...\tCtrl+O"))
398   - file_menu.Append(const.ID_PROJECT_SAVE, _("Save Project\tCtrl+S"))
399   - file_menu.Append(const.ID_PROJECT_SAVE_AS, _("Save Project As..."))
400   - file_menu.Append(const.ID_PROJECT_CLOSE, _("Close Project"))
  395 + app = file_menu.Append
  396 + app(const.ID_DICOM_IMPORT, _("Import DICOM...\tCtrl+I"))
  397 + #app(const.ID_DICOM_LOAD_NET, _("Import DICOM from PACS..."))
  398 + app(const.ID_PROJECT_OPEN, _("Open Project...\tCtrl+O"))
  399 + app(const.ID_PROJECT_SAVE, _("Save Project\tCtrl+S"))
  400 + app(const.ID_PROJECT_SAVE_AS, _("Save Project As..."))
  401 + app(const.ID_PROJECT_CLOSE, _("Close Project"))
401 402 file_menu.AppendSeparator()
402   - #file_menu.Append(const.ID_PROJECT_INFO, _("Project Information..."))
  403 + #app(const.ID_PROJECT_INFO, _("Project Information..."))
403 404 #file_menu.AppendSeparator()
404   - #file_menu.Append(const.ID_SAVE_SCREENSHOT, _("Save Screenshot"))
405   - #file_menu.Append(const.ID_PRINT_SCREENSHOT, _("Print Screenshot"))
  405 + #app(const.ID_SAVE_SCREENSHOT, _("Save Screenshot"))
  406 + #app(const.ID_PRINT_SCREENSHOT, _("Print Screenshot"))
406 407 #file_menu.AppendSeparator()
407   - #file_menu.Append(1, "C:\InvData\sample.inv")
  408 + #app(1, "C:\InvData\sample.inv")
408 409 #file_menu.AppendSeparator()
409   - file_menu.Append(const.ID_EXIT, _("Exit"))
  410 + app(const.ID_EXIT, _("Exit"))
410 411  
411 412 # EDIT
412 413 #file_edit = wx.Menu()
413   - #file_edit.Append(wx.ID_UNDO, "Undo\tCtrl+Z")
414   - #file_edit.Append(wx.ID_REDO, "Redo\tCtrl+Y")
415   - #file_edit.Append(const.ID_EDIT_LIST, "Show Undo List...")
  414 + #app = file_edit.Append
  415 + #app(wx.ID_UNDO, "Undo\tCtrl+Z")
  416 + #app(wx.ID_REDO, "Redo\tCtrl+Y")
  417 + #app(const.ID_EDIT_LIST, "Show Undo List...")
416 418  
417 419 # VIEW
418 420 #view_tool_menu = wx.Menu()
419   - #view_tool_menu.Append(const.ID_TOOL_PROJECT, "Project Toolbar")
420   - #view_tool_menu.Append(const.ID_TOOL_LAYOUT, "Layout Toolbar")
421   - #view_tool_menu.Append(const.ID_TOOL_OBJECT, "Object Toolbar")
422   - #view_tool_menu.Append(const.ID_TOOL_SLICE, "Slice Toolbar")
  421 + #app = view_tool_menu.Append
  422 + #app(const.ID_TOOL_PROJECT, "Project Toolbar")
  423 + #app(const.ID_TOOL_LAYOUT, "Layout Toolbar")
  424 + #app(const.ID_TOOL_OBJECT, "Object Toolbar")
  425 + #app(const.ID_TOOL_SLICE, "Slice Toolbar")
423 426  
424 427 #view_layout_menu = wx.Menu()
425   - #view_layout_menu.Append(const.ID_TASK_BAR, "Task Bar")
426   - #view_layout_menu.Append(const.ID_VIEW_FOUR, "Four View")
  428 + #app = view_layout_menu.Append
  429 + #app(const.ID_TASK_BAR, "Task Bar")
  430 + #app(const.ID_VIEW_FOUR, "Four View")
427 431  
428 432 #view_menu = wx.Menu()
429   - #view_menu.AppendMenu(-1, "Toolbars",view_tool_menu)
430   - #view_menu.AppendMenu(-1, "Layout", view_layout_menu)
  433 + #app = view_menu.Append
  434 + #appm = view_menu.AppendMenu
  435 + #appm(-1, "Toolbars",view_tool_menu)
  436 + #appm(-1, "Layout", view_layout_menu)
431 437 #view_menu.AppendSeparator()
432   - #view_menu.Append(const.ID_VIEW_FULL, "Fullscreen\tCtrl+F")
  438 + #app(const.ID_VIEW_FULL, "Fullscreen\tCtrl+F")
433 439 #view_menu.AppendSeparator()
434   - #view_menu.Append(const.ID_VIEW_TEXT, "2D & 3D Text")
  440 + #app(const.ID_VIEW_TEXT, "2D & 3D Text")
435 441 #view_menu.AppendSeparator()
436   - #view_menu.Append(const.ID_VIEW_3D_BACKGROUND, "3D Background Colour")
  442 + #app(const.ID_VIEW_3D_BACKGROUND, "3D Background Colour")
437 443  
438 444 # TOOLS
439 445 #tools_menu = wx.Menu()
... ... @@ -452,13 +458,17 @@ class MenuBar(wx.MenuBar):
452 458  
453 459 # TODO: Check what is necessary under MacOS to show
454 460 # InVesalius and not Python
455   - # first menu item... Didn't manage to solve it up to now, the 3 lines
456   - # bellow are a frustated test, based on wxPython Demo
  461 + # first menu item... Didn't manage to solve it up to now,
  462 + # the 3 lines bellow are a frustated test, based on wxPython
  463 + # Demo
  464 +
457 465 # TODO: Google about this
458 466 #test_menu = wx.Menu()
459   - #test_item = test_menu.Append(-1, '&About InVesalius','InVesalius')
460   - #wx.App.SetMacAboutMenuItemId(test_item.GetId())
  467 + #item = test_menu.Append(-1,
  468 + # &About InVesalius','InVesalius')
  469 + #wx.App.SetMacAboutMenuItemId(item.GetId())
461 470  
  471 + # Add all menus to menubar
462 472 self.Append(file_menu, _("File"))
463 473 #self.Append(file_edit, "Edit")
464 474 #self.Append(view_menu, "View")
... ... @@ -466,7 +476,6 @@ class MenuBar(wx.MenuBar):
466 476 #self.Append(options_menu, "Options")
467 477 self.Append(help_menu, _("Help"))
468 478  
469   -
470 479 def OnEnableState(self, pubsub_evt):
471 480 """
472 481 Based on given state, enables or disables menu items which
... ... @@ -496,7 +505,6 @@ class MenuBar(wx.MenuBar):
496 505 # ------------------------------------------------------------------
497 506 # ------------------------------------------------------------------
498 507  
499   -
500 508 class ProgressBar(wx.Gauge):
501 509 """
502 510 Progress bar / gauge.
... ... @@ -513,8 +521,8 @@ class ProgressBar(wx.Gauge):
513 521 """
514 522 Bind events related to pubsub.
515 523 """
516   - ps.Publisher().subscribe(self._Layout,
517   - 'ProgressBar Reposition')
  524 + sub = ps.Publisher().subscribe
  525 + sub(self._Layout, 'ProgressBar Reposition')
518 526  
519 527 def _Layout(self, evt_pubsub=None):
520 528 """
... ... @@ -538,7 +546,6 @@ class ProgressBar(wx.Gauge):
538 546 # ------------------------------------------------------------------
539 547 # ------------------------------------------------------------------
540 548  
541   -
542 549 class StatusBar(wx.StatusBar):
543 550 """
544 551 Control general status (both text and gauge)
... ... @@ -562,10 +569,9 @@ class StatusBar(wx.StatusBar):
562 569 """
563 570 Bind events related to pubsub.
564 571 """
565   - ps.Publisher().subscribe(self._SetProgressValue,
566   - 'Update status in GUI')
567   - ps.Publisher().subscribe(self._SetProgressLabel,
568   - 'Update status text in GUI')
  572 + sub = ps.Publisher().subscribe
  573 + sub(self._SetProgressValue, 'Update status in GUI')
  574 + sub(self._SetProgressLabel, 'Update status text in GUI')
569 575  
570 576 def _SetProgressValue(self, pubsub_evt):
571 577 """
... ... @@ -593,12 +599,17 @@ class StatusBar(wx.StatusBar):
593 599 label = pubsub_evt.data
594 600 self.SetStatusText(label, 0)
595 601  
596   -
597 602 # ------------------------------------------------------------------
598 603 # ------------------------------------------------------------------
599 604 # ------------------------------------------------------------------
600 605  
601 606 class TaskBarIcon(wx.TaskBarIcon):
  607 + """
  608 + TaskBarIcon has different behaviours according to the platform:
  609 + - win32: Show icon on "Notification Area" at "Task Bar"
  610 + - darwin: Show icon on Dock
  611 + - linux2: ? - TODO: find what it does
  612 + """
602 613 def __init__(self, parent=None):
603 614 wx.TaskBarIcon.__init__(self)
604 615 self.frame = parent
... ... @@ -614,67 +625,91 @@ class TaskBarIcon(wx.TaskBarIcon):
614 625 def OnTaskBarActivate(self):
615 626 pass
616 627  
617   -
618 628 # ------------------------------------------------------------------
619 629 # ------------------------------------------------------------------
620 630 # ------------------------------------------------------------------
621 631  
622 632 class ProjectToolBar(wx.ToolBar):
  633 + """
  634 + Toolbar related to general project operations, including: import,
  635 + open, save and saveas, among others.
  636 + """
623 637 def __init__(self, parent):
  638 + style = wx.TB_FLAT|wx.TB_NODIVIDER| wx.TB_DOCKABLE
624 639 wx.ToolBar.__init__(self, parent, -1, wx.DefaultPosition,
625 640 wx.DefaultSize,
626   - wx.TB_FLAT|wx.TB_NODIVIDER| wx.TB_DOCKABLE)
627   -
  641 + style)
628 642 self.SetToolBitmapSize(wx.Size(32,32))
629 643  
630 644 self.parent = parent
  645 +
  646 + # Used to enable/disable menu items if project is opened or
  647 + # not. Eg. save should only be available if a project is open
  648 + self.enable_items = [const.ID_PROJECT_SAVE]
  649 +
631 650 self.__init_items()
632 651 self.__bind_events()
633 652  
634   - #FIXME:
635   - self.save_as = True
  653 + self.Realize()
  654 + self.SetStateProjectClose()
  655 +
  656 + def __bind_events(self):
  657 + """
  658 + Bind events related to pubsub.
  659 + """
  660 + sub = ps.Publisher().subscribe
  661 + sub(self._EnableState, "Enable state project")
636 662  
637 663 def __init_items(self):
638   -
  664 + """
  665 + Add tools into toolbar.
  666 + """
  667 + # Load bitmaps
  668 + d = const.ICON_DIR
639 669 if sys.platform == 'darwin':
640   - BMP_NET = wx.Bitmap(os.path.join(const.ICON_DIR,
641   - "file_from_internet_original.png"),
642   - wx.BITMAP_TYPE_PNG)
643   - BMP_IMPORT = wx.Bitmap(os.path.join(const.ICON_DIR,
644   - "file_import_original.png"),
645   - wx.BITMAP_TYPE_PNG)
646   - BMP_OPEN = wx.Bitmap(os.path.join(const.ICON_DIR,"file_open_original.png"),
647   - wx.BITMAP_TYPE_PNG)
648   - BMP_SAVE = wx.Bitmap(os.path.join(const.ICON_DIR,
649   - "file_save_original.png"),
650   - wx.BITMAP_TYPE_PNG)
651   - BMP_PRINT = wx.Bitmap(os.path.join(const.ICON_DIR,
652   - "print_original.png"),
653   - wx.BITMAP_TYPE_PNG)
654   - BMP_PHOTO = wx.Bitmap(os.path.join(const.ICON_DIR,
655   - "tool_photo_original.png"),
656   - wx.BITMAP_TYPE_PNG)
  670 + path = os.path.join(d,"file_from_internet_original.png")
  671 + BMP_NET = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
  672 +
  673 + path = os.path.join(d, "file_import_original.png")
  674 + BMP_IMPORT = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
  675 +
  676 + path = os.path.join(d, "file_open_original.png")
  677 + BMP_OPEN = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
  678 +
  679 + path = os.path.join(d, "file_save_original.png")
  680 + BMP_SAVE = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
  681 +
  682 + path = os.path.join(d, "print_original.png")
  683 + BMP_PRINT = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
  684 +
  685 + path = os.path.join(d, "tool_photo_original.png")
  686 + BMP_PHOTO = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
657 687 else:
658   - BMP_NET = wx.Bitmap(os.path.join(const.ICON_DIR,"file_from_internet.png"),
659   - wx.BITMAP_TYPE_PNG)
660   - BMP_IMPORT = wx.Bitmap(os.path.join(const.ICON_DIR, "file_import.png"),
661   - wx.BITMAP_TYPE_PNG)
662   - BMP_OPEN = wx.Bitmap(os.path.join(const.ICON_DIR,"file_open.png"),
663   - wx.BITMAP_TYPE_PNG)
664   - BMP_SAVE = wx.Bitmap(os.path.join(const.ICON_DIR, "file_save.png"),
665   - wx.BITMAP_TYPE_PNG)
666   - BMP_PRINT = wx.Bitmap(os.path.join(const.ICON_DIR, "print.png"),
667   - wx.BITMAP_TYPE_PNG)
668   - BMP_PHOTO = wx.Bitmap(os.path.join(const.ICON_DIR, "tool_photo.png"),
669   - wx.BITMAP_TYPE_PNG)
  688 + path = os.path.join(d, "file_from_internet.png")
  689 + BMP_NET = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
670 690  
  691 + path = os.path.join(d, "file_import.png")
  692 + BMP_IMPORT = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
  693 +
  694 + path = os.path.join(d, "file_open.png")
  695 + BMP_OPEN = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
671 696  
672   - #self.AddLabelTool(const.ID_DICOM_LOAD_NET,
673   - # "Load medical image...",
674   - # BMP_NET)
  697 + path = os.path.join(d, "file_save.png")
  698 + BMP_SAVE = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
  699 +
  700 + path = os.path.join(d, "print.png"),
  701 + BMP_PRINT = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
  702 +
  703 + path = os.path.join(d, "tool_photo.png"),
  704 + BMP_PHOTO = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
  705 +
  706 + # Create tool items based on bitmaps
675 707 self.AddLabelTool(const.ID_DICOM_IMPORT,
676 708 _("Import medical image..."),
677 709 BMP_IMPORT)
  710 + #self.AddLabelTool(const.ID_DICOM_LOAD_NET,
  711 + # "Load medical image...",
  712 + # BMP_NET)
678 713 self.AddLabelTool(const.ID_PROJECT_OPEN,
679 714 _("Open InVesalius 3 project..."),
680 715 BMP_OPEN)
... ... @@ -687,56 +722,32 @@ class ProjectToolBar(wx.ToolBar):
687 722 #self.AddLabelTool(const.ID_PRINT_SCREENSHOT,
688 723 # "Print medical image...",
689 724 # BMP_PRINT)
690   - self.enable_items = [const.ID_PROJECT_SAVE]
691   -
692   - self.Realize()
693   - self.SetStateProjectClose()
694   -
695   - def SetStateProjectOpen(self):
696   - for tool in self.enable_items:
697   - self.EnableTool(tool, True)
698 725  
699   - def SetStateProjectClose(self):
700   - for tool in self.enable_items:
701   - self.EnableTool(tool, False)
702   -
703   - def OnEnableState(self, pubsub_evt):
  726 + def _EnableState(self, pubsub_evt):
  727 + """
  728 + Based on given state, enable or disable menu items which
  729 + depend if project is open or not.
  730 + """
704 731 state = pubsub_evt.data
705 732 if state:
706 733 self.SetStateProjectOpen()
707 734 else:
708 735 self.SetStateProjectClose()
709 736  
710   - def __bind_events(self):
711   - ps.Publisher().subscribe(self.OnEnableState, "Enable state project")
712   -
713   - #self.Bind(wx.EVT_TOOL, self.OnToolSave, id=const.ID_PROJECT_SAVE)
714   - #self.Bind(wx.EVT_TOOL, self.OnToolOpen, id=const.ID_PROJECT_OPEN)
715   - #self.Bind(wx.EVT_TOOL, self.OnToolImport, id=const.ID_DICOM_IMPORT)
716   -
717   - def OnToolImport(self, event):
718   - dirpath = dlg.ShowImportDirDialog()
719   - if dirpath:
720   - ps.Publisher().sendMessage("Load data to import panel", dirpath)
721   - event.Skip()
722   -
723   - def OnToolOpen(self, event):
724   - filepath = dlg.ShowOpenProjectDialog()
725   - if filepath:
726   - ps.Publisher().sendMessage('Open Project', filepath)
727   - event.Skip()
728   -
729   - def OnToolSave(self, event):
730   - proj = prj.Project()
731   - filename = (prj.name).replace(' ','_')
732   - if prj.save_as:
733   - filename = dlg.ShowSaveAsProjectDialog(filename)
734   - if filename:
735   - prj.save_as = False
736   - else:
737   - return
738   - ps.Publisher().sendMessage('Save Project',filename)
739   - event.Skip()
  737 + def SetStateProjectClose(self):
  738 + """
  739 + Disable menu items (e.g. save) when project is closed.
  740 + """
  741 + for tool in self.enable_items:
  742 + self.EnableTool(tool, False)
  743 +
  744 + def SetStateProjectOpen(self):
  745 + """
  746 + Enable menu items (e.g. save) when project is opened.
  747 + """
  748 + for tool in self.enable_items:
  749 + self.EnableTool(tool, True)
  750 +
740 751  
741 752  
742 753 # ------------------------------------------------------------------
... ... @@ -744,109 +755,126 @@ class ProjectToolBar(wx.ToolBar):
744 755 # ------------------------------------------------------------------
745 756  
746 757 class ObjectToolBar(wx.ToolBar):
  758 + """
  759 + Toolbar related to general object operations, including: zoom
  760 + move, rotate, brightness/contrast, etc.
  761 + """
747 762 def __init__(self, parent):
  763 + style = wx.TB_FLAT|wx.TB_NODIVIDER | wx.TB_DOCKABLE
748 764 wx.ToolBar.__init__(self, parent, -1, wx.DefaultPosition,
749   - wx.DefaultSize,
750   - wx.TB_FLAT|wx.TB_NODIVIDER | wx.TB_DOCKABLE)
  765 + wx.DefaultSize, style)
751 766  
752 767 self.SetToolBitmapSize(wx.Size(32,32))
  768 +
753 769 self.parent = parent
  770 + # Used to enable/disable menu items if project is opened or
  771 + # not. Eg. save should only be available if a project is open
  772 + self.enable_items = [const.STATE_WL, const.STATE_PAN,
  773 + const.STATE_SPIN, const.STATE_ZOOM_SL,
  774 + const.STATE_ZOOM]
754 775  
755 776 self.__init_items()
756 777 self.__bind_events()
757 778 self.__bind_events_wx()
758 779  
759   - def __init_items(self):
  780 + self.Realize()
  781 + self.SetStateProjectClose()
  782 +
  783 + def __bind_events(self):
  784 + """
  785 + Bind events related to pubsub.
  786 + """
  787 + sub = ps.Publisher().subscribe
  788 + sub(self._EnableState, "Enable state project")
  789 + sub(self._UntoggleAllItems, 'Untoggle object toolbar items')
  790 +
  791 +
  792 + def __bind_events_wx(self):
  793 + """
  794 + Bind normal events from wx (except pubsub related).
  795 + """
  796 + self.Bind(wx.EVT_TOOL, self.OnToggle)
760 797  
  798 + def __init_items(self):
  799 + """
  800 + Add tools into toolbar.
  801 + """
  802 + d = const.ICON_DIR
761 803 if sys.platform == 'darwin':
762   - BMP_ROTATE = wx.Bitmap(os.path.join(const.ICON_DIR,
763   - "tool_rotate_original.gif"),
764   - wx.BITMAP_TYPE_GIF)
765   - BMP_MOVE =wx.Bitmap(os.path.join(const.ICON_DIR,
766   - "tool_translate_original.png"),
767   - wx.BITMAP_TYPE_PNG)
768   - BMP_ZOOM = wx.Bitmap(os.path.join(const.ICON_DIR,
769   - "tool_zoom_original.png"),
770   - wx.BITMAP_TYPE_PNG)
771   - BMP_ZOOM_SELECT = wx.Bitmap(os.path.join(const.ICON_DIR,
772   - "tool_zoom_select_original.png"),
773   - wx.BITMAP_TYPE_PNG)
774   - BMP_CONTRAST = wx.Bitmap(os.path.join(const.ICON_DIR,
775   - "tool_contrast_original.png"),
776   - wx.BITMAP_TYPE_PNG)
  804 + path = os.path.join(d, "tool_rotate_original.gif")
  805 + BMP_ROTATE = wx.Bitmap(path, wx.BITMAP_TYPE_GIF)
  806 +
  807 + path = os.path.join(d, "tool_translate_original.png")
  808 + BMP_MOVE =wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
  809 +
  810 + path = os.path.join(d, "tool_zoom_original.png")
  811 + BMP_ZOOM = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
  812 +
  813 + path = os.path.join(d, "tool_zoom_select_original.png")
  814 + BMP_ZOOM_SELECT = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
  815 +
  816 + path = os.path.join(d, "tool_contrast_original.png")
  817 + BMP_CONTRAST = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
777 818 else:
  819 + path = os.path.join(d, "tool_rotate.gif")
  820 + BMP_ROTATE = wx.Bitmap(path, wx.BITMAP_TYPE_GIF)
  821 +
  822 + path = os.path.join(d, "tool_translate.png")
  823 + BMP_MOVE =wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
  824 +
  825 + path = os.path.join(d, "tool_zoom.png")
  826 + BMP_ZOOM = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
778 827  
779   - BMP_ROTATE = wx.Bitmap(os.path.join(const.ICON_DIR,
780   - "tool_rotate.gif"),
781   - wx.BITMAP_TYPE_GIF)
782   - BMP_MOVE = wx.Bitmap(os.path.join(const.ICON_DIR,
783   - "tool_translate.gif"),
784   - wx.BITMAP_TYPE_GIF)
785   - BMP_ZOOM = wx.Bitmap(os.path.join(const.ICON_DIR, "tool_zoom.png"),
786   - wx.BITMAP_TYPE_PNG)
787   - BMP_ZOOM_SELECT = wx.Bitmap(os.path.join(const.ICON_DIR,
788   - "tool_zoom_select.png"),
789   - wx.BITMAP_TYPE_PNG)
790   - BMP_CONTRAST = wx.Bitmap(os.path.join(const.ICON_DIR,
791   - "tool_contrast.png"),
792   - wx.BITMAP_TYPE_PNG)
  828 + path = os.path.join(d, "tool_zoom_select.png")
  829 + BMP_ZOOM_SELECT = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
793 830  
  831 + path = os.path.join(d, "tool_contrast.png")
  832 + BMP_CONTRAST = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
  833 +
  834 + # Create tool items based on bitmaps
794 835 self.AddLabelTool(const.STATE_ZOOM,
795 836 _("Zoom"),
796 837 BMP_ZOOM,
797 838 kind = wx.ITEM_CHECK)
798   -
799 839 self.AddLabelTool(const.STATE_ZOOM_SL,
800 840 _("Zoom based on selection"),
801 841 BMP_ZOOM_SELECT,
802 842 kind = wx.ITEM_CHECK)
803   -
804 843 self.AddLabelTool(const.STATE_SPIN,
805 844 _("Rotate"), BMP_ROTATE,
806 845 kind = wx.ITEM_CHECK)
807   -
808 846 self.AddLabelTool(const.STATE_PAN,
809 847 _("Move"), BMP_MOVE,
810 848 kind = wx.ITEM_CHECK)
811   -
812 849 self.AddLabelTool(const.STATE_WL,
813 850 _("Window and Level"), BMP_CONTRAST,
814 851 kind = wx.ITEM_CHECK)
815 852  
816   - self.enable_items = [const.STATE_WL, const.STATE_PAN, const.STATE_SPIN,
817   - const.STATE_ZOOM_SL, const.STATE_ZOOM,]
818   -
819   - self.Realize()
820   - self.SetStateProjectClose()
821   -
822   -
823   - def OnEnableState(self, pubsub_evt):
  853 + def _EnableState(self, pubsub_evt):
  854 + """
  855 + Based on given state, enable or disable menu items which
  856 + depend if project is open or not.
  857 + """
824 858 state = pubsub_evt.data
825 859 if state:
826 860 self.SetStateProjectOpen()
827 861 else:
828 862 self.SetStateProjectClose()
829 863  
830   - def SetStateProjectOpen(self):
831   - for tool in self.enable_items:
832   - self.EnableTool(tool, True)
833   -
834   - def SetStateProjectClose(self):
835   - for tool in self.enable_items:
836   - self.EnableTool(tool, False)
837   - self.UntoggleAllItems()
838   -
839   -
840   - def __bind_events_wx(self):
841   - self.Bind(wx.EVT_TOOL, self.OnToggle)
842   -
843   - def __bind_events(self):
844   - ps.Publisher().subscribe(self.UntoggleAllItems,
845   - 'Untoggle object toolbar items')
846   - ps.Publisher().subscribe(self.OnEnableState, "Enable state project")
847   -
  864 + def _UntoggleAllItems(self, pubsub_evt=None):
  865 + """
  866 + Untoggle all items on toolbar.
  867 + """
  868 + for id in const.TOOL_STATES:
  869 + state = self.GetToolState(id)
  870 + if state:
  871 + self.ToggleTool(id, False)
848 872  
849 873 def OnToggle(self, evt):
  874 + """
  875 + Update status of other items on toolbar (only one item
  876 + should be toggle each time).
  877 + """
850 878 id = evt.GetId()
851 879 state = self.GetToolState(id)
852 880 if state:
... ... @@ -859,83 +887,114 @@ class ObjectToolBar(wx.ToolBar):
859 887 state = self.GetToolState(item)
860 888 if state and (item != id):
861 889 self.ToggleTool(item, False)
862   -
863 890 evt.Skip()
864 891  
  892 + def SetStateProjectClose(self):
  893 + """
  894 + Disable menu items (e.g. zoom) when project is closed.
  895 + """
  896 + for tool in self.enable_items:
  897 + self.EnableTool(tool, False)
  898 + self._UntoggleAllItems()
865 899  
866   - def UntoggleAllItems(self, pubsub_evt=None):
867   - for id in const.TOOL_STATES:
868   - state = self.GetToolState(id)
869   - if state:
870   - self.ToggleTool(id, False)
871   -
  900 + def SetStateProjectOpen(self):
  901 + """
  902 + Enable menu items (e.g. zoom) when project is opened.
  903 + """
  904 + for tool in self.enable_items:
  905 + self.EnableTool(tool, True)
872 906  
873 907 # ------------------------------------------------------------------
874 908 # ------------------------------------------------------------------
875 909 # ------------------------------------------------------------------
876 910  
877 911 class SliceToolBar(wx.ToolBar):
  912 + """
  913 + Toolbar related to 2D slice specific operations, including: cross
  914 + intersection reference and scroll slices.
  915 + """
878 916 def __init__(self, parent):
  917 + style = wx.TB_FLAT|wx.TB_NODIVIDER | wx.TB_DOCKABLE
879 918 wx.ToolBar.__init__(self, parent, -1, wx.DefaultPosition,
880 919 wx.DefaultSize,
881   - wx.TB_FLAT|wx.TB_NODIVIDER | wx.TB_DOCKABLE)
  920 + style)
882 921  
883 922 self.SetToolBitmapSize(wx.Size(32,32))
884 923  
885 924 self.parent = parent
  925 + self.enable_items = [const.SLICE_STATE_SCROLL,
  926 + const.SLICE_STATE_CROSS]
886 927 self.__init_items()
887 928 self.__bind_events()
888 929 self.__bind_events_wx()
889 930  
  931 + self.Realize()
  932 + self.SetStateProjectClose()
  933 +
890 934 def __init_items(self):
  935 + """
  936 + Add tools into toolbar.
  937 + """
  938 + d = const.ICON_DIR
891 939 if sys.platform == 'darwin':
892   - BMP_SLICE = wx.Bitmap(os.path.join(const.ICON_DIR,
893   - "slice_original.png"),
894   - wx.BITMAP_TYPE_PNG)
  940 + path = os.path.join(d, "slice_original.png")
  941 + BMP_SLICE = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
895 942  
896   - BMP_CROSS = wx.Bitmap(os.path.join(const.ICON_DIR,"cross_original.png"),
897   - wx.BITMAP_TYPE_PNG)
  943 + path = os.path.join(d,"cross_original.png")
  944 + BMP_CROSS = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
898 945 else:
899   - BMP_SLICE = wx.Bitmap(os.path.join(const.ICON_DIR, "slice.png"),
900   - wx.BITMAP_TYPE_PNG)
901   -
902   - BMP_CROSS = wx.Bitmap(os.path.join(const.ICON_DIR, "cross.png"),
903   - wx.BITMAP_TYPE_PNG)
  946 + path = os.path.join(d, "slice.png")
  947 + BMP_SLICE = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
904 948  
  949 + path = os.path.join(d,"cross.png")
  950 + BMP_CROSS = wx.Bitmap(path, wx.BITMAP_TYPE_PNG)
905 951  
906 952 self.AddCheckTool(const.SLICE_STATE_SCROLL, BMP_SLICE)
907 953 self.AddCheckTool(const.SLICE_STATE_CROSS, BMP_CROSS)
908 954  
909   - self.enable_items = [const.SLICE_STATE_SCROLL, const.SLICE_STATE_CROSS,]
910   - self.Realize()
911   - self.SetStateProjectClose()
912   -
913   - def SetStateProjectOpen(self):
914   - for tool in self.enable_items:
915   - self.EnableTool(tool, True)
916   -
917   - def SetStateProjectClose(self):
918   - for tool in self.enable_items:
919   - self.EnableTool(tool, False)
  955 + def __bind_events(self):
  956 + """
  957 + Bind events related to pubsub.
  958 + """
  959 + sub = ps.Publisher().subscribe
  960 + sub(self._EnableState, "Enable state project")
  961 + sub(self._UntoggleAllItems, 'Untoggle slice toolbar items')
920 962  
921 963 def __bind_events_wx(self):
922   - self.Bind(wx.EVT_TOOL, self.OnClick)
923   -
924   - def __bind_events(self):
925   - ps.Publisher().subscribe(self.UntoggleAllItems,
926   - 'Untoggle slice toolbar items')
927   - ps.Publisher().subscribe(self.OnEnableState, "Enable state project")
  964 + """
  965 + Bind normal events from wx (except pubsub related).
  966 + """
  967 + self.Bind(wx.EVT_TOOL, self.OnToggle)
928 968  
929   - def OnEnableState(self, pubsub_evt):
  969 + def _EnableState(self, pubsub_evt):
  970 + """
  971 + Based on given state, enable or disable menu items which
  972 + depend if project is open or not.
  973 + """
930 974 state = pubsub_evt.data
931 975 if state:
932 976 self.SetStateProjectOpen()
933 977 else:
934 978 self.SetStateProjectClose()
935   - self.UntoggleAllItems()
  979 + self._UntoggleAllItems()
936 980  
  981 + def _UntoggleAllItems(self, pubsub_evt=None):
  982 + """
  983 + Untoggle all items on toolbar.
  984 + """
  985 + for id in const.TOOL_SLICE_STATES:
  986 + state = self.GetToolState(id)
  987 + if state:
  988 + self.ToggleTool(id, False)
  989 + if id == const.SLICE_STATE_CROSS:
  990 + msg = 'Set cross visibility'
  991 + ps.Publisher().sendMessage(msg, 0)
937 992  
938   - def OnClick(self, evt):
  993 + def OnToggle(self, evt):
  994 + """
  995 + Update status of other items on toolbar (only one item
  996 + should be toggle each time).
  997 + """
939 998 id = evt.GetId()
940 999 state = self.GetToolState(id)
941 1000  
... ... @@ -952,115 +1011,168 @@ class SliceToolBar(wx.ToolBar):
952 1011  
953 1012 evt.Skip()
954 1013  
  1014 + def SetStateProjectClose(self):
  1015 + """
  1016 + Disable menu items (e.g. cross) when project is closed.
  1017 + """
  1018 + for tool in self.enable_items:
  1019 + self.EnableTool(tool, False)
955 1020  
956   - def UntoggleAllItems(self, pubsub_evt=None):
957   - for id in const.TOOL_SLICE_STATES:
958   - state = self.GetToolState(id)
959   - if state:
960   - self.ToggleTool(id, False)
961   - if id == const.SLICE_STATE_CROSS:
962   - ps.Publisher().sendMessage('Set cross visibility', 0)
963   -
  1021 + def SetStateProjectOpen(self):
  1022 + """
  1023 + Enable menu items (e.g. cross) when project is opened.
  1024 + """
  1025 + for tool in self.enable_items:
  1026 + self.EnableTool(tool, True)
964 1027  
965 1028 # ------------------------------------------------------------------
966 1029 # ------------------------------------------------------------------
967 1030 # ------------------------------------------------------------------
968 1031  
969 1032 class LayoutToolBar(wx.ToolBar):
  1033 + """
  1034 + Toolbar related to general layout/ visualization configuration
  1035 + e.g: show/hide task panel and show/hide text on viewers.
  1036 + """
970 1037 def __init__(self, parent):
  1038 + style = wx.TB_FLAT|wx.TB_NODIVIDER | wx.TB_DOCKABLE
971 1039 wx.ToolBar.__init__(self, parent, -1, wx.DefaultPosition,
972 1040 wx.DefaultSize,
973   - wx.TB_FLAT|wx.TB_NODIVIDER | wx.TB_DOCKABLE)
  1041 + style)
974 1042  
975 1043 self.SetToolBitmapSize(wx.Size(32,32))
976 1044  
977 1045 self.parent = parent
978 1046 self.__init_items()
979   - self.__bind_events_wx()
980 1047 self.__bind_events()
  1048 + self.__bind_events_wx()
  1049 +
981 1050 self.ontool_layout = False
982 1051 self.ontool_text = True
  1052 + self.enable_items = [ID_TEXT]
983 1053  
984   - def __init_items(self):
  1054 + self.Realize()
  1055 + self.SetStateProjectClose()
  1056 +
  1057 + def __bind_events(self):
  1058 + """
  1059 + Bind events related to pubsub.
  1060 + """
  1061 + sub = ps.Publisher().subscribe
  1062 + sub(self._EnableState, "Enable state project")
  1063 + sub(self._SetLayoutWithTask, "Set layout button data only")
  1064 + sub(self._SetLayoutWithoutTask, "Set layout button full")
  1065 +
  1066 + def __bind_events_wx(self):
  1067 + """
  1068 + Bind normal events from wx (except pubsub related).
  1069 + """
  1070 + self.Bind(wx.EVT_TOOL, self.OnToggle)
985 1071  
  1072 + def __init_items(self):
  1073 + """
  1074 + Add tools into toolbar.
  1075 + """
  1076 + d = const.ICON_DIR
986 1077 if sys.platform == 'darwin':
987   - self.BMP_WITHOUT_MENU =\
988   - wx.Bitmap(os.path.join(const.ICON_DIR,
989   - "layout_data_only_original.gif"),
990   - wx.BITMAP_TYPE_GIF)
991   - self.BMP_WITH_MENU = wx.Bitmap(os.path.join(const.ICON_DIR,
992   - "layout_full_original.gif"),
993   - wx.BITMAP_TYPE_GIF)
  1078 + # Bitmaps for show/hide task panel item
  1079 + p = os.path.join(d, "layout_data_only_original.gif")
  1080 + self.BMP_WITHOUT_MENU = wx.Bitmap(p, wx.BITMAP_TYPE_GIF)
994 1081  
995   - self.BMP_WITHOUT_TEXT =\
996   - wx.Bitmap(os.path.join(const.ICON_DIR,"text_inverted_original.png"))
  1082 + p = os.path.join(d, "layout_full_original.gif")
  1083 + self.BMP_WITHOUT_MENU = wx.Bitmap(p, wx.BITMAP_TYPE_GIF)
997 1084  
998   - self.BMP_WITH_TEXT = wx.Bitmap(os.path.join(const.ICON_DIR,"text_original.png"))
  1085 + # Bitmaps for show/hide task item
  1086 + p = os.path.join(d, "text_inverted_original.png")
  1087 + self.BMP_WITHOUT_TEXT = wx.Bitmap(p, wx.BITMAP_TYPE_PNG)
999 1088  
1000   - else:
1001   - self.BMP_WITHOUT_MENU = wx.Bitmap(os.path.join(const.ICON_DIR,
1002   - "layout_data_only.gif"),
1003   - wx.BITMAP_TYPE_GIF)
1004   - self.BMP_WITH_MENU = wx.Bitmap(os.path.join(const.ICON_DIR,
1005   - "layout_full.gif"),
1006   - wx.BITMAP_TYPE_GIF)
1007   - self.BMP_WITH_TEXT = wx.Bitmap(os.path.join(const.ICON_DIR,"text.gif"), wx.BITMAP_TYPE_GIF)
1008   - self.BMP_WITHOUT_TEXT = wx.Bitmap(os.path.join(const.ICON_DIR,"text_inverted.png"))
1009   -
1010   - self.AddLabelTool(ID_LAYOUT, "",bitmap=self.BMP_WITHOUT_MENU,
1011   -shortHelp= _("Hide task panel"))
1012   - self.AddLabelTool(ID_TEXT, "",bitmap=self.BMP_WITH_TEXT, shortHelp= _("Hide text"))
  1089 + p = os.path.join(d, "text_original.png")
  1090 + self.BMP_WITH_TEXT = wx.Bitmap(p, wx.BITMAP_TYPE_PNG)
1013 1091  
1014   - self.enable_items = [ID_TEXT]
1015   - self.Realize()
1016   - self.SetStateProjectClose()
  1092 + else:
  1093 + # Bitmaps for show/hide task panel item
  1094 + p = os.path.join(d, "layout_data_only.gif")
  1095 + self.BMP_WITHOUT_MENU = wx.Bitmap(p, wx.BITMAP_TYPE_GIF)
1017 1096  
1018   - def SetStateProjectOpen(self):
1019   - self.ontool_text = False
1020   - self.OnText()
1021   - for tool in self.enable_items:
1022   - self.EnableTool(tool, True)
  1097 + p = os.path.join(d, "layout_full.gif")
  1098 + self.BMP_WITHOUT_MENU = wx.Bitmap(p, wx.BITMAP_TYPE_GIF)
1023 1099  
1024   - def SetStateProjectClose(self):
1025   - self.ontool_text = True
1026   - self.OnText()
1027   - for tool in self.enable_items:
1028   - self.EnableTool(tool, False)
  1100 + # Bitmaps for show/hide task item
  1101 + p = os.path.join(d, "text_inverted.png")
  1102 + self.BMP_WITHOUT_TEXT = wx.Bitmap(p, wx.BITMAP_TYPE_PNG)
1029 1103  
1030   - def __bind_events(self):
1031   - ps.Publisher().subscribe(self.SetLayoutButtonOnlyData,
1032   - "Set layout button data only")
1033   - ps.Publisher().subscribe(self.SetLayoutButtonFull,
1034   - "Set layout button full")
  1104 + p = os.path.join(d, "text.png")
  1105 + self.BMP_WITH_TEXT = wx.Bitmap(p, wx.BITMAP_TYPE_PNG)
1035 1106  
1036   - ps.Publisher().subscribe(self.OnEnableState, "Enable state project")
  1107 + self.AddLabelTool(ID_LAYOUT,
  1108 + "",
  1109 + bitmap=self.BMP_WITHOUT_MENU,
  1110 + shortHelp= _("Hide task panel"))
  1111 + self.AddLabelTool(ID_TEXT,
  1112 + "",
  1113 + bitmap=self.BMP_WITH_TEXT,
  1114 + shortHelp= _("Hide text"))
1037 1115  
1038   - def OnEnableState(self, pubsub_evt):
  1116 + def _EnableState(self, pubsub_evt):
  1117 + """
  1118 + Based on given state, enable or disable menu items which
  1119 + depend if project is open or not.
  1120 + """
1039 1121 state = pubsub_evt.data
1040 1122 if state:
1041 1123 self.SetStateProjectOpen()
1042 1124 else:
1043 1125 self.SetStateProjectClose()
1044 1126  
  1127 + def _SetLayoutWithoutTask(self, pubsub_evt):
  1128 + """
  1129 + Set item bitmap to task panel hiden.
  1130 + """
  1131 + self.SetToolNormalBitmap(ID_LAYOUT,self.BMP_WITHOUT_MENU)
1045 1132  
  1133 + def _SetLayoutWithTask(self, pubsub_evt):
  1134 + """
  1135 + Set item bitmap to task panel shown.
  1136 + """
  1137 + self.SetToolNormalBitmap(ID_LAYOUT,self.BMP_WITH_MENU)
1046 1138  
1047   - def __bind_events_wx(self):
1048   - self.Bind(wx.EVT_TOOL, self.OnClick)
1049   -
1050   - def OnClick(self, event):
  1139 + def OnToggle(self, event):
  1140 + """
  1141 + Update status of toolbar item (bitmap and help)
  1142 + """
1051 1143 id = event.GetId()
1052 1144 if id == ID_LAYOUT:
1053   - self.OnLayout()
  1145 + self.ToggleLayout()
1054 1146 elif id== ID_TEXT:
1055   - self.OnText()
1056   -
  1147 + self.ToggleText()
1057 1148  
1058 1149 for item in VIEW_TOOLS:
1059 1150 state = self.GetToolState(item)
1060 1151 if state and (item != id):
1061 1152 self.ToggleTool(item, False)
1062 1153  
1063   - def OnLayout(self):
  1154 + def SetStateProjectClose(self):
  1155 + """
  1156 + Disable menu items (e.g. text) when project is closed.
  1157 + """
  1158 + self.ontool_text = True
  1159 + self.ToggleText()
  1160 + for tool in self.enable_items:
  1161 + self.EnableTool(tool, False)
  1162 +
  1163 + def SetStateProjectOpen(self):
  1164 + """
  1165 + Disable menu items (e.g. text) when project is closed.
  1166 + """
  1167 + self.ontool_text = False
  1168 + self.ToggleText()
  1169 + for tool in self.enable_items:
  1170 + self.EnableTool(tool, True)
  1171 +
  1172 + def ToggleLayout(self):
  1173 + """
  1174 + Based on previous layout item state, toggle it.
  1175 + """
1064 1176 if self.ontool_layout:
1065 1177 self.SetToolNormalBitmap(ID_LAYOUT,self.BMP_WITHOUT_MENU)
1066 1178 ps.Publisher().sendMessage('Show task panel')
... ... @@ -1073,7 +1185,10 @@ shortHelp= _("Hide task panel"))
1073 1185 self.SetToolShortHelp(ID_LAYOUT, _("Show task panel"))
1074 1186 self.ontool_layout = True
1075 1187  
1076   - def OnText(self):
  1188 + def ToggleText(self):
  1189 + """
  1190 + Based on previous text item state, toggle it.
  1191 + """
1077 1192 if self.ontool_text:
1078 1193 self.SetToolNormalBitmap(ID_TEXT,self.BMP_WITH_TEXT)
1079 1194 ps.Publisher().sendMessage('Hide text actors on viewers')
... ... @@ -1087,8 +1202,3 @@ shortHelp= _("Hide task panel"))
1087 1202 ps.Publisher().sendMessage('Update AUI')
1088 1203 self.ontool_text = True
1089 1204  
1090   - def SetLayoutButtonOnlyData(self, pubsub_evt):
1091   - self.SetToolNormalBitmap(ID_LAYOUT,self.BMP_WITH_MENU)
1092   -
1093   - def SetLayoutButtonFull(self, pubsub_evt):
1094   - self.SetToolNormalBitmap(ID_LAYOUT,self.BMP_WITHOUT_MENU)
... ...