def __init__(self, parent, data_file): self.parent = parent self.data_file = data_file self.controller = ImgPlotWindowController(self, data_file) module_logger.info("Successfully initialized ImgPlotWindow.") self.load_data()
class ImgPlotWindow(PlotWindow): """Specialized PlotWindow for handling imgplots""" def __init__(self, parent, data_file): self.parent = parent self.data_file = data_file self.controller = ImgPlotWindowController(self, data_file) module_logger.info("Successfully initialized ImgPlotWindow.") self.load_data() def load_data(self): """Loads the data set and plots""" exception_queue = Queue.Queue() data_thd = workerthread.WorkerThread(exception_queue=exception_queue, target=self.controller.load_data) data_thd.start() while True: data_thd.join(0.125) if not data_thd.is_alive(): try: exc_type, exc = exception_queue.get(block=False) module_logger.error("Unable to load data: {0}".format(exc)) err_msg = "An error occurred while loading data:\n{0}".format( exc) if len(err_msg) > 150: # Truncate lengthy error messages err_msg = ''.join([err_msg[:150], "\n(continued)"]) err_dlg = wx.MessageDialog(self.parent, message=err_msg, caption="Unable To Load Data", style=wx.ICON_ERROR) err_dlg.ShowModal() except Queue.Empty: pass break wx.GetApp().Yield(True) self.title = 'Plot - {0}'.format(os.path.basename(self.data_file)) wx.Frame.__init__(self, id=wx.ID_ANY, parent=self.parent, title=self.title) self.init_menu() self.init_ui() self.controller.check_data_dims() self.controller.plot(self.controller.data) def init_plot_menu(self): """Creates the Plot menu""" self.plot_mnu = wx.Menu() self.labels_mnu = wx.Menu() # Titles and Labels plottitle_mnui = wx.MenuItem(self.labels_mnu, wx.ID_ANY, text="Set Plot Title", help="Set Plot Title") self.Bind(wx.EVT_MENU, self.controller.on_set_plottitle, id=plottitle_mnui.GetId()) self.labels_mnu.AppendItem(plottitle_mnui) xlbl_mnui = wx.MenuItem(self.labels_mnu, wx.ID_ANY, text="Set X Axis Label", help="Set X Axis Label") self.Bind(wx.EVT_MENU, self.controller.on_set_xlabel, id=xlbl_mnui.GetId()) self.labels_mnu.AppendItem(xlbl_mnui) ylbl_mnui = wx.MenuItem(self.labels_mnu, wx.ID_ANY, text="Set Y Axis Label", help="Set Y Axis Label") self.Bind(wx.EVT_MENU, self.controller.on_set_ylabel, id=ylbl_mnui.GetId()) self.labels_mnu.AppendItem(ylbl_mnui) cbarlbl_mnui = wx.MenuItem(self.labels_mnu, wx.ID_ANY, text='Set Colorbar Label', help='Set Colorbar Label') self.Bind(wx.EVT_MENU, self.controller.on_set_cbarlbl, id=cbarlbl_mnui.GetId()) self.labels_mnu.AppendItem(cbarlbl_mnui) self.plot_mnu.AppendMenu(wx.ID_ANY, "Title And Labels", self.labels_mnu) self.colormaps_mnu = wx.Menu() # Colormaps self.preview_cmaps_mnui = wx.MenuItem( self.colormaps_mnu, wx.ID_ANY, text='Preview Colormaps', help='Preview available colormaps') self.Bind(wx.EVT_MENU, self.controller.on_preview_cmaps, id=self.preview_cmaps_mnui.GetId()) self.colormaps_mnu.AppendItem(self.preview_cmaps_mnui) self.select_cmap_mnui = wx.MenuItem(self.colormaps_mnu, wx.ID_ANY, text='Select Colormap...', help='Selects colormap') self.Bind(wx.EVT_MENU, self.controller.on_select_cmap, id=self.select_cmap_mnui.GetId()) self.colormaps_mnu.AppendItem(self.select_cmap_mnui) self.create_cmap_mnui = wx.MenuItem(self.colormaps_mnu, wx.ID_ANY, text='Create Colormap...', help='Create or edit a colormap') self.colormaps_mnu.AppendItem(self.create_cmap_mnui) self.Bind(wx.EVT_MENU, self.controller.on_create_cmap, id=self.create_cmap_mnui.GetId()) self.plot_mnu.AppendMenu(wx.ID_ANY, "Colormaps", self.colormaps_mnu) gridtoggle_mnui = wx.MenuItem(self.plot_mnu, wx.ID_ANY, text="Toggle Grid", help="Turns grid on or off") self.plot_mnu.AppendItem(gridtoggle_mnui) self.Bind(wx.EVT_MENU, self.controller.on_toggle_grid, id=gridtoggle_mnui.GetId()) self.menubar.Append(self.plot_mnu, "&Plot") def init_specific_ops_menu(self): """Implements imgplot-specific operations for the Operations menu""" self.manip_mnu = wx.Menu() # Data manipulations self.flip_mnu = wx.Menu() # Flip data self.flipud_mnui = wx.MenuItem(self.flip_mnu, wx.ID_ANY, text="Vertically") self.Bind(wx.EVT_MENU, self.controller.on_flipud, id=self.flipud_mnui.GetId()) self.flip_mnu.AppendItem(self.flipud_mnui) self.fliplr_mnui = wx.MenuItem(self.flip_mnu, wx.ID_ANY, text="Horizontally") self.Bind(wx.EVT_MENU, self.controller.on_fliplr, id=self.fliplr_mnui.GetId()) self.flip_mnu.AppendItem(self.fliplr_mnui) self.manip_mnu.AppendMenu(wx.ID_ANY, 'Flip', self.flip_mnu) self.rot_mnu = wx.Menu() # Rotate data self.rot90ccw_mnui = wx.MenuItem(self.rot_mnu, wx.ID_ANY, text="90 Degrees CCW") self.Bind(wx.EVT_MENU, self.controller.on_rot90ccw, id=self.rot90ccw_mnui.GetId()) self.rot_mnu.AppendItem(self.rot90ccw_mnui) self.rot90cw_mnui = wx.MenuItem(self.rot_mnu, wx.ID_ANY, text="90 Degreees CW") self.Bind(wx.EVT_MENU, self.controller.on_rot90cw, id=self.rot90cw_mnui.GetId()) self.rot_mnu.AppendItem(self.rot90cw_mnui) self.rot180_mnui = wx.MenuItem(self.rot_mnu, wx.ID_ANY, text="180 Degrees") self.Bind(wx.EVT_MENU, self.controller.on_rot180, id=self.rot180_mnui.GetId()) self.rot_mnu.AppendItem(self.rot180_mnui) self.manip_mnu.AppendMenu(wx.ID_ANY, 'Rotate', self.rot_mnu) self.ops_mnu.AppendMenu(wx.ID_ANY, 'Flip/Rotate Data', self.manip_mnu) self.detrend_mnu = wx.Menu() # Detrending menu self.detrend_constantx_mnui = wx.MenuItem(self.detrend_mnu, wx.ID_ANY, text="Constant Horizontal") self.Bind(wx.EVT_MENU, self.controller.on_detrend_meanx, id=self.detrend_constantx_mnui.GetId()) self.detrend_mnu.AppendItem(self.detrend_constantx_mnui) self.detrend_constanty_mnui = wx.MenuItem(self.detrend_mnu, wx.ID_ANY, text="Constant Vertical") self.Bind(wx.EVT_MENU, self.controller.on_detrend_meany, id=self.detrend_constanty_mnui.GetId()) self.detrend_mnu.AppendItem(self.detrend_constanty_mnui) self.detrend_linearx_mnui = wx.MenuItem(self.detrend_mnu, wx.ID_ANY, text="Linear Horizontal") self.Bind(wx.EVT_MENU, self.controller.on_detrend_linearx, id=self.detrend_linearx_mnui.GetId()) self.detrend_mnu.AppendItem(self.detrend_linearx_mnui) self.detrend_lineary_mnui = wx.MenuItem(self.detrend_mnu, wx.ID_ANY, text="Linear Vertical") self.Bind(wx.EVT_MENU, self.controller.on_detrend_lineary, id=self.detrend_lineary_mnui.GetId()) self.detrend_mnu.AppendItem(self.detrend_lineary_mnui) self.ops_mnu.AppendMenu(wx.ID_ANY, 'Detrend Data', self.detrend_mnu) self.transpose_mnui = wx.MenuItem(self.ops_mnu, wx.ID_ANY, text="Transpose Data") self.Bind(wx.EVT_MENU, self.controller.on_transpose, id=self.transpose_mnui.GetId()) self.ops_mnu.AppendItem(self.transpose_mnui)
class ImgPlotWindow(PlotWindow): """Specialized PlotWindow for handling imgplots""" def __init__(self, parent, data_file): self.parent = parent self.data_file = data_file self.controller = ImgPlotWindowController(self, data_file) module_logger.info("Successfully initialized ImgPlotWindow.") self.load_data() def load_data(self): """Loads the data set and plots""" exception_queue = Queue.Queue() data_thd = workerthread.WorkerThread(exception_queue=exception_queue, target=self.controller.load_data) data_thd.start() while True: data_thd.join(0.125) if not data_thd.is_alive(): try: exc_type, exc = exception_queue.get(block=False) module_logger.error("Unable to load data: {0}".format(exc)) err_msg = "An error occurred while loading data:\n{0}".format(exc) if len(err_msg) > 150: # Truncate lengthy error messages err_msg = ''.join([err_msg[:150], "\n(continued)"]) err_dlg = wx.MessageDialog(self.parent, message=err_msg, caption="Unable To Load Data", style=wx.ICON_ERROR) err_dlg.ShowModal() except Queue.Empty: pass break wx.GetApp().Yield(True) self.title = 'Plot - {0}'.format(os.path.basename(self.data_file)) wx.Frame.__init__(self, id=wx.ID_ANY, parent=self.parent, title=self.title) self.init_menu() self.init_ui() self.controller.check_data_dims() self.controller.plot(self.controller.data) def init_plot_menu(self): """Creates the Plot menu""" self.plot_mnu = wx.Menu() self.labels_mnu = wx.Menu() # Titles and Labels plottitle_mnui = wx.MenuItem(self.labels_mnu, wx.ID_ANY, text="Set Plot Title", help="Set Plot Title") self.Bind(wx.EVT_MENU, self.controller.on_set_plottitle, id=plottitle_mnui.GetId()) self.labels_mnu.AppendItem(plottitle_mnui) xlbl_mnui = wx.MenuItem(self.labels_mnu, wx.ID_ANY, text="Set X Axis Label", help="Set X Axis Label") self.Bind(wx.EVT_MENU, self.controller.on_set_xlabel, id=xlbl_mnui.GetId()) self.labels_mnu.AppendItem(xlbl_mnui) ylbl_mnui = wx.MenuItem(self.labels_mnu, wx.ID_ANY, text="Set Y Axis Label", help="Set Y Axis Label") self.Bind(wx.EVT_MENU, self.controller.on_set_ylabel, id=ylbl_mnui.GetId()) self.labels_mnu.AppendItem(ylbl_mnui) cbarlbl_mnui = wx.MenuItem(self.labels_mnu, wx.ID_ANY, text='Set Colorbar Label', help='Set Colorbar Label') self.Bind(wx.EVT_MENU, self.controller.on_set_cbarlbl, id=cbarlbl_mnui.GetId()) self.labels_mnu.AppendItem(cbarlbl_mnui) self.plot_mnu.AppendMenu(wx.ID_ANY, "Title And Labels", self.labels_mnu) self.colormaps_mnu = wx.Menu() # Colormaps self.preview_cmaps_mnui = wx.MenuItem(self.colormaps_mnu, wx.ID_ANY, text='Preview Colormaps', help='Preview available colormaps') self.Bind(wx.EVT_MENU, self.controller.on_preview_cmaps, id=self.preview_cmaps_mnui.GetId()) self.colormaps_mnu.AppendItem(self.preview_cmaps_mnui) self.select_cmap_mnui = wx.MenuItem(self.colormaps_mnu, wx.ID_ANY, text='Select Colormap...', help='Selects colormap') self.Bind(wx.EVT_MENU, self.controller.on_select_cmap, id=self.select_cmap_mnui.GetId()) self.colormaps_mnu.AppendItem(self.select_cmap_mnui) self.create_cmap_mnui = wx.MenuItem(self.colormaps_mnu, wx.ID_ANY, text='Create Colormap...', help='Create or edit a colormap') self.colormaps_mnu.AppendItem(self.create_cmap_mnui) self.Bind(wx.EVT_MENU, self.controller.on_create_cmap, id=self.create_cmap_mnui.GetId()) self.plot_mnu.AppendMenu(wx.ID_ANY, "Colormaps", self.colormaps_mnu) gridtoggle_mnui = wx.MenuItem(self.plot_mnu, wx.ID_ANY, text="Toggle Grid", help="Turns grid on or off") self.plot_mnu.AppendItem(gridtoggle_mnui) self.Bind(wx.EVT_MENU, self.controller.on_toggle_grid, id=gridtoggle_mnui.GetId()) self.menubar.Append(self.plot_mnu, "&Plot") def init_specific_ops_menu(self): """Implements imgplot-specific operations for the Operations menu""" self.manip_mnu = wx.Menu() # Data manipulations self.flip_mnu = wx.Menu() # Flip data self.flipud_mnui = wx.MenuItem(self.flip_mnu, wx.ID_ANY, text="Vertically") self.Bind(wx.EVT_MENU, self.controller.on_flipud, id=self.flipud_mnui.GetId()) self.flip_mnu.AppendItem(self.flipud_mnui) self.fliplr_mnui = wx.MenuItem(self.flip_mnu, wx.ID_ANY, text="Horizontally") self.Bind(wx.EVT_MENU, self.controller.on_fliplr, id=self.fliplr_mnui.GetId()) self.flip_mnu.AppendItem(self.fliplr_mnui) self.manip_mnu.AppendMenu(wx.ID_ANY, 'Flip', self.flip_mnu) self.rot_mnu = wx.Menu() # Rotate data self.rot90ccw_mnui = wx.MenuItem(self.rot_mnu, wx.ID_ANY, text="90 Degrees CCW") self.Bind(wx.EVT_MENU, self.controller.on_rot90ccw, id=self.rot90ccw_mnui.GetId()) self.rot_mnu.AppendItem(self.rot90ccw_mnui) self.rot90cw_mnui = wx.MenuItem(self.rot_mnu, wx.ID_ANY, text="90 Degreees CW") self.Bind(wx.EVT_MENU, self.controller.on_rot90cw, id=self.rot90cw_mnui.GetId()) self.rot_mnu.AppendItem(self.rot90cw_mnui) self.rot180_mnui = wx.MenuItem(self.rot_mnu, wx.ID_ANY, text="180 Degrees") self.Bind(wx.EVT_MENU, self.controller.on_rot180, id=self.rot180_mnui.GetId()) self.rot_mnu.AppendItem(self.rot180_mnui) self.manip_mnu.AppendMenu(wx.ID_ANY, 'Rotate', self.rot_mnu) self.ops_mnu.AppendMenu(wx.ID_ANY, 'Flip/Rotate Data', self.manip_mnu) self.detrend_mnu = wx.Menu() # Detrending menu self.detrend_constantx_mnui = wx.MenuItem(self.detrend_mnu, wx.ID_ANY, text="Constant Horizontal") self.Bind(wx.EVT_MENU, self.controller.on_detrend_meanx, id=self.detrend_constantx_mnui.GetId()) self.detrend_mnu.AppendItem(self.detrend_constantx_mnui) self.detrend_constanty_mnui = wx.MenuItem(self.detrend_mnu, wx.ID_ANY, text="Constant Vertical") self.Bind(wx.EVT_MENU, self.controller.on_detrend_meany, id=self.detrend_constanty_mnui.GetId()) self.detrend_mnu.AppendItem(self.detrend_constanty_mnui) self.detrend_linearx_mnui = wx.MenuItem(self.detrend_mnu, wx.ID_ANY, text="Linear Horizontal") self.Bind(wx.EVT_MENU, self.controller.on_detrend_linearx, id=self.detrend_linearx_mnui.GetId()) self.detrend_mnu.AppendItem(self.detrend_linearx_mnui) self.detrend_lineary_mnui = wx.MenuItem(self.detrend_mnu, wx.ID_ANY, text="Linear Vertical") self.Bind(wx.EVT_MENU, self.controller.on_detrend_lineary, id=self.detrend_lineary_mnui.GetId()) self.detrend_mnu.AppendItem(self.detrend_lineary_mnui) self.ops_mnu.AppendMenu(wx.ID_ANY, 'Detrend Data', self.detrend_mnu) self.transpose_mnui = wx.MenuItem(self.ops_mnu, wx.ID_ANY, text="Transpose Data") self.Bind(wx.EVT_MENU, self.controller.on_transpose, id=self.transpose_mnui.GetId()) self.ops_mnu.AppendItem(self.transpose_mnui)