Ignore:
Timestamp:
Mar 1, 2017 10:16:45 AM (7 years ago)
Author:
Piotr Rozyczko <rozyczko@…>
Branches:
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
Children:
86f88d1
Parents:
68c96d3
Message:

interactions between combo boxes on the fitting tab

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/sas/qtgui/Perspectives/Fitting/FittingWidget.py

    rf46f6dc r6f7f652  
    5959        self.setTableProperties(self.lstMagnetic) 
    6060 
    61         # Fill in the combo boxes 
    62         structure_factor_list = self.master_category_dict.pop('Structure Factor') 
    63         for (structure_factor, enabled) in structure_factor_list: 
    64             self.cbStructureFactor.addItem(structure_factor) 
    65  
     61        # Defaults for the strcutre factors 
     62        self.setDefaultStructureCombo() 
     63 
     64        # make structure factor and model CBs disabled 
     65        self.disableModelCombo() 
     66        self.disableStructureCombo() 
     67 
     68        # Generate the category list for display 
    6669        category_list = sorted(self.master_category_dict.keys()) 
     70        self.cbCategory.addItem("Choose category...") 
    6771        self.cbCategory.addItems(category_list) 
    68  
    69         category = self.cbCategory.currentText() 
    70         model_list = self.master_category_dict[str(category)] 
    71         for (model, enabled) in model_list: 
    72             self.cbModel.addItem(model) 
     72        self.cbCategory.addItem("Structure Factor") 
     73        self.cbCategory.setCurrentIndex(0) 
    7374 
    7475        # Connect GUI element signals 
     
    113114        return not self.data_assigned 
    114115 
     116    def disableModelCombo(self): 
     117        self.cbModel.setEnabled(False) 
     118        self.label_3.setEnabled(False) 
     119 
     120    def enableModelCombo(self): 
     121        self.cbModel.setEnabled(True) 
     122        self.label_3.setEnabled(True) 
     123 
     124    def disableStructureCombo(self): 
     125        self.cbStructureFactor.setEnabled(False) 
     126        self.label_4.setEnabled(False) 
     127 
     128    def enableStructureCombo(self): 
     129        self.cbStructureFactor.setEnabled(True) 
     130        self.label_4.setEnabled(True) 
     131 
     132    def setDefaultStructureCombo(self): 
     133        # Fill in the structure factors combo box with defaults 
     134        structure_factor_list = self.master_category_dict.pop('Structure Factor') 
     135        structure_factors = [] 
     136        self.cbStructureFactor.clear() 
     137        for (structure_factor, _) in structure_factor_list: 
     138            structure_factors.append(structure_factor) 
     139        self.cbStructureFactor.addItems(sorted(structure_factors)) 
     140 
    115141    def selectCategory(self): 
    116142        """ 
     
    118144        :return: 
    119145        """ 
     146        category = self.cbCategory.currentText() 
     147        if category == "Structure Factor": 
     148            self.disableModelCombo() 
     149            self.enableStructureCombo() 
     150            return 
     151 
     152        self.cbModel.blockSignals(True) 
    120153        self.cbModel.clear() 
    121         category = self.cbCategory.currentText() 
     154        self.cbModel.blockSignals(False) 
     155        self.enableModelCombo() 
     156        self.disableStructureCombo() 
     157 
    122158        model_list = self.master_category_dict[str(category)] 
    123         for (model, enabled) in model_list: 
    124             self.cbModel.addItem(model) 
     159        models = [] 
     160        for (model, _) in model_list: 
     161            models.append(model) 
     162        self.cbModel.addItems(sorted(models)) 
    125163 
    126164    def selectModel(self): 
     
    138176        :return: 
    139177        """ 
     178        model = self.cbStructureFactor.currentText() 
     179        self.setModelModel(model) 
    140180 
    141181    def _readCategoryInfo(self): 
     
    173213                self.model_enabled_dict[model] = enabled 
    174214 
    175     def checkMultiplicity(self, model): 
    176         """ 
     215    def getIterParams(self, model): 
     216        """ 
     217        Returns a list of all multi-shell parameters in 'model' 
     218        """ 
     219        iter_params = list(filter(lambda par: "[" in par.name, model.iq_parameters)) 
     220 
     221        return iter_params 
     222 
     223    def getMultiplicity(self, model): 
     224        """ 
     225        Finds out if 'model' has multishell parameters. 
     226        If so, returns the name of the counter parameter and the number of shells 
    177227        """ 
    178228        iter_param = "" 
    179229        iter_length = 0 
    180         for param in model.iq_parameters: 
    181             name = param.name 
    182             if "[" in name: 
    183                 # pull out the iterator parameter name 
    184                 #iter_param = name[name.index('[')+1:-1] 
    185                 iter_length = param.length 
    186                 iter_param = param.length_control 
     230 
     231        iter_params = self.getIterParams(model) 
     232        # pull out the iterator parameter name and length 
     233        if iter_params: 
     234            iter_length = iter_params[0].length 
     235            iter_param = iter_params[0].length_control 
    187236        return (iter_param, iter_length) 
    188237         
     
    216265        self._model_model.appendRow([item1, item2, item3, item4, item5]) 
    217266 
    218         multishell_param_name, multishell_param_length = self.checkMultiplicity(self.model_parameters) 
    219         multishell_param_fullname = "[%s]" % multishell_param_name 
     267        multishell_parameters = self.getIterParams(self.model_parameters) 
     268        multishell_param_name, _ = self.getMultiplicity(self.model_parameters) 
     269 
    220270        #TODO: iq_parameters are used here. If orientation paramateres or magnetic are needed 
    221271        # kernel_paramters should be used instead 
     
    227277            # Modify parameter name from <param>[n] to <param>1 
    228278            item_name = param.name 
    229             if multishell_param_fullname in param.name: 
     279            if param in multishell_parameters: 
    230280                item_name = self.replaceShellName(param.name, 1) 
    231281            item1 = QtGui.QStandardItem(item_name) 
     
    253303        Updates parameter name from <param_name>[n_shell] to <param_name>value 
    254304        """ 
    255         new_name  = param_name[:param_name.index('[')]+str(value) 
    256         return new_name 
     305        assert('[' in param_name) 
     306        return param_name[:param_name.index('[')]+str(value) 
    257307 
    258308    def setTableProperties(self, table): 
     
    343393        Add a combobox for multiple shell display 
    344394        """ 
    345         param_name, param_length = self.checkMultiplicity(self.model_parameters) 
     395        param_name, param_length = self.getMultiplicity(self.model_parameters) 
    346396 
    347397        if param_length == 0: 
    348398            return 
    349399 
     400        # cell 1: variable name 
    350401        item1 = QtGui.QStandardItem(param_name) 
    351402 
     
    353404        func.addItems([str(i+1) for i in xrange(param_length)]) 
    354405 
     406        # cell 2: combobox 
    355407        item2 = QtGui.QStandardItem() 
    356408        self._model_model.appendRow([item1, item2]) 
    357409 
     410        # Beautify the row:  span columns 2-4 
    358411        shell_row = self._model_model.rowCount() 
    359412        shell_index = self._model_model.index(shell_row-1, 1) 
     
    363416    def togglePoly(self, isChecked): 
    364417        """ 
     418        Enable/disable the polydispersity tab 
    365419        """ 
    366420        self.tabFitting.setTabEnabled(TAB_POLY, isChecked) 
     
    368422    def toggleMagnetism(self, isChecked): 
    369423        """ 
     424        Enable/disable the magnetism tab 
    370425        """ 
    371426        self.tabFitting.setTabEnabled(TAB_MAGNETISM, isChecked) 
     
    373428    def toggle2D(self, isChecked): 
    374429        """ 
     430        Enable/disable the controls dependent on 1D/2D data instance 
    375431        """ 
    376432        self.chkMagnetism.setEnabled(isChecked) 
Note: See TracChangeset for help on using the changeset viewer.