Changeset c80c06f in sasview


Ignore:
Timestamp:
Feb 1, 2009 10:40:18 PM (16 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:
1374fbe4
Parents:
68dada4
Message:

refactore panels

Location:
sansview/perspectives/fitting
Files:
2 added
3 edited

Legend:

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

    r68dada4 rc80c06f  
    445445                            wx.PostEvent(self.parent, StatusEvent(status="Fitting error: %s" % sys.exc_value)) 
    446446                            return 
     447                    # need to check this print "new model " 
    447448                    new_model=Model(model) 
    448449                    param=value.get_model_param() 
     
    458459                            #new_model.set( exec "%s"%(param_nam) = param_value) 
    459460                            new_model.parameterset[ param_name].set( param_value ) 
    460                              
     461                           
    461462                    self.fitter.set_model(new_model, self.id, pars)  
    462463                    self.fitter.set_data(metadata,self.id,qmin,qmax,ymin,ymax) 
  • sansview/perspectives/fitting/new_fitpage1D.py

    r68dada4 rc80c06f  
    55import copy 
    66import sans.models.dispersion_models  
    7 from sans.guicomm.events import StatusEvent    
     7from sans.guicomm.events import StatusEvent  
     8from modelpage import ModelPage   
     9from modelpage import format_number 
    810(ModelEventbox, EVT_MODEL_BOX) = wx.lib.newevent.NewEvent() 
    911_BOX_WIDTH = 80 
    1012 
    11 def format_number(value, high=False): 
    12     """ 
    13         Return a float in a standardized, human-readable formatted string  
    14     """ 
    15     try:  
    16         value = float(value) 
    17     except: 
    18         print "returning 0" 
    19         return "0" 
    20      
    21     if high: 
    22         return "%-6.4g" % value 
    23     else: 
    24         return "%-5.3g" % value 
    2513 
    26 from modelpage import format_number 
    27 from modelpage import ModelPage 
     14 
    2815class FitPage1D(ModelPage): 
    2916    """ 
     
    5239        #panel interface 
    5340        self.vbox  = wx.BoxSizer(wx.VERTICAL) 
     41        self.sizer10 = wx.GridBagSizer(5,5) 
    5442        self.sizer9 = wx.GridBagSizer(5,5) 
    5543        self.sizer8 = wx.GridBagSizer(5,5) 
     
    7664        self.vbox.Add(wx.StaticLine(self, -1), 0, wx.EXPAND, 0) 
    7765        self.vbox.Add(self.sizer6) 
     66        #combox box for type of dispersion 
     67        self.vbox.Add(self.sizer7) 
    7868        #dispersion parameters layer 
    79         self.vbox.Add(wx.StaticLine(self, -1), 0, wx.EXPAND, 0) 
    80         self.vbox.Add(self.sizer7) 
     69        self.vbox.Add(self.sizer8) 
    8170        #fit info layer 
    8271        self.vbox.Add(wx.StaticLine(self, -1), 0, wx.EXPAND, 0) 
    83         self.vbox.Add(self.sizer8) 
     72        self.vbox.Add(self.sizer9) 
    8473        #close layer 
    8574        self.vbox.Add(wx.StaticLine(self, -1), 0, wx.EXPAND, 0) 
    86         self.vbox.Add(self.sizer9) 
     75        self.vbox.Add(self.sizer10) 
    8776         
    8877        #---------sizer 1 draw-------------------------------- 
     
    117106        #---------sizer 2 draw-------------------------------- 
    118107        ix = 0 
    119         iy = 0 
     108        iy = 1 
    120109        #set maximum range for x in linear scale 
    121110        self.text4_3 = wx.StaticText(self, -1, 'Maximum Data Range(Linear)', style=wx.ALIGN_LEFT) 
     
    136125        #----sizer 3 draw-------------------------------- 
    137126        ix = 0 
    138         iy = 0 
     127        iy = 1 
    139128        self.sizer3.Add(wx.StaticText(self,-1,'Instrument Smearing'),(iy,ix),(1,1)\ 
    140129                  , wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     
    159148        self.disable_disp = wx.RadioButton(self, -1, 'No', (10, 10), style=wx.RB_GROUP) 
    160149        self.enable_disp = wx.RadioButton(self, -1, 'Yes', (10, 30)) 
    161         #self.Bind(wx.EVT_RADIOBUTTON, self.Set_DipersParam, id=self.disable_disp.GetId()) 
    162         #self.Bind(wx.EVT_RADIOBUTTON, self.Set_DipersParam, id=self.enable_disp.GetId()) 
     150        self.Bind(wx.EVT_RADIOBUTTON, self.Set_DipersParam, id=self.disable_disp.GetId()) 
     151        self.Bind(wx.EVT_RADIOBUTTON, self.Set_DipersParam, id=self.enable_disp.GetId()) 
    163152        ix= 0 
    164153        iy=1 
     
    169158        ix += 1 
    170159        self.sizer6.Add(self.disable_disp ,(iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    171          
    172          
    173         #---------sizer 8 draw---------------------------------------- 
     160        ix =0 
     161        iy+=1 
     162        self.sizer6.Add((20,20),(iy,ix),(1,1),wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)   
     163 
     164         
     165        #---------sizer 9 draw---------------------------------------- 
    174166        self.tcChi    =  wx.StaticText(self, -1, str(0), style=wx.ALIGN_LEFT) 
    175167        self.tcChi.Hide() 
     
    209201        ix = 0 
    210202        iy = 1  
    211         self.sizer8.Add(wx.StaticText(self, -1, 'Fitting Range'),(iy, ix),(1,1),\ 
     203        self.sizer9.Add(wx.StaticText(self, -1, 'Fitting Range'),(iy, ix),(1,1),\ 
    212204                            wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    213205        ix += 1  
    214         self.sizer8.Add(wx.StaticText(self, -1, 'Min'),(iy, ix),(1,1),\ 
     206        self.sizer9.Add(wx.StaticText(self, -1, 'Min'),(iy, ix),(1,1),\ 
    215207                            wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    216208        ix += 1 
    217         self.sizer8.Add(wx.StaticText(self, -1, 'Max'),(iy, ix),(1,1),\ 
     209        self.sizer9.Add(wx.StaticText(self, -1, 'Max'),(iy, ix),(1,1),\ 
    218210                            wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    219211        ix += 1 
    220         self.sizer8.Add(wx.StaticText(self, -1, 'Npts'),(iy, ix),(1,1),\ 
     212        self.sizer9.Add(wx.StaticText(self, -1, 'Npts'),(iy, ix),(1,1),\ 
    221213                            wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    222214        ix = 0 
    223215        iy += 1 
    224         self.sizer8.Add(wx.StaticText(self, -1, 'x range'),(iy, ix),(1,1),\ 
     216        self.sizer9.Add(wx.StaticText(self, -1, 'x range'),(iy, ix),(1,1),\ 
    225217                            wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    226218        ix += 1 
    227         self.sizer8.Add(self.xmin,(iy, ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    228         ix += 1 
    229         self.sizer8.Add(self.xmax,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    230         ix += 1 
    231         self.sizer8.Add(self.npts,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     219        self.sizer9.Add(self.xmin,(iy, ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     220        ix += 1 
     221        self.sizer9.Add(self.xmax,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     222        ix += 1 
     223        self.sizer9.Add(self.npts,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    232224        ix = 0 
    233225        iy += 1 
    234         self.sizer8.Add(self.text1_1,(iy,ix),(1,1),\ 
     226        self.sizer9.Add(self.text1_1,(iy,ix),(1,1),\ 
    235227                   wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    236228        ix += 1 
    237         self.sizer8.Add(self.tcChi,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     229        self.sizer9.Add(self.tcChi,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    238230        ix +=2 
    239         self.sizer8.Add(self.btFit,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     231        self.sizer9.Add(self.btFit,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    240232        ix =0 
    241233        iy+=1  
    242         self.sizer8.Add((20,20),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    243         #----------sizer 9 draw------------------------------------------------------ 
     234        self.sizer9.Add((20,20),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     235        #----------sizer 10 draw------------------------------------------------------ 
    244236        id = wx.NewId() 
    245237        self.btClose =wx.Button(self,id,'Close') 
     
    247239        self.btClose.SetToolTipString("Close page.") 
    248240         
    249         ix= 0 
     241        ix= 3 
    250242        iy= 1 
    251         self.sizer9.Add((20,20),(iy,ix),(1,1),wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    252         ix +=3 
    253         self.sizer9.Add( self.btClose,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     243        self.sizer10.Add((20,20),(iy,ix),(1,1),wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     244        ix +=1 
     245        self.sizer10.Add( self.btClose,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    254246        ix =0 
    255247        iy+=1 
    256         self.sizer9.Add((20,20),(iy,ix),(1,1),wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     248        self.sizer10.Add((20,20),(iy,ix),(1,1),wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    257249        
    258250        # contains link between  model ,all its parameters, and panel organization 
     
    278270        self.Layout() 
    279271        self.GrandParent.GetSizer().Layout() 
    280         
    281  
    282    
    283    
    284   
    285          
     272    
     273    
    286274    def compute_chisqr(self): 
    287275        """ @param fn: function that return model value 
     
    308296                    if numpy.isfinite(item): 
    309297                        sum +=item 
    310                 self.tcChi.SetValue(format_number(math.fabs(sum))) 
     298                self.tcChi.SetLabel(format_number(math.fabs(sum))) 
    311299            except: 
    312300                wx.PostEvent(self.parent.GrandParent, StatusEvent(status=\ 
    313301                            "Chisqr cannot be compute: %s"% sys.exc_value)) 
    314302             
    315              
     303    def _on_select_model(self,event): 
     304        """ 
     305            react when a model is selected from page's combo box 
     306            post an event to its owner to draw an appropriate theory 
     307        """ 
     308        self.btFit.SetFocus() 
     309        for item in self.model_list_box.itervalues(): 
     310            name = item.__name__ 
     311            if hasattr(item, "name"): 
     312                name = item.name 
     313            #print "fitpage: _on_select_model model name",name ,event.GetString() 
     314            if name ==event.GetString(): 
     315                try: 
     316                    self.model=item() 
     317                    evt = ModelEventbox(model=self.model,name=name) 
     318                    wx.PostEvent(self.event_owner, evt) 
     319                    #self.model= item() 
     320                    #self.set_panel(self.model) 
     321                except: 
     322                    raise #ValueError,"model.name is not equal to model class name" 
     323                break        
    316324    def onFit(self,event): 
    317325        """ signal for fitting""" 
     
    329337                            "Select at least on parameter to fit ")) 
    330338   
    331      
    332     def _on_select_model(self,event): 
    333         """ 
    334             react when a model is selected from page's combo box 
    335             post an event to its owner to draw an appropriate theory 
    336         """ 
    337         self.btFit.SetFocus() 
    338         for item in self.model_list_box.itervalues(): 
    339             name = item.__name__ 
    340             if hasattr(item, "name"): 
    341                 name = item.name 
    342             #print "fitpage: _on_select_model model name",name ,event.GetString() 
    343             if name ==event.GetString(): 
    344                 try: 
    345                     self.model=item() 
    346                     evt = ModelEventbox(model=self.model,name=name) 
    347                     wx.PostEvent(self.event_owner, evt) 
    348                     #self.model= item() 
    349                     #self.set_panel(self.model) 
    350                 except: 
    351                     raise #ValueError,"model.name is not equal to model class name" 
    352                 break 
    353      
     339    
    354340    def _onTextEnter(self,event): 
    355341        """ 
     
    368354                            "Drawing  Error:wrong value entered %s"% sys.exc_value)) 
    369355         
    370     def checkFitRange(self): 
    371         """ 
    372             Check the validity of fitting range 
    373             @note: xmin should always be less than xmax or else each control box 
    374             background is colored in pink. 
    375         """ 
    376         
    377         flag = True 
    378         valueMin = self.xmin.GetValue() 
    379         valueMax = self.xmax.GetValue() 
    380         # Check for possible values entered 
    381         #print "fitpage: checkfitrange:",valueMin,valueMax 
    382         try: 
    383             if (float(valueMax)> float(valueMin)): 
    384                 self.xmax.SetBackgroundColour(wx.WHITE) 
    385                 self.xmin.SetBackgroundColour(wx.WHITE) 
    386             else: 
    387                 flag = False 
    388                 self.xmin.SetBackgroundColour("pink") 
    389                 self.xmax.SetBackgroundColour("pink")       
    390         except: 
    391             flag = False 
    392             self.xmin.SetBackgroundColour("pink") 
    393             self.xmax.SetBackgroundColour("pink") 
    394              
    395         self.xmin.Refresh() 
    396         self.xmax.Refresh() 
    397         return flag 
    398      
    399  
     356    
    400357     
    401358    def get_param_list(self): 
     
    411368            raise ValueError,"missing parameter to fit" 
    412369         
    413          
    414     def set_panel(self,model): 
     370     
     371            
     372    def old_set_panel(self,model): 
    415373        """ 
    416374            Build the panel from the model content 
    417375            @param model: the model selected in combo box for fitting purpose 
    418376        """ 
    419         self.sizer2.Clear(True) 
    420377        self.sizer5.Clear(True) 
    421         self.sizer6.Clear(True) 
    422378        self.parameters = [] 
    423379        self.param_toFit=[] 
     
    426382        #print "fitpage1D : dispersion list",self.model.getDispParamList() 
    427383        keys.sort() 
    428         disp_list=self.model.getDispParamList() 
    429         fixed=self.model.fixed 
    430         print "fixed",fixed 
    431         #model.setParam("scale", 2) 
    432         #print "model sphere scale fixed?", self.model.is_fittable("scale") 
    433         ip=0 
    434         iq=1 
    435          
    436384        ik=0 
    437385        im=1 
    438         if len(disp_list)>0: 
    439             disp = wx.StaticText(self, -1, 'Dispersion') 
    440             self.sizer5.Add(disp,( iq, ip),(1,1),  wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    441             ip += 1  
    442             values = wx.StaticText(self, -1, 'Values') 
    443             self.sizer5.Add(values,( iq, ip),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    444              
    445         disp_list.sort() 
     386         
    446387        iy = 1 
    447388        ix = 0 
    448389        self.cb1 = wx.CheckBox(self, -1,"Select all", (10, 10)) 
    449390        wx.EVT_CHECKBOX(self, self.cb1.GetId(), self.select_all_param) 
    450         self.sizer2.Add(self.cb1,(iy, ix),(1,1),\ 
     391        self.sizer5.Add(self.cb1,(iy, ix),(1,1),\ 
    451392                          wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    452393        ix +=1 
    453394        self.text2_2 = wx.StaticText(self, -1, 'Values') 
    454         self.sizer2.Add(self.text2_2,(iy, ix),(1,1),\ 
     395        self.sizer5.Add(self.text2_2,(iy, ix),(1,1),\ 
    455396                            wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
    456397        ix +=2 
    457398        self.text2_3 = wx.StaticText(self, -1, 'Errors') 
    458         self.sizer2.Add(self.text2_3,(iy, ix),(1,1),\ 
     399        self.sizer5.Add(self.text2_3,(iy, ix),(1,1),\ 
    459400                            wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    460401        self.text2_3.Hide()  
    461402        ix +=1 
    462403        self.text2_4 = wx.StaticText(self, -1, 'Units') 
    463         self.sizer2.Add(self.text2_4,(iy, ix),(1,1),\ 
     404        self.sizer5.Add(self.text2_4,(iy, ix),(1,1),\ 
    464405                            wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
    465406        self.text2_4.Hide() 
    466         #print "keys", keys 
    467         #print "disp_list", disp_list 
    468         #print "fix_list",fixed 
     407        disp_list=self.model.getDispParamList() 
    469408        for item in keys: 
    470409            if not item in disp_list: 
     
    474413                cb = wx.CheckBox(self, -1, item, (10, 10)) 
    475414                cb.SetValue(False) 
    476                 self.sizer2.Add( cb,( iy, ix),(1,1),  wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     415                self.sizer5.Add( cb,( iy, ix),(1,1),  wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    477416                wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param) 
    478417             
     
    483422                ctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter) 
    484423                ctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter) 
    485                 self.sizer2.Add(ctl1, (iy,ix),(1,1), wx.EXPAND) 
     424                self.sizer5.Add(ctl1, (iy,ix),(1,1), wx.EXPAND) 
    486425                 
    487426                ix += 1 
    488427                text2=wx.StaticText(self, -1, '+/-') 
    489                 self.sizer2.Add(text2,(iy, ix),(1,1),\ 
     428                self.sizer5.Add(text2,(iy, ix),(1,1),\ 
    490429                                wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
    491430                text2.Hide()   
    492431                ix += 1 
    493432                ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER) 
    494                 self.sizer2.Add(ctl2, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     433                self.sizer5.Add(ctl2, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    495434                ctl2.Hide() 
    496435                ix +=1 
     
    500439                except: 
    501440                    units = wx.StaticText(self, -1, "", style=wx.ALIGN_LEFT) 
    502                 self.sizer2.Add(units, (iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     441                self.sizer5.Add(units, (iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     442            """ 
    503443            else: 
    504444                if not item in fixed: 
     
    532472                    im += 1 
    533473            #save data 
    534              
     474            """ 
    535475            self.parameters.append([cb,ctl1,text2,ctl2]) 
    536476                 
    537477        iy+=1 
    538         self.sizer2.Add((20,20),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     478        self.sizer5.Add((20,20),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    539479         
    540480        #Display units text on panel 
     
    583523        self.set_model_parameter() 
    584524         
    585     def set_model_parameter(self): 
    586         if len(self.parameters) !=0 and self.model !=None: 
    587             # Flag to register when a parameter has changed. 
    588             is_modified = False 
    589             for item in self.fixed_param: 
    590                  
    591                 try: 
    592                      name=str(item[0]) 
    593                      value= float(item[1].GetValue()) 
    594 #                     print "model para", name,value 
    595                      # If the value of the parameter has changed, 
    596                      # update the model and set the is_modified flag 
    597                      if value != self.model.getParam(name): 
    598                          self.model.setParam(name,value) 
    599                          is_modified = True 
    600                 except: 
    601                      wx.PostEvent(self.parent.GrandParent, StatusEvent(status=\ 
    602                             "Model Drawing  Error:wrong value entered : %s"% sys.exc_value)) 
    603                  
    604             for item in self.parameters: 
    605 #                print "paramters",str(item[0].GetLabelText()) 
    606                 try: 
    607                      name=str(item[0].GetLabelText()) 
    608                      value= float(item[1].GetValue()) 
    609 #                     print "model para", name,value 
    610                      # If the value of the parameter has changed, 
    611                      # update the model and set the is_modified flag 
    612                      if value != self.model.getParam(name): 
    613                          self.model.setParam(name,value) 
    614                          is_modified = True 
    615                 except: 
    616                      wx.PostEvent(self.parent.GrandParent, StatusEvent(status=\ 
    617                             "Model Drawing  Error:wrong value entered : %s"% sys.exc_value)) 
    618              
    619             # Here we should check whether the boundaries have been modified. 
    620             # If qmin and qmax have been modified, update qmin and qmax and  
    621             # set the is_modified flag to True 
    622             if float(self.xmin.GetValue()) != self.qmin: 
    623                 self.qmin = float(self.xmin.GetValue()) 
    624                 is_modified = True 
    625             if float(self.xmax.GetValue()) != self.qmax: 
    626                 self.qmax = float(self.xmax.GetValue()) 
    627                 is_modified = True 
    628              
    629             if is_modified: 
    630                 self.manager.redraw_model(qmin=self.qmin, qmax=self.qmax) 
    631           
     525     
    632526    def select_all_param(self,event):  
    633527        """ 
  • sansview/perspectives/fitting/new_fitpanel.py

    r68dada4 rc80c06f  
    88 
    99 
    10      
    11 class FitPanel(wx.Panel): 
     10class FitPanel(wx.aui.AuiNotebook):     
     11#class FitPanel(wx.aui.AuiNotebook,wx.panel): 
    1212    """ 
    1313        FitPanel class contains fields allowing to fit  models and  data 
     
    2121    window_caption = "Fit Panel " 
    2222    CENTER_PANE = True 
    23         
    24      
    2523    def __init__(self, parent, *args, **kwargs): 
    26         wx.Panel.__init__(self, parent, *args, **kwargs) 
     24         
     25        wx.aui.AuiNotebook.__init__(self,parent,-1, style=wx.aui.AUI_NB_SCROLL_BUTTONS ) 
     26         
    2727        self.manager=None 
    2828        self.parent=parent 
    2929        self.event_owner=None 
    30         #self.menu_mng = models.ModelManager() 
    31         #self.nb = wx.Notebook(self) 
    32         #self.nb = wx.aui.AuiNotebook(self,-1, style=wx.aui.AUI_NB_TAB_SPLIT  ) 
    33         self.nb = wx.aui.AuiNotebook(self,-1, style=wx.aui.AUI_NB_SCROLL_BUTTONS  ) 
    34         self.sizer = wx.BoxSizer() 
    35         self.sizer.Add(self.nb, 1, wx.EXPAND) 
     30         
     31        pageClosedEvent = wx.aui.EVT_AUINOTEBOOK_PAGE_CLOSE 
     32        self.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.onClosePage) 
     33 
    3634        #Creating an initial page for simultaneous fitting 
    3735        from simfitpage import SimultaneousFitPage 
    38         self.sim_page = SimultaneousFitPage(self.nb, -1) 
    39          
    40         #self.fit_panel.add_page(self.sim_page,"Simultaneous Fit") 
    41         self.nb.AddPage(self.sim_page,"Simultaneous Fit") 
    42         #(wxWindow* page, const wxString& caption, bool select = false, const wxBitmap& bitmap =  
     36        self.sim_page = SimultaneousFitPage(self, -1) 
     37        self.AddPage(self.sim_page,"Simultaneous Fit") 
     38         
     39 
     40         
    4341        #dictionary of miodel {model class name, model class} 
    4442        self.model_list_box={} 
     
    5351        self.count=0 
    5452        #updating the panel 
    55         self.nb.Update() 
    56         self.SetSizer(self.sizer) 
    57         self.sizer.Fit(self) 
     53        self.Update() 
    5854        self.Center() 
    59          
     55    def onClosePage(self, event): 
     56        self.ToggleWindowStyle(wx.aui.AUI_NB_CLOSE_ON_ACTIVE_TAB) 
     57        print "went here",self.get_current_page(), self.GetPage(0) 
     58        #event.Skip() 
     59        if self.GetPageCount() <= 2: 
     60            print "wente here" 
     61             
     62            # Prevent last tab from being closed 
     63            self.ToggleWindowStyle(~wx.aui.AUI_NB_CLOSE_ON_ACTIVE_TAB) 
     64             
     65 
     66    
     67 
    6068 
    6169         
     
    9199            if data.__class__.__name__=='Data2D': 
    92100                 from fitpage2D import FitPage2D 
    93                  panel = FitPage2D(self.nb,data, -1) 
     101                 panel = FitPage2D(self,data, -1) 
    94102                  
    95103            else: 
    96104                 
    97105                from fitpage1D import FitPage1D 
    98                 panel = FitPage1D(self.nb,data, -1) 
     106                panel = FitPage1D(self,data, -1) 
    99107            m_name= "M"+str(self.count)   
    100108            panel.set_manager(self.manager) 
    101109            panel.set_owner(self.event_owner) 
    102110             
    103             self.nb.AddPage(page=panel,caption=name,select=True) 
     111            self.AddPage(page=panel,caption=name,select=True) 
    104112            panel.populate_box( self.model_list_box) 
    105113            self.fit_page_name = name 
     
    115123        """ 
    116124        from modelpage import ModelPage 
    117         panel = ModelPage(self.nb,model,page_title, -1) 
     125        panel = ModelPage(self,model,page_title, -1) 
    118126        panel.set_manager(self.manager) 
    119127        panel.set_owner(self.event_owner) 
    120         #self.nb.AddPage(page=panel,text=page_title,select=True) 
    121         self.nb.AddPage(page=panel,caption="Model",select=True) 
     128        self.AddPage(page=panel,caption="Model",select=True) 
    122129        panel.populate_box( self.model_list_box) 
    123130        self.draw_model_name=page_title 
    124         self.model_page_number=self.nb.GetSelection() 
    125         self.model_page=self.nb.GetPage(self.nb.GetSelection()) 
     131        self.model_page_number=self.GetSelection() 
     132        self.model_page=self.GetPage(self.GetSelection()) 
    126133         
    127134         
     
    153160            self.model_page.select_model(model, page_title) 
    154161            
    155     def get_notebook(self): 
    156         """ 
    157             @return self.nb: return its own notebook mostly used by fitting module  
    158         """ 
    159         return self.nb 
     162    def get_current_page(self): 
     163        """ 
     164            @return the current page selected 
     165        """ 
     166        #return self.nb.GetCurrentPage() 
     167        return self.GetPage(self.GetSelection() ) 
     168   
    160169     
    161     def get_page(self, n): 
    162         """ 
    163             @return page at position n 
    164             @param n: page number 
    165         """ 
    166         return self.nb.GetPage(n) 
    167      
    168      
    169     def get_page_count(self): 
    170         """ @return  number total of pages contained in notebook""" 
    171         return self.nb.GetPageCount() 
    172          
    173          
    174     def get_current_page(self): 
    175         """ 
    176             @return the current page selected 
    177         """ 
    178         #return self.nb.GetCurrentPage() 
    179         return self.nb.GetPage(self.nb.GetSelection() ) 
    180      
    181     def get_selected_page(self): 
    182         """ @return the page just selected by the user """ 
    183         return self.nb.GetPage(self.nb.GetSelection()) 
    184      
    185      
    186     def get_page_number(self): 
    187         return self.nb.GetSelection() 
    188      
    189     def onClose(self, page=None,page_number=None): 
     170    def old_onClose(self, page=None,page_number=None): 
    190171        """ 
    191172             close the current page except the simpage. remove each check box link to the model 
Note: See TracChangeset for help on using the changeset viewer.