From d3df8b246701a178d1c2b84180760ec74e9f7c2d Mon Sep 17 00:00:00 2001 From: paulojamorim Date: Wed, 26 Aug 2009 20:02:22 +0000 Subject: [PATCH] ENH: Pop-up menu slice --- invesalius/data/viewer_slice.py | 77 ++++++++++++++++++----------------------------------------------------------- invesalius/gui/default_viewers.py | 25 ++++++++++++++++--------- 2 files changed, 34 insertions(+), 68 deletions(-) diff --git a/invesalius/data/viewer_slice.py b/invesalius/data/viewer_slice.py index d0918fb..08a8b39 100755 --- a/invesalius/data/viewer_slice.py +++ b/invesalius/data/viewer_slice.py @@ -70,7 +70,6 @@ class Viewer(wx.Panel): self.__bind_events() self.__bind_events_wx() - self.__init_menus() def __init_gui(self): @@ -88,47 +87,21 @@ class Viewer(wx.Panel): background_sizer.Add(scroll, 0, wx.EXPAND|wx.GROW) self.SetSizer(background_sizer) background_sizer.Fit(self) - - + + self.Layout() self.Update() self.SetAutoLayout(1) self.interactor = interactor - - - - def __init_menus(self): - - menu = self.menu = wx.Menu() - submenu_wl = wx.Menu() - - for name in sorted(const.WINDOW_LEVEL): - new_id = wx.NewId() - wl_item = wx.MenuItem(submenu_wl, new_id, name, kind=wx.ITEM_RADIO) - submenu_wl.AppendItem(wl_item) - ID_TO_TOOL_ITEM[new_id] = wl_item - - menu.AppendMenu(1, "Window Width & Level", submenu_wl) - self.Bind(wx.EVT_MENU, self.OnPopupWindowLevel) - self.Fit() - - - - def OnPopupWindowLevel(self, evt): - item = ID_TO_TOOL_ITEM[evt.GetId()] - key = item.GetLabel() - window, level = const.WINDOW_LEVEL[key] - - ps.Publisher().sendMessage('Bright and contrast adjustment image', - (window, level)) - ps.Publisher().sendMessage('Update slice viewer') - evt.Skip() - + + def OnContextMenu(self, evt): self.PopupMenu(self.menu) - #evt.Skip() - + + def SetPopupMenu(self, menu): + self.menu = menu + def __config_interactor(self): ren = vtk.vtkRenderer() @@ -138,9 +111,6 @@ class Viewer(wx.Panel): self.cam = ren.GetActiveCamera() self.ren = ren - - - def append_mode(self, mode): @@ -266,7 +236,7 @@ class Viewer(wx.Panel): ps.Publisher().sendMessage('Update window and level text',\ "WL: %d WW: %d"%(proj.level, proj.window)) self.interactor.Render() - + def OnWindowLevelClick(self, evt, obj): proj = project.Project() @@ -373,7 +343,7 @@ class Viewer(wx.Panel): ren = slice_data.renderer size = ren.GetSize() - if (size[0] <= size[1] + 100): + if (size[0] <= size[1] + 60): bound = slice_data.actor.GetBounds() @@ -536,7 +506,7 @@ class Viewer(wx.Panel): evt_msg = 'Add mask pixel' elif self._brush_cursor_op == const.BRUSH_THRESH: evt_msg = 'Edit mask pixel' - + self.__update_cross_position(*coord) if self.mouse_pressed: @@ -686,28 +656,17 @@ class Viewer(wx.Panel): #### ps.Publisher().subscribe(self.UpdateText,\ 'Update window and level text') + #ps.Publisher().subscribe(self.UpdateCkeckPopUpMenu,\ + # 'Update ckeck popup menu') def ChangeBrushOperation(self, pubsub_evt): print pubsub_evt.data self._brush_cursor_op = pubsub_evt.data - - def popupID1(self, evt): - print "A" - print "...b..." - - evt.Skip() - - def popupID8(self, evt): - print "B" - evt.Skip() - def __bind_events_wx(self): self.scroll.Bind(wx.EVT_SCROLL, self.OnScrollBar) - self.interactor.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) - self.interactor.Bind(wx.EVT_RIGHT_DOWN, self.OnContextMenu) - - + self.interactor.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) + self.interactor.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu) def LoadImagedata(self, pubsub_evt): imagedata = pubsub_evt.data @@ -870,13 +829,13 @@ class Viewer(wx.Panel): self.cross.SetFocalPoint(coordinates[self.orientation]) - #print + #print #print slice_number #print x, y, z #print "Focal", self.cross.GetFocalPoint() #print "bounds", self.cross.GetModelBounds() #print "actor bounds", slice_data.actor.GetBounds() - #print + #print def __update_cursor_position(self, slice_data, position): x, y, z = position @@ -956,7 +915,7 @@ class Viewer(wx.Panel): def UpdateRender(self, evt): self.interactor.Render() - + def set_scroll_position(self, position): self.scroll.SetThumbPosition(position) self.OnScrollBar() diff --git a/invesalius/gui/default_viewers.py b/invesalius/gui/default_viewers.py index 262b288..52bc12f 100755 --- a/invesalius/gui/default_viewers.py +++ b/invesalius/gui/default_viewers.py @@ -23,6 +23,7 @@ import wx.lib.agw.fourwaysplitter as fws import wx.lib.pubsub as ps import data.viewer_slice as slice_viewer import data.viewer_volume as volume_viewer +import widgets.slice_menu as slice_menu_ from gui.widgets.clut_raycasting import CLUTRaycastingWidget, \ EVT_CLUT_POINT_CHANGED @@ -92,6 +93,12 @@ class Panel(wx.Panel): self.s4 = s4 self.p4 = p4 + menu = slice_menu_.SliceMenu() + p1.SetPopupMenu(menu) + p2.SetPopupMenu(menu) + p3.SetPopupMenu(menu) + + if sys.platform == 'win32': self.aui_manager.AddPane(p1, s1) self.aui_manager.AddPane(p2, s2) @@ -236,7 +243,7 @@ class VolumeInteraction(wx.Panel): def OnPointChanged(self, evt): ps.Publisher.sendMessage('Set raycasting refresh', None) - ps.Publisher().sendMessage('Render volume viewer', None) + ps.Publisher().sendMessage('Render volume viewer', None) import wx.lib.platebtn as pbtn import wx.lib.buttons as btn @@ -251,7 +258,7 @@ ID_TO_BMP = {const.VOL_FRONT: ["Front", "../icons/view_front.png"], const.VOL_BACK: ["Back", "../icons/view_back.png"], const.VOL_TOP: ["Top", "../icons/view_top.png"], const.VOL_BOTTOM: ["Bottom", "../icons/view_bottom.png"], - const.VOL_RIGHT: ["Right", "../icons/view_right.png"], + const.VOL_RIGHT: ["Right", "../icons/view_right.png"], const.VOL_LEFT: ["Left", "../icons/view_left.png"], const.VOL_ISO:["Isometric","../icons/view_isometric.png"] } @@ -284,7 +291,7 @@ class VolumeToolPanel(wx.Panel): button_raycasting = pbtn.PlateButton(self, BUTTON_RAYCASTING,"", BMP_RAYCASTING, style=pbtn.PB_STYLE_SQUARE, - size=(24,24)) + size=(24,24)) self.button_raycasting = button_raycasting self.button_raycasting.Bind(wx.EVT_LEFT_DOWN, self.OnButtonRaycasting) @@ -305,7 +312,7 @@ class VolumeToolPanel(wx.Panel): else: size = (24,24) sp = 5 - + button_colour= csel.ColourSelect(self, 111,colour=(0,0,0), size=size) button_colour.Bind(csel.EVT_COLOURSELECT, self.OnSelectColour) @@ -364,7 +371,7 @@ class VolumeToolPanel(wx.Panel): menu.Enable(RAYCASTING_TOOLS, 0) self.menu_raycasting = menu - menu.Bind(wx.EVT_MENU, self.OnMenuRaycasting) + menu.Bind(wx.EVT_MENU, self.OnMenuRaycasting) # VOLUME VIEW ANGLE BUTTON menu = wx.Menu() @@ -396,9 +403,9 @@ class VolumeToolPanel(wx.Panel): self.menu_raycasting.Enable(RAYCASTING_TOOLS, 1) else: self.menu_raycasting.Enable(RAYCASTING_TOOLS, 0) - + else: - # Raycasting tool + # Raycasting tool # TODO: In future, when more tools are available item = ID_TO_TOOL_ITEM[evt.GetId()] #if not item.IsChecked(): @@ -411,13 +418,13 @@ class VolumeToolPanel(wx.Panel): else: ps.Publisher().sendMessage('Enable raycasting tool', [ID_TO_TOOL[evt.GetId()],0]) - + def OnMenuView(self, evt): """Events from button menus.""" bmp = wx.Bitmap(ID_TO_BMP[evt.GetId()][1], wx.BITMAP_TYPE_PNG) self.button_view.SetBitmapSelected(bmp) - + ps.Publisher().sendMessage('Set volume view angle', evt.GetId()) -- libgit2 0.21.2