def __init__(self, view, data_file): self.view = view self.model = PreviewWindowModel(self, data_file) module_logger.info("Successfully initialized PreviewWindowController.")
class PreviewWindowController(object): """Controller for the PreviewWindow""" def __init__(self, view, data_file): self.view = view self.model = PreviewWindowModel(self, data_file) module_logger.info("Successfully initialized PreviewWindowController.") @property def data(self): return self.model.data @data.setter def data(self, new_data): self.model.data = new_data def load_data(self, slice_idx=None): """Loads the data from the instance's data file, by default returning the entire data set (slice_idx is None). If slice_idx is a numpy.s_ slice operation, attempts to return a hyperslab (HDF5 feature - returns a slice of the data instead without loading the complete data).""" try: self.model.load_data(slice_idx) except MemoryError as err: # out of memory module_logger.exception("Insufficient memory - {0}".format(err)) raise MemoryError("Insufficient memory to load data") def slice_data(self, slice_idx): """Sets the 3D data to a viewable 2D slice""" self.model.slice_data(slice_idx) def populate_spreadsheet(self): """Fills the PreviewWindow's spreadsheet with the current data set.""" if self.model.data is not None: try: self.view.spreadsheet.ClearGrid() self.view.spreadsheet.SetNumberRows(0) self.view.spreadsheet.SetNumberCols(0) rownum = 0 if self.model.data.ndim == 2: num_rows = self.model.data.shape[0] for row in range(num_rows): self.view.spreadsheet.AppendRows(1) numcols = self.model.data[row].size if self.view.spreadsheet.GetNumberCols() < numcols: self.view.spreadsheet.SetNumberCols(numcols) colnum = 0 for cell in self.model.data[row]: self.view.spreadsheet.SetCellValue(rownum, colnum, str(cell)) colnum += 1 rownum += 1 elif self.model.data.ndim == 1: self.view.spreadsheet.SetNumberCols(1) for el in self.model.data: self.view.spreadsheet.AppendRows(1) self.view.spreadsheet.SetCellValue(rownum, 0, str(el)) rownum += 1 except MemoryError: # File too large to load module_logger.error("Unable to preview data, file too large to fit in memory.") err_msg = "The file is too large to load." err_dlg = wx.MessageDialog(self.view, message=err_msg, caption="Unable To Preview Data", style=wx.ICON_ERROR) err_dlg.ShowModal() err_dlg.Destroy() def on_tb_click(self, evt): """Handles button click event from toolbar""" button = evt.GetId() if button == wx.ID_SAVE: self.export_text() elif button == 20: # Refresh data wx.BeginBusyCursor() self.populate_spreadsheet() wx.EndBusyCursor() def export_text(self): """Exports current spreadsheet to CSV file""" file_dlg = wx.FileDialog(parent=self.view, message="Please specify an output file", style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT) if file_dlg.ShowModal() == wx.ID_OK: wx.BeginBusyCursor() self.view.spreadsheet.WriteCSV(file_dlg.GetPath()) wx.EndBusyCursor()