Ignore:
Timestamp:
Mar 20, 2009 8:26:01 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:
20d30e9
Parents:
f2776f6
Message:

new interface design —→ proposition

File:
1 edited

Legend:

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

    r0b99881 rc77d859  
    11import sys 
    22import wx 
    3 import wx.lib 
     3import wx.lib.newevent 
    44import numpy 
    55import copy 
     
    8484        #------------------ sizer 4  draw------------------------   
    8585        
    86         
     86        ## structure combox box 
     87        self.structbox = wx.ComboBox(self, -1) 
    8788        # define combox box 
    8889        self.modelbox = wx.ComboBox(self, -1) 
    89          # preview selected model name 
    90         self.prevmodel_name=name 
    91         #print "model view prev_model",name 
    92         self.modelbox.SetValue(self.prevmodel_name) 
     90         
    9391        #enable model 2D draw 
    9492        self.enable2D= False 
     93        self.fitrange= True 
    9594        #filling sizer2 
    9695        ix = 0 
     
    10099        ix += 1 
    101100        self.sizer4.Add(self.modelbox,(iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     101        ix +=1 
     102        self.text_mult= wx.StaticText(self,-1,' x ') 
     103        self.sizer4.Add(self.text_mult,(iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     104        ix += 1 
     105        self.sizer4.Add(self.structbox,(iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     106         
     107        if hasattr(model ,"model2"): 
     108            name= model.model2.name 
     109 
     110            self.structbox.SetValue(name)           
     111        if hasattr(model ,"model1"): 
     112            name= model.model1.name 
     113            items = self.modelbox.GetItems() 
     114            self.modelbox.SetValue(name) 
     115        else: 
     116            #print "model view prev_model",name 
     117            self.modelbox.SetValue( name ) 
    102118        ix += 1 
    103119        id = wx.NewId() 
     
    188204        iy+=1  
    189205        self.sizer9.Add((20,20),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    190         #----------sizer 10 draw------------------------------------------------------ 
    191         """ 
    192         id = wx.NewId() 
    193         self.btClose =wx.Button(self,id,'Close') 
    194         self.btClose.Bind(wx.EVT_BUTTON, self.onClose,id=id) 
    195         self.btClose.SetToolTipString("Close page.") 
    196          
    197         ix= 3 
    198         iy= 1 
    199         self.sizer10.Add((20,20),(iy,ix),(1,1),wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    200         ix +=1 
    201         self.sizer10.Add( self.btClose,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    202         ix =0 
    203         iy+=1 
    204         self.sizer10.Add((20,20),(iy,ix),(1,1),wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    205         """ 
     206         
    206207        # contains link between  model ,all its parameters, and panel organization 
    207208        self.parameters=[] 
     
    219220            self.set_panel(self.model) 
    220221        self.theta_cb=None 
    221         
     222         
    222223        
    223224        self.vbox.Layout() 
     
    229230        self.Layout() 
    230231        self.parent.GetSizer().Layout() 
    231     def set_model_description(self, model): 
    232          
    233         if model !=None and str(model.description)!=""and self.data==None: 
    234             self.sizer11.Clear(True) 
    235             self.box_description= wx.StaticBox(self, -1, 'Model Description') 
    236             boxsizer1 = wx.StaticBoxSizer(self.box_description, wx.VERTICAL) 
    237             boxsizer1.SetMinSize((320,20)) 
    238             self.description = wx.StaticText(self,-1,str(model.description)) 
    239             boxsizer1.Add(self.description, 0, wx.EXPAND)   
    240             self.sizer11.Add(boxsizer1,1, wx.EXPAND | wx.ALL, 2) 
     232    def set_model_description(self, model=None): 
     233         
     234        if model !=None: 
     235            description="description" 
     236        else: 
     237            description="" 
     238            if hasattr(model,description.lower())and self.data==None: 
     239                self.sizer11.Clear(True) 
     240                self.box_description= wx.StaticBox(self, -1, 'Model Description') 
     241                boxsizer1 = wx.StaticBoxSizer(self.box_description, wx.VERTICAL) 
     242                boxsizer1.SetMinSize((320,20)) 
     243                self.description = wx.StaticText(self,-1,str(model.description)) 
     244                boxsizer1.Add(self.description, 0, wx.EXPAND)   
     245                self.sizer11.Add(boxsizer1,1, wx.EXPAND | wx.ALL, 2) 
    241246       
    242247         
     
    261266            @param page: the page to populate 
    262267        """ 
    263         id=0 
    264         self.model_list_box=dict 
    265         list_name=[] 
    266         for item in  self.model_list_box.itervalues(): 
    267             name = item.__name__ 
    268             if hasattr(item, "name"): 
    269                 name = item.name 
    270             list_name.append(name) 
    271         list_name.sort()  
    272           
    273         for name in list_name: 
    274             self.modelbox.Insert(name,int(id)) 
    275             id+=1 
    276         wx.EVT_COMBOBOX(self.modelbox,-1, self._on_select_model)  
     268         
     269        self.model_list_box = dict.get_list() 
     270        
     271        for item , mylist in self.model_list_box.iteritems(): 
     272            separator= "---%s---"%item 
     273            self.modelbox.Append(separator,"separator") 
     274             
     275            for models in mylist: 
     276                model= models() 
     277                name = model.__class__.__name__ 
     278                if hasattr(model, "name"): 
     279                    name = model.name 
     280                self.modelbox.Append(name,models) 
     281            wx.EVT_COMBOBOX(self.modelbox,-1, self._on_select_model) 
     282            if item == "Structure Factors" : 
     283                for structs in mylist: 
     284                    struct= structs() 
     285                    name = struct.__class__.__name__ 
     286                    if hasattr(struct, "name"): 
     287                        name = struct.name 
     288                    self.structbox.Append(name,structs) 
     289                wx.EVT_COMBOBOX(self.structbox,-1, self._on_select_model) 
     290         
    277291        return 0 
    278292     
    279293 
    280294    def Set_DipersParam(self, event): 
     295        if self.model ==None: 
     296            msg= " Select non - model value:%s !"%self.model 
     297            wx.PostEvent(self.parent.parent, StatusEvent(status= msg)) 
     298            return  
    281299        if self.enable_disp.GetValue(): 
    282300            if len(self.disp_list)==0: 
     
    417435        # If the 2D display is not currently enabled, plot the model in 2D  
    418436        # and set the enable2D flag. 
    419         if self.enable2D==False: 
    420             self.enable2D=True 
     437        if self.fitrange: 
     438            self.enable2D = True 
     439             
     440        if self.enable2D: 
    421441            self._draw_model() 
    422442            self.model_view.Disable() 
     443        
    423444             
    424445     
     
    433454         
    434455        self.set_panel(model) 
    435         self._draw_model(name) 
    436          
    437         # Select the model from the combo box 
    438         items = self.modelbox.GetItems() 
    439         for i in range(len(items)): 
    440             if items[i]==name: 
    441                 self.modelbox.SetSelection(i) 
    442                 self.model_view.SetFocus() 
     456        self._draw_model() 
     457        
     458        if hasattr(model ,"model2"): 
     459            name= model.model2.name 
     460            items = self.structbox.GetItems() 
     461            for i in range(len(items)): 
     462                if items[i]==name: 
     463                    self.structbox.SetSelection(i) 
     464                     
     465        if hasattr(model ,"model1"): 
     466            name= model.model1.name 
     467            items = self.modelbox.GetItems() 
     468            for i in range(len(items)): 
     469                if items[i]==name: 
     470                    self.modelbox.SetSelection(i) 
     471        else: 
     472            # Select the model from the combo box 
     473            items = self.modelbox.GetItems() 
     474            for i in range(len(items)): 
     475                if items[i]==name: 
     476                    self.modelbox.SetSelection(i) 
     477            self.structbox.SetValue("No Structure") 
     478                     
     479        self.model_view.SetFocus() 
    443480                 
    444481    def _on_select_Disp(self,event): 
     
    462499        self.Layout() 
    463500        self.parent.GetSizer().Layout() 
    464         for item in self.model_list_box.itervalues(): 
    465             name = item.__name__ 
    466             if hasattr(item, "name"): 
    467                 name = item.name 
    468             if name ==event.GetString(): 
    469                 model=item() 
    470                 self.model= model 
    471                 self.set_panel(model) 
    472                 self.name= name 
    473                 self.model_view.SetFocus() 
    474                 self.parent.model_page.name=name 
    475                 self.parent.draw_model_name=name 
     501        form_factor =self.modelbox.GetClientData(self.modelbox.GetCurrentSelection()) 
     502        struct_factor =self.structbox.GetClientData(self.structbox.GetCurrentSelection()) 
     503        
     504        if form_factor!="separator": 
     505            if struct_factor != None and struct_factor.__name__ != "NoStructure": 
     506                from sans.models.MultiplicationModel import MultiplicationModel 
     507                self.model= MultiplicationModel(form_factor(),struct_factor()) 
     508            else: 
     509                 self.model= form_factor() 
     510        else: 
     511            self.model=None  
     512            msg= " Select non - model value:%s !Please select another model"%name  
     513            wx.PostEvent(self.parent.parent, StatusEvent(status= msg)) 
    476514                
    477                 self._draw_model(name) 
    478              
     515        self.set_model_description(self.model) 
     516        self.set_panel(self.model) 
     517        self.name= self.model.name 
     518        self.model_view.SetFocus() 
     519        self.parent.model_page.name= self.name 
     520        self.parent.draw_model_name= self.name 
     521        self._draw_model() 
    479522             
    480523    def get_model_box(self):  
     
    506549        self.param_toFit=[] 
    507550        self.fixed_param=[] 
    508         self.model = model 
    509          
    510         self.set_model_description( self.model)  
    511          
    512         keys = self.model.getParamList() 
    513         #list of dispersion paramaters 
    514         self.disp_list=self.model.getDispParamList() 
    515         
    516         keys.sort() 
    517         ik=0 
    518         im=1 
    519          
    520         iy = 1 
    521         ix = 0 
    522         self.cb1 = wx.CheckBox(self, -1,"Select all", (10, 10)) 
    523         if self.data!=None: 
    524             wx.EVT_CHECKBOX(self, self.cb1.GetId(), self.select_all_param) 
    525             self.cb1.SetValue(False) 
    526         else: 
    527             self.cb1.Disable() 
    528             self.cb1.Hide() 
    529         
    530         self.sizer5.Add(self.cb1,(iy, ix),(1,1),\ 
    531                           wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    532         ix +=1 
    533         self.text2_2 = wx.StaticText(self, -1, 'Values') 
    534         self.sizer5.Add(self.text2_2,(iy, ix),(1,1),\ 
    535                             wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
    536         ix +=2 
    537         self.text2_3 = wx.StaticText(self, -1, 'Errors') 
    538         self.sizer5.Add(self.text2_3,(iy, ix),(1,1),\ 
    539                             wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    540         self.text2_3.Hide()  
    541          
    542         
    543         ix +=1 
    544         self.text2_4 = wx.StaticText(self, -1, 'Units') 
    545         self.sizer5.Add(self.text2_4,(iy, ix),(1,1),\ 
    546                             wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
    547         self.text2_4.Hide() 
    548         disp_list=self.model.getDispParamList() 
    549         for item in keys: 
    550             if not item in disp_list: 
    551                 iy += 1 
    552                 ix = 0 
    553      
    554                 cb = wx.CheckBox(self, -1, item, (10, 10)) 
    555                 if self.data!=None: 
    556                     cb.SetValue(False) 
    557                     wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param) 
     551        if model !=None: 
     552            self.model = model 
     553             
     554            self.set_model_description( self.model)  
     555             
     556            keys = self.model.getParamList() 
     557            #list of dispersion paramaters 
     558            self.disp_list=self.model.getDispParamList() 
     559            
     560            keys.sort() 
     561            ik=0 
     562            im=1 
     563             
     564            iy = 1 
     565            ix = 0 
     566            self.cb1 = wx.CheckBox(self, -1,"Select all", (10, 10)) 
     567            if self.data!=None: 
     568                wx.EVT_CHECKBOX(self, self.cb1.GetId(), self.select_all_param) 
     569                self.cb1.SetValue(False) 
     570            else: 
     571                self.cb1.Disable() 
     572                self.cb1.Hide() 
     573            
     574            self.sizer5.Add(self.cb1,(iy, ix),(1,1),\ 
     575                              wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     576            ix +=1 
     577            self.text2_2 = wx.StaticText(self, -1, 'Values') 
     578            self.sizer5.Add(self.text2_2,(iy, ix),(1,1),\ 
     579                                wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
     580            ix +=2 
     581            self.text2_3 = wx.StaticText(self, -1, 'Errors') 
     582            self.sizer5.Add(self.text2_3,(iy, ix),(1,1),\ 
     583                                wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     584            self.text2_3.Hide()  
     585             
     586            
     587            ix +=1 
     588            self.text2_4 = wx.StaticText(self, -1, 'Units') 
     589            self.sizer5.Add(self.text2_4,(iy, ix),(1,1),\ 
     590                                wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
     591            self.text2_4.Hide() 
     592            disp_list=self.model.getDispParamList() 
     593            for item in keys: 
     594                if not item in disp_list: 
     595                    iy += 1 
     596                    ix = 0 
     597         
     598                    cb = wx.CheckBox(self, -1, item, (10, 10)) 
     599                    if self.data!=None: 
     600                        cb.SetValue(False) 
     601                        wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param) 
     602                    else: 
     603                        cb.Disable() 
     604                    self.sizer5.Add( cb,( iy, ix),(1,1),  wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     605                    
     606                    ix += 1 
     607                    value= self.model.getParam(item) 
     608                    ctl1 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER) 
     609                    ctl1.SetValue(str (format_number(value))) 
     610                    ctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter) 
     611                    ctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter) 
     612                    self.sizer5.Add(ctl1, (iy,ix),(1,1), wx.EXPAND) 
     613                     
     614                    ix += 1 
     615                    text2=wx.StaticText(self, -1, '+/-') 
     616                    self.sizer5.Add(text2,(iy, ix),(1,1),\ 
     617                                    wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
     618                    text2.Hide()   
     619                    ix += 1 
     620                    ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER) 
     621                    self.sizer5.Add(ctl2, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     622                    ctl2.Hide() 
     623                    
     624                    ix +=1 
     625                    # Units 
     626                    try: 
     627                        units = wx.StaticText(self, -1, self.model.details[item][0], style=wx.ALIGN_LEFT) 
     628                    except: 
     629                        units = wx.StaticText(self, -1, "", style=wx.ALIGN_LEFT) 
     630                    self.sizer5.Add(units, (iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     631                
     632                    self.parameters.append([cb,ctl1,text2,ctl2]) 
     633                     
     634            iy+=1 
     635            self.sizer5.Add((20,20),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     636             
     637            #Display units text on panel 
     638            for item in keys:    
     639                if self.model.details[item][0]!='': 
     640                    self.text2_4.Show() 
     641                    break 
    558642                else: 
    559                     cb.Disable() 
    560                 self.sizer5.Add( cb,( iy, ix),(1,1),  wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    561                 
    562                 ix += 1 
    563                 value= self.model.getParam(item) 
    564                 ctl1 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER) 
    565                 ctl1.SetValue(str (format_number(value))) 
    566                 ctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter) 
    567                 ctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter) 
    568                 self.sizer5.Add(ctl1, (iy,ix),(1,1), wx.EXPAND) 
    569                  
    570                 ix += 1 
    571                 text2=wx.StaticText(self, -1, '+/-') 
    572                 self.sizer5.Add(text2,(iy, ix),(1,1),\ 
    573                                 wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
    574                 text2.Hide()   
    575                 ix += 1 
    576                 ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER) 
    577                 self.sizer5.Add(ctl2, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    578                 ctl2.Hide() 
    579                 
    580                 ix +=1 
    581                 # Units 
    582                 try: 
    583                     units = wx.StaticText(self, -1, self.model.details[item][0], style=wx.ALIGN_LEFT) 
    584                 except: 
    585                     units = wx.StaticText(self, -1, "", style=wx.ALIGN_LEFT) 
    586                 self.sizer5.Add(units, (iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    587             
    588                 self.parameters.append([cb,ctl1,text2,ctl2]) 
    589                  
    590         iy+=1 
    591         self.sizer5.Add((20,20),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    592          
    593         #Display units text on panel 
    594         for item in keys:    
    595             if self.model.details[item][0]!='': 
    596                 self.text2_4.Show() 
    597                 break 
    598             else: 
    599                 self.text2_4.Hide() 
    600          
     643                    self.text2_4.Hide() 
     644             
    601645        self.vbox.Layout() 
    602646        self.SetScrollbars(20,20,55,40) 
     
    949993            # If qmin and qmax have been modified, update qmin and qmax and  
    950994            # set the is_modified flag to True 
    951             if float(self.qmin.GetValue()) != self.qmin_x: 
    952                 self.qmin_x = float(self.qmin.GetValue()) 
    953                 is_modified = True 
    954             if float(self.qmax.GetValue()) != self.qmax_x: 
    955                 self.qmax_x = float(self.qmax.GetValue()) 
    956                 is_modified = True 
    957              
     995            from sans.guiframe.utils import check_value 
     996            if check_value( self.qmin, self.qmax): 
     997                if float(self.qmin.GetValue()) != self.qmin_x: 
     998                    self.qmin_x = float(self.qmin.GetValue()) 
     999                    is_modified = True 
     1000                if float(self.qmax.GetValue()) != self.qmax_x: 
     1001                    self.qmax_x = float(self.qmax.GetValue()) 
     1002                    is_modified = True 
     1003                self.fitrange = True 
     1004            else: 
     1005                self.fitrange = False 
    9581006            if float(self.npts.GetValue()) !=  self.num_points: 
    9591007                self.num_points = float(self.npts.GetValue()) 
     
    9631011                self._draw_model()             
    9641012             
    965     def _draw_model(self, name=None): 
     1013    def _draw_model(self): 
    9661014        """ 
    9671015            Method to draw or refresh a plotted model. 
     
    9711019            [Note to coder: This way future changes will be done in only one place.]  
    9721020        """ 
    973         if name==None: 
    974             name= self.model.name 
    975         
    976         self.manager.draw_model(self.model, name, data=self.data, 
    977                                 qmin=self.qmin_x, qmax=self.qmax_x, 
    978                                 qstep= self.num_points, 
    979                                 enable2D=self.enable2D) 
     1021        if self.model !=None: 
     1022            self.manager.draw_model(self.model, self.model.name, data=self.data, 
     1023                                    qmin=self.qmin_x, qmax=self.qmax_x, 
     1024                                    qstep= self.num_points, 
     1025                                    enable2D=self.enable2D) 
    9801026        
    9811027    def select_param(self,event): 
Note: See TracChangeset for help on using the changeset viewer.