Author: bugman Date: Wed Jan 27 15:50:12 2010 New Revision: 10439 URL: http://svn.gna.org/viewcvs/relax?rev=10439&view=rev Log: Added the initial code for data synchronisation between the GUI and the relax data store. The state_load() and state_save() methods now call the new sync_ds() method of the main GUI class, as well as sync_ds() methods for each analysis type. The analysis specific synchronisation is performed as follows. There will be a list in the main class called self.analysis_frames. This list will contain all the analysis frame objects open in the GUI. Each analysis type is expected to be a class instance, all located in gui_bieri/auto_analyses/. As these frames are initialised, they are appended to the main GUI self.analysis_frames list. Initialisation also creates a container in ds.relax_gui.analyses and this is stored in the analysis class namespace as self.data. Therefore if the model-free analysis is the 7th analysis opened, from within the main relax GUI class the frame can be reached as: self.analysis_frames[6] Its method sync_ds() is reachable as: self.analysis_frames[6].sync_ds() The relax data store element for that analysis is reachable as: ds.relax_gui.analyses[6] or as an alias as: self.analysis_frames[6].data Within the frame instance namespace (in the class), the main GUI object is reachable as: self.gui This object oriented design will allow easy integration between the main window and the analysis frames, however they may be laid out, and easy integration between analyses and the relax data store. Modified: branches/bieri_gui/gui_bieri/relax_gui.py Modified: branches/bieri_gui/gui_bieri/relax_gui.py URL: http://svn.gna.org/viewcvs/relax/branches/bieri_gui/gui_bieri/relax_gui.py?rev=10439&r1=10438&r2=10439&view=diff ============================================================================== --- branches/bieri_gui/gui_bieri/relax_gui.py (original) +++ branches/bieri_gui/gui_bieri/relax_gui.py Wed Jan 27 15:50:12 2010 @@ -2564,13 +2564,30 @@ # Open the dialog. filename = openfile(msg='Select file to open', filetype='state.bz2', default='relax save files (*.bz2)|*.bz2|all files (*.*)|*.*') - # A file has been selected. - if filename: - # Reset the relax data store. - reset() - - # Load the relax state. - state.load_state(filename) + # No file has been selected. + if not filename: + # Skip the event. + event.Skip() + + # Don't do anything. + return + + # Reset the relax data store. + reset() + + # Load the relax state. + state.load_state(filename) + + # Update the core of the GUI to match the new data store. + self.sync_ds(upload=False) + + # Build and upload the data to the analysis frames. + for i in range(len(ds.relax_gui.analyses)): + # Build the frame. + analysis = self.create_frame(i) + + # Execute the analysis frame specific update methods. + analysis.sync_ds(upload=False) # Skip the event. event.Skip() @@ -2586,8 +2603,28 @@ # Open the dialog. filename = savefile(msg='Select file to save', filetype='state.bz2', default='relax save files (*.bz2)|*.bz2|all files (*.*)|*.*') + # Update the data store to match the GUI. + self.sync_ds(upload=True) + + # Analyses updates of the new data store. + for i in range(len(self.analysis_frames)): + # Execute the analysis frame specific update methods. + self.analysis_frames[i].sync_ds(upload=True) + # Save the relax state. state.save_state(filename, force=True) # Skip the event. event.Skip() + + + def sync_ds(self, upload=False): + """Synchronise the GUI and the relax data store, both ways. + + This method allows the GUI information to be uploaded into the relax data store, or for the information in the relax data store to be downloaded by the GUI. + + @keyword upload: A flag which if True will cause the GUI to send data to the relax data store. If False, data will be downloaded from the relax data store to update the GUI. + @type upload: bool + """ + + # Dummy function (for the time being).