diff --git a/invesalius/control.py b/invesalius/control.py index c6eeeed..45f2aca 100755 --- a/invesalius/control.py +++ b/invesalius/control.py @@ -21,7 +21,7 @@ import os import plistlib import numpy -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import constants as const import data.imagedata_utils as utils @@ -54,35 +54,35 @@ class Controller(): session = ses.Session() self.measure_manager = data.measures.MeasurementManager() - ps.Publisher().sendMessage('Load Preferences') + Publisher.sendMessage('Load Preferences') def __bind_events(self): - ps.Publisher().subscribe(self.OnImportMedicalImages, 'Import directory') - ps.Publisher().subscribe(self.OnShowDialogImportDirectory, + Publisher.subscribe(self.OnImportMedicalImages, 'Import directory') + Publisher.subscribe(self.OnShowDialogImportDirectory, 'Show import directory dialog') - ps.Publisher().subscribe(self.OnShowDialogOpenProject, + Publisher.subscribe(self.OnShowDialogOpenProject, 'Show open project dialog') - ps.Publisher().subscribe(self.OnShowDialogSaveProject, 'Show save dialog') + Publisher.subscribe(self.OnShowDialogSaveProject, 'Show save dialog') - ps.Publisher().subscribe(self.LoadRaycastingPreset, + Publisher.subscribe(self.LoadRaycastingPreset, 'Load raycasting preset') - ps.Publisher().subscribe(self.SaveRaycastingPreset, + Publisher.subscribe(self.SaveRaycastingPreset, 'Save raycasting preset') - ps.Publisher().subscribe(self.OnOpenDicomGroup, + Publisher.subscribe(self.OnOpenDicomGroup, 'Open DICOM group') - ps.Publisher().subscribe(self.Progress, "Update dicom load") - ps.Publisher().subscribe(self.OnLoadImportPanel, "End dicom load") - ps.Publisher().subscribe(self.OnCancelImport, 'Cancel DICOM load') - ps.Publisher().subscribe(self.OnShowDialogCloseProject, 'Close Project') - ps.Publisher().subscribe(self.OnOpenProject, 'Open project') - ps.Publisher().subscribe(self.OnOpenRecentProject, 'Open recent project') - ps.Publisher().subscribe(self.OnShowAnalyzeFile, 'Show analyze dialog') + Publisher.subscribe(self.Progress, "Update dicom load") + Publisher.subscribe(self.OnLoadImportPanel, "End dicom load") + Publisher.subscribe(self.OnCancelImport, 'Cancel DICOM load') + Publisher.subscribe(self.OnShowDialogCloseProject, 'Close Project') + Publisher.subscribe(self.OnOpenProject, 'Open project') + Publisher.subscribe(self.OnOpenRecentProject, 'Open recent project') + Publisher.subscribe(self.OnShowAnalyzeFile, 'Show analyze dialog') def OnCancelImport(self, pubsub_evt): #self.cancel_import = True - ps.Publisher().sendMessage('Hide import panel') + Publisher.sendMessage('Hide import panel') ########################### @@ -108,7 +108,7 @@ class Controller(): self.CreateAnalyzeProject(imagedata) self.LoadProject() - ps.Publisher().sendMessage("Enable state project", True) + Publisher.sendMessage("Enable state project", True) ########################### @@ -128,7 +128,7 @@ class Controller(): dialog.ImportEmptyDirectory(dirpath) elif dirpath: self.StartImportPanel(dirpath) - ps.Publisher().sendMessage("Load data to import panel", dirpath) + Publisher.sendMessage("Load data to import panel", dirpath) def ShowDialogOpenProject(self): # Offer to save current project if necessary @@ -180,30 +180,30 @@ class Controller(): if not answer: debug("Close without changes") self.CloseProject() - ps.Publisher().sendMessage("Enable state project", False) - ps.Publisher().sendMessage('Set project name') - ps.Publisher().sendMessage("Stop Config Recording") - ps.Publisher().sendMessage("Exit") + Publisher.sendMessage("Enable state project", False) + Publisher.sendMessage('Set project name') + Publisher.sendMessage("Stop Config Recording") + Publisher.sendMessage("Exit") elif answer == 1: self.ShowDialogSaveProject() debug("Save changes and close") self.CloseProject() - ps.Publisher().sendMessage("Enable state project", False) - ps.Publisher().sendMessage('Set project name') - ps.Publisher().sendMessage("Stop Config Recording") - ps.Publisher().sendMessage("Exit") + Publisher.sendMessage("Enable state project", False) + Publisher.sendMessage('Set project name') + Publisher.sendMessage("Stop Config Recording") + Publisher.sendMessage("Exit") elif answer == -1: debug("Cancel") else: self.CloseProject() - ps.Publisher().sendMessage("Enable state project", False) - ps.Publisher().sendMessage('Set project name') - ps.Publisher().sendMessage("Stop Config Recording") - ps.Publisher().sendMessage("Exit") + Publisher.sendMessage("Enable state project", False) + Publisher.sendMessage('Set project name') + Publisher.sendMessage("Stop Config Recording") + Publisher.sendMessage("Exit") else: - ps.Publisher().sendMessage('Stop Config Recording') - ps.Publisher().sendMessage('Exit') + Publisher.sendMessage('Stop Config Recording') + Publisher.sendMessage('Exit') ########################### @@ -230,7 +230,7 @@ class Controller(): def OpenProject(self, filepath): - ps.Publisher().sendMessage('Begin busy cursor') + Publisher.sendMessage('Begin busy cursor') path = os.path.abspath(filepath) proj = prj.Project() @@ -253,14 +253,14 @@ class Controller(): self.LoadProject() - ps.Publisher().sendMessage('Update threshold limits', + Publisher.sendMessage('Update threshold limits', proj.threshold_range) session = ses.Session() session.OpenProject(filepath) - ps.Publisher().sendMessage("Enable state project", True) + Publisher.sendMessage("Enable state project", True) def SaveProject(self, path=None): - ps.Publisher().sendMessage('Begin busy cursor') + Publisher.sendMessage('Begin busy cursor') session = ses.Session() if path: dirpath, filename = os.path.split(path) @@ -272,14 +272,14 @@ class Controller(): prj.Project().SavePlistProject(dirpath, filename) session.SaveProject() - ps.Publisher().sendMessage('End busy cursor') + Publisher.sendMessage('End busy cursor') def CloseProject(self): proj = prj.Project() proj.Close() - ps.Publisher().sendMessage('Hide content panel') - ps.Publisher().sendMessage('Close project data') + Publisher.sendMessage('Hide content panel') + Publisher.sendMessage('Close project data') session = ses.Session() session.CloseProject() @@ -292,7 +292,7 @@ class Controller(): reader = dcm.ProgressDicomReader() reader.SetWindowEvent(self.frame) reader.SetDirectoryPath(path) - ps.Publisher().sendMessage('End busy cursor') + Publisher.sendMessage('End busy cursor') def Progress(self, evt): data = evt.data @@ -305,7 +305,7 @@ class Controller(): if not(self.progress_dialog.Update(data[0],message)): self.progress_dialog.Close() self.progress_dialog = None - ps.Publisher().sendMessage('Begin busy cursor') + Publisher.sendMessage('Begin busy cursor') else: #Is None if user canceled the load self.progress_dialog.Close() @@ -315,15 +315,15 @@ class Controller(): patient_series = evt.data ok = self.LoadImportPanel(patient_series) if ok: - ps.Publisher().sendMessage('Show import panel') - ps.Publisher().sendMessage("Show import panel in frame") + Publisher.sendMessage('Show import panel') + Publisher.sendMessage("Show import panel in frame") def LoadImportPanel(self, patient_series): if patient_series and isinstance(patient_series, list): - ps.Publisher().sendMessage("Load import panel", patient_series) + Publisher.sendMessage("Load import panel", patient_series) first_patient = patient_series[0] - ps.Publisher().sendMessage("Load dicom preview", first_patient) + Publisher.sendMessage("Load dicom preview", first_patient) return True else: dialog.ImportInvalidFiles() @@ -350,7 +350,7 @@ class Controller(): debug("No medical images found on given directory") return self.LoadProject() - ps.Publisher().sendMessage("Enable state project", True) + Publisher.sendMessage("Enable state project", True) def LoadProject(self): proj = prj.Project() @@ -364,50 +364,50 @@ class Controller(): self.Slice = sl.Slice() self.Slice.spacing = proj.spacing - ps.Publisher().sendMessage('Load slice to viewer', + Publisher.sendMessage('Load slice to viewer', (proj.imagedata, proj.mask_dict)) - ps.Publisher().sendMessage('Load slice plane') + Publisher.sendMessage('Load slice plane') - ps.Publisher().sendMessage('Bright and contrast adjustment image',\ + Publisher.sendMessage('Bright and contrast adjustment image',\ (proj.window, proj.level)) - ps.Publisher().sendMessage('Update window level value',\ + Publisher.sendMessage('Update window level value',\ (proj.window, proj.level)) - ps.Publisher().sendMessage('Set project name', proj.name) - ps.Publisher().sendMessage('Load surface dict', + Publisher.sendMessage('Set project name', proj.name) + Publisher.sendMessage('Load surface dict', proj.surface_dict) - ps.Publisher().sendMessage('Hide surface items', + Publisher.sendMessage('Hide surface items', proj.surface_dict) self.LoadImagedataInfo() # TODO: where do we insert this <<= thresh_min) & (slice_ <= thresh_max))).astype('uint8') # Update viewer - #ps.Publisher().sendMessage('Update slice viewer') + #Publisher.sendMessage('Update slice viewer') # Update data notebook (GUI) - ps.Publisher().sendMessage('Set mask threshold in notebook', + Publisher.sendMessage('Set mask threshold in notebook', (self.current_mask.index, self.current_mask.threshold_range)) else: @@ -557,7 +557,7 @@ class Slice(object): for buffer_ in self.buffer_slices.values(): buffer_.discard_vtk_mask() buffer_.discard_mask() - ps.Publisher().sendMessage('Reload actual slice') + Publisher.sendMessage('Reload actual slice') #--------------------------------------------------------------------------- def SelectCurrentMask(self, index): @@ -581,13 +581,13 @@ class Slice(object): "CORONAL": SliceBuffer(), "SAGITAL": SliceBuffer()} - ps.Publisher().sendMessage('Set mask threshold in notebook', + Publisher.sendMessage('Set mask threshold in notebook', (index, self.current_mask.threshold_range)) - ps.Publisher().sendMessage('Set threshold values in gradient', + Publisher.sendMessage('Set threshold values in gradient', self.current_mask.threshold_range) - ps.Publisher().sendMessage('Select mask name in combo', index) - ps.Publisher().sendMessage('Update slice viewer') + Publisher.sendMessage('Select mask name in combo', index) + Publisher.sendMessage('Update slice viewer') #--------------------------------------------------------------------------- def CreateSurfaceFromIndex(self, pubsub_evt): @@ -606,7 +606,7 @@ class Slice(object): mask.matrix.flush() - ps.Publisher().sendMessage('Create surface', (algorithm, options, + Publisher.sendMessage('Create surface', (algorithm, options, self.matrix, self.matrix_filename, mask, self.spacing, @@ -649,7 +649,7 @@ class Slice(object): def __create_background(self, imagedata): thresh_min, thresh_max = imagedata.GetScalarRange() - ps.Publisher().sendMessage('Update threshold limits list', (thresh_min, + Publisher.sendMessage('Update threshold limits list', (thresh_min, thresh_max)) # map scalar values into colors @@ -676,7 +676,7 @@ class Slice(object): for buffer_ in self.buffer_slices.values(): buffer_.discard_vtk_image() - ps.Publisher().sendMessage('Reload actual slice') + Publisher.sendMessage('Reload actual slice') def UpdateColourTableBackground(self, pubsub_evt): values = pubsub_evt.data @@ -686,7 +686,7 @@ class Slice(object): self.value_range = values[3] for buffer_ in self.buffer_slices.values(): buffer_.discard_vtk_image() - ps.Publisher().sendMessage('Reload actual slice') + Publisher.sendMessage('Reload actual slice') def InputImageWidget(self, pubsub_evt): widget, orientation = pubsub_evt.data @@ -759,7 +759,7 @@ class Slice(object): future_mask.index = index ## update gui related to mask - ps.Publisher().sendMessage('Add mask', + Publisher.sendMessage('Add mask', (future_mask.index, future_mask.name, future_mask.threshold_range, @@ -767,8 +767,8 @@ class Slice(object): self.current_mask = future_mask - ps.Publisher().sendMessage('Change mask selected', future_mask.index) - ps.Publisher().sendMessage('Update slice viewer') + Publisher.sendMessage('Change mask selected', future_mask.index) + Publisher.sendMessage('Update slice viewer') def __load_masks(self, imagedata, mask_dict): keys = mask_dict.keys() @@ -779,7 +779,7 @@ class Slice(object): # update gui related to mask utils.debug("__load_masks") utils.debug('THRESHOLD_RANGE %s'% mask.threshold_range) - ps.Publisher().sendMessage('Add mask', + Publisher.sendMessage('Add mask', (mask.index, mask.name, mask.threshold_range, @@ -788,8 +788,8 @@ class Slice(object): self.current_mask = mask self.__build_mask(imagedata, False) - ps.Publisher().sendMessage('Change mask selected', mask.index) - ps.Publisher().sendMessage('Update slice viewer') + Publisher.sendMessage('Change mask selected', mask.index) + Publisher.sendMessage('Update slice viewer') def do_ww_wl(self, image): colorer = vtk.vtkImageMapToWindowLevelColors() @@ -891,7 +891,7 @@ class Slice(object): if o != orientation: self.buffer_slices[o].discard_mask() self.buffer_slices[o].discard_vtk_mask() - ps.Publisher().sendMessage('Reload actual slice') + Publisher.sendMessage('Reload actual slice') def __build_mask(self, imagedata, create=True): # create new mask instance and insert it into project diff --git a/invesalius/data/surface.py b/invesalius/data/surface.py index 65cc758..16d561e 100644 --- a/invesalius/data/surface.py +++ b/invesalius/data/surface.py @@ -23,7 +23,7 @@ import plistlib import random import vtk -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import constants as const import imagedata_utils as iu @@ -107,27 +107,27 @@ class SurfaceManager(): self.__bind_events() def __bind_events(self): - ps.Publisher().subscribe(self.AddNewActor, 'Create surface') - ps.Publisher().subscribe(self.SetActorTransparency, + Publisher.subscribe(self.AddNewActor, 'Create surface') + Publisher.subscribe(self.SetActorTransparency, 'Set surface transparency') - ps.Publisher().subscribe(self.SetActorColour, + Publisher.subscribe(self.SetActorColour, 'Set surface colour') - ps.Publisher().subscribe(self.OnChangeSurfaceName, 'Change surface name') - ps.Publisher().subscribe(self.OnShowSurface, 'Show surface') - ps.Publisher().subscribe(self.OnExportSurface,'Export surface to file') - ps.Publisher().subscribe(self.OnLoadSurfaceDict, 'Load surface dict') - ps.Publisher().subscribe(self.OnCloseProject, 'Close project data') - ps.Publisher().subscribe(self.OnSelectSurface, 'Change surface selected') + Publisher.subscribe(self.OnChangeSurfaceName, 'Change surface name') + Publisher.subscribe(self.OnShowSurface, 'Show surface') + Publisher.subscribe(self.OnExportSurface,'Export surface to file') + Publisher.subscribe(self.OnLoadSurfaceDict, 'Load surface dict') + Publisher.subscribe(self.OnCloseProject, 'Close project data') + Publisher.subscribe(self.OnSelectSurface, 'Change surface selected') #---- - ps.Publisher().subscribe(self.OnSplitSurface, 'Split surface') - ps.Publisher().subscribe(self.OnLargestSurface, + Publisher.subscribe(self.OnSplitSurface, 'Split surface') + Publisher.subscribe(self.OnLargestSurface, 'Create surface from largest region') - ps.Publisher().subscribe(self.OnSeedSurface, "Create surface from seeds") + Publisher.subscribe(self.OnSeedSurface, "Create surface from seeds") - ps.Publisher().subscribe(self.OnDuplicate, "Duplicate surfaces") - ps.Publisher().subscribe(self.OnRemove,"Remove surfaces") - ps.Publisher().subscribe(self.UpdateSurfaceInterpolation, 'Update Surface Interpolation') + Publisher.subscribe(self.OnDuplicate, "Duplicate surfaces") + Publisher.subscribe(self.OnRemove,"Remove surfaces") + Publisher.subscribe(self.UpdateSurfaceInterpolation, 'Update Surface Interpolation') def OnDuplicate(self, pubsub_evt): selected_items = pubsub_evt.data @@ -163,7 +163,7 @@ class SurfaceManager(): if i > index: new_dict[i-1] = old_dict[i] old_dict = new_dict - ps.Publisher().sendMessage('Remove surface actor from viewer', actor) + Publisher.sendMessage('Remove surface actor from viewer', actor) self.actors_dict = new_dict if self.last_surface_index in selected_items: @@ -185,7 +185,7 @@ class SurfaceManager(): new_polydata = pu.JoinSeedsParts(surface.polydata, points_id_list) index = self.CreateSurfaceFromPolydata(new_polydata) - ps.Publisher().sendMessage('Show single surface', (index, True)) + Publisher.sendMessage('Show single surface', (index, True)) #self.ShowActor(index, True) def OnSplitSurface(self, pubsub_evt): @@ -204,7 +204,7 @@ class SurfaceManager(): index_list.append(index) #self.ShowActor(index, True) - ps.Publisher().sendMessage('Show multiple surfaces', (index_list, True)) + Publisher.sendMessage('Show multiple surfaces', (index_list, True)) def OnLargestSurface(self, pubsub_evt): """ @@ -217,7 +217,7 @@ class SurfaceManager(): new_polydata = pu.SelectLargestPart(surface.polydata) new_index = self.CreateSurfaceFromPolydata(new_polydata) - ps.Publisher().sendMessage('Show single surface', (new_index, True)) + Publisher.sendMessage('Show single surface', (new_index, True)) def CreateSurfaceFromPolydata(self, polydata, overwrite=False, name=None, colour=None, @@ -279,9 +279,9 @@ class SurfaceManager(): surface.volume = volume self.last_surface_index = surface.index - ps.Publisher().sendMessage('Load surface actor into viewer', actor) + Publisher.sendMessage('Load surface actor into viewer', actor) - ps.Publisher().sendMessage('Update surface info in GUI', + Publisher.sendMessage('Update surface info in GUI', (surface.index, surface.name, surface.colour, surface.volume, surface.transparency)) @@ -292,7 +292,7 @@ class SurfaceManager(): def CloseProject(self): for index in self.actors_dict: - ps.Publisher().sendMessage('Remove surface actor from viewer', self.actors_dict[index]) + Publisher.sendMessage('Remove surface actor from viewer', self.actors_dict[index]) del self.actors_dict self.actors_dict = {} @@ -302,7 +302,7 @@ class SurfaceManager(): # self.actors_dict. proj = prj.Project() surface = proj.surface_dict[index] - ps.Publisher().sendMessage('Update surface info in GUI', + Publisher.sendMessage('Update surface info in GUI', (index, surface.name, surface.colour, surface.volume, surface.transparency)) @@ -342,13 +342,13 @@ class SurfaceManager(): self.actors_dict[surface.index] = actor # Send actor by pubsub to viewer's render - ps.Publisher().sendMessage('Load surface actor into viewer', (actor)) + Publisher.sendMessage('Load surface actor into viewer', (actor)) - ps.Publisher().sendMessage('Update status text in GUI', + Publisher.sendMessage('Update status text in GUI', _("Ready")) # The following lines have to be here, otherwise all volumes disappear - ps.Publisher().sendMessage('Update surface info in GUI', + Publisher.sendMessage('Update surface info in GUI', (surface.index, surface.name, surface.colour, surface.volume, surface.transparency)) @@ -623,17 +623,17 @@ class SurfaceManager(): surface.volume = volume self.last_surface_index = surface.index - ps.Publisher().sendMessage('Load surface actor into viewer', actor) + Publisher.sendMessage('Load surface actor into viewer', actor) # Send actor by pubsub to viewer's render if overwrite and self.actors_dict.keys(): old_actor = self.actors_dict[self.last_surface_index] - ps.Publisher().sendMessage('Remove surface actor from viewer', old_actor) + Publisher.sendMessage('Remove surface actor from viewer', old_actor) # Save actor for future management tasks self.actors_dict[surface.index] = actor - ps.Publisher().sendMessage('Update surface info in GUI', + Publisher.sendMessage('Update surface info in GUI', (surface.index, surface.name, surface.colour, surface.volume, surface.transparency)) @@ -641,10 +641,10 @@ class SurfaceManager(): #When you finalize the progress. The bar is cleaned. UpdateProgress = vu.ShowProgress(1) UpdateProgress(0, _("Ready")) - ps.Publisher().sendMessage('Update status text in GUI', + Publisher.sendMessage('Update status text in GUI', _("Ready")) - ps.Publisher().sendMessage('End busy cursor') + Publisher.sendMessage('End busy cursor') def UpdateSurfaceInterpolation(self, pub_evt): interpolation = int(ses.Session().surface_interpolation) @@ -652,13 +652,13 @@ class SurfaceManager(): for key in self.actors_dict: self.actors_dict[key].GetProperty().SetInterpolation(interpolation) - ps.Publisher().sendMessage('Render volume viewer') + Publisher.sendMessage('Render volume viewer') def RemoveActor(self, index): """ Remove actor, according to given actor index. """ - ps.Publisher().sendMessage('Remove surface actor from viewer', (index)) + Publisher.sendMessage('Remove surface actor from viewer', (index)) self.actors_dict.pop(index) # Remove surface from project's surface_dict proj = prj.Project() @@ -681,7 +681,7 @@ class SurfaceManager(): # Update value in project's surface_dict proj = prj.Project() proj.surface_dict[index].is_shown = value - ps.Publisher().sendMessage('Render volume viewer') + Publisher.sendMessage('Render volume viewer') def SetActorTransparency(self, pubsub_evt): """ @@ -693,7 +693,7 @@ class SurfaceManager(): # Update value in project's surface_dict proj = prj.Project() proj.surface_dict[index].transparency = value - ps.Publisher().sendMessage('Render volume viewer') + Publisher.sendMessage('Render volume viewer') def SetActorColour(self, pubsub_evt): """ @@ -703,7 +703,7 @@ class SurfaceManager(): # Update value in project's surface_dict proj = prj.Project() proj.surface_dict[index].colour = colour - ps.Publisher().sendMessage('Render volume viewer') + Publisher.sendMessage('Render volume viewer') def OnExportSurface(self, pubsub_evt): filename, filetype = pubsub_evt.data diff --git a/invesalius/data/surface_process.py b/invesalius/data/surface_process.py index 3844430..2bad3a6 100644 --- a/invesalius/data/surface_process.py +++ b/invesalius/data/surface_process.py @@ -119,8 +119,8 @@ class SurfaceProcess(multiprocessing.Process): contour.ComputeScalarsOn() contour.ComputeGradientsOn() contour.ComputeNormalsOn() - contour.AddObserver("ProgressEvent", lambda obj,evt: - self.SendProgress(obj, _("Generating 3D surface..."))) + #contour.AddObserver("ProgressEvent", lambda obj,evt: + # self.SendProgress(obj, _("Generating 3D surface..."))) polydata = contour.GetOutput() #else: #mode == "GRAYSCALE": #mcubes = vtk.vtkMarchingCubes() diff --git a/invesalius/data/viewer_slice.py b/invesalius/data/viewer_slice.py index aec0f57..80063b6 100755 --- a/invesalius/data/viewer_slice.py +++ b/invesalius/data/viewer_slice.py @@ -27,7 +27,7 @@ import vtk from vtk.wx.wxVTKRenderWindowInteractor import wxVTKRenderWindowInteractor import wx -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import constants as const import cursor_actors as ca @@ -229,10 +229,10 @@ class Viewer(wx.Panel): if state == const.SLICE_STATE_CROSS: self.__set_cross_visibility(1) - ps.Publisher().sendMessage('Activate ball reference') + Publisher.sendMessage('Activate ball reference') else: self.__set_cross_visibility(0) - ps.Publisher().sendMessage('Deactivate ball reference') + Publisher.sendMessage('Deactivate ball reference') if state == const.STATE_WL: self.on_wl = True @@ -322,7 +322,7 @@ class Viewer(wx.Panel): def OnReleaseRightButton(self, evt, obj): self.right_pressed = 0 - ps.Publisher().sendMessage('Update slice viewer') + Publisher.sendMessage('Update slice viewer') def OnLeftClick(self, evt, obj): self.left_pressed = 1 @@ -332,7 +332,7 @@ class Viewer(wx.Panel): def OnReleaseLeftButton(self, evt, obj): self.left_pressed = 0 - ps.Publisher().sendMessage('Update slice viewer') + Publisher.sendMessage('Update slice viewer') def OnWindowLevelMove(self, evt, obj): if (self.left_pressed): @@ -342,7 +342,7 @@ class Viewer(wx.Panel): self.acum_achange_level += mouse_y - self.last_y self.last_x, self.last_y = mouse_x, mouse_y - ps.Publisher().sendMessage('Bright and contrast adjustment image', + Publisher.sendMessage('Bright and contrast adjustment image', (self.acum_achange_window, self.acum_achange_level)) #self.SetWLText(self.acum_achange_level, @@ -350,12 +350,12 @@ class Viewer(wx.Panel): const.WINDOW_LEVEL['Manual'] = (self.acum_achange_window,\ self.acum_achange_level) - ps.Publisher().sendMessage('Check window and level other') - ps.Publisher().sendMessage('Update window level value',(self.acum_achange_window, + Publisher.sendMessage('Check window and level other') + Publisher.sendMessage('Update window level value',(self.acum_achange_window, self.acum_achange_level)) #Necessary update the slice plane in the volume case exists - ps.Publisher().sendMessage('Update slice viewer') - ps.Publisher().sendMessage('Render volume viewer') + Publisher.sendMessage('Update slice viewer') + Publisher.sendMessage('Render volume viewer') def OnWindowLevelClick(self, evt, obj): self.last_x, self.last_y = self.interactor.GetLastEventPosition() @@ -364,7 +364,7 @@ class Viewer(wx.Panel): window, level = pubsub_evt.data self.acum_achange_window, self.acum_achange_level = (window, level) self.SetWLText(window, level) - ps.Publisher().sendMessage('Update all slice') + Publisher.sendMessage('Update all slice') def OnChangeSliceMove(self, evt, obj): @@ -816,11 +816,11 @@ class Viewer(wx.Panel): coord = self.calcultate_scroll_position(position) self.ScrollSlice(coord) - ps.Publisher().sendMessage('Update cross position', coord_cross) - ps.Publisher().sendMessage('Set ball reference position based on bound', + Publisher.sendMessage('Update cross position', coord_cross) + Publisher.sendMessage('Set ball reference position based on bound', coord_cross) - ps.Publisher().sendMessage('Set camera in volume', coord_cross) - ps.Publisher().sendMessage('Render volume viewer') + Publisher.sendMessage('Set camera in volume', coord_cross) + Publisher.sendMessage('Render volume viewer') self.interactor.Render() @@ -831,26 +831,26 @@ class Viewer(wx.Panel): position = self.slice_data.actor.GetInput().FindPoint(x, y, z) coord_cross = self.slice_data.actor.GetInput().GetPoint(position) coord = self.calcultate_scroll_position(position) - ps.Publisher().sendMessage('Update cross position', coord_cross) + Publisher.sendMessage('Update cross position', coord_cross) self.ScrollSlice(coord) self.interactor.Render() def ScrollSlice(self, coord): if self.orientation == "AXIAL": - ps.Publisher().sendMessage(('Set scroll position', 'SAGITAL'), + Publisher.sendMessage(('Set scroll position', 'SAGITAL'), coord[0]) - ps.Publisher().sendMessage(('Set scroll position', 'CORONAL'), + Publisher.sendMessage(('Set scroll position', 'CORONAL'), coord[1]) elif self.orientation == "SAGITAL": - ps.Publisher().sendMessage(('Set scroll position', 'AXIAL'), + Publisher.sendMessage(('Set scroll position', 'AXIAL'), coord[2]) - ps.Publisher().sendMessage(('Set scroll position', 'CORONAL'), + Publisher.sendMessage(('Set scroll position', 'CORONAL'), coord[1]) elif self.orientation == "CORONAL": - ps.Publisher().sendMessage(('Set scroll position', 'AXIAL'), + Publisher.sendMessage(('Set scroll position', 'AXIAL'), coord[2]) - ps.Publisher().sendMessage(('Set scroll position', 'SAGITAL'), + Publisher.sendMessage(('Set scroll position', 'SAGITAL'), coord[0]) def OnZoomMoveRight(self, evt, obj): @@ -952,61 +952,61 @@ class Viewer(wx.Panel): return x, y, z def __bind_events(self): - ps.Publisher().subscribe(self.LoadImagedata, + Publisher.subscribe(self.LoadImagedata, 'Load slice to viewer') - ps.Publisher().subscribe(self.SetBrushColour, + Publisher.subscribe(self.SetBrushColour, 'Change mask colour') - ps.Publisher().subscribe(self.UpdateRender, + Publisher.subscribe(self.UpdateRender, 'Update slice viewer') - ps.Publisher().subscribe(self.ChangeSliceNumber, + Publisher.subscribe(self.ChangeSliceNumber, ('Set scroll position', self.orientation)) - ps.Publisher().subscribe(self.__update_cross_position, + Publisher.subscribe(self.__update_cross_position, 'Update cross position') - ps.Publisher().subscribe(self.Navigation, + Publisher.subscribe(self.Navigation, 'Co-registered Points') ### - ps.Publisher().subscribe(self.ChangeBrushSize, + Publisher.subscribe(self.ChangeBrushSize, 'Set edition brush size') - ps.Publisher().subscribe(self.ChangeBrushColour, + Publisher.subscribe(self.ChangeBrushColour, 'Add mask') - ps.Publisher().subscribe(self.ChangeBrushActor, + Publisher.subscribe(self.ChangeBrushActor, 'Set brush format') - ps.Publisher().subscribe(self.ChangeBrushOperation, + Publisher.subscribe(self.ChangeBrushOperation, 'Set edition operation') - ps.Publisher().subscribe(self.UpdateWindowLevelValue,\ + Publisher.subscribe(self.UpdateWindowLevelValue,\ 'Update window level value') - #ps.Publisher().subscribe(self.__set_cross_visibility,\ + #Publisher.subscribe(self.__set_cross_visibility,\ # 'Set cross visibility') ### - ps.Publisher().subscribe(self.__set_layout, + Publisher.subscribe(self.__set_layout, 'Set slice viewer layout') - ps.Publisher().subscribe(self.OnSetInteractorStyle, + Publisher.subscribe(self.OnSetInteractorStyle, 'Set slice interaction style') - ps.Publisher().subscribe(self.OnCloseProject, 'Close project data') + Publisher.subscribe(self.OnCloseProject, 'Close project data') ##### - ps.Publisher().subscribe(self.OnShowText, + Publisher.subscribe(self.OnShowText, 'Show text actors on viewers') - ps.Publisher().subscribe(self.OnHideText, + Publisher.subscribe(self.OnHideText, 'Hide text actors on viewers') - ps.Publisher().subscribe(self.OnExportPicture,'Export picture to file') - ps.Publisher().subscribe(self.SetDefaultCursor, 'Set interactor default cursor') + Publisher.subscribe(self.OnExportPicture,'Export picture to file') + Publisher.subscribe(self.SetDefaultCursor, 'Set interactor default cursor') - ps.Publisher().subscribe(self.AddActors, ('Add actors', ORIENTATIONS[self.orientation])) - ps.Publisher().subscribe(self.RemoveActors, ('Remove actors', ORIENTATIONS[self.orientation])) + Publisher.subscribe(self.AddActors, 'Add actors ' + str(ORIENTATIONS[self.orientation])) + Publisher.subscribe(self.RemoveActors, 'Remove actors ' + str(ORIENTATIONS[self.orientation])) - ps.Publisher().subscribe(self.ReloadActualSlice, 'Reload actual slice') + Publisher.subscribe(self.ReloadActualSlice, 'Reload actual slice') def SetDefaultCursor(self, pusub_evt): self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT)) def OnExportPicture(self, pubsub_evt): - ps.Publisher().sendMessage('Begin busy cursor') + Publisher.sendMessage('Begin busy cursor') view_prop_list = [] for slice_data in self.slice_data_list: view_prop_list.append(slice_data.box_actor) @@ -1055,7 +1055,7 @@ class Viewer(wx.Panel): for actor in view_prop_list: self.ren.AddViewProp(actor) - ps.Publisher().sendMessage('End busy cursor') + Publisher.sendMessage('End busy cursor') def OnShowText(self, pubsub_evt): self.ShowTextActors() @@ -1084,7 +1084,7 @@ class Viewer(wx.Panel): self.SetInteractorStyle(state) if (state != const.SLICE_STATE_EDITOR): - ps.Publisher().sendMessage('Set interactor default cursor') + Publisher.sendMessage('Set interactor default cursor') def ChangeBrushOperation(self, pubsub_evt): self._brush_cursor_op = pubsub_evt.data @@ -1342,7 +1342,7 @@ class Viewer(wx.Panel): def UpdateSlice3D(self, pos): original_orientation = project.Project().original_orientation pos = self.scroll.GetThumbPosition() - ps.Publisher().sendMessage('Change slice from slice plane',\ + Publisher.sendMessage('Change slice from slice plane',\ (self.orientation, pos)) def OnScrollBar(self, evt=None, update3D=True): @@ -1354,8 +1354,8 @@ class Viewer(wx.Panel): # Update other slice's cross according to the new focal point from # the actual orientation. focal_point = self.cross.GetFocalPoint() - ps.Publisher().sendMessage('Update cross position', focal_point) - ps.Publisher().sendMessage('Update slice viewer') + Publisher.sendMessage('Update cross position', focal_point) + Publisher.sendMessage('Update slice viewer') else: self.interactor.Render() if evt: @@ -1465,7 +1465,7 @@ class Viewer(wx.Panel): print x, y, z if self.pick.GetViewProp(): self.render_to_add = slice_data.renderer - ps.Publisher().sendMessage("Add measurement point", + Publisher.sendMessage("Add measurement point", ((x, y,z), const.LINEAR, ORIENTATIONS[self.orientation], slice_number)) self.interactor.Render() @@ -1479,7 +1479,7 @@ class Viewer(wx.Panel): x, y, z = self.pick.GetPickPosition() if self.pick.GetViewProp(): self.render_to_add = slice_data.renderer - ps.Publisher().sendMessage("Add measurement point", + Publisher.sendMessage("Add measurement point", ((x, y,z), const.ANGULAR, ORIENTATIONS[self.orientation], slice_number)) self.interactor.Render() diff --git a/invesalius/data/viewer_volume.py b/invesalius/data/viewer_volume.py index 3e5d52a..0373162 100755 --- a/invesalius/data/viewer_volume.py +++ b/invesalius/data/viewer_volume.py @@ -26,7 +26,7 @@ import numpy import wx import vtk from vtk.wx.wxVTKRenderWindowInteractor import wxVTKRenderWindowInteractor -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import constants as const import data.bases as bases @@ -111,75 +111,74 @@ class Viewer(wx.Panel): self.added_actor = 0 def __bind_events(self): - ps.Publisher().subscribe(self.LoadActor, + Publisher.subscribe(self.LoadActor, 'Load surface actor into viewer') - ps.Publisher().subscribe(self.RemoveActor, + Publisher.subscribe(self.RemoveActor, 'Remove surface actor from viewer') - ps.Publisher().subscribe(self.UpdateRender, + Publisher.subscribe(self.UpdateRender, 'Render volume viewer') - ps.Publisher().subscribe(self.ChangeBackgroundColour, + Publisher.subscribe(self.ChangeBackgroundColour, 'Change volume viewer background colour') # Raycating - related - ps.Publisher().subscribe(self.LoadVolume, + Publisher.subscribe(self.LoadVolume, 'Load volume into viewer') - ps.Publisher().subscribe(self.OnSetWindowLevelText, + Publisher.subscribe(self.OnSetWindowLevelText, 'Set volume window and level text') - ps.Publisher().subscribe(self.OnHideRaycasting, + Publisher.subscribe(self.OnHideRaycasting, 'Hide raycasting volume') - ps.Publisher().subscribe(self.OnShowRaycasting, + Publisher.subscribe(self.OnShowRaycasting, 'Update raycasting preset') ### - ps.Publisher().subscribe(self.AppendActor,'AppendActor') - ps.Publisher().subscribe(self.SetWidgetInteractor, + Publisher.subscribe(self.AppendActor,'AppendActor') + Publisher.subscribe(self.SetWidgetInteractor, 'Set Widget Interactor') - ps.Publisher().subscribe(self.OnSetViewAngle, + Publisher.subscribe(self.OnSetViewAngle, 'Set volume view angle') - ps.Publisher().subscribe(self.OnDisableBrightContrast, - ('Set interaction mode', - const.MODE_SLICE_EDITOR)) + Publisher.subscribe(self.OnDisableBrightContrast, + 'Set interaction mode '+ + str(const.MODE_SLICE_EDITOR)) - ps.Publisher().subscribe(self.OnExportSurface, 'Export surface to file') + Publisher.subscribe(self.OnExportSurface, 'Export surface to file') - ps.Publisher().subscribe(self.LoadSlicePlane, 'Load slice plane') + Publisher.subscribe(self.LoadSlicePlane, 'Load slice plane') - ps.Publisher().subscribe(self.ResetCamClippingRange, 'Reset cam clipping range') - ps.Publisher().subscribe(self.SetVolumeCamera, 'Set camera in volume') + Publisher.subscribe(self.ResetCamClippingRange, 'Reset cam clipping range') + Publisher.subscribe(self.SetVolumeCamera, 'Set camera in volume') - ps.Publisher().subscribe(self.OnEnableStyle, 'Enable style') - ps.Publisher().subscribe(self.OnDisableStyle, 'Disable style') + Publisher.subscribe(self.OnEnableStyle, 'Enable style') + Publisher.subscribe(self.OnDisableStyle, 'Disable style') - ps.Publisher().subscribe(self.OnHideText, + Publisher.subscribe(self.OnHideText, 'Hide text actors on viewers') - ps.Publisher().subscribe(self.AddActors, ('Add actors', const.SURFACE)) - ps.Publisher().subscribe(self.RemoveActors, ('Remove actors', - const.SURFACE)) + Publisher.subscribe(self.AddActors, 'Add actors ' + str(const.SURFACE)) + Publisher.subscribe(self.RemoveActors, 'Remove actors ' + str(const.SURFACE)) - ps.Publisher().subscribe(self.OnShowText, + Publisher.subscribe(self.OnShowText, 'Show text actors on viewers') - ps.Publisher().subscribe(self.OnCloseProject, 'Close project data') + Publisher.subscribe(self.OnCloseProject, 'Close project data') - ps.Publisher().subscribe(self.RemoveAllActor, 'Remove all volume actors') + Publisher.subscribe(self.RemoveAllActor, 'Remove all volume actors') - ps.Publisher().subscribe(self.OnExportPicture,'Export picture to file') + Publisher.subscribe(self.OnExportPicture,'Export picture to file') - ps.Publisher().subscribe(self.OnStartSeed,'Create surface by seeding - start') - ps.Publisher().subscribe(self.OnEndSeed,'Create surface by seeding - end') + Publisher.subscribe(self.OnStartSeed,'Create surface by seeding - start') + Publisher.subscribe(self.OnEndSeed,'Create surface by seeding - end') - ps.Publisher().subscribe(self.ActivateBallReference, + Publisher.subscribe(self.ActivateBallReference, 'Activate ball reference') - ps.Publisher().subscribe(self.DeactivateBallReference, + Publisher.subscribe(self.DeactivateBallReference, 'Deactivate ball reference') - ps.Publisher().subscribe(self.SetBallReferencePosition, + Publisher.subscribe(self.SetBallReferencePosition, 'Set ball reference position') - ps.Publisher().subscribe(self.SetBallReferencePositionBasedOnBound, + Publisher.subscribe(self.SetBallReferencePositionBasedOnBound, 'Set ball reference position based on bound') - ps.Publisher().subscribe(self.SetStereoMode, 'Set stereo mode') + Publisher.subscribe(self.SetStereoMode, 'Set stereo mode') - ps.Publisher().subscribe(self.Reposition3DPlane, 'Reposition 3D Plane') + Publisher.subscribe(self.Reposition3DPlane, 'Reposition 3D Plane') - ps.Publisher().subscribe(self.RemoveVolume, 'Remove Volume') + Publisher.subscribe(self.RemoveVolume, 'Remove Volume') @@ -249,11 +248,11 @@ class Viewer(wx.Panel): self.seed_points = [] def OnEndSeed(self, pubsub_evt): - ps.Publisher().sendMessage("Create surface from seeds", + Publisher.sendMessage("Create surface from seeds", self.seed_points) def OnExportPicture(self, pubsub_evt): - ps.Publisher().sendMessage('Begin busy cursor') + Publisher.sendMessage('Begin busy cursor') id, filename, filetype = pubsub_evt.data if id == const.VOLUME: if filetype == const.FILETYPE_POV: @@ -289,7 +288,7 @@ class Viewer(wx.Panel): writer.SetInput(image) writer.SetFileName(filename) writer.Write() - ps.Publisher().sendMessage('End busy cursor') + Publisher.sendMessage('End busy cursor') @@ -301,7 +300,7 @@ class Viewer(wx.Panel): self.slice_plane.Disable() self.slice_plane.DeletePlanes() del self.slice_plane - ps.Publisher().sendMessage('Uncheck image plane menu') + Publisher.sendMessage('Uncheck image plane menu') self.mouse_pressed = 0 self.on_wl = False self.slice_plane = 0 @@ -499,9 +498,9 @@ class Viewer(wx.Panel): diff_x = mouse_x - self.last_x diff_y = mouse_y - self.last_y self.last_x, self.last_y = mouse_x, mouse_y - ps.Publisher().sendMessage('Set raycasting relative window and level', + Publisher.sendMessage('Set raycasting relative window and level', (diff_x, diff_y)) - ps.Publisher().sendMessage('Refresh raycasting widget points', None) + Publisher.sendMessage('Refresh raycasting widget points', None) self.interactor.Render() def OnWindowLevelClick(self, obj, evt): @@ -655,7 +654,7 @@ class Viewer(wx.Panel): def RemoveAllActor(self, pubsub_evt): utils.debug("RemoveAllActor") self.ren.RemoveAllProps() - ps.Publisher().sendMessage('Render volume viewer') + Publisher.sendMessage('Render volume viewer') def LoadSlicePlane(self, pubsub_evt): @@ -775,9 +774,9 @@ class Viewer(wx.Panel): # m = self.measures[-1] # m.AddPoint(x, y, z) # if m.IsComplete(): - # ps.Publisher().sendMessage("Add measure to list", + # Publisher.sendMessage("Add measure to list", # (u"3D", _(u"%.3f mm" % m.GetValue()))) - ps.Publisher().sendMessage("Add measurement point", + Publisher.sendMessage("Add measurement point", ((x, y,z), const.LINEAR, const.SURFACE)) self.interactor.Render() @@ -802,11 +801,11 @@ class Viewer(wx.Panel): # location = u"3D" # value = u"%.2f˚"% m.GetValue() # msg = 'Update measurement info in GUI', - # ps.Publisher().sendMessage(msg, + # Publisher.sendMessage(msg, # (index, name, colour, # type_, location, # value)) - ps.Publisher().sendMessage("Add measurement point", + Publisher.sendMessage("Add measurement point", ((x, y,z), const.ANGULAR, const.SURFACE)) self.interactor.Render() @@ -837,15 +836,15 @@ class SlicePlane: self.__bind_evt() def __bind_evt(self): - ps.Publisher().subscribe(self.Enable, 'Enable plane') - ps.Publisher().subscribe(self.Disable, 'Disable plane') - ps.Publisher().subscribe(self.ChangeSlice, 'Change slice from slice plane') - ps.Publisher().subscribe(self.UpdateAllSlice, 'Update all slice') + Publisher.subscribe(self.Enable, 'Enable plane') + Publisher.subscribe(self.Disable, 'Disable plane') + Publisher.subscribe(self.ChangeSlice, 'Change slice from slice plane') + Publisher.subscribe(self.UpdateAllSlice, 'Update all slice') def Create(self): plane_x = self.plane_x = vtk.vtkImagePlaneWidget() plane_x.InteractionOff() - ps.Publisher().sendMessage('Input Image in the widget', + Publisher.sendMessage('Input Image in the widget', (plane_x, 'SAGITAL')) plane_x.SetPlaneOrientationToXAxes() plane_x.TextureVisibilityOn() @@ -857,7 +856,7 @@ class SlicePlane: plane_y = self.plane_y = vtk.vtkImagePlaneWidget() plane_y.DisplayTextOff() - ps.Publisher().sendMessage('Input Image in the widget', + Publisher.sendMessage('Input Image in the widget', (plane_y, 'CORONAL')) plane_y.SetPlaneOrientationToYAxes() plane_y.TextureVisibilityOn() @@ -870,7 +869,7 @@ class SlicePlane: plane_z = self.plane_z = vtk.vtkImagePlaneWidget() plane_z.InteractionOff() - ps.Publisher().sendMessage('Input Image in the widget', + Publisher.sendMessage('Input Image in the widget', (plane_z, 'AXIAL')) plane_z.SetPlaneOrientationToZAxes() plane_z.TextureVisibilityOn() @@ -900,9 +899,9 @@ class SlicePlane: selected_prop2 = plane_y.GetSelectedPlaneProperty() selected_prop2.SetColor(0, 1, 0) - ps.Publisher().sendMessage('Set Widget Interactor', plane_x) - ps.Publisher().sendMessage('Set Widget Interactor', plane_y) - ps.Publisher().sendMessage('Set Widget Interactor', plane_z) + Publisher.sendMessage('Set Widget Interactor', plane_x) + Publisher.sendMessage('Set Widget Interactor', plane_y) + Publisher.sendMessage('Set Widget Interactor', plane_z) self.Render() @@ -916,13 +915,13 @@ class SlicePlane: elif(label == "Sagital"): self.plane_x.On() - ps.Publisher().sendMessage('Reposition 3D Plane', label) + Publisher.sendMessage('Reposition 3D Plane', label) else: self.plane_z.On() self.plane_x.On() self.plane_y.On() - ps.Publisher().sendMessage('Set volume view angle', const.VOL_ISO) + Publisher.sendMessage('Set volume view angle', const.VOL_ISO) self.Render() def Disable(self, evt_pubsub=None): @@ -942,25 +941,25 @@ class SlicePlane: self.Render() def Render(self): - ps.Publisher().sendMessage('Render volume viewer') + Publisher.sendMessage('Render volume viewer') def ChangeSlice(self, pubsub_evt = None): orientation, number = pubsub_evt.data if orientation == "CORONAL" and self.plane_y.GetEnabled(): - ps.Publisher().sendMessage('Update slice 3D', (self.plane_y,orientation)) + Publisher.sendMessage('Update slice 3D', (self.plane_y,orientation)) self.Render() elif orientation == "SAGITAL" and self.plane_x.GetEnabled(): - ps.Publisher().sendMessage('Update slice 3D', (self.plane_x,orientation)) + Publisher.sendMessage('Update slice 3D', (self.plane_x,orientation)) self.Render() elif orientation == 'AXIAL' and self.plane_z.GetEnabled() : - ps.Publisher().sendMessage('Update slice 3D', (self.plane_z,orientation)) + Publisher.sendMessage('Update slice 3D', (self.plane_z,orientation)) self.Render() def UpdateAllSlice(self, pubsub_evt): - ps.Publisher().sendMessage('Update slice 3D', (self.plane_y,"CORONAL")) - ps.Publisher().sendMessage('Update slice 3D', (self.plane_x,"SAGITAL")) - ps.Publisher().sendMessage('Update slice 3D', (self.plane_z,"AXIAL")) + Publisher.sendMessage('Update slice 3D', (self.plane_y,"CORONAL")) + Publisher.sendMessage('Update slice 3D', (self.plane_x,"SAGITAL")) + Publisher.sendMessage('Update slice 3D', (self.plane_z,"AXIAL")) def DeletePlanes(self): diff --git a/invesalius/data/volume.py b/invesalius/data/volume.py index fd37431..dfe0e99 100755 --- a/invesalius/data/volume.py +++ b/invesalius/data/volume.py @@ -22,7 +22,7 @@ import os import numpy import vtk import wx -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import constants as const import project as prj @@ -89,25 +89,25 @@ class Volume(): self.__bind_events() def __bind_events(self): - ps.Publisher().subscribe(self.OnHideVolume, + Publisher.subscribe(self.OnHideVolume, 'Hide raycasting volume') - ps.Publisher().subscribe(self.OnUpdatePreset, + Publisher.subscribe(self.OnUpdatePreset, 'Update raycasting preset') - ps.Publisher().subscribe(self.OnSetCurve, + Publisher.subscribe(self.OnSetCurve, 'Set raycasting curve') - ps.Publisher().subscribe(self.OnSetWindowLevel, + Publisher.subscribe(self.OnSetWindowLevel, 'Set raycasting wwwl') - ps.Publisher().subscribe(self.Refresh, + Publisher.subscribe(self.Refresh, 'Set raycasting refresh') - ps.Publisher().subscribe(self.OnSetRelativeWindowLevel, + Publisher.subscribe(self.OnSetRelativeWindowLevel, 'Set raycasting relative window and level') - ps.Publisher().subscribe(self.OnEnableTool, + Publisher.subscribe(self.OnEnableTool, 'Enable raycasting tool') - ps.Publisher().subscribe(self.OnCloseProject, 'Close project data') - ps.Publisher().subscribe(self.ChangeBackgroundColour, + Publisher.subscribe(self.OnCloseProject, 'Close project data') + Publisher.subscribe(self.ChangeBackgroundColour, 'Change volume viewer background colour') - ps.Publisher().subscribe(self.ResetRayCasting, 'Reset Reaycasting') + Publisher.subscribe(self.ResetRayCasting, 'Reset Reaycasting') def ResetRayCasting(self, pub_evt): if self.exist: @@ -121,7 +121,7 @@ class Volume(): def CloseProject(self): #if self.plane: # self.plane = None - # ps.Publisher().sendMessage('Remove surface actor from viewer', self.plane_actor) + # Publisher.sendMessage('Remove surface actor from viewer', self.plane_actor) if self.plane: self.plane.DestroyObjs() del self.plane @@ -129,8 +129,8 @@ class Volume(): if self.exist: self.exist = None - ps.Publisher().sendMessage('Remove surface actor from viewer', self.volume) - ps.Publisher().sendMessage('Disable volume cut menu') + Publisher.sendMessage('Remove surface actor from viewer', self.volume) + Publisher.sendMessage('Disable volume cut menu') def OnLoadVolume(self, pubsub_evt): label = pubsub_evt.data @@ -141,16 +141,16 @@ class Volume(): self.volume.SetVisibility(0) if (self.plane and self.plane_on): self.plane.Disable() - ps.Publisher().sendMessage('Render volume viewer') + Publisher.sendMessage('Render volume viewer') def OnShowVolume(self, pubsub_evt = None): if self.exist: self.volume.SetVisibility(1) if (self.plane and self.plane_on): self.plane.Enable() - ps.Publisher().sendMessage('Render volume viewer') + Publisher.sendMessage('Render volume viewer') else: - ps.Publisher.sendMessage('Load raycasting preset', const.RAYCASTING_LABEL) + Publisher.sendMessage('Load raycasting preset', const.RAYCASTING_LABEL) self.LoadConfig() self.LoadVolume() self.exist = 1 @@ -162,15 +162,15 @@ class Volume(): if self.exist: self.__load_preset() self.volume.SetVisibility(1) - #ps.Publisher().sendMessage('Render volume viewer') + #Publisher.sendMessage('Render volume viewer') else: self.LoadVolume() self.CalculateHistogram() self.exist = 1 colour = self.GetBackgroundColour() - ps.Publisher.sendMessage('Change volume viewer background colour', colour) - ps.Publisher.sendMessage('Change volume viewer gui colour', colour) + Publisher.sendMessage('Change volume viewer background colour', colour) + Publisher.sendMessage('Change volume viewer gui colour', colour) def __load_preset_config(self): self.config = prj.Project().raycasting_preset @@ -203,14 +203,14 @@ class Volume(): self.CalculateWWWL() ww = self.ww wl = self.wl - ps.Publisher().sendMessage('Set volume window and level text', + Publisher.sendMessage('Set volume window and level text', (ww, wl)) def OnSetRelativeWindowLevel(self, pubsub_evt): diff_wl, diff_ww = pubsub_evt.data ww = self.ww + diff_ww wl = self.wl + diff_wl - ps.Publisher().sendMessage('Set volume window and level text', + Publisher.sendMessage('Set volume window and level text', (ww, wl)) self.SetWWWL(ww, wl) self.ww = ww @@ -593,7 +593,7 @@ class Volume(): self.exist = 1 - ps.Publisher().sendMessage('Load volume into viewer', + Publisher.sendMessage('Load volume into viewer', (volume, colour, (self.ww, self.wl))) def OnEnableTool(self, pubsub_evt): @@ -621,7 +621,7 @@ class Volume(): accumulate.SetComponentOrigin(image.GetScalarRange()[0], 0, 0) accumulate.Update() n_image = numpy_support.vtk_to_numpy(accumulate.GetOutput().GetPointData().GetScalars()) - ps.Publisher().sendMessage('Load histogram', (n_image, + Publisher.sendMessage('Load histogram', (n_image, image.GetScalarRange())) def TranslateScale(self, scale, value): @@ -640,11 +640,11 @@ class CutPlane: self.__bind_events() def __bind_events(self): - ps.Publisher().subscribe(self.Reset, + Publisher.subscribe(self.Reset, 'Reset Cut Plane') - ps.Publisher().subscribe(self.Enable, + Publisher.subscribe(self.Enable, 'Enable Cut Plane') - ps.Publisher().subscribe(self.Disable, + Publisher.subscribe(self.Disable, 'Disable Cut Plane') def Create(self): @@ -673,8 +673,8 @@ class CutPlane: plane_actor.GetProperty().BackfaceCullingOn() plane_actor.GetProperty().SetOpacity(0) plane_widget.AddObserver("InteractionEvent", self.Update) - ps.Publisher().sendMessage('AppendActor', self.plane_actor) - ps.Publisher().sendMessage('Set Widget Interactor', self.plane_widget) + Publisher.sendMessage('AppendActor', self.plane_actor) + Publisher.sendMessage('Set Widget Interactor', self.plane_widget) plane_actor.SetVisibility(1) plane_widget.On() self.plane = plane = vtk.vtkPlane() @@ -697,19 +697,19 @@ class CutPlane: self.plane_actor.VisibilityOn() self.plane.SetNormal(plane_source.GetNormal()) self.plane.SetOrigin(plane_source.GetOrigin()) - ps.Publisher().sendMessage('Render volume viewer', None) + Publisher.sendMessage('Render volume viewer', None) def Enable(self, evt_pubsub=None): self.plane_widget.On() self.plane_actor.VisibilityOn() self.volume_mapper.AddClippingPlane(self.plane) - ps.Publisher().sendMessage('Render volume viewer', None) + Publisher.sendMessage('Render volume viewer', None) def Disable(self,evt_pubsub=None): self.plane_widget.Off() self.plane_actor.VisibilityOff() self.volume_mapper.RemoveClippingPlane(self.plane) - ps.Publisher().sendMessage('Render volume viewer', None) + Publisher.sendMessage('Render volume viewer', None) def Reset(self, evt_pubsub=None): plane_source = self.plane_source @@ -721,10 +721,10 @@ class CutPlane: self.plane_actor.VisibilityOn() self.plane.SetNormal(self.normal) self.plane.SetOrigin(self.origin) - ps.Publisher().sendMessage('Render volume viewer', None) + Publisher.sendMessage('Render volume viewer', None) def DestroyObjs(self): - ps.Publisher().sendMessage('Remove surface actor from viewer', self.plane_actor) + Publisher.sendMessage('Remove surface actor from viewer', self.plane_actor) self.Disable() del self.plane_widget del self.plane_source diff --git a/invesalius/data/vtk_utils.py b/invesalius/data/vtk_utils.py index c01e7df..86724b9 100644 --- a/invesalius/data/vtk_utils.py +++ b/invesalius/data/vtk_utils.py @@ -19,7 +19,7 @@ import sys import vtk -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import constants as const from gui.dialogs import ProgressDialog @@ -76,7 +76,7 @@ def ShowProgress(number_of_filters = 1, progress[0] = progress[0] + ratio*difference # Tell GUI to update progress status value if (dialog_type == "GaugeProgress"): - ps.Publisher().sendMessage('Update status in GUI', + Publisher.sendMessage('Update status in GUI', (progress[0], label)) else: if (progress[0] >= 99.999): diff --git a/invesalius/gui/data_notebook.py b/invesalius/gui/data_notebook.py index e1c074d..ac21f89 100644 --- a/invesalius/gui/data_notebook.py +++ b/invesalius/gui/data_notebook.py @@ -26,7 +26,7 @@ import wx import wx.grid import wx.lib.flatnotebook as fnb import wx.lib.platebtn as pbtn -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import constants as const import gui.dialogs as dlg @@ -76,15 +76,15 @@ class NotebookPanel(wx.Panel): self.__bind_events() def __bind_events(self): - ps.Publisher().subscribe(self._FoldSurface, + Publisher.subscribe(self._FoldSurface, 'Fold surface task') - ps.Publisher().subscribe(self._FoldSurface, + Publisher.subscribe(self._FoldSurface, 'Fold surface page') - ps.Publisher().subscribe(self._FoldMeasure, + Publisher.subscribe(self._FoldMeasure, 'Fold measure task') - ps.Publisher().subscribe(self._FoldMask, + Publisher.subscribe(self._FoldMask, 'Fold mask task') - ps.Publisher().subscribe(self._FoldMask, + Publisher.subscribe(self._FoldMask, 'Fold mask page') @@ -205,9 +205,9 @@ class MeasureButtonControlPanel(wx.Panel): def OnMenu(self, evt): id = evt.GetId() if id == const.MEASURE_LINEAR: - ps.Publisher().sendMessage('Set tool linear measure') + Publisher.sendMessage('Set tool linear measure') else: - ps.Publisher().sendMessage('Set tool angular measure') + Publisher.sendMessage('Set tool angular measure') def OnRemove(self): self.parent.listctrl.RemoveMeasurements() @@ -215,7 +215,7 @@ class MeasureButtonControlPanel(wx.Panel): def OnDuplicate(self): selected_items = self.parent.listctrl.GetSelected() if selected_items: - ps.Publisher().sendMessage('Duplicate measurement', selected_items) + Publisher.sendMessage('Duplicate measurement', selected_items) else: dlg.MaskSelectionRequiredForDuplication() @@ -315,7 +315,7 @@ class ButtonControlPanel(wx.Panel): if ok: mask_name, thresh, colour = dialog.GetValue() if mask_name: - ps.Publisher().sendMessage('Create new mask', + Publisher.sendMessage('Create new mask', (mask_name, thresh, colour)) def OnRemove(self): @@ -324,7 +324,7 @@ class ButtonControlPanel(wx.Panel): def OnDuplicate(self): selected_items = self.parent.listctrl.GetSelected() if selected_items: - ps.Publisher().sendMessage('Duplicate masks', selected_items) + Publisher.sendMessage('Duplicate masks', selected_items) else: dlg.MaskSelectionRequiredForDuplication() @@ -353,14 +353,14 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): def __bind_events(self): - ps.Publisher().subscribe(self.AddMask, 'Add mask') - ps.Publisher().subscribe(self.EditMaskThreshold, + Publisher.subscribe(self.AddMask, 'Add mask') + Publisher.subscribe(self.EditMaskThreshold, 'Set mask threshold in notebook') - ps.Publisher().subscribe(self.EditMaskColour, + Publisher.subscribe(self.EditMaskColour, 'Change mask colour in notebook') - ps.Publisher().subscribe(self.OnChangeCurrentMask, 'Change mask selected') - ps.Publisher().subscribe(self.OnCloseProject, 'Close project data') + Publisher.subscribe(self.OnChangeCurrentMask, 'Change mask selected') + Publisher.subscribe(self.OnCloseProject, 'Close project data') def OnKeyEvent(self, event): keycode = event.GetKeyCode() @@ -377,7 +377,7 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): selected_items = self.GetSelected() if selected_items: - ps.Publisher().sendMessage('Remove masks', selected_items) + Publisher.sendMessage('Remove masks', selected_items) else: dlg.MaskSelectionRequiredForRemoval() return @@ -400,8 +400,8 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): if new_dict: if index == self.current_index: self.SetItemImage(0, 1) - ps.Publisher().sendMessage('Show mask', (0, 1)) - ps.Publisher().sendMessage('Change mask selected', 0) + Publisher.sendMessage('Show mask', (0, 1)) + Publisher.sendMessage('Change mask selected', 0) for key in new_dict: if key: self.SetItemImage(key, 0) @@ -457,7 +457,7 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): self.image_gray = Image.open("../icons/object_colour.jpg") def OnEditLabel(self, evt): - ps.Publisher().sendMessage('Change mask name', + Publisher.sendMessage('Change mask name', (evt.GetIndex(), evt.GetLabel())) evt.Skip() @@ -469,9 +469,9 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): for key in self.mask_list_index.keys(): if key != index: self.SetItemImage(key, 0) - ps.Publisher().sendMessage('Change mask selected',index) + Publisher.sendMessage('Change mask selected',index) self.current_index = index - ps.Publisher().sendMessage('Show mask', (index, flag)) + Publisher.sendMessage('Show mask', (index, flag)) def CreateColourBitmap(self, colour): """ @@ -645,7 +645,7 @@ class SurfaceButtonControlPanel(wx.Panel): fill_holes, keep_largest] - ps.Publisher().sendMessage('Create surface', surface_data) + Publisher.sendMessage('Create surface', surface_data) def OnRemove(self): self.parent.listctrl.RemoveSurfaces() @@ -654,7 +654,7 @@ class SurfaceButtonControlPanel(wx.Panel): def OnDuplicate(self): selected_items = self.parent.listctrl.GetSelected() if selected_items: - ps.Publisher().sendMessage('Duplicate surfaces', selected_items) + Publisher.sendMessage('Duplicate surfaces', selected_items) else: dlg.SurfaceSelectionRequiredForDuplication() @@ -679,17 +679,17 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): self.surface_bmp_idx_to_name = {} def __init_evt(self): - ps.Publisher().subscribe(self.AddSurface, + Publisher.subscribe(self.AddSurface, 'Update surface info in GUI') - ps.Publisher().subscribe(self.EditSurfaceTransparency, + Publisher.subscribe(self.EditSurfaceTransparency, 'Set surface transparency') - ps.Publisher().subscribe(self.EditSurfaceColour, + Publisher.subscribe(self.EditSurfaceColour, 'Set surface colour') - ps.Publisher().subscribe(self.OnCloseProject, 'Close project data') - ps.Publisher().subscribe(self.OnHideSurface, 'Hide surface items') + Publisher.subscribe(self.OnCloseProject, 'Close project data') + Publisher.subscribe(self.OnHideSurface, 'Hide surface items') - ps.Publisher().subscribe(self.OnShowSingle, 'Show single surface') - ps.Publisher().subscribe(self.OnShowMultiple, 'Show multiple surfaces') + Publisher.subscribe(self.OnShowSingle, 'Show single surface') + Publisher.subscribe(self.OnShowMultiple, 'Show multiple surfaces') def __bind_events_wx(self): self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated) @@ -734,7 +734,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): old_dict = new_dict self.surface_list_index = new_dict - ps.Publisher().sendMessage('Remove surfaces', selected_items) + Publisher.sendMessage('Remove surfaces', selected_items) else: dlg.SurfaceSelectionRequiredForRemoval() @@ -750,7 +750,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): # things will stop working, e.g.: OnCheckItem last_surface_index = evt.m_itemIndex - ps.Publisher().sendMessage('Change surface selected', + Publisher.sendMessage('Change surface selected', last_surface_index) evt.Skip() @@ -801,7 +801,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): def OnEditLabel(self, evt): - ps.Publisher().sendMessage('Change surface name', (evt.GetIndex(), evt.GetLabel())) + Publisher.sendMessage('Change surface name', (evt.GetIndex(), evt.GetLabel())) evt.Skip() def OnItemActivated(self, evt): @@ -810,17 +810,17 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): def OnCheckItem(self, index, flag): - ps.Publisher().sendMessage('Show surface', (index, flag)) + Publisher.sendMessage('Show surface', (index, flag)) def OnShowSingle(self, pubsub_evt): index, visibility = pubsub_evt.data for key in self.surface_list_index.keys(): if key != index: self.SetItemImage(key, not visibility) - ps.Publisher().sendMessage('Show surface', + Publisher.sendMessage('Show surface', (key, not visibility)) self.SetItemImage(index, visibility) - ps.Publisher().sendMessage('Show surface', + Publisher.sendMessage('Show surface', (index, visibility)) def OnShowMultiple(self, pubsub_evt): @@ -828,11 +828,11 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): for key in self.surface_list_index.keys(): if key not in index_list: self.SetItemImage(key, not visibility) - ps.Publisher().sendMessage('Show surface', + Publisher.sendMessage('Show surface', (key, not visibility)) for index in index_list: self.SetItemImage(index, visibility) - ps.Publisher().sendMessage('Show surface', + Publisher.sendMessage('Show surface', (index, visibility)) def AddSurface(self, pubsub_evt): @@ -935,14 +935,14 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): self._bmp_idx_to_name = {} def __init_evt(self): - ps.Publisher().subscribe(self.AddItem_, + Publisher.subscribe(self.AddItem_, 'Update measurement info in GUI') - ps.Publisher().subscribe(self.EditItemColour, + Publisher.subscribe(self.EditItemColour, 'Set measurement colour') - ps.Publisher().subscribe(self.OnCloseProject, 'Close project data') - ps.Publisher().subscribe(self.OnShowSingle, 'Show single measurement') - ps.Publisher().subscribe(self.OnShowMultiple, 'Show multiple measurements') - ps.Publisher().subscribe(self.OnLoadData, 'Load measurement dict') + Publisher.subscribe(self.OnCloseProject, 'Close project data') + Publisher.subscribe(self.OnShowSingle, 'Show single measurement') + Publisher.subscribe(self.OnShowMultiple, 'Show multiple measurements') + Publisher.subscribe(self.OnLoadData, 'Load measurement dict') def __bind_events_wx(self): self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated) @@ -980,7 +980,7 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): new_dict[i-1] = old_dict[i] old_dict = new_dict self._list_index = new_dict - ps.Publisher().sendMessage('Remove measurements', selected_items) + Publisher.sendMessage('Remove measurements', selected_items) else: dlg.MeasureSelectionRequiredForRemoval() @@ -996,7 +996,7 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): # things will stop working, e.g.: OnCheckItem last_index = evt.m_itemIndex - ps.Publisher().sendMessage('Change measurement selected', + Publisher.sendMessage('Change measurement selected', last_index) evt.Skip() @@ -1049,7 +1049,7 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): def OnEditLabel(self, evt): - ps.Publisher().sendMessage('Change measurement name', (evt.GetIndex(), evt.GetLabel())) + Publisher.sendMessage('Change measurement name', (evt.GetIndex(), evt.GetLabel())) evt.Skip() def OnItemActivated(self, evt): @@ -1058,17 +1058,17 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): def OnCheckItem(self, index, flag): - ps.Publisher().sendMessage('Show measurement', (index, flag)) + Publisher.sendMessage('Show measurement', (index, flag)) def OnShowSingle(self, pubsub_evt): index, visibility = pubsub_evt.data for key in self._list_index.keys(): if key != index: self.SetItemImage(key, not visibility) - ps.Publisher().sendMessage('Show measurement', + Publisher.sendMessage('Show measurement', (key, not visibility)) self.SetItemImage(index, visibility) - ps.Publisher().sendMessage('Show measurement', + Publisher.sendMessage('Show measurement', (index, visibility)) def OnShowMultiple(self, pubsub_evt): @@ -1076,11 +1076,11 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): for key in self._list_index.keys(): if key not in index_list: self.SetItemImage(key, not visibility) - ps.Publisher().sendMessage('Show measurement', + Publisher.sendMessage('Show measurement', (key, not visibility)) for index in index_list: self.SetItemImage(index, visibility) - ps.Publisher().sendMessage('Show measurement', + Publisher.sendMessage('Show measurement', (index, visibility)) def OnLoadData(self, pubsub_evt): diff --git a/invesalius/gui/default_tasks.py b/invesalius/gui/default_tasks.py index efdd50a..151aba1 100755 --- a/invesalius/gui/default_tasks.py +++ b/invesalius/gui/default_tasks.py @@ -19,7 +19,7 @@ import wx import wx.lib.foldpanelbar as fpb -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import constants as const import data_notebook as nb @@ -139,7 +139,7 @@ class LowerTaskPanel(wx.Panel): col = style.GetFirstColour() self.enable_items.append(item) - fold_panel.AddFoldPanelWindow(item, nb.NotebookPanel(item), Spacing= 0, + fold_panel.AddFoldPanelWindow(item, nb.NotebookPanel(item), #Spacing= 0, leftSpacing=0, rightSpacing=0) fold_panel.Expand(fold_panel.GetFoldPanel(0)) @@ -161,7 +161,7 @@ class LowerTaskPanel(wx.Panel): def __bind_events(self): - ps.Publisher().subscribe(self.OnEnableState, "Enable state project") + Publisher.subscribe(self.OnEnableState, "Enable state project") def OnEnableState(self, pubsub_evt): state = pubsub_evt.data @@ -229,7 +229,7 @@ class UpperTaskPanel(wx.Panel): # Add panel to FoldPanel fold_panel.AddFoldPanelWindow(item, panel(item), - Spacing= 0, + #Spacing= 0, leftSpacing=0, rightSpacing=0) @@ -254,10 +254,10 @@ class UpperTaskPanel(wx.Panel): def __bind_events(self): self.fold_panel.Bind(fpb.EVT_CAPTIONBAR, self.OnFoldPressCaption) - ps.Publisher().subscribe(self.OnEnableState, "Enable state project") - ps.Publisher().subscribe(self.OnOverwrite, 'Create surface from index') - ps.Publisher().subscribe(self.OnFoldSurface, 'Fold surface task') - ps.Publisher().subscribe(self.OnFoldExport, 'Fold export task') + Publisher.subscribe(self.OnEnableState, "Enable state project") + Publisher.subscribe(self.OnOverwrite, 'Create surface from index') + Publisher.subscribe(self.OnFoldSurface, 'Fold surface task') + Publisher.subscribe(self.OnFoldExport, 'Fold export task') def OnOverwrite(self, pubsub_evt): self.overwrite = pubsub_evt.data[1] @@ -291,12 +291,12 @@ class UpperTaskPanel(wx.Panel): closed = evt.GetFoldStatus() if id == self.__id_slice: - ps.Publisher().sendMessage('Retrieve task slice style') - ps.Publisher().sendMessage('Fold mask page') + Publisher.sendMessage('Retrieve task slice style') + Publisher.sendMessage('Fold mask page') elif id == self.__id_surface: - ps.Publisher().sendMessage('Fold surface page') + Publisher.sendMessage('Fold surface page') else: - ps.Publisher().sendMessage('Disable task slice style') + Publisher.sendMessage('Disable task slice style') evt.Skip() diff --git a/invesalius/gui/default_viewers.py b/invesalius/gui/default_viewers.py index 1e8b238..99c1579 100755 --- a/invesalius/gui/default_viewers.py +++ b/invesalius/gui/default_viewers.py @@ -20,7 +20,7 @@ import sys import wx import wx.lib.agw.fourwaysplitter as fws -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import data.viewer_slice as slice_viewer import data.viewer_volume as volume_viewer @@ -123,11 +123,11 @@ class Panel(wx.Panel): def OnMaximize(self, evt): if evt.GetPane().name == self.s4.name: - ps.Publisher().sendMessage('Show raycasting widget', None) + Publisher.sendMessage('Show raycasting widget', None) def OnRestore(self, evt): if evt.GetPane().name == self.s4.name: - ps.Publisher().sendMessage('Hide raycasting widget', None) + Publisher.sendMessage('Hide raycasting widget', None) def __init_four_way_splitter(self): @@ -233,20 +233,20 @@ class VolumeInteraction(wx.Panel): #self.Bind(wx.EVT_MAXIMIZE, self.OnMaximize) def __bind_events(self): - ps.Publisher().subscribe(self.ShowRaycastingWidget, + Publisher.subscribe(self.ShowRaycastingWidget, 'Show raycasting widget') - ps.Publisher().subscribe(self.HideRaycastingWidget, + Publisher.subscribe(self.HideRaycastingWidget, 'Hide raycasting widget') - ps.Publisher().subscribe(self.OnSetRaycastPreset, + Publisher.subscribe(self.OnSetRaycastPreset, 'Update raycasting preset') - ps.Publisher().subscribe(self.RefreshPoints, + Publisher.subscribe(self.RefreshPoints, 'Refresh raycasting widget points') - ps.Publisher().subscribe(self.LoadHistogram, + Publisher.subscribe(self.LoadHistogram, 'Load histogram') def __update_curve_wwwl_text(self, curve): ww, wl = self.clut_raycasting.GetCurveWWWl(curve) - ps.Publisher().sendMessage('Set raycasting wwwl', (ww, wl, curve)) + Publisher.sendMessage('Set raycasting wwwl', (ww, wl, curve)) def ShowRaycastingWidget(self, evt_pubsub=None): self.can_show_raycasting_widget = 1 @@ -262,18 +262,18 @@ class VolumeInteraction(wx.Panel): self.aui_manager.Update() def OnPointChanged(self, evt): - ps.Publisher.sendMessage('Set raycasting refresh', None) - ps.Publisher.sendMessage('Set raycasting curve', evt.GetCurve()) - ps.Publisher().sendMessage('Render volume viewer') + Publisher.sendMessage('Set raycasting refresh', None) + Publisher.sendMessage('Set raycasting curve', evt.GetCurve()) + Publisher.sendMessage('Render volume viewer') def OnCurveSelected(self, evt): - ps.Publisher.sendMessage('Set raycasting curve', evt.GetCurve()) - ps.Publisher().sendMessage('Render volume viewer') + Publisher.sendMessage('Set raycasting curve', evt.GetCurve()) + Publisher.sendMessage('Render volume viewer') def OnChangeCurveWL(self, evt): curve = evt.GetCurve() self.__update_curve_wwwl_text(curve) - ps.Publisher().sendMessage('Render volume viewer') + Publisher.sendMessage('Render volume viewer') def OnSetRaycastPreset(self, evt_pubsub): preset = project.Project().raycasting_preset @@ -400,11 +400,11 @@ class VolumeToolPanel(wx.Panel): self.__bind_events_wx() def __bind_events(self): - ps.Publisher().subscribe(self.ChangeButtonColour, + Publisher.subscribe(self.ChangeButtonColour, 'Change volume viewer gui colour') - ps.Publisher().subscribe(self.DisablePreset, 'Close project data') - ps.Publisher().subscribe(self.Uncheck, 'Uncheck image plane menu') - ps.Publisher().subscribe(self.DisableVolumeCutMenu, 'Disable volume cut menu') + Publisher.subscribe(self.DisablePreset, 'Close project data') + Publisher.subscribe(self.Uncheck, 'Uncheck image plane menu') + Publisher.subscribe(self.DisableVolumeCutMenu, 'Disable volume cut menu') def DisablePreset(self, pubsub_evt): self.off_item.Check(1) @@ -434,7 +434,7 @@ class VolumeToolPanel(wx.Panel): d = wx.TextEntryDialog(self, _("Preset name")) if d.ShowModal() == wx.ID_OK: preset_name = d.GetValue() - ps.Publisher().sendMessage(_("Save raycasting preset"), + Publisher.sendMessage(_("Save raycasting preset"), preset_name) def __init_menus(self, pubsub_evt=None): @@ -541,14 +541,14 @@ class VolumeToolPanel(wx.Panel): label = item.GetLabel() if not (checked): - ps.Publisher().sendMessage('Disable plane', label) + Publisher.sendMessage('Disable plane', label) else: - ps.Publisher().sendMessage('Enable plane', label) + Publisher.sendMessage('Enable plane', label) def OnMenuStereo(self, evt): id = evt.GetId() mode = ID_TO_STEREO_NAME[id] - ps.Publisher().sendMessage('Set stereo mode', mode) + Publisher.sendMessage('Set stereo mode', mode) def Uncheck(self, pubsub_evt): @@ -566,7 +566,7 @@ class VolumeToolPanel(wx.Panel): if id in ID_TO_NAME.keys(): # Raycassting type was selected name = ID_TO_NAME[id] - ps.Publisher().sendMessage('Load raycasting preset', + Publisher.sendMessage('Load raycasting preset', ID_TO_NAME[id]) # Enable or disable tools if name != const.RAYCASTING_OFF_LABEL: @@ -583,12 +583,12 @@ class VolumeToolPanel(wx.Panel): # if i is not item: # i.Check(0) if not TOOL_STATE[id]: - ps.Publisher().sendMessage('Enable raycasting tool', + Publisher.sendMessage('Enable raycasting tool', [ID_TO_TOOL[id],1]) TOOL_STATE[id] = True item.Check(1) else: - ps.Publisher().sendMessage('Enable raycasting tool', + Publisher.sendMessage('Enable raycasting tool', [ID_TO_TOOL[id],0]) TOOL_STATE[id] = False item.Check(0) @@ -599,11 +599,11 @@ class VolumeToolPanel(wx.Panel): 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', + Publisher.sendMessage('Set volume view angle', evt.GetId()) self.Refresh() def OnSelectColour(self, evt): colour = c = [i/255.0 for i in evt.GetValue()] - ps.Publisher().sendMessage('Change volume viewer background colour', colour) + Publisher.sendMessage('Change volume viewer background colour', colour) diff --git a/invesalius/gui/dialogs.py b/invesalius/gui/dialogs.py index 3971ada..54ecf9c 100644 --- a/invesalius/gui/dialogs.py +++ b/invesalius/gui/dialogs.py @@ -26,7 +26,7 @@ import wx from wx.lib import masked from wx.lib.agw import floatspin from wx.lib.wordwrap import wordwrap -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import constants as const import gui.widgets.gradient as grad @@ -113,7 +113,7 @@ class ProgressDialog(object): self.dlg.SetSize(wx.Size(250,150)) def Cancel(self, evt): - ps.Publisher().sendMessage("Cancel DICOM load") + Publisher.sendMessage("Cancel DICOM load") def Update(self, value, message): if(int(value) != self.maximum): diff --git a/invesalius/gui/dicom_preview_panel.py b/invesalius/gui/dicom_preview_panel.py index 1b14f83..dcc2685 100755 --- a/invesalius/gui/dicom_preview_panel.py +++ b/invesalius/gui/dicom_preview_panel.py @@ -29,7 +29,7 @@ import vtk from vtk.util import numpy_support from vtk.wx.wxVTKRenderWindowInteractor import wxVTKRenderWindowInteractor -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import constants as const from reader import dicom_reader @@ -646,7 +646,7 @@ class DicomPreviewSlice(wx.Panel): self.selected_dicom = self.selected_panel.dicom_info self.GetEventHandler().ProcessEvent(my_evt) - ps.Publisher().sendMessage("Selected Import Images", [self.first_selection, \ + Publisher.sendMessage("Selected Import Images", [self.first_selection, \ self.last_selection]) def OnScroll(self, evt=None): diff --git a/invesalius/gui/frame.py b/invesalius/gui/frame.py index 53617c0..cd651f4 100755 --- a/invesalius/gui/frame.py +++ b/invesalius/gui/frame.py @@ -25,7 +25,7 @@ import webbrowser import wx import wx.aui -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import constants as const import default_tasks as tasks @@ -85,7 +85,7 @@ class Frame(wx.Frame): """ Bind events related to pubsub. """ - sub = ps.Publisher().subscribe + sub = Publisher.subscribe sub(self._BeginBusyCursor, 'Begin busy cursor') sub(self._ShowContentPanel, 'Cancel DICOM load') sub(self._EndBusyCursor, 'End busy cursor') @@ -254,7 +254,7 @@ class Frame(wx.Frame): """ Show viewers and task, hide import panel. """ - ps.Publisher().sendMessage("Set layout button full") + Publisher.sendMessage("Set layout button full") aui_manager = self.aui_manager aui_manager.GetPane("Import").Show(0) aui_manager.GetPane("Data").Show(1) @@ -265,7 +265,7 @@ class Frame(wx.Frame): """ Show viewers and task, hide import panel. """ - ps.Publisher().sendMessage("Set layout button full") + Publisher.sendMessage("Set layout button full") aui_manager = self.aui_manager aui_manager.GetPane("Retrieve").Show(1) aui_manager.GetPane("Data").Show(0) @@ -277,7 +277,7 @@ class Frame(wx.Frame): """ Show only DICOM import panel. """ - ps.Publisher().sendMessage("Set layout button data only") + Publisher.sendMessage("Set layout button data only") aui_manager = self.aui_manager aui_manager.GetPane("Import").Show(1) aui_manager.GetPane("Data").Show(0) @@ -298,13 +298,13 @@ class Frame(wx.Frame): self.aui_manager.Update() def CloseProject(self): - ps.Publisher().sendMessage('Close Project') + Publisher.sendMessage('Close Project') def OnClose(self, evt): """ Close all project data. """ - ps.Publisher().sendMessage('Close Project') + Publisher.sendMessage('Close Project') def OnMenuClick(self, evt): """ @@ -344,7 +344,7 @@ class Frame(wx.Frame): """ Refresh GUI when frame is resized. """ - ps.Publisher().sendMessage(('ProgressBar Reposition')) + Publisher.sendMessage(('ProgressBar Reposition')) evt.Skip() def ShowPreferences(self): @@ -357,9 +357,9 @@ class Frame(wx.Frame): ses.Session().surface_interpolation = values[const.SURFACE_INTERPOLATION] ses.Session().language = values[const.LANGUAGE] - ps.Publisher().sendMessage('Remove Volume') - ps.Publisher().sendMessage('Reset Reaycasting') - ps.Publisher().sendMessage('Update Surface Interpolation') + Publisher.sendMessage('Remove Volume') + Publisher.sendMessage('Reset Reaycasting') + Publisher.sendMessage('Update Surface Interpolation') def ShowAbout(self): """ @@ -371,7 +371,7 @@ class Frame(wx.Frame): """ Save project. """ - ps.Publisher().sendMessage('Show save dialog', False) + Publisher.sendMessage('Show save dialog', False) def ShowGettingStarted(self): """ @@ -385,29 +385,29 @@ class Frame(wx.Frame): """ Show import DICOM panel. """ - ps.Publisher().sendMessage('Show import directory dialog') + Publisher.sendMessage('Show import directory dialog') def ShowRetrieveDicomPanel(self): print "teste.............." - ps.Publisher().sendMessage('Show retrieve dicom panel') + Publisher.sendMessage('Show retrieve dicom panel') def ShowOpenProject(self): """ Show open project dialog. """ - ps.Publisher().sendMessage('Show open project dialog') + Publisher.sendMessage('Show open project dialog') def ShowSaveAsProject(self): """ Show save as dialog. """ - ps.Publisher().sendMessage('Show save dialog', True) + Publisher.sendMessage('Show save dialog', True) def ShowAnalyzeImporter(self): """ Show save as dialog. """ - ps.Publisher().sendMessage('Show analyze dialog', True) + Publisher.sendMessage('Show analyze dialog', True) # ------------------------------------------------------------------ # ------------------------------------------------------------------ @@ -441,7 +441,7 @@ class MenuBar(wx.MenuBar): # events should be binded directly from wx.Menu / wx.MenuBar # message "Binding events of wx.MenuBar" on [wxpython-users] # mail list in Oct 20 2008 - sub = ps.Publisher().subscribe + sub = Publisher.subscribe sub(self.OnEnableState, "Enable state project") def __init_items(self): @@ -578,7 +578,7 @@ class ProgressBar(wx.Gauge): """ Bind events related to pubsub. """ - sub = ps.Publisher().subscribe + sub = Publisher.subscribe sub(self._Layout, 'ProgressBar Reposition') def _Layout(self, evt_pubsub=None): @@ -626,7 +626,7 @@ class StatusBar(wx.StatusBar): """ Bind events related to pubsub. """ - sub = ps.Publisher().subscribe + sub = Publisher.subscribe sub(self._SetProgressValue, 'Update status in GUI') sub(self._SetProgressLabel, 'Update status text in GUI') @@ -714,7 +714,7 @@ class ProjectToolBar(wx.ToolBar): """ Bind events related to pubsub. """ - sub = ps.Publisher().subscribe + sub = Publisher.subscribe sub(self._EnableState, "Enable state project") def __init_items(self): @@ -846,7 +846,7 @@ class ObjectToolBar(wx.ToolBar): """ Bind events related to pubsub. """ - sub = ps.Publisher().subscribe + sub = Publisher.subscribe sub(self._EnableState, "Enable state project") sub(self._UntoggleAllItems, 'Untoggle object toolbar items') sub(self._ToggleLinearMeasure, "Set tool linear measure") @@ -982,8 +982,8 @@ class ObjectToolBar(wx.ToolBar): """ id = const.STATE_MEASURE_DISTANCE self.ToggleTool(id, True) - ps.Publisher().sendMessage('Enable style', id) - ps.Publisher().sendMessage('Untoggle slice toolbar items') + Publisher.sendMessage('Enable style', id) + Publisher.sendMessage('Untoggle slice toolbar items') for item in const.TOOL_STATES: state = self.GetToolState(item) if state and (item != id): @@ -997,8 +997,8 @@ class ObjectToolBar(wx.ToolBar): """ id = const.STATE_MEASURE_ANGLE self.ToggleTool(id, True) - ps.Publisher().sendMessage('Enable style', id) - ps.Publisher().sendMessage('Untoggle slice toolbar items') + Publisher.sendMessage('Enable style', id) + Publisher.sendMessage('Untoggle slice toolbar items') for item in const.TOOL_STATES: state = self.GetToolState(item) if state and (item != id): @@ -1013,13 +1013,13 @@ class ObjectToolBar(wx.ToolBar): state = self.GetToolState(id) if state and ((id == const.STATE_MEASURE_DISTANCE) or\ (id == const.STATE_MEASURE_ANGLE)): - ps.Publisher().sendMessage('Fold measure task') + Publisher.sendMessage('Fold measure task') if state: - ps.Publisher().sendMessage('Enable style', id) - ps.Publisher().sendMessage('Untoggle slice toolbar items') + Publisher.sendMessage('Enable style', id) + Publisher.sendMessage('Untoggle slice toolbar items') else: - ps.Publisher().sendMessage('Disable style', id) + Publisher.sendMessage('Disable style', id) for item in const.TOOL_STATES: state = self.GetToolState(item) @@ -1099,7 +1099,7 @@ class SliceToolBar(wx.ToolBar): """ Bind events related to pubsub. """ - sub = ps.Publisher().subscribe + sub = Publisher.subscribe sub(self._EnableState, "Enable state project") sub(self._UntoggleAllItems, 'Untoggle slice toolbar items') @@ -1131,7 +1131,7 @@ class SliceToolBar(wx.ToolBar): self.ToggleTool(id, False) if id == const.SLICE_STATE_CROSS: msg = 'Set cross visibility' - ps.Publisher().sendMessage(msg, 0) + Publisher.sendMessage(msg, 0) def OnToggle(self, evt): """ @@ -1142,10 +1142,10 @@ class SliceToolBar(wx.ToolBar): state = self.GetToolState(id) if state: - ps.Publisher().sendMessage('Enable style', id) - ps.Publisher().sendMessage('Untoggle object toolbar items') + Publisher.sendMessage('Enable style', id) + Publisher.sendMessage('Untoggle object toolbar items') else: - ps.Publisher().sendMessage('Disable style', id) + Publisher.sendMessage('Disable style', id) for item in const.TOOL_SLICE_STATES: state = self.GetToolState(item) @@ -1201,7 +1201,7 @@ class LayoutToolBar(wx.ToolBar): """ Bind events related to pubsub. """ - sub = ps.Publisher().subscribe + sub = Publisher.subscribe sub(self._EnableState, "Enable state project") sub(self._SetLayoutWithTask, "Set layout button data only") sub(self._SetLayoutWithoutTask, "Set layout button full") @@ -1318,13 +1318,13 @@ class LayoutToolBar(wx.ToolBar): """ if self.ontool_layout: self.SetToolNormalBitmap(ID_LAYOUT,self.BMP_WITHOUT_MENU) - ps.Publisher().sendMessage('Show task panel') + Publisher.sendMessage('Show task panel') self.SetToolShortHelp(ID_LAYOUT,_("Hide task panel")) self.ontool_layout = False else: self.bitmap = self.BMP_WITH_MENU self.SetToolNormalBitmap(ID_LAYOUT,self.BMP_WITH_MENU) - ps.Publisher().sendMessage('Hide task panel') + Publisher.sendMessage('Hide task panel') self.SetToolShortHelp(ID_LAYOUT, _("Show task panel")) self.ontool_layout = True @@ -1334,14 +1334,14 @@ class LayoutToolBar(wx.ToolBar): """ if self.ontool_text: self.SetToolNormalBitmap(ID_TEXT,self.BMP_WITH_TEXT) - ps.Publisher().sendMessage('Hide text actors on viewers') + Publisher.sendMessage('Hide text actors on viewers') self.SetToolShortHelp(ID_TEXT,_("Show text")) - ps.Publisher().sendMessage('Update AUI') + Publisher.sendMessage('Update AUI') self.ontool_text = False else: self.SetToolNormalBitmap(ID_TEXT, self.BMP_WITHOUT_TEXT) - ps.Publisher().sendMessage('Show text actors on viewers') + Publisher.sendMessage('Show text actors on viewers') self.SetToolShortHelp(ID_TEXT,_("Hide text")) - ps.Publisher().sendMessage('Update AUI') + Publisher.sendMessage('Update AUI') self.ontool_text = True diff --git a/invesalius/gui/import_network_panel.py b/invesalius/gui/import_network_panel.py index 7613b85..d6468c6 100644 --- a/invesalius/gui/import_network_panel.py +++ b/invesalius/gui/import_network_panel.py @@ -19,7 +19,7 @@ import wx import sys import wx.gizmos as gizmos -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import wx.lib.splitter as spl import constants as const @@ -134,8 +134,8 @@ class InnerPanel(wx.Panel): self.SetAutoLayout(1) def _bind_pubsubevt(self): - #ps.Publisher().subscribe(self.ShowDicomPreview, "Load import panel") - #ps.Publisher().subscribe(self.GetSelectedImages ,"Selected Import Images") + #Publisher.subscribe(self.ShowDicomPreview, "Load import panel") + #Publisher.subscribe(self.GetSelectedImages ,"Selected Import Images") pass def GetSelectedImages(self, pubsub_evt): @@ -181,7 +181,7 @@ class InnerPanel(wx.Panel): self.LoadDicom(group) def OnClickCancel(self, evt): - #ps.Publisher().sendMessage("Cancel DICOM load") + #Publisher.sendMessage("Cancel DICOM load") pass def LoadDicom(self, group): @@ -199,7 +199,7 @@ class InnerPanel(wx.Panel): nslices_result = slice_amont / (interval + 1) if (nslices_result > 1): - #ps.Publisher().sendMessage('Open DICOM group', (group, interval, + #Publisher.sendMessage('Open DICOM group', (group, interval, # [self.first_image_selection, self.last_image_selection])) pass else: @@ -218,9 +218,9 @@ class TextPanel(wx.Panel): self.__bind_pubsub_evt() def __bind_pubsub_evt(self): - #ps.Publisher().subscribe(self.SelectSeries, 'Select series in import panel') - ps.Publisher().subscribe(self.Populate, 'Populate tree') - ps.Publisher().subscribe(self.SetHostsList, 'Set FindPanel hosts list') + #Publisher.subscribe(self.SelectSeries, 'Select series in import panel') + Publisher.subscribe(self.Populate, 'Populate tree') + Publisher.subscribe(self.SetHostsList, 'Set FindPanel hosts list') def __bind_events_wx(self): self.Bind(wx.EVT_SIZE, self.OnSize) @@ -405,7 +405,7 @@ class TextPanel(wx.Panel): self.hosts = evt_pub.data def GetHostList(self): - ps.Publisher().sendMessage('Get NodesPanel host list') + Publisher.sendMessage('Get NodesPanel host list') return self.hosts def OnSelChanged(self, evt): @@ -413,7 +413,7 @@ class TextPanel(wx.Panel): if self._selected_by_user: group = self.tree.GetItemPyData(item) if isinstance(group, dcm.DicomGroup): - #ps.Publisher().sendMessage('Load group into import panel', + #Publisher.sendMessage('Load group into import panel', # group) pass @@ -423,7 +423,7 @@ class TextPanel(wx.Panel): my_evt.SetSelectedID(id) self.GetEventHandler().ProcessEvent(my_evt) - #ps.Publisher().sendMessage('Load patient into import panel', + #Publisher.sendMessage('Load patient into import panel', # group) else: parent_id = self.tree.GetItemParent(item) @@ -449,7 +449,7 @@ class TextPanel(wx.Panel): dn.RunCMove((patient_id, serie_id)) #dn.SetSearchWord(self.find_txt.GetValue()) - #ps.Publisher().sendMessage('Populate tree', dn.RunCFind()) + #Publisher.sendMessage('Populate tree', dn.RunCFind()) @@ -522,10 +522,10 @@ class FindPanel(wx.Panel): self._bind_gui_evt() def __bind_evt(self): - ps.Publisher().subscribe(self.SetHostsList, 'Set FindPanel hosts list') - #ps.Publisher().subscribe(self.ShowDicomSeries, 'Load dicom preview') - #ps.Publisher().subscribe(self.SetDicomSeries, 'Load group into import panel') - #ps.Publisher().subscribe(self.SetPatientSeries, 'Load patient into import panel') + Publisher.subscribe(self.SetHostsList, 'Set FindPanel hosts list') + #Publisher.subscribe(self.ShowDicomSeries, 'Load dicom preview') + #Publisher.subscribe(self.SetDicomSeries, 'Load group into import panel') + #Publisher.subscribe(self.SetPatientSeries, 'Load patient into import panel') pass def _bind_gui_evt(self): @@ -545,14 +545,14 @@ class FindPanel(wx.Panel): dn.SetAETitle(self.hosts[0][3]) dn.SetSearchWord(self.find_txt.GetValue()) - ps.Publisher().sendMessage('Populate tree', dn.RunCFind()) + Publisher.sendMessage('Populate tree', dn.RunCFind()) def SetHostsList(self, evt_pub): self.hosts = evt_pub.data def GetHostList(self): - ps.Publisher().sendMessage('Get NodesPanel host list') + Publisher.sendMessage('Get NodesPanel host list') return self.hosts class HostFindPanel(wx.Panel): @@ -612,7 +612,7 @@ class NodesTree(wx.ListCtrl, CheckListCtrlMixin,listmix.ListCtrlAutoWidthMixin, listmix.TextEditMixin.__init__(self) def OnCheckItem(self, index, flag): - ps.Publisher().sendMessage("Check item dict", [index, flag]) + Publisher.sendMessage("Check item dict", [index, flag]) def OpenEditor(self, col, row): @@ -650,9 +650,9 @@ class NodesPanel(wx.Panel): self.Bind(wx.EVT_LIST_END_LABEL_EDIT, self.EndEdition, self.tree_node) - ps.Publisher().subscribe(self.CheckItemDict, "Check item dict") - ps.Publisher().subscribe(self.GetHostsList, "Get NodesPanel host list") - #ps.Publisher().subscribe(self.UnCheckItemDict, "Uncheck item dict") + Publisher.subscribe(self.CheckItemDict, "Check item dict") + Publisher.subscribe(self.GetHostsList, "Get NodesPanel host list") + #Publisher.subscribe(self.UnCheckItemDict, "Uncheck item dict") def __init_gui(self): @@ -711,7 +711,7 @@ class NodesPanel(wx.Panel): self.sizer = sizer def GetHostsList(self, pub_evt): - ps.Publisher().sendMessage('Set FindPanel hosts list', self.hosts) + Publisher.sendMessage('Set FindPanel hosts list', self.hosts) def EndEdition(self, evt): diff --git a/invesalius/gui/import_panel.py b/invesalius/gui/import_panel.py index 19357b6..c52b21f 100644 --- a/invesalius/gui/import_panel.py +++ b/invesalius/gui/import_panel.py @@ -18,7 +18,7 @@ #-------------------------------------------------------------------------- import wx import wx.gizmos as gizmos -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import wx.lib.splitter as spl import constants as const @@ -126,8 +126,8 @@ class InnerPanel(wx.Panel): self.SetAutoLayout(1) def _bind_pubsubevt(self): - ps.Publisher().subscribe(self.ShowDicomPreview, "Load import panel") - ps.Publisher().subscribe(self.GetSelectedImages ,"Selected Import Images") + Publisher.subscribe(self.ShowDicomPreview, "Load import panel") + Publisher.subscribe(self.GetSelectedImages ,"Selected Import Images") def GetSelectedImages(self, pubsub_evt): self.first_image_selection = pubsub_evt.data[0] @@ -171,7 +171,7 @@ class InnerPanel(wx.Panel): self.LoadDicom(group) def OnClickCancel(self, evt): - ps.Publisher().sendMessage("Cancel DICOM load") + Publisher.sendMessage("Cancel DICOM load") def LoadDicom(self, group): interval = self.combo_interval.GetSelection() @@ -187,7 +187,7 @@ class InnerPanel(wx.Panel): nslices_result = slice_amont / (interval + 1) if (nslices_result > 1): - ps.Publisher().sendMessage('Open DICOM group', (group, interval, + Publisher.sendMessage('Open DICOM group', (group, interval, [self.first_image_selection, self.last_image_selection])) else: dlg.MissingFilesForReconstruction() @@ -205,7 +205,7 @@ class TextPanel(wx.Panel): self.__bind_pubsub_evt() def __bind_pubsub_evt(self): - ps.Publisher().subscribe(self.SelectSeries, 'Select series in import panel') + Publisher.subscribe(self.SelectSeries, 'Select series in import panel') def __bind_events_wx(self): self.Bind(wx.EVT_SIZE, self.OnSize) @@ -312,7 +312,7 @@ class TextPanel(wx.Panel): if self._selected_by_user: group = self.tree.GetItemPyData(item) if isinstance(group, dcm.DicomGroup): - ps.Publisher().sendMessage('Load group into import panel', + Publisher.sendMessage('Load group into import panel', group) elif isinstance(group, dcm.PatientGroup): @@ -321,7 +321,7 @@ class TextPanel(wx.Panel): my_evt.SetSelectedID(id) self.GetEventHandler().ProcessEvent(my_evt) - ps.Publisher().sendMessage('Load patient into import panel', + Publisher.sendMessage('Load patient into import panel', group) else: parent_id = self.tree.GetItemParent(item) @@ -421,9 +421,9 @@ class SeriesPanel(wx.Panel): self._bind_gui_evt() def __bind_evt(self): - ps.Publisher().subscribe(self.ShowDicomSeries, 'Load dicom preview') - ps.Publisher().subscribe(self.SetDicomSeries, 'Load group into import panel') - ps.Publisher().subscribe(self.SetPatientSeries, 'Load patient into import panel') + Publisher.subscribe(self.ShowDicomSeries, 'Load dicom preview') + Publisher.subscribe(self.SetDicomSeries, 'Load group into import panel') + Publisher.subscribe(self.SetPatientSeries, 'Load patient into import panel') def _bind_gui_evt(self): self.serie_preview.Bind(dpp.EVT_CLICK_SERIE, self.OnSelectSerie) @@ -487,9 +487,9 @@ class SlicePanel(wx.Panel): self.__bind_evt() def __bind_evt(self): - ps.Publisher().subscribe(self.ShowDicomSeries, 'Load dicom preview') - ps.Publisher().subscribe(self.SetDicomSeries, 'Load group into import panel') - ps.Publisher().subscribe(self.SetPatientSeries, 'Load patient into import panel') + Publisher.subscribe(self.ShowDicomSeries, 'Load dicom preview') + Publisher.subscribe(self.SetDicomSeries, 'Load group into import panel') + Publisher.subscribe(self.SetPatientSeries, 'Load patient into import panel') def __init_gui(self): self.SetBackgroundColour((255,255,255)) diff --git a/invesalius/gui/preferences.py b/invesalius/gui/preferences.py index d713088..395bdb8 100644 --- a/invesalius/gui/preferences.py +++ b/invesalius/gui/preferences.py @@ -1,6 +1,6 @@ import wx import constants as const -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import session as ses from language_dialog import ComboBoxLanguage @@ -62,7 +62,7 @@ class Preferences(wx.Dialog): self.__bind_events() def __bind_events(self): - ps.Publisher().subscribe(self.LoadPreferences, 'Load Preferences') + Publisher.subscribe(self.LoadPreferences, 'Load Preferences') def GetPreferences(self): diff --git a/invesalius/gui/task_exporter.py b/invesalius/gui/task_exporter.py index 66533ac..347bc61 100644 --- a/invesalius/gui/task_exporter.py +++ b/invesalius/gui/task_exporter.py @@ -23,7 +23,7 @@ import sys import wx import wx.lib.hyperlink as hl import wx.lib.platebtn as pbtn -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import constants as const import gui.dialogs as dlg @@ -253,7 +253,7 @@ class InnerTaskPanel(wx.Panel): value = dlg.ExportPicture(self.id_to_name[id]) if value: filename, filetype = value - ps.Publisher().sendMessage('Export picture to file', + Publisher.sendMessage('Export picture to file', (id, filename, filetype)) @@ -287,7 +287,7 @@ class InnerTaskPanel(wx.Panel): if filename.split(".")[-1] != extension: filename = filename + "."+ extension filetype = const.FILETYPE_IMAGEDATA - ps.Publisher().sendMessage('Export mask to file', + Publisher.sendMessage('Export mask to file', (filename, filetype)) @@ -323,7 +323,7 @@ class InnerTaskPanel(wx.Panel): if sys.platform != 'win32': if filename.split(".")[-1] != extension: filename = filename + "."+ extension - ps.Publisher().sendMessage('Export surface to file', + Publisher.sendMessage('Export surface to file', (filename, filetype)) else: dlg = wx.MessageDialog(None, diff --git a/invesalius/gui/task_importer.py b/invesalius/gui/task_importer.py index 089092e..8dad9fe 100644 --- a/invesalius/gui/task_importer.py +++ b/invesalius/gui/task_importer.py @@ -22,7 +22,7 @@ import sys import wx import wx.lib.hyperlink as hl import wx.lib.platebtn as pbtn -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import constants as const import gui.dialogs as dlg @@ -140,7 +140,7 @@ class InnerTaskPanel(wx.Panel): #self.__bind_events() #def __bind_events(self): - # ps.Publisher().subscribe(self.OnLoadRecentProjects, "Load recent projects") + # Publisher.subscribe(self.OnLoadRecentProjects, "Load recent projects") #def OnLoadRecentProjects(self, pubsub_evt): # projects = pubsub_evt.data @@ -217,22 +217,22 @@ class InnerTaskPanel(wx.Panel): ####### def ImportDicom(self): - ps.Publisher().sendMessage('Show import directory dialog') + Publisher.sendMessage('Show import directory dialog') def OpenProject(self, path=None): if path: - ps.Publisher().sendMessage('Open recent project', path) + Publisher.sendMessage('Open recent project', path) else: - ps.Publisher().sendMessage('Show open project dialog') + Publisher.sendMessage('Show open project dialog') def SaveAsProject(self): - ps.Publisher().sendMessage('Show save dialog', True) + Publisher.sendMessage('Show save dialog', True) def SaveProject(self): - ps.Publisher().sendMessage('Show save dialog', False) + Publisher.sendMessage('Show save dialog', False) def CloseProject(self): - ps.Publisher().sendMessage('Close Project') + Publisher.sendMessage('Close Project') ####### def OnButton(self, evt): diff --git a/invesalius/gui/task_navigator.py b/invesalius/gui/task_navigator.py index 4a8839a..da1bda9 100644 --- a/invesalius/gui/task_navigator.py +++ b/invesalius/gui/task_navigator.py @@ -25,7 +25,7 @@ import wx import wx.lib.hyperlink as hl import wx.lib.masked.numctrl import wx.lib.platebtn as pbtn -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import data.bases as db import data.co_registration as dcr @@ -286,8 +286,8 @@ class InnerTaskPanel(wx.Panel): self.button_getpoint.SetToolTip(tooltip) def __bind_events(self): - ps.Publisher().subscribe(self.__update_points_img, 'Update cross position') - ps.Publisher().subscribe(self.__update_points_plh, 'Update plh position') + Publisher.subscribe(self.__update_points_img, 'Update cross position') + Publisher.subscribe(self.__update_points_plh, 'Update plh position') def __update_points_img(self, pubsub_evt): x, y, z = pubsub_evt.data[1] @@ -355,7 +355,7 @@ class InnerTaskPanel(wx.Panel): self.N, self.q2, self.Ninv = db.Bases(self.coord1b, self.coord2b, self.coord3b).Basecreation() if self.aux_plh_ref1 == 0 or self.aux_plh_ref2 == 0 or self.aux_plh_ref3 == 0: - ps.Publisher().sendMessage('Update plh position', coord) + Publisher.sendMessage('Update plh position', coord) def Coordinates(self): #Get Polhemus points for base creation diff --git a/invesalius/gui/task_slice.py b/invesalius/gui/task_slice.py index e0d2147..aa03ed1 100644 --- a/invesalius/gui/task_slice.py +++ b/invesalius/gui/task_slice.py @@ -22,7 +22,7 @@ import sys import wx import wx.lib.hyperlink as hl import wx.lib.platebtn as pbtn -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import data.mask as mask import data.slice_ as slice_ @@ -155,10 +155,10 @@ class InnerTaskPanel(wx.Panel): options = dlgs.GetOptions() else: return - ps.Publisher().sendMessage('Create surface from index', + Publisher.sendMessage('Create surface from index', (self.GetMaskSelected(), overwrite, algorithm, options)) - ps.Publisher().sendMessage('Fold surface task') + Publisher.sendMessage('Fold surface task') else: dlg.InexistentMask() @@ -176,7 +176,7 @@ class InnerTaskPanel(wx.Panel): if ok: mask_name, thresh, colour = dialog.GetValue() if mask_name: - ps.Publisher().sendMessage('Create new mask', + Publisher.sendMessage('Create new mask', (mask_name, thresh, colour)) def GetMaskSelected(self): @@ -260,8 +260,8 @@ class InnerFoldPanel(wx.Panel): self.fold_panel.Bind(fpb.EVT_CAPTIONBAR, self.OnFoldPressCaption) def __bind_pubsub_evt(self): - ps.Publisher().subscribe(self.OnRetrieveStyle, 'Retrieve task slice style') - ps.Publisher().subscribe(self.OnDisableStyle, 'Disable task slice style') + Publisher.subscribe(self.OnRetrieveStyle, 'Retrieve task slice style') + Publisher.subscribe(self.OnDisableStyle, 'Disable task slice style') def OnFoldPressCaption(self, evt): id = evt.GetTag().GetId() @@ -269,24 +269,24 @@ class InnerFoldPanel(wx.Panel): if self.__id_editor == id: if closed: - ps.Publisher().sendMessage('Disable style', const.SLICE_STATE_EDITOR) + Publisher.sendMessage('Disable style', const.SLICE_STATE_EDITOR) self.last_style = None else: - ps.Publisher().sendMessage('Enable style', const.SLICE_STATE_EDITOR) + Publisher.sendMessage('Enable style', const.SLICE_STATE_EDITOR) self.last_style = const.SLICE_STATE_EDITOR else: - ps.Publisher().sendMessage('Disable style', const.SLICE_STATE_EDITOR) + Publisher.sendMessage('Disable style', const.SLICE_STATE_EDITOR) self.last_style = None evt.Skip() def OnRetrieveStyle(self, pubsub_evt): if (self.last_style == const.SLICE_STATE_EDITOR): - ps.Publisher().sendMessage('Enable style', const.SLICE_STATE_EDITOR) + Publisher.sendMessage('Enable style', const.SLICE_STATE_EDITOR) def OnDisableStyle(self, pubsub_evt): if (self.last_style == const.SLICE_STATE_EDITOR): - ps.Publisher().sendMessage('Disable style', const.SLICE_STATE_EDITOR) + Publisher.sendMessage('Disable style', const.SLICE_STATE_EDITOR) def GetMaskSelected(self): x= self.mask_prop_panel.GetMaskSelected() @@ -356,19 +356,19 @@ class MaskProperties(wx.Panel): def __bind_events(self): - ps.Publisher().subscribe(self.AddMask, 'Add mask') + Publisher.subscribe(self.AddMask, 'Add mask') # TODO: Uncomment - ps.Publisher().subscribe(self.SetThresholdBounds, + Publisher.subscribe(self.SetThresholdBounds, 'Update threshold limits') - ps.Publisher().subscribe(self.SetThresholdModes, 'Set threshold modes') - ps.Publisher().subscribe(self.SetItemsColour, 'Set GUI items colour') - ps.Publisher().subscribe(self.SetThresholdValues, + Publisher.subscribe(self.SetThresholdModes, 'Set threshold modes') + Publisher.subscribe(self.SetItemsColour, 'Set GUI items colour') + Publisher.subscribe(self.SetThresholdValues, 'Set threshold values in gradient') - ps.Publisher().subscribe(self.SelectMaskName, 'Select mask name in combo') - ps.Publisher().subscribe(self.ChangeMaskName, 'Change mask name') - ps.Publisher().subscribe(self.OnRemoveMasks, 'Remove masks') - ps.Publisher().subscribe(self.OnCloseProject, 'Close project data') - ps.Publisher().subscribe(self.SetThresholdValues2, 'Set threshold values') + Publisher.subscribe(self.SelectMaskName, 'Select mask name in combo') + Publisher.subscribe(self.ChangeMaskName, 'Change mask name') + Publisher.subscribe(self.OnRemoveMasks, 'Remove masks') + Publisher.subscribe(self.OnCloseProject, 'Close project data') + Publisher.subscribe(self.SetThresholdValues2, 'Set threshold values') def OnCloseProject(self, pubsub_evt): self.CloseProject() @@ -484,7 +484,7 @@ class MaskProperties(wx.Panel): def OnComboName(self, evt): mask_name = evt.GetString() mask_index = evt.GetSelection() - ps.Publisher().sendMessage('Change mask selected', mask_index) + Publisher.sendMessage('Change mask selected', mask_index) def OnComboThresh(self, evt): (thresh_min, thresh_max) = Project().threshold_modes[evt.GetString()] @@ -496,7 +496,7 @@ class MaskProperties(wx.Panel): def OnSlideChanged(self, evt): thresh_min = self.gradient.GetMinValue() thresh_max = self.gradient.GetMaxValue() - ps.Publisher().sendMessage('Set threshold values', + Publisher.sendMessage('Set threshold values', (thresh_min, thresh_max)) session = ses.Session() session.ChangeProject() @@ -504,7 +504,7 @@ class MaskProperties(wx.Panel): def OnSlideChanging(self, evt): thresh_min = self.gradient.GetMinValue() thresh_max = self.gradient.GetMaxValue() - ps.Publisher().sendMessage('Changing threshold values', + Publisher.sendMessage('Changing threshold values', (thresh_min, thresh_max)) session = ses.Session() session.ChangeProject() @@ -512,7 +512,7 @@ class MaskProperties(wx.Panel): def OnSelectColour(self, evt): colour = evt.GetValue() self.gradient.SetColour(colour) - ps.Publisher().sendMessage('Change mask colour', colour) + Publisher.sendMessage('Change mask colour', colour) class EditionTools(wx.Panel): def __init__(self, parent): @@ -599,10 +599,10 @@ class EditionTools(wx.Panel): self.combo_brush_op.Bind(wx.EVT_COMBOBOX, self.OnComboBrushOp) def __bind_events(self): - ps.Publisher().subscribe(self.SetThresholdBounds, + Publisher.subscribe(self.SetThresholdBounds, 'Update threshold limits') - ps.Publisher().subscribe(self.ChangeMaskColour, 'Change mask colour') - ps.Publisher().subscribe(self.SetGradientColour, 'Add mask') + Publisher.subscribe(self.ChangeMaskColour, 'Change mask colour') + Publisher.subscribe(self.SetGradientColour, 'Add mask') def ChangeMaskColour(self, pubsub_evt): colour = pubsub_evt.data @@ -632,7 +632,7 @@ class EditionTools(wx.Panel): thresh_min = self.gradient_thresh.GetMinValue() thresh_max = self.gradient_thresh.GetMaxValue() if self.bind_evt_gradient: - ps.Publisher().sendMessage('Set edition threshold values', + Publisher.sendMessage('Set edition threshold values', (thresh_min, thresh_max)) def OnMenu(self, evt): @@ -646,17 +646,17 @@ class EditionTools(wx.Panel): self.btn_brush_format.SetBitmap(bitmap[evt.GetId()]) - ps.Publisher().sendMessage('Set brush format', brush[evt.GetId()]) + Publisher.sendMessage('Set brush format', brush[evt.GetId()]) def OnBrushSize(self, evt): """ """ # FIXME: Using wx.EVT_SPINCTRL in MacOS it doesnt capture changes only # in the text ctrl - so we are capturing only changes on text # Strangelly this is being called twice - ps.Publisher().sendMessage('Set edition brush size',self.spin.GetValue()) + Publisher.sendMessage('Set edition brush size',self.spin.GetValue()) def OnComboBrushOp(self, evt): brush_op_id = evt.GetSelection() - ps.Publisher().sendMessage('Set edition operation', brush_op_id) + Publisher.sendMessage('Set edition operation', brush_op_id) diff --git a/invesalius/gui/task_surface.py b/invesalius/gui/task_surface.py index 1b48453..d8f37c9 100644 --- a/invesalius/gui/task_surface.py +++ b/invesalius/gui/task_surface.py @@ -20,7 +20,7 @@ import sys import wx import wx.lib.hyperlink as hl -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import constants as const import gui.dialogs as dlg @@ -126,7 +126,7 @@ class InnerTaskPanel(wx.Panel): def OnButtonNextTask(self, evt): if evt: - ps.Publisher().sendMessage('Fold export task') + Publisher.sendMessage('Fold export task') evt.Skip() def OnLinkNewSurface(self, evt=None): @@ -161,7 +161,7 @@ class InnerTaskPanel(wx.Panel): fill_holes, keep_largest] - ps.Publisher().sendMessage('Create surface', surface_data) + Publisher.sendMessage('Create surface', surface_data) dialog.Destroy() if evt: evt.Skip() @@ -346,10 +346,10 @@ class SurfaceTools(wx.Panel): self.SelectSeed() def SelectLargest(self): - ps.Publisher().sendMessage('Create surface from largest region') + Publisher.sendMessage('Create surface from largest region') def SplitSurface(self): - ps.Publisher().sendMessage('Split surface') + Publisher.sendMessage('Split surface') def SelectSeed(self): if self.button_seeds.IsPressed(): @@ -358,12 +358,12 @@ class SurfaceTools(wx.Panel): self.EndSeeding() def StartSeeding(self): - ps.Publisher().sendMessage('Enable style', const.VOLUME_STATE_SEED) - ps.Publisher().sendMessage('Create surface by seeding - start') + Publisher.sendMessage('Enable style', const.VOLUME_STATE_SEED) + Publisher.sendMessage('Create surface by seeding - start') def EndSeeding(self): - ps.Publisher().sendMessage('Disable style', const.VOLUME_STATE_SEED) - ps.Publisher().sendMessage('Create surface by seeding - end') + Publisher.sendMessage('Disable style', const.VOLUME_STATE_SEED) + Publisher.sendMessage('Create surface by seeding - end') @@ -437,12 +437,12 @@ class SurfaceProperties(wx.Panel): self.__bind_events() def __bind_events(self): - ps.Publisher().subscribe(self.InsertNewSurface, + Publisher.subscribe(self.InsertNewSurface, 'Update surface info in GUI') - ps.Publisher().subscribe(self.ChangeSurfaceName, + Publisher.subscribe(self.ChangeSurfaceName, 'Change surface name') - ps.Publisher().subscribe(self.OnCloseProject, 'Close project data') - ps.Publisher().subscribe(self.OnRemoveSurfaces, 'Remove surfaces') + Publisher.subscribe(self.OnCloseProject, 'Close project data') + Publisher.subscribe(self.OnRemoveSurfaces, 'Remove surfaces') def OnRemoveSurfaces(self, pubsub_evt): @@ -497,11 +497,11 @@ class SurfaceProperties(wx.Panel): def OnComboName(self, evt): surface_name = evt.GetString() surface_index = evt.GetSelection() - ps.Publisher().sendMessage('Change surface selected', surface_index) + Publisher.sendMessage('Change surface selected', surface_index) def OnSelectColour(self, evt): colour = [value/255.0 for value in evt.GetValue()] - ps.Publisher().sendMessage('Set surface colour', + Publisher.sendMessage('Set surface colour', (self.combo_surface_name.GetSelection(), colour)) @@ -512,7 +512,7 @@ class SurfaceProperties(wx.Panel): # This problem is in wx.Widgets and therefore we'll simply overcome it: if (wx.Platform == "__WXMAC__"): transparency = evt.GetInt()/(0.96*float(MAX_TRANSPARENCY)) - ps.Publisher().sendMessage('Set surface transparency', + Publisher.sendMessage('Set surface transparency', (self.combo_surface_name.GetSelection(), transparency)) diff --git a/invesalius/gui/task_tools.py b/invesalius/gui/task_tools.py index b596790..38ce05c 100644 --- a/invesalius/gui/task_tools.py +++ b/invesalius/gui/task_tools.py @@ -21,7 +21,7 @@ import wx import wx.lib.embeddedimage as emb import wx.lib.hyperlink as hl import wx.lib.platebtn as pbtn -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import constants @@ -121,11 +121,11 @@ class InnerTaskPanel(wx.Panel): print "TODO: Send Signal - Add text annotation (both 2d and 3d)" def OnLinkLinearMeasure(self): - ps.Publisher().sendMessage('Enable style', + Publisher.sendMessage('Enable style', constants.STATE_MEASURE_DISTANCE) def OnLinkAngularMeasure(self): - ps.Publisher().sendMessage('Enable style', + Publisher.sendMessage('Enable style', constants.STATE_MEASURE_ANGLE) def OnButton(self, evt): diff --git a/invesalius/gui/widgets/slice_menu.py b/invesalius/gui/widgets/slice_menu.py index 13ce328..f5fc835 100644 --- a/invesalius/gui/widgets/slice_menu.py +++ b/invesalius/gui/widgets/slice_menu.py @@ -22,7 +22,7 @@ import sys import wx -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import constants as const class SliceMenu(wx.Menu): @@ -116,8 +116,8 @@ class SliceMenu(wx.Menu): self.__bind_events() def __bind_events(self): - ps.Publisher().subscribe(self.CheckWindowLevelOther, 'Check window and level other') - ps.Publisher().subscribe(self.FirstItemSelect, 'Select first item from slice menu') + Publisher.subscribe(self.CheckWindowLevelOther, 'Check window and level other') + Publisher.subscribe(self.FirstItemSelect, 'Select first item from slice menu') def FirstItemSelect(self, pusub_evt): @@ -143,28 +143,28 @@ class SliceMenu(wx.Menu): if(key in const.WINDOW_LEVEL.keys()): print "a" window, level = const.WINDOW_LEVEL[key] - ps.Publisher().sendMessage('Bright and contrast adjustment image', + Publisher.sendMessage('Bright and contrast adjustment image', (window, level)) - ps.Publisher().sendMessage('Update window level value',\ + Publisher.sendMessage('Update window level value',\ (window, level)) - ps.Publisher().sendMessage('Update window and level text',\ + Publisher.sendMessage('Update window and level text',\ "WL: %d WW: %d"%(level, window)) - ps.Publisher().sendMessage('Update slice viewer') + Publisher.sendMessage('Update slice viewer') #Necessary update the slice plane in the volume case exists - ps.Publisher().sendMessage('Render volume viewer') + Publisher.sendMessage('Render volume viewer') elif(key in const.SLICE_COLOR_TABLE.keys()): print "b" values = const.SLICE_COLOR_TABLE[key] - ps.Publisher().sendMessage('Change colour table from background image', values) - ps.Publisher().sendMessage('Update slice viewer') + Publisher.sendMessage('Change colour table from background image', values) + Publisher.sendMessage('Update slice viewer') elif(key in const.IMAGE_TILING.keys()): print "c" values = const.IMAGE_TILING[key] - ps.Publisher().sendMessage('Set slice viewer layout', values) - ps.Publisher().sendMessage('Update slice viewer') + Publisher.sendMessage('Set slice viewer layout', values) + Publisher.sendMessage('Update slice viewer') evt.Skip() diff --git a/invesalius/invesalius.py b/invesalius/invesalius.py index f5ced95..052fb97 100755 --- a/invesalius/invesalius.py +++ b/invesalius/invesalius.py @@ -34,8 +34,11 @@ else: wxversion.select('2.8-unicode', optionsRequired=True) import wx -from wx.lib.pubsub import setupv1 -import wx.lib.pubsub as ps +#from wx.lib.pubsub import setupv1 #new wx +from wx.lib.pubsub import setuparg1# as psv1 +#from wx.lib.pubsub import Publisher +#import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import wx.lib.agw.advancedsplash as agw if sys.platform == 'linux2': @@ -71,7 +74,7 @@ class InVesalius(wx.App): Open drag & drop files under darwin """ path = os.path.abspath(filename) - ps.Publisher().sendMessage('Open project', path) + Publisher.sendMessage('Open project', path) # ------------------------------------------------------------------ @@ -215,13 +218,13 @@ def parse_comand_line(): # If debug argument... if options.debug: - ps.Publisher().subscribe(print_events, '') + Publisher.subscribe(print_events, '') session.debug = 1 # If import DICOM argument... if options.dicom_dir: import_dir = options.dicom_dir - ps.Publisher().sendMessage('Import directory', import_dir) + Publisher().sendMessage('Import directory', import_dir) return True # Check if there is a file path somewhere in what the user wrote @@ -233,7 +236,7 @@ def parse_comand_line(): file = args[i] if os.path.isfile(file): path = os.path.abspath(file) - ps.Publisher().sendMessage('Open project', path) + Publisher.sendMessage('Open project', path) i = 0 return True return False @@ -255,7 +258,8 @@ def main(): if __name__ == '__main__': # Needed in win 32 exe - if hasattr(sys,"frozen") and sys.frozen == "windows_exe": + if hasattr(sys,"frozen") and (sys.frozen == "windows_exe"\ + or sys.frozen == "console_exe"): multiprocessing.freeze_support() #Click in the .inv3 file support diff --git a/invesalius/presets.py b/invesalius/presets.py index 8b3af94..4ea0acb 100644 --- a/invesalius/presets.py +++ b/invesalius/presets.py @@ -19,7 +19,7 @@ import os import plistlib -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher from utils import TwoWaysDictionary @@ -64,7 +64,7 @@ class Presets(): self.__bind_events() def __bind_events(self): - ps.Publisher.subscribe(self.UpdateThresholdModes, + Publisher.subscribe(self.UpdateThresholdModes, 'Update threshold limits list') def UpdateThresholdModes(self, evt): @@ -93,7 +93,7 @@ class Presets(): presets[key] = (t_min, t_max) - ps.Publisher().sendMessage('Update threshold limits', (thresh_min, + Publisher.sendMessage('Update threshold limits', (thresh_min, thresh_max)) def SavePlist(self, filename): diff --git a/invesalius/project.py b/invesalius/project.py index 9167426..a9d2f3c 100755 --- a/invesalius/project.py +++ b/invesalius/project.py @@ -26,7 +26,7 @@ import tarfile import tempfile import wx -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import vtk import constants as const @@ -184,7 +184,7 @@ class Project(object): def SetRaycastPreset(self, label): path = os.path.join(RAYCASTING_PRESETS_DIRECTORY, label + '.plist') preset = plistlib.readPlist(path) - ps.Publisher.sendMessage('Set raycasting preset', preset) + Publisher.sendMessage('Set raycasting preset', preset) def GetMeasuresDict(self): measures = {} diff --git a/invesalius/reader/dicom_reader.py b/invesalius/reader/dicom_reader.py index ea53101..533587f 100644 --- a/invesalius/reader/dicom_reader.py +++ b/invesalius/reader/dicom_reader.py @@ -27,7 +27,7 @@ from multiprocessing import cpu_count import vtk import vtkgdcm import gdcm -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher import constants as const import dicom @@ -317,7 +317,7 @@ def GetDicomGroups(directory, recursive=True): class ProgressDicomReader: def __init__(self): - ps.Publisher().subscribe(self.CancelLoad, "Cancel DICOM load") + Publisher.subscribe(self.CancelLoad, "Cancel DICOM load") def CancelLoad(self, evt_pubsub): self.running = False @@ -332,10 +332,10 @@ class ProgressDicomReader: self.GetDicomGroups(path,recursive) def UpdateLoadFileProgress(self,cont_progress): - ps.Publisher().sendMessage("Update dicom load", cont_progress) + Publisher.sendMessage("Update dicom load", cont_progress) def EndLoadFile(self, patient_list): - ps.Publisher().sendMessage("End dicom load", patient_list) + Publisher.sendMessage("End dicom load", patient_list) def GetDicomGroups(self, path, recursive): diff --git a/invesalius/session.py b/invesalius/session.py index 63d56c4..688ae35 100644 --- a/invesalius/session.py +++ b/invesalius/session.py @@ -24,7 +24,8 @@ import sys from threading import Thread import time -import wx.lib.pubsub as ps +#import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher from utils import Singleton, debug @@ -38,7 +39,7 @@ class Session(object): ws = self.ws = WriteSession(self) ws.start() - ps.Publisher().subscribe(self.StopRecording, "Stop Config Recording") + Publisher.subscribe(self.StopRecording, "Stop Config Recording") def CreateItens(self): import constants as const @@ -117,7 +118,7 @@ class Session(object): def CreateProject(self, filename): import constants as const debug("Session.CreateProject") - ps.Publisher().sendMessage('Begin busy cursor') + Publisher.sendMessage('Begin busy cursor') # Set session info self.project_path = (self.tempdir, filename) self.project_status = const.PROJ_NEW diff --git a/invesalius/style.py b/invesalius/style.py index d14ab98..29d3369 100644 --- a/invesalius/style.py +++ b/invesalius/style.py @@ -17,7 +17,7 @@ # detalhes. #-------------------------------------------------------------------------- -import wx.lib.pubsub as ps +from wx.lib.pubsub import pub as Publisher # mode.py -- libgit2 0.21.2