Ignore:
Timestamp:
Sep 28, 2018 1:34:58 PM (6 years ago)
Author:
Paul Kienzle <pkienzle@…>
Branches:
master, magnetic_scatt, release-4.2.2, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, unittest-saveload
Children:
ca30e36b
Parents:
85cf6b8
Message:

redo page update on plugin reload so recalc only happens if model changes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/sas/sasgui/perspectives/fitting/fitting.py

    r85cf6b8 r93c505b  
    347347            if not new_pmodel_list: 
    348348                return 
    349             # Set the new plugin model list for all fit pages 
     349            # Set the new plugin model list for all fit pages; anticipating 
     350            # categories, the updated plugin may be in either the form factor 
     351            # or the structure factor combo boxes 
    350352            for uid, page in self.fit_panel.opened_pages.iteritems(): 
    351                 if hasattr(page, "formfactorbox"): 
    352                     page.model_list_box = new_pmodel_list 
    353                     mod_cat = page.categorybox.GetStringSelection() 
    354                     if mod_cat == custom_model: 
    355                         box = page.formfactorbox 
    356                         model_name = box.GetValue() 
    357                         model = (box.GetClientData(box.GetCurrentSelection()) 
    358                                  if model_name else None) 
    359                         page._show_combox_helper() 
    360                         new_index = box.FindString(model_name) 
    361                         new_model = (box.GetClientData(new_index) 
    362                                      if new_index >= 0 else None) 
    363                         if new_index >= 0: 
    364                             box.SetStringSelection(model_name) 
    365                         else: 
    366                             box.SetStringSelection('') 
    367                         if model and new_model != model: 
    368                             page._on_select_model(keep_pars=True) 
    369                     if hasattr(page, "structurebox"): 
    370                         selected_name = page.structurebox.GetStringSelection() 
    371  
    372                         page.structurebox.Clear() 
    373                         page.initialize_combox() 
    374  
    375                         index = page.structurebox.FindString(selected_name) 
    376                         if index == -1: 
    377                             index = 0 
    378                         page.structurebox.SetSelection(index) 
    379                         page._on_select_model(keep_pars=True) 
     353                pbox = getattr(page, "formfactorbox", None) 
     354                sbox = getattr(page, "structurebox", None) 
     355                if pbox is None: 
     356                    continue 
     357 
     358                # Set the new model list for the page 
     359                page.model_list_box = new_pmodel_list 
     360 
     361                # Grab names of the P and S models from the page.  Need to do 
     362                # this before resetting the form factor box since that clears 
     363                # the structure factor box. 
     364                old_struct = old_form = None 
     365                form_name = pbox.GetValue() 
     366                struct_name = sbox.GetStringSelection() 
     367                if form_name: 
     368                    old_form = pbox.GetClientData(pbox.GetCurrentSelection()) 
     369                if struct_name: 
     370                    old_struct = sbox.GetClientData(sbox.GetCurrentSelection()) 
     371 
     372                # Reset form factor combo box.  We are doing this for all 
     373                # categories not just plugins since eventually the category 
     374                # manager will allow plugin models to be anywhere. 
     375                page._show_combox_helper() 
     376                form_index = pbox.FindString(form_name) 
     377                pbox.SetSelection(form_index) 
     378                new_form = (pbox.GetClientData(form_index) 
     379                            if form_index != wx.NOT_FOUND else None) 
     380                #print("form: %r"%form_name, old_form, new_form) 
     381 
     382                # Reset structure factor combo box.  If a  (even if the model list 
     383                # hasn't changed, the model may have).  Show the structure 
     384                # factor combobox if the selected model is a form factor. 
     385                sbox.Clear() 
     386                page.initialize_combox() 
     387                if new_form is not None and getattr(new_form, 'is_form_factor', False): 
     388                    sbox.Show() 
     389                    sbox.Enable() 
     390                    page.text2.Show() 
     391                    page.text2.Enable() 
     392                struct_index = sbox.FindString(struct_name) 
     393                sbox.SetSelection(struct_index) 
     394                new_struct = (sbox.GetClientData(struct_index) 
     395                              if struct_index != wx.NOT_FOUND else None) 
     396                #print("struct: %r"%struct_name, old_struct, new_struct) 
     397 
     398                # Update the page if P or S has changed 
     399                if old_form != new_form or old_struct != new_struct: 
     400                    #print("triggering model update") 
     401                    page._on_select_model(keep_pars=True) 
    380402        except Exception: 
    381403            logger.error("update_custom_combo: %s", sys.exc_value) 
Note: See TracChangeset for help on using the changeset viewer.