Ignore:
Timestamp:
Apr 6, 2009 2:56:35 PM (15 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:
40f9745
Parents:
ddfcd90
Message:

working on saving page status

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sansview/perspectives/fitting/basepage.py

    r87a43fe rcfc0913  
    66from sans.guiframe.utils import format_number 
    77from sans.guicomm.events import StatusEvent    
    8  
     8import pagestate 
     9from pagestate import PageState 
     10(PageInfoEvent, EVT_PAGE_INFO)   = wx.lib.newevent.NewEvent() 
    911_BOX_WIDTH = 80 
    1012 
     
    1315        This class provide general structure of  fitpanel page 
    1416    """ 
    15     ## Internal name for the AUI manager 
    16     window_name = "Fit page" 
    17     ## Title to appear on top of the window 
    18     window_caption = "Fit Page" 
    19      
    20     name="" 
    21      
    22     def __init__(self,parent, pageinfo, name): 
     17     
     18    def __init__(self,parent, page_info): 
    2319        wx.ScrolledWindow.__init__(self, parent) 
    2420        ## store name 
    25         self.name = name 
    26         ## store info of panel 
    27         self.page_info= pageinfo 
    28         self.page_info.page_name = name 
     21        self.name = page_info.name 
     22        ##window_name 
     23        self.window_name = page_info.window_name 
     24        ##window_caption 
     25        self.window_caption = page_info.window_caption 
    2926        ## parent of the page 
    3027        self.parent = parent 
    3128        ## manager is the fitting plugin 
    32         self.manager=None 
     29        self.manager= page_info.manager 
    3330        ## owner of the page (fitting plugin) 
    34         self.event_owner= None 
    35         ## create the basic structure of the panel with empty sizer 
    36         self.define_page_structure() 
     31        self.event_owner= page_info.event_owner 
     32         ## current model 
     33        self.model = page_info.model 
     34        ## data 
     35        self.data = page_info.data 
    3736        ## dictionary containing list of models 
    38         self.model_list_box={} 
     37        self.model_list_box = page_info.model_list_box 
    3938        ## Data member to store the dispersion object created 
    4039        self._disp_obj_dict = {} 
     40        ## selected parameters to apply dispersion 
    4141        self.disp_cb_dict ={} 
    4242        ##list of model parameters. each item must have same length 
     
    5252        ##list of dispersion parameters 
    5353        self.disp_list=[] 
    54          
     54        if self.model !=None: 
     55            self.disp_list= self.model.getDispParamList() 
    5556        ##enable model 2D draw 
    5657        self.enable2D= False 
    5758        ## check that the fit range is correct to plot the model again 
    5859        self.fitrange= True 
    59         ## current model 
    60         self.model= None 
    61         ## data 
    62         self.data=None 
    6360        ## Q range 
    6461        self.qmin_x= 0.001 
    6562        self.qmax_x= 0.1 
    6663        self.num_points= 100 
    67         ## changing initial values given page_info value 
    68         if self.page_info !=None and len(self.page_info.model_list_box) >0: 
    69             self.model_list_box = self.page_info.model_list_box 
    70             ## current model 
    71             self.model=self.page_info.model 
    72             self.data = self.page_info.data 
    73             self.event_owner = self.page_info.event_owner 
    74             self.manager=self.page_info.manager 
    75              
    76             if self.model !=None: 
    77                 self.disp_list= self.model.getDispParamList() 
     64        ## Create memento to save the current state 
     65         
     66        self.state= PageState(parent= self.parent,model=self.model, data=self.data) 
     67        ## create the basic structure of the panel with empty sizer 
     68        self.define_page_structure() 
    7869        ## drawing Initial dispersion parameters sizer  
    7970        self.set_dispers_sizer() 
    8071        self._fill_save_sizer() 
     72         
    8173        ## layout 
    8274        self.set_layout() 
     
    134126        """ 
    135127        self.event_owner = owner     
    136         self.page_info.event_owner = owner 
     128        self.state.event_owner = owner 
    137129   
    138130    def set_manager(self, manager): 
     
    142134        """ 
    143135        self.manager = manager   
    144         self.page_info.manager = manager 
     136        self.state.manager = manager 
    145137         
    146138    def populate_box(self, dict): 
     
    150142        """ 
    151143        self.model_list_box = dict 
    152         if self.page_info!=None: 
    153             self.page_info.model_list_box = self.model_list_box 
     144        self.state.model_list_box = self.model_list_box 
    154145             
    155146     
     
    165156        self.disable_disp = wx.RadioButton(self, -1, 'No', (10, 10), style=wx.RB_GROUP) 
    166157        self.enable_disp = wx.RadioButton(self, -1, 'Yes', (10, 30)) 
     158        ## saving the state of enable dispersity button 
     159        self.state.enable_disp= self.enable_disp.GetValue() 
     160         
    167161        self.Bind(wx.EVT_RADIOBUTTON, self._set_dipers_Param, id=self.disable_disp.GetId()) 
    168162        self.Bind(wx.EVT_RADIOBUTTON, self._set_dipers_Param, id=self.enable_disp.GetId()) 
     
    278272            save history of the data and model 
    279273        """ 
    280         self.page_info.model= self.model 
    281         self.page_info.data = self.data 
     274        self.state.model= self.model 
     275        self.state.data = self.data 
    282276        import os 
    283277                  
     
    363357            after fitting 
    364358        """ 
     359         
    365360        if hasattr(self,"text2_3"): 
    366361            self.text2_3.Hide() 
     
    420415        except: 
    421416            raise  
    422       
    423      
     417     
     418     
     419    def createMemento(self): 
     420        """ 
     421            return the current state of the page 
     422        """ 
     423        return self.state.clone() 
     424     
     425     
     426    def save_current_state(self): 
     427        """ 
     428            Store current state 
     429        """ 
     430        self.state.model = self.model.clone() 
     431        self.state.save_data(self.data) 
     432     
     433        if hasattr(self,"cb1"): 
     434            self.state.cb1= self.cb1.GetValue() 
     435             
     436        if hasattr(self,"enable_disp"): 
     437            self.state.enable_disp= self.enable_disp.GetValue() 
     438             
     439        if hasattr(self,"enable_smearer"): 
     440            self.state.enable_smearer = self.enable_smearer.GetValue()    
     441       
     442        ## save checkbutton state and txtcrtl values 
     443        self.state.parameters=[] 
     444        self.state.fittable_param=[] 
     445        self.state.fixed_param=[] 
     446        self._copy_parameters_state(self.parameters, self.state.parameters) 
     447        self._copy_parameters_state(self.fittable_param, self.state.fittable_param) 
     448        self._copy_parameters_state(self.fixed_param, self.state.fixed_param) 
     449         
     450        ## post state to fit panel 
     451        event = PageInfoEvent(page = self) 
     452        wx.PostEvent(self.parent, event) 
     453     
     454    def reset_page(self, state): 
     455        """ 
     456            Use page_info and change the state of existing button 
     457        """ 
     458        self.state = state.clone() 
     459        self.model= self.state.model 
     460        self.data = self.state.data 
     461        self._set_model_sizer_selection( self.model ) 
     462        self.set_model_param_sizer(self.model) 
     463        self._reset_plotting_range() 
     464         
     465        self.enable_disp.SetValue(self.state.enable_disp) 
     466        self._set_dipers_Param(event=None) 
     467         
     468        if hasattr(self,"enable_smearer"): 
     469            self.enable_smearer= self.state.enable_smearer 
     470        if hasattr(self, "cb1"):     
     471            self.cb1.SetValue(self.state.cb1) 
     472        self._reset_parameters_state(self.parameters,state.parameters) 
     473        self._reset_parameters_state(self.fittable_param,state.fittable_param) 
     474        self._reset_parameters_state(self.fixed_param,state.fixed_param) 
     475        self._draw_model() 
     476         
     477         
    424478    def _selectDlg(self): 
    425479        """ 
     
    433487        dlg.Destroy() 
    434488        return path 
    435            
    436      
     489     
     490     
     491    def _reset_plotting_range(self): 
     492        """ 
     493            Reset the plotting range to a given state 
     494        """ 
     495         
     496        self.qmin.SetValue(format_number(self.state.qmin)) 
     497        self.qmax.SetValue(format_number(self.state.qmax))  
     498        if self.state.npts!=None: 
     499            self.npts= self.state.npts 
     500             
     501        self.qmin_x = float(self.qmin.GetValue()) 
     502        self.qmax_x = float(self.qmax.GetValue()) 
     503         
     504         
     505    def _save_plotting_range(self ): 
     506        """ 
     507            save the state of plotting range  
     508        """ 
     509        self.state.qmin = self.qmin.GetValue()    
     510        self.state.qmax = self.qmax.GetValue()    
     511        if self.npts!=None: 
     512            self.state.npts= self.npts.GetValue() 
     513             
     514             
    437515    def _onparamEnter_helper(self): 
    438516        """ 
     
    442520        """ 
    443521        if self.model !=None: 
    444              
     522            self.save_current_state() 
    445523            # Flag to register when a parameter has changed. 
    446524            is_modified = False 
     
    449527            is_modified =self._check_value_enter( self.parameters ,is_modified)         
    450528            
     529             
    451530            self.Layout() 
    452531            # Here we should check whether the boundaries have been modified. 
     
    473552                 
    474553                 
     554    def _reset_parameters_state(self, listtorestore,statelist): 
     555        """ 
     556            Reset the parameters at the given state 
     557        """ 
     558        if len(self.state.parameters)!=  len(listtorestore) : 
     559            return 
     560        for j in range(len(listtorestore)): 
     561            item_page = listtorestore[j] 
     562            item_page_info = statelist[j] 
     563            ##change the state of the check box for simple parameters 
     564            if item_page[0]!=None: 
     565                item_page[0].SetValue(item_page_info[0]) 
     566     
     567            if item_page[2]!=None: 
     568                item_page[2].SetValue(item_page_info[2]) 
     569                 
     570            if item_page[3]!=None: 
     571                ## show or hide text +/- 
     572                if item_page_info[2]: 
     573                    item_page[3].Show(True) 
     574                else: 
     575                    item_page[3].Hide() 
     576            if item_page[4]!=None: 
     577                ## show of hide the text crtl for fitting error 
     578                if item_page_info[4][0]: 
     579                    item_page[4].Show(True) 
     580                    item_page[4].SetValue(item_page_info[4][1]) 
     581                else: 
     582                    item_page[3].Hide() 
     583            if item_page[5]!=None: 
     584                ## show of hide the text crtl for fitting error 
     585                if item_page_info[5][0]: 
     586                    item_page[5].Show(True) 
     587                    item_page[5].SetValue(item_page_info[4][1]) 
     588                else: 
     589                    item_page[5].Hide() 
     590                     
     591            if item_page[6]!=None: 
     592                ## show of hide the text crtl for fitting error 
     593                if item_page_info[6][0]: 
     594                    item_page[6].Show(True) 
     595                    item_page[6].SetValue(item_page_info[6][1]) 
     596                else: 
     597                    item_page[6].Hide() 
     598                             
     599    def _copy_parameters_state(self, listtocopy, statelist): 
     600        """ 
     601            copy the state of button  
     602            @param listtocopy: the list of check button to copy 
     603            @param statelist: list of state object to store the current state 
     604        """ 
     605        if len(listtocopy)==0: 
     606            return 
     607         
     608        for item in listtocopy: 
     609            checkbox_state = None 
     610            if item[0]!= None: 
     611                checkbox_state= item[0].GetValue() 
     612            parameter_name = item[1] 
     613            parameter_value = None 
     614            if item[2]!=None: 
     615                parameter_value = item[2].GetValue() 
     616            static_text = None 
     617            if item[3]!=None: 
     618                static_text = item[3].IsShown() 
     619            error_value = None 
     620            error_state = None 
     621            if item[4]!= None: 
     622                error_value = item[4].GetValue() 
     623                error_state = item[4].IsShown() 
     624                 
     625            min_value = None 
     626            min_state = None 
     627            if item[5]!= None: 
     628                min_value = item[5].GetValue() 
     629                min_state = item[5].IsShown() 
     630                 
     631            max_value = None 
     632            max_state = None 
     633            if item[6]!= None: 
     634                max_value = item[6].GetValue() 
     635                max_state = item[6].IsShown() 
     636                
     637            statelist.append([checkbox_state, parameter_name, parameter_value, 
     638                              static_text ,[error_state,error_value], 
     639                                [min_state,min_value],[max_state , max_value],None]) 
     640            
     641         
     642    
    475643    def _set_model_sizer_selection(self, model): 
    476644        """ 
     
    565733                     
    566734         
    567          
    568735    def _draw_model(self): 
    569736        """ 
     
    606773                            id= self.plugin_rbutton.GetId() )   
    607774        wx.EVT_CHECKBOX(self, self.multip_cb.GetId() , self._show_combox )               
    608         ## store state 
    609         self.page_info.save_radiobox_state( self.shape_rbutton ) 
    610         self.page_info.save_radiobox_state( self.shape_indep_rbutton ) 
    611         self.page_info.save_radiobox_state( self.struct_rbutton ) 
    612         self.page_info.save_radiobox_state( self.plugin_rbutton ) 
    613         
    614          
     775       
    615776        sizer_radiobutton = wx.GridSizer(3, 3,5, 5) 
    616777        sizer_radiobutton.Add(self.shape_rbutton) 
     
    674835            Show combox box associate with type of model selected 
    675836        """ 
    676         self.page_info.save_radiobox_state( self.shape_rbutton ) 
    677         self.page_info.save_radiobox_state( self.shape_indep_rbutton ) 
    678         self.page_info.save_radiobox_state( self.struct_rbutton ) 
    679         self.page_info.save_radiobox_state( self.plugin_rbutton ) 
    680          
    681837        ## Don't want to populate combo box again if the event comes from check box 
    682838        if self.shape_rbutton.GetValue()and\ 
     
    758914         
    759915        self.set_scroll() 
    760          
    761          
    762916    
    763917             
     
    781935        except: 
    782936            pass 
    783         #wx.EVT_COMBOBOX(combobox,-1, self._on_select_model)  
     937     
    784938        return 0 
    785939    
     
    811965        else: 
    812966            self.model= form_factor() 
    813         self.page_info.model= self.model 
     967        
     968        ## post state to fit panel 
     969        self.save_current_state() 
    814970        
    815971         
     
    842998                    if format_number(item[5].GetValue())!="NaN": 
    843999                        param_min = float(item[5].GetValue()) 
    844                     self.model.details[name][1]=param_min 
     1000                     
    8451001                ## check maximum value 
    8461002                if item[6]!= None: 
     
    8541010                        msg+= "name %s of model %s "%(name, self.model.name) 
    8551011                        wx.PostEvent(self.parent.parent, StatusEvent(status = msg )) 
    856                      
    857                 self.model.details[name][1:]= param_min,param_max 
     1012                if name in self.model.details.keys():    
     1013                    self.model.details[name][1:]= param_min,param_max 
    8581014                 
    8591015                ## hide statictext +/-     
     
    8781034        return is_modified  
    8791035         
    880          
    8811036  
    8821037    def _set_dipers_Param(self, event): 
     
    8891044            return  
    8901045        else: 
     1046            
    8911047            if self.enable_disp.GetValue(): 
    8921048                self.model_disp.Show(True) 
     
    9031059                self.sizer4_4.Clear(True) 
    9041060                self._reset_dispersity() 
     1061                 
     1062           
     1063            ## post state to fit panel 
     1064            self.save_current_state() 
    9051065             
    9061066            self.sizer4.Layout() 
     
    9081068            self.SetScrollbars(20,20,200,100) 
    9091069             
    910     
    9111070         
    9121071    def _layout_sizer_noDipers(self): 
     
    9291088        return  
    9301089     
    931   
    9321090             
    9331091    def _reset_dispersity(self): 
     
    9661124        if  name=="ArrayDispersion": 
    9671125            self._set_sizer_arraydispersion() 
    968              
    969              
     1126         
    9701127             
    9711128     
     
    10381195           boxsizer1.Add((10,10)) 
    10391196        boxsizer1.Add(sizer_horizontal) 
    1040         
     1197        ## save state 
     1198        self.save_current_state() 
    10411199        #---------------------------------------------------------------- 
    10421200        self.sizer5.Add(boxsizer1,0, wx.EXPAND | wx.ALL, 10) 
     
    10441202        self.Layout() 
    10451203        self.SetScrollbars(20,20,200,100) 
     1204     
    10461205     
    10471206    def _fill_save_sizer(self): 
Note: See TracChangeset for help on using the changeset viewer.