Changeset 2a62d5c in sasview for guiframe


Ignore:
Timestamp:
Apr 20, 2011 7:51:12 PM (14 years ago)
Author:
Gervaise Alina <gervyh@…>
Branches:
master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
2657df9
Parents:
d4d78c9
Message:

working on data_panel

Location:
guiframe
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • guiframe/data_panel.py

    r3b11d0d r2a62d5c  
    1111This module provides Graphic interface for the data_manager module. 
    1212""" 
     13import os 
    1314import wx 
    1415import sys 
     
    1920from sans.guiframe.dataFitting import Data2D 
    2021from sans.guiframe.panel_base import PanelBase 
     22from sans.guiframe.events import StatusEvent 
     23from DataLoader.loader import Loader 
     24 
     25try: 
     26    # Try to find a local config 
     27    import imp 
     28    path = os.getcwd() 
     29    if(os.path.isfile("%s/%s.py" % (path, 'local_config'))) or \ 
     30        (os.path.isfile("%s/%s.pyc" % (path, 'local_config'))): 
     31        fObj, path, descr = imp.find_module('local_config', [path]) 
     32        config = imp.load_module('local_config', fObj, path, descr)   
     33    else: 
     34        # Try simply importing local_config 
     35        import local_config as config 
     36except: 
     37    # Didn't find local config, load the default  
     38    import config 
     39  
     40extension_list = [] 
     41if config.APPLICATION_STATE_EXTENSION is not None: 
     42    extension_list.append(config.APPLICATION_STATE_EXTENSION) 
     43EXTENSIONS = config.PLUGIN_STATE_EXTENSIONS + extension_list    
    2144 
    2245PANEL_WIDTH = 180 
     
    7295        PanelBase.__init__(self) 
    7396        self.SetupScrolling() 
     97        self.loader = Loader()   
     98        #Default location 
     99        self._default_save_location = None   
    74100        self.all_data1d = True 
    75101        self.parent = parent 
     
    84110        self.do_layout() 
    85111        self.Bind(wx.EVT_SHOW, self.on_close_page) 
     112        self.enable_remove() 
     113        self.enable_import() 
    86114         
    87115    def do_layout(self): 
     
    108136        self.sizer5 = wx.BoxSizer(wx.VERTICAL) 
    109137        
    110         self.vbox.Add(self.sizer5, 0,wx.EXPAND|wx.ALL,10) 
    111         self.vbox.Add(self.sizer1, 0,wx.EXPAND|wx.ALL,0) 
    112         self.vbox.Add(self.sizer2, 0,wx.EXPAND|wx.ALL,10) 
    113         self.vbox.Add(self.sizer3, 0,wx.EXPAND|wx.ALL,10) 
    114         self.vbox.Add(self.sizer4, 0,wx.EXPAND|wx.ALL,10) 
     138        self.vbox.Add(self.sizer5, 0, wx.EXPAND|wx.ALL,1) 
     139        self.vbox.Add(self.sizer1, 0, wx.EXPAND|wx.ALL,0) 
     140        self.vbox.Add(self.sizer2, 0, wx.EXPAND|wx.ALL,1) 
     141        self.vbox.Add(self.sizer3, 0, wx.EXPAND|wx.ALL,1) 
     142        self.vbox.Add(self.sizer4, 0, wx.EXPAND|wx.ALL,5) 
    115143         
    116144        self.SetSizer(self.vbox) 
     
    235263        Layout widgets related to buttons 
    236264        """ 
     265        self.bt_add = wx.Button(self, wx.NewId(), "Load Data") 
     266        self.bt_add.SetToolTipString("Add data from the application") 
     267        wx.EVT_BUTTON(self, self.bt_add.GetId(), self._load_data) 
     268        self.bt_remove = wx.Button(self, wx.NewId(), "Remove Data") 
     269        self.bt_remove.SetToolTipString("Remove data from the application") 
     270        wx.EVT_BUTTON(self, self.bt_remove.GetId(), self.on_remove) 
    237271        self.bt_import = wx.Button(self, wx.NewId(), "Send To") 
    238272        self.bt_import.SetToolTipString("Send set of Data to active perspective") 
     
    250284        self.bt_freeze.SetToolTipString("To trigger freeze a theory") 
    251285        wx.EVT_BUTTON(self, self.bt_freeze.GetId(), self.on_freeze) 
    252          
    253         self.bt_remove = wx.Button(self, wx.NewId(), "Remove Data") 
    254         self.bt_remove.SetToolTipString("Remove data from the application") 
    255         wx.EVT_BUTTON(self, self.bt_remove.GetId(), self.on_remove) 
    256286         
    257287        self.tctrl_perspective = wx.StaticText(self, -1,  
     
    274304        ix = 0 
    275305        iy = 0 
     306        self.sizer3.Add(self.bt_add,( iy, ix),(1,1),   
     307                             wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 5) 
     308        ix += 1           
     309        self.sizer3.Add(self.bt_remove,( iy, ix),(1,1),   
     310                             wx.EXPAND|wx.ADJUST_MINSIZE, 0)   
     311        ix = 0    
     312        iy += 1 
    276313        self.sizer3.Add(self.bt_import,( iy, ix),(1,1),   
    277                              wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     314                             wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 5) 
    278315        ix += 1 
    279316        self.sizer3.Add(self.tctrl_perspective,(iy, ix),(1,1), 
     
    282319        iy += 1  
    283320        self.sizer3.Add(self.bt_append_plot,( iy, ix),(1,1),   
    284                              wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     321                             wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 5) 
    285322        ix += 1 
    286323        self.sizer3.Add(self.cb_plotpanel,(iy, ix),(1,1), 
     
    289326        iy += 1  
    290327        self.sizer3.Add(self.bt_plot,( iy, ix),(1,1),   
    291                              wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     328                             wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 5) 
    292329        ix = 0           
    293330        iy += 1  
    294331        self.sizer3.Add(self.bt_freeze,( iy, ix),(1,1),   
    295                              wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    296         ix = 0           
    297         iy += 1  
    298         self.sizer3.Add(self.bt_remove,( iy, ix),(1,1),   
    299                              wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    300          
    301          
    302       
     332                             wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 5) 
     333         
    303334    def layout_batch(self): 
    304335        """ 
    305336        """ 
    306         
     337        return 
    307338        self.rb_single_mode = wx.RadioButton(self, -1, 'Single Mode', 
    308339                                             style=wx.RB_GROUP) 
     
    386417        """ 
    387418        if not list: 
     419            self.enable_remove() 
    388420            return 
    389421        # uncheck previous items 
     
    439471                                                          process.__str__()) 
    440472            self.append_theory(state_id, theory_list) 
     473        self.enable_remove() 
    441474         
    442475    def _uncheck_all(self): 
     
    598631                del self.list_cb_theory[data_id] 
    599632               
     633    def load_error(self, error=None): 
     634        """ 
     635        Pop up an error message. 
     636         
     637        :param error: details error message to be displayed 
     638        """ 
     639        message = "The data file you selected could not be loaded.\n" 
     640        message += "Make sure the content of your file" 
     641        message += " is properly formatted.\n\n" 
     642         
     643        if error is not None: 
     644            message += "When contacting the DANSE team, mention the" 
     645            message += " following:\n%s" % str(error) 
     646        dial = wx.MessageDialog(self.parent, message, 'Error Loading File', 
     647                                wx.OK | wx.ICON_EXCLAMATION) 
     648        dial.ShowModal()   
     649         
     650    def _load_data(self, event): 
     651        """ 
     652        Load data 
     653        """ 
     654        path = None 
     655        if self._default_save_location == None: 
     656            self._default_save_location = os.getcwd() 
     657         
     658        cards = self.loader.get_wildcards() 
     659        wlist =  '|'.join(cards) 
     660        style = wx.OPEN|wx.FD_MULTIPLE 
     661        dlg = wx.FileDialog(self.parent,  
     662                            "Choose a file",  
     663                            self._default_save_location, "", 
     664                             wlist, 
     665                             style=style) 
     666        if dlg.ShowModal() == wx.ID_OK: 
     667            file_list = dlg.GetPaths() 
     668            if len(file_list) >= 0 and not(file_list[0]is None): 
     669                self._default_save_location = os.path.dirname(file_list[0]) 
     670                path = self._default_save_location 
     671        dlg.Destroy() 
     672         
     673        if path is None or not file_list or file_list[0] is None: 
     674            return 
     675        self.get_data(file_list) 
     676         
     677    def get_data(self, path, format=None): 
     678        """ 
     679        """ 
     680        message = "" 
     681        log_msg = '' 
     682        output = {} 
     683        error_message = "" 
     684        for p_file in path: 
     685            basename  = os.path.basename(p_file) 
     686            root, extension = os.path.splitext(basename) 
     687            if extension.lower() in EXTENSIONS: 
     688                log_msg = "Data Loader cannot " 
     689                log_msg += "load: %s\n" % str(p_file) 
     690                log_msg += "Try File opening ...." 
     691                logging.info(log_msg) 
     692                continue 
     693         
     694            try: 
     695                temp =  self.loader.load(p_file, format) 
     696                if temp.__class__.__name__ == "list": 
     697                    for item in temp: 
     698                        data = self.parent.create_gui_data(item, p_file) 
     699                        output[data.id] = data 
     700                else: 
     701                    data = self.parent.create_gui_data(temp, p_file) 
     702                    output[data.id] = data 
     703                message = "Loading Data..." + str(p_file) + "\n" 
     704                self.load_update(output=output, message=message) 
     705            except: 
     706                error_message = "Error while loading Data: %s\n" % str(p_file) 
     707                error_message += str(sys.exc_value) + "\n" 
     708                self.load_update(output=output, message=error_message) 
     709                 
     710        message = "Loading Data Complete! " 
     711        message += log_msg 
     712        self.load_complete(output=output, error_message=error_message, 
     713                       message=message, path=path) 
     714             
     715    def load_update(self, output=None, message=""): 
     716        """ 
     717        print update on the status bar 
     718        """ 
     719        if message != "" and self.parent is not None: 
     720            wx.PostEvent(self.parent, StatusEvent(status=message, 
     721                                                  type="progress", 
     722                                                   info="warning")) 
     723             
     724    def load_complete(self, output, message="", error_message="", path=None): 
     725        """ 
     726         post message to  status bar and return list of data 
     727        """ 
     728        if self.parent is not None: 
     729            wx.PostEvent(self.parent, StatusEvent(status=message, 
     730                                              info="warning", 
     731                                              type="stop")) 
     732        if error_message != "": 
     733            self.load_error(error_message) 
     734        if self.parent is not None: 
     735            self.parent.add_data(data_list=output) 
     736             
    600737    def on_remove(self, event): 
    601738        """ 
     
    635772        self.parent.remove_data(data_id=data_to_remove, 
    636773                                  theory_id=theory_to_remove) 
     774        self.enable_remove() 
    637775         
    638776    def on_import(self, event=None): 
     
    690828        #perspective_font.SetWeight(wx.BOLD) 
    691829        self.tctrl_perspective.SetClientSize((80,20))#SetFont(perspective_font) 
    692       
     830        self.enable_import() 
     831         
    693832    def set_panel_on_focus(self, name): 
    694833        """ 
     
    716855            panel = combo.GetClientData(selection) 
    717856            self.parent.on_set_plot_focus(panel)    
    718  
    719      
     857             
     858    def enable_remove(self): 
     859        """ 
     860        enable or disable remove button 
     861        """ 
     862        n_t = self.tree_ctrl.GetCount() 
     863        n_t_t = self.tree_ctrl_theory.GetCount() 
     864         
     865        if n_t + n_t_t <= 0: 
     866            self.bt_remove.Disable() 
     867        else: 
     868            self.bt_remove.Enable() 
     869             
     870    def enable_import(self): 
     871        """ 
     872        enable or disable send button 
     873        """ 
     874        if self.tctrl_perspective.GetLabelText() == "No Active Application": 
     875            self.bt_import.Disable() 
     876        else: 
     877            self.bt_import.Enable() 
    720878 
    721879 
  • guiframe/gui_manager.py

    r3554fd39 r2a62d5c  
    11131113            self._mgr.DetachPane(panel) 
    11141114            panel.Destroy() 
    1115             del self.panels[ID] 
    1116             del self.plot_panels[ID] 
     1115            if ID in self.panels.keys(): 
     1116                del self.panels[ID] 
     1117            if ID in self.plot_panels.keys(): 
     1118                del self.plot_panels[ID] 
    11171119            if self._data_panel is not None: 
    11181120                ind = self._data_panel.cb_plotpanel.FindString(str(caption)) 
    11191121                if ind != wx.NOT_FOUND: 
    1120                     self._data_panel.cb_plotpanel.Delete(ind) 
     1122                   self._data_panel.cb_plotpanel.Delete(ind) 
    11211123            self._mgr.Update() 
    11221124       
     
    20512053        self.panel_on_focus = panel   
    20522054        self.set_panel_on_focus(None) 
     2055        print " on_set_plot_focus" 
    20532056          
    20542057    def _onDrawIdle(self, *args, **kwargs): 
Note: See TracChangeset for help on using the changeset viewer.