def event_left_dclick(self, event): """Handle the left mouse double click. @param event: The wx event. @type event: wx event """ # The row and column. col = self.grid.GetGridCursorCol() row = self.grid.GetGridCursorRow() # File selection. if col == 0: # The dialog. dialog = RelaxFileDialog(parent=self, style=wx.FD_OPEN) # Show the dialog and catch if no file has been selected. if status.show_gui and dialog.ShowModal() != wx.ID_OK: # Don't do anything. return # The files. filename = dialog.get_file() # Set the file name. self.grid.SetCellValue(row, col, str(filename)) # Skip the event to allow for normal operation. event.Skip()
def load_delay(self, event, vc=False): """The variable delay list loading GUI element. @param event: The wx event. @type event: wx event """ # VD # VC time is not a number if vc: try: vc_factor = float(self.vc_time.GetValue()) except: error_message('VC time is not a number.') return # VD else: vc_factor = 1 # The dialog. dialog = RelaxFileDialog(parent=self, style=wx.FD_OPEN) # Show the dialog and catch if no file has been selected. if status.show_gui and dialog.ShowModal() != wx.ID_OK: # Don't do anything. return # The files. filename = dialog.get_file() # Open the file file = open(filename, 'r') # Read entries index = 0 for line in file: # Evaluate if line is a number try: t = float(line.replace('/n', '')) except: continue # Write delay to peak list grid self.grid.SetCellValue(index, 1, str(t*vc_factor)) # Next peak list index = index + 1 # Too many entries in VD list if index == self.num_rows: error_message('Too many entries in list.') return
def select_file(self, event=None): """Select a file. @keyword event: The wx event. @type event: wx event """ # The file selection object (initialised in this function and not __init__() so that the working directory is more logical). dialog = RelaxFileDialog(self.parent, field=self.field, message="File selection", defaultFile=self.default, wildcard=self.wildcard, style=self.style) # Show the dialog and catch if no file has been selected. if status.show_gui: dialog.select_event(event)
def load_peaklist(self, event): """Function to load peak lists to data grid. @param event: The wx event. @type event: wx event """ # The dialog. dialog = RelaxFileDialog(parent=self, message='Select the %s peak list file' % self.label, style=wx.FD_OPEN | wx.FD_MULTIPLE) # Show the dialog and catch if no file has been selected. if status.show_gui and dialog.ShowModal() != wx.ID_OK: # Don't do anything. return # The files. files = dialog.get_file() # Fill values in data grid index = 0 for i in range(self.num_rows): # Add entry if nothing is filled in already if str(self.grid.GetCellValue(i, 0)) == '': # Write peak file self.grid.SetCellValue(i, 0, str(files[index])) # Next file index = index + 1 # Stop if no files left if index == len(files): break # Error message if not all files were loaded if index < (len(files) - 1): error_message('Not all files could be loaded.')
def action_state_save_as(self, event=None): """Save the program state with file name selection. @keyword event: The wx event. @type event: wx event """ # The dialog. dialog = RelaxFileDialog(parent=self, message='Select the relax save state file', defaultFile='state.bz2', wildcard='relax save file (*.bz2)|*.bz2', style=wx.FD_SAVE) # Show the dialog and catch if no file has been selected. if status.show_gui and dialog.ShowModal() != wx.ID_OK: # Don't do anything. return # The file. file_name = dialog.get_file() # Set the file name. self.save_file = file_name # Save. self.state_save()
def load_peaklist(self, event): """Function to load peak lists to data grid. @param event: The wx event. @type event: wx event """ # The dialog. dialog = RelaxFileDialog(parent=self, message='Select the %s peak list file'%self.label, style=wx.FD_OPEN|wx.FD_MULTIPLE) # Show the dialog and catch if no file has been selected. if status.show_gui and dialog.ShowModal() != wx.ID_OK: # Don't do anything. return # The files. files = dialog.get_file() # Fill values in data grid index = 0 for i in range(self.num_rows): # Add entry if nothing is filled in already if str(self.grid.GetCellValue(i, 0)) == '': # Write peak file self.grid.SetCellValue(i, 0, str(files[index])) # Next file index = index + 1 # Stop if no files left if index == len(files): break # Error message if not all files were loaded if index < (len(files)-1): error_message('Not all files could be loaded.')
def state_load(self, event=None, file_name=None): """Load the program state. @keyword event: The wx event. @type event: wx event @keyword file_name: The name of the file to load (for dialogless operation). @type file_name: str """ # Execution lock. if status.exec_lock.locked(): return # Warning. if not self.analysis.init_state or not ds.is_empty(): # The message. msg = "Loading a saved relax state file will cause all unsaved data to be lost. Are you sure you would to open a save file?" # The dialog. if status.show_gui and Question(msg, default=True, size=(400, 150)).ShowModal() == wx.ID_NO: return # Open the dialog. if not file_name: dialog = RelaxFileDialog(parent=self, message='Select the relax save state file', defaultFile='state.bz2', wildcard='relax save files (*.bz2;*.gz)|*.bz2;*.gz|All files (*)|*', style=wx.FD_OPEN) # Show the dialog and catch if no file has been selected. if status.show_gui and dialog.ShowModal() != wx.ID_OK: # Don't do anything. return # The file. file_name = gui_to_str(dialog.get_file()) # Yield to allow the cursor to be changed. wx.Yield() # Change the cursor to waiting, and freeze the GUI. wx.BeginBusyCursor() self.Freeze() # Make sure the GUI returns to normal if a failure occurs. try: # Delete the current tabs. self.analysis.delete_all() # Reset the relax data store. reset() # The new save file name. self.save_file = file_name # Load the relax state. if protected_exec(state.load_state, file_name, verbosity=0): # Update the core of the GUI to match the new data store. self.sync_ds(upload=False) # File loading failure. else: # Reset relax to clear any partially loaded data. reset() # Reinitialise the GUI data store structure. self.init_data() # Reset the cursor, and thaw the GUI. finally: self.Thaw() # Turn off the busy cursor. if wx.IsBusy(): wx.EndBusyCursor()
def __init__(self, name=None, default=None, parent=None, sizer=None, desc=None, message='File selection', wildcard=wx.FileSelectorDefaultWildcardStr, style=wx.FD_DEFAULT_STYLE, tooltip=None, divider=None, padding=0, spacer=None, height_element=27, preview=True, read_only=False, can_be_none=False): """Build the file selection element. @keyword name: The name of the element to use in titles, etc. @type name: str @keyword default: The default value of the element. @type default: str @keyword parent: The wizard GUI element. @type parent: wx.Panel instance @keyword sizer: The sizer to put the input field into. @type sizer: wx.Sizer instance @keyword desc: The text description. @type desc: str @keyword message: The file selector prompt string. @type message: String @keyword wildcard: The file wildcard pattern. For example for opening PDB files, this could be "PDB files (*.pdb)|*.pdb;*.PDB". @type wildcard: String @keyword style: The dialog style. To open a single file, set to wx.FD_OPEN. To open multiple files, set to wx.FD_OPEN|wx.FD_MULTIPLE. To save a single file, set to wx.FD_SAVE. To save multiple files, set to wx.FD_SAVE|wx.FD_MULTIPLE. @type style: long @keyword tooltip: The tooltip which appears on hovering over all the GUI elements. @type tooltip: str @keyword divider: The position of the divider. @type divider: int @keyword padding: Spacing to the left and right of the widgets. @type padding: int @keyword spacer: The amount of spacing to add below the field in pixels. If None, a stretchable spacer will be used. @type spacer: None or int @keyword height_element: The height in pixels of the GUI element. @type height_element: int @keyword preview: A flag which if true will allow the file to be previewed. @type preview: bool @keyword read_only: A flag which if True means that the text of the element cannot be edited. @type read_only: bool @keyword can_be_none: A flag which specifies if the element is allowed to have the None value. @type can_be_none: bool """ # Store the args. self.name = name self.parent = parent self.can_be_none = can_be_none # Argument translation. if default == None: default = wx.EmptyString # Init. sub_sizer = wx.BoxSizer(wx.HORIZONTAL) # Left padding. sub_sizer.AddSpacer(padding) # The description. text = wx.StaticText(parent, -1, desc, style=wx.ALIGN_LEFT) text.SetFont(font.normal) sub_sizer.Add(text, 0, wx.LEFT | wx.ALIGN_CENTER_VERTICAL, 0) # The divider. if not divider: raise RelaxError("The divider position has not been supplied.") # Spacing. x, y = text.GetSize() sub_sizer.AddSpacer((divider - x, 0)) # The input field. self._field = wx.TextCtrl(parent, -1, default) self._field.SetMinSize((-1, height_element)) self._field.SetFont(font.normal) sub_sizer.Add(self._field, 1, wx.ADJUST_MINSIZE | wx.ALIGN_CENTER_VERTICAL, 0) # The file selection object. obj = RelaxFileDialog(parent, field=self._field, message=message, defaultFile=default, wildcard=wildcard, style=style) # A little spacing. sub_sizer.AddSpacer(5) # The edit button. button = wx.BitmapButton( parent, -1, wx.Bitmap(fetch_icon('oxygen.actions.document-open', "16x16"), wx.BITMAP_TYPE_ANY)) button.SetMinSize((height_element, height_element)) button.SetToolTipString("Choose the file(s).") sub_sizer.Add(button, 0, wx.ADJUST_MINSIZE | wx.ALIGN_CENTER_VERTICAL, 0) parent.Bind(wx.EVT_BUTTON, self.open_dialog, button) # Right padding. sub_sizer.AddSpacer(padding) # Add to the main sizer (followed by stretchable spacing). sizer.Add(sub_sizer, 1, wx.EXPAND | wx.ALL, 0) # Spacing below the widget. if spacer == None: sizer.AddStretchSpacer() else: sizer.AddSpacer(spacer) # Tooltip. if tooltip: text.SetToolTipString(tooltip) self._field.SetToolTipString(tooltip)