Changes in / [3ba060e1:531dd64] in sasview


Ignore:
Location:
src/sas/qtgui
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • src/sas/qtgui/MainWindow/DataExplorer.py

    rba8046c re5ae812  
    15991599        while len(indices) > 0: 
    16001600            index = indices[0] 
    1601             row_index = proxy.mapToSource(index) 
    1602             item_to_delete = model.itemFromIndex(row_index) 
     1601            #row_index = proxy.mapToSource(index) 
     1602            #item_to_delete = model.itemFromIndex(row_index) 
     1603            item_to_delete = model.itemFromIndex(index) 
    16031604            if item_to_delete and item_to_delete.isCheckable(): 
    1604                 row = row_index.row() 
     1605                #row = row_index.row() 
     1606                row = index.row() 
    16051607 
    16061608                # store the deleted item details so we can pass them on later 
  • src/sas/qtgui/Perspectives/Fitting/ComplexConstraint.py

    r9c207f5 rd72ac57  
    3737        self.operator = '=' 
    3838        self._constraint = Constraint() 
    39         self.all_menu   = None 
    4039 
    4140        self.warning = self.lblWarning.text() 
     
    6160        self.cmdOK.clicked.connect(self.onApply) 
    6261        self.cmdHelp.clicked.connect(self.onHelp) 
     62        self.cmdRevert.clicked.connect(self.onRevert) 
    6363        self.txtConstraint.editingFinished.connect(self.validateFormula) 
    64         self.cbModel1.currentIndexChanged.connect(self.onModelIndexChange) 
    65         self.cbModel2.currentIndexChanged.connect(self.onModelIndexChange) 
    6664 
    6765        self.cbParam1.currentIndexChanged.connect(self.onParamIndexChange) 
     
    7371        Setup widgets based on current parameters 
    7472        """ 
    75         self.cbModel1.insertItems(0, self.tab_names) 
    76         self.cbModel2.insertItems(0, self.tab_names) 
     73        self.txtName1.setText(self.tab_names[0]) 
     74        self.txtName2.setText(self.tab_names[1]) 
    7775 
    7876        self.setupParamWidgets() 
    7977 
    80         self.setupMenu() 
    81  
    82     def setupMenu(self): 
    83         # Add menu to the Apply button, if necessary 
    84         if self.cbModel1.currentText() ==self.cbModel2.currentText(): 
    85             self.cmdOK.setArrowType(QtCore.Qt.NoArrow) 
    86             self.cmdOK.setPopupMode(QtWidgets.QToolButton.DelayedPopup) 
    87             self.cmdOK.setMenu(None) 
    88             return 
    89         self.all_menu   = QtWidgets.QMenu() 
     78        # Add menu to the Apply button 
     79        all_menu   = QtWidgets.QMenu() 
    9080        self.actionAddAll = QtWidgets.QAction(self) 
    9181        self.actionAddAll.setObjectName("actionAddAll") 
     
    9484        self.actionAddAll.setToolTip(ttip) 
    9585        self.actionAddAll.triggered.connect(self.onSetAll) 
    96         self.all_menu.addAction(self.actionAddAll) 
     86        all_menu.addAction(self.actionAddAll) 
    9787        # https://bugreports.qt.io/browse/QTBUG-13663 
    98         self.all_menu.setToolTipsVisible(True) 
    99         self.cmdOK.setPopupMode(QtWidgets.QToolButton.MenuButtonPopup) 
    100         self.cmdOK.setArrowType(QtCore.Qt.DownArrow) 
    101         self.cmdOK.setMenu(self.all_menu) 
     88        all_menu.setToolTipsVisible(True) 
     89        self.cmdOK.setMenu(all_menu) 
    10290 
    10391    def setupParamWidgets(self): 
     
    10694        """ 
    10795        self.cbParam1.clear() 
    108         tab_index1 = self.cbModel1.currentIndex() 
    109         items1 = [param for param in self.params[tab_index1] if not self.tabs[tab_index1].paramHasConstraint(param)] 
     96        items1 = [param for param in self.params[0] if not self.tabs[0].paramHasConstraint(param)] 
    11097        self.cbParam1.addItems(items1) 
    11198 
    11299        # M2 doesn't have to be non-constrained 
    113100        self.cbParam2.clear() 
    114         tab_index2 = self.cbModel2.currentIndex() 
    115         items2 = [param for param in self.params[tab_index2]] 
     101        #items2 = [param for param in self.params[1] if not self.tabs[1].paramHasConstraint(param)] 
     102        items2 = [param for param in self.params[1]] 
    116103        self.cbParam2.addItems(items2) 
    117104 
    118         self.txtParam.setText(self.tab_names[tab_index1] + ":" + self.cbParam1.currentText()) 
     105        self.txtParam.setText(self.tab_names[0] + ":" + self.cbParam1.currentText()) 
    119106 
    120107        self.cbOperator.clear() 
     
    122109        self.txtOperator.setText(self.cbOperator.currentText()) 
    123110 
    124         self.txtConstraint.setText(self.tab_names[tab_index2]+"."+self.cbParam2.currentText()) 
     111        self.txtConstraint.setText(self.tab_names[1]+"."+self.cbParam2.currentText()) 
    125112 
    126113        # disable Apply if no parameters available 
     
    168155        self.lblWarning.setText(txt) 
    169156 
    170     def onModelIndexChange(self, index): 
    171         """ 
    172         Respond to mode combo box changes 
    173         """ 
    174         # disable/enable Add All 
    175         self.setupMenu() 
    176         # Reload parameters 
    177         self.setupParamWidgets() 
    178157 
    179158    def onOperatorChange(self, index): 
     
    183162        self.txtOperator.setText(self.cbOperator.currentText()) 
    184163 
     164    def onRevert(self): 
     165        """ 
     166        switch M1 <-> M2 
     167        """ 
     168        # Switch parameters 
     169        self.params[1], self.params[0] = self.params[0], self.params[1] 
     170        self.tab_names[1], self.tab_names[0] = self.tab_names[0], self.tab_names[1] 
     171        self.tabs[1], self.tabs[0] = self.tabs[0], self.tabs[1] 
     172        # Try to swap parameter names in the line edit 
     173        current_text = self.txtConstraint.text() 
     174        new_text = current_text.replace(self.cbParam1.currentText(), self.cbParam2.currentText()) 
     175        self.txtConstraint.setText(new_text) 
     176        # Update labels and tooltips 
     177        index1 = self.cbParam1.currentIndex() 
     178        index2 = self.cbParam2.currentIndex() 
     179        indexOp = self.cbOperator.currentIndex() 
     180        self.setupWidgets() 
     181 
     182        # Original indices 
     183        index2 = index2 if index2 >= 0 else 0 
     184        index1 = index1 if index1 >= 0 else 0 
     185        self.cbParam1.setCurrentIndex(index2) 
     186        self.cbParam2.setCurrentIndex(index1) 
     187        self.cbOperator.setCurrentIndex(indexOp) 
     188        self.setupTooltip() 
     189 
    185190    def validateFormula(self): 
    186191        """ 
    187192        Add visual cues when formula is incorrect 
    188193        """ 
    189         # temporarily disable validation 
    190         return 
    191         # 
    192194        formula_is_valid = self.validateConstraint(self.txtConstraint.text()) 
    193195        if not formula_is_valid: 
     
    206208            return False 
    207209 
    208         # M1.scale --> model_str='M1', constraint_text='scale' 
     210        # M1.scale  --> model_str='M1', constraint_text='scale' 
    209211        param_str = self.cbParam2.currentText() 
    210212        constraint_text = constraint_text.strip() 
    211         model_str = self.cbModel2.currentText() 
     213        model_str = self.txtName2.text() 
    212214 
    213215        # 0. Has to contain the model name 
    214         if model_str != model_str: 
     216        if model_str != self.txtName2.text(): 
    215217            return False 
    216218 
     
    247249        value = self.cbParam2.currentText() 
    248250        func = self.txtConstraint.text() 
    249         value_ex = self.cbModel2.currentText() + "." + self.cbParam2.currentText() 
    250         model1 = self.cbModel1.currentText() 
     251        value_ex = self.txtName2.text() + "." + self.cbParam2.currentText() 
     252        model1 = self.txtName1.text() 
    251253        operator = self.cbOperator.currentText() 
    252254 
     
    275277        """ 
    276278        # loop over parameters in constrained model 
    277         index1 = self.cbModel1.currentIndex() 
    278         index2 = self.cbModel2.currentIndex() 
    279         items1 = [param for param in self.params[index1] if not self.tabs[index1].paramHasConstraint(param)] 
    280         items2 = self.params[index2] 
     279        items1 = [param for param in self.params[0] if not self.tabs[0].paramHasConstraint(param)] 
     280        #items2 = [param for param in self.params[1] if not self.tabs[1].paramHasConstraint(i)] 
     281        items2 = self.params[1] 
    281282        for item in items1: 
    282283            if item not in items2: continue 
    283284            param = item 
    284285            value = item 
    285             func = self.cbModel2.currentText() + "." + param 
    286             value_ex = self.cbModel1.currentText() + "." + param 
    287             model1 = self.cbModel1.currentText() 
     286            func = self.txtName2.text() + "." + param 
     287            value_ex = self.txtName1.text() + "." + param 
     288            model1 = self.txtName1.text() 
    288289            operator = self.cbOperator.currentText() 
    289290 
  • src/sas/qtgui/Perspectives/Fitting/ConstraintWidget.py

    r2e5081b r72651df  
    3333        self.setDragDropMode(QtWidgets.QAbstractItemView.InternalMove) 
    3434 
    35         self._is_dragged = False 
     35        self._is_dragged = True 
    3636 
    3737    def isDragged(self): 
     
    872872        """ 
    873873        selected_rows = self.selectedParameters(self.tblTabList) 
    874  
    875         tab_list = [ObjectLibrary.getObject(self.tblTabList.item(s, 0).data(0)) for s in range(self.tblTabList.rowCount())] 
     874        if len(selected_rows)!=2: 
     875            msg = "Please select two fit pages from the Source Choice table." 
     876            msgbox = QtWidgets.QMessageBox(self.parent) 
     877            msgbox.setIcon(QtWidgets.QMessageBox.Warning) 
     878            msgbox.setText(msg) 
     879            msgbox.setWindowTitle("2 fit page constraints") 
     880            retval = msgbox.exec_() 
     881            return 
     882 
     883        tab_list = [ObjectLibrary.getObject(self.tblTabList.item(s, 0).data(0)) for s in selected_rows] 
    876884        # Create and display the widget for param1 and param2 
    877885        cc_widget = ComplexConstraint(self, tabs=tab_list) 
  • src/sas/qtgui/Perspectives/Fitting/FittingWidget.py

    rba8046c r9c05f22  
    270270        self.custom_models = self.customModels() 
    271271        # Polydisp widget table default index for function combobox 
    272         self.orig_poly_index = 4 
     272        self.orig_poly_index = 3 
    273273        # copy of current kernel model 
    274274        self.kernel_module_copy = None 
     
    30223022        file_index = self._poly_model.index(row_index, self.lstPoly.itemDelegate().poly_function) 
    30233023        combo_box = self.lstPoly.indexWidget(file_index) 
    3024         try: 
    3025             self.disp_model = POLYDISPERSITY_MODELS[combo_string]() 
    3026         except IndexError: 
    3027             logger.error("Error in setting the dispersion model. Reverting to Gaussian.") 
    3028             self.disp_model = POLYDISPERSITY_MODELS['gaussian']() 
    30293024 
    30303025        def updateFunctionCaption(row): 
     
    30323027            if not self.isCheckable(row): 
    30333028                return 
    3034             param_name = self._model_model.item(row, 0).text() 
     3029            self._model_model.blockSignals(True) 
     3030            param_name = str(self._model_model.item(row, 0).text()) 
     3031            self._model_model.blockSignals(False) 
    30353032            if param_name !=  param.name: 
    30363033                return 
     
    30463043        if combo_string == 'array': 
    30473044            try: 
    3048                 # assure the combo is at the right index 
    3049                 combo_box.blockSignals(True) 
    3050                 combo_box.setCurrentIndex(combo_box.findText(combo_string)) 
    3051                 combo_box.blockSignals(False) 
    3052                 # Load the file 
    30533045                self.loadPolydispArray(row_index) 
    30543046                # Update main model for display 
    30553047                self.iterateOverModel(updateFunctionCaption) 
    3056                 self.kernel_module.set_dispersion(param.name, self.disp_model) 
    3057                 # uncheck the parameter 
    3058                 self._poly_model.item(row_index, 0).setCheckState(QtCore.Qt.Unchecked) 
    30593048                # disable the row 
    3060                 lo = self.lstPoly.itemDelegate().poly_parameter 
     3049                lo = self.lstPoly.itemDelegate().poly_pd 
    30613050                hi = self.lstPoly.itemDelegate().poly_function 
    3062                 self._poly_model.blockSignals(True) 
    30633051                [self._poly_model.item(row_index, i).setEnabled(False) for i in range(lo, hi)] 
    3064                 self._poly_model.blockSignals(False) 
    30653052                return 
    30663053            except IOError: 
     
    30683055                # Pass for cancel/bad read 
    30693056                pass 
    3070         else: 
    3071             self.kernel_module.set_dispersion(param.name, self.disp_model) 
    30723057 
    30733058        # Enable the row in case it was disabled by Array 
     
    31213106 
    31223107        # If everything went well - update the sasmodel values 
     3108        self.disp_model = POLYDISPERSITY_MODELS['array']() 
    31233109        self.disp_model.set_weights(np.array(values), np.array(weights)) 
    31243110        # + update the cell with filename 
  • src/sas/qtgui/Perspectives/Fitting/UI/ComplexConstraintUI.ui

    r2e5081b recc5d043  
    77    <x>0</x> 
    88    <y>0</y> 
    9     <width>496</width> 
    10     <height>260</height> 
     9    <width>478</width> 
     10    <height>257</height> 
    1111   </rect> 
    1212  </property> 
     
    2121     </property> 
    2222     <layout class="QGridLayout" name="gridLayout"> 
     23      <item row="1" column="0"> 
     24       <layout class="QHBoxLayout" name="horizontalLayout_2"> 
     25        <item> 
     26         <widget class="QLabel" name="txtParam"> 
     27          <property name="sizePolicy"> 
     28           <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> 
     29            <horstretch>0</horstretch> 
     30            <verstretch>0</verstretch> 
     31           </sizepolicy> 
     32          </property> 
     33          <property name="text"> 
     34           <string>param1</string> 
     35          </property> 
     36         </widget> 
     37        </item> 
     38        <item> 
     39         <widget class="QLabel" name="txtOperator"> 
     40          <property name="text"> 
     41           <string>=</string> 
     42          </property> 
     43         </widget> 
     44        </item> 
     45        <item> 
     46         <widget class="QLineEdit" name="txtConstraint"> 
     47          <property name="text"> 
     48           <string/> 
     49          </property> 
     50         </widget> 
     51        </item> 
     52       </layout> 
     53      </item> 
    2354      <item row="0" column="0"> 
    2455       <layout class="QHBoxLayout" name="horizontalLayout"> 
    2556        <item> 
    26          <widget class="QComboBox" name="cbModel1"/> 
     57         <widget class="QLabel" name="txtName1"> 
     58          <property name="text"> 
     59           <string>name1</string> 
     60          </property> 
     61         </widget> 
    2762        </item> 
    2863        <item> 
     
    5489        </item> 
    5590        <item> 
    56          <widget class="QComboBox" name="cbModel2"/> 
     91         <widget class="QLabel" name="txtName2"> 
     92          <property name="text"> 
     93           <string>name2</string> 
     94          </property> 
     95         </widget> 
    5796        </item> 
    5897        <item> 
     
    74113         </widget> 
    75114        </item> 
    76        </layout> 
    77       </item> 
    78       <item row="1" column="0"> 
    79        <layout class="QHBoxLayout" name="horizontalLayout_2"> 
    80         <item> 
    81          <widget class="QLabel" name="txtParam"> 
    82           <property name="sizePolicy"> 
    83            <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> 
    84             <horstretch>0</horstretch> 
    85             <verstretch>0</verstretch> 
    86            </sizepolicy> 
    87           </property> 
    88           <property name="text"> 
    89            <string>param1</string> 
    90           </property> 
    91          </widget> 
    92         </item> 
    93         <item> 
    94          <widget class="QLabel" name="txtOperator"> 
    95           <property name="text"> 
    96            <string>=</string> 
    97           </property> 
    98          </widget> 
    99         </item> 
    100         <item> 
    101          <widget class="QLineEdit" name="txtConstraint"> 
    102           <property name="text"> 
    103            <string/> 
     115        <item> 
     116         <spacer name="horizontalSpacer"> 
     117          <property name="orientation"> 
     118           <enum>Qt::Horizontal</enum> 
     119          </property> 
     120          <property name="sizeHint" stdset="0"> 
     121           <size> 
     122            <width>40</width> 
     123            <height>20</height> 
     124           </size> 
     125          </property> 
     126         </spacer> 
     127        </item> 
     128        <item> 
     129         <widget class="QPushButton" name="cmdRevert"> 
     130          <property name="text"> 
     131           <string>Swap</string> 
    104132          </property> 
    105133         </widget> 
     
    160188       </property> 
    161189       <property name="popupMode"> 
    162         <enum>QToolButton::InstantPopup</enum> 
     190        <enum>QToolButton::MenuButtonPopup</enum> 
    163191       </property> 
    164192       <property name="toolButtonStyle"> 
  • src/sas/qtgui/Perspectives/Fitting/UnitTesting/ComplexConstraintTest.py

    r2e5081b rd72ac57  
    6969        self.assertEqual(self.widget.txtConstraint.text(), 'M1.scale') 
    7070        self.assertEqual(self.widget.txtOperator.text(), '=') 
    71         self.assertEqual(self.widget.cbModel1.currentText(), 'M1') 
    72         self.assertEqual(self.widget.cbModel2.currentText(), 'M1') 
     71        self.assertEqual(self.widget.txtName1.text(), 'M1') 
     72        self.assertEqual(self.widget.txtName2.text(), 'M1') 
    7373 
    7474    def testTooltip(self): 
     
    8181        self.assertEqual(self.widget.txtConstraint.toolTip(), tooltip) 
    8282 
    83     def notestValidateFormula(self): 
     83    def testValidateFormula(self): 
    8484        ''' assure enablement and color for valid formula ''' 
    8585        # Invalid string 
     
    141141        c = self.widget.constraint() 
    142142        self.assertEqual(c[0], 'M1') 
    143         self.assertEqual(c[1].func, 'M1.bjerrum_length') 
     143        self.assertEqual(c[1].func, 'M1.sld_solvent') 
    144144        #self.assertEqual(c[1].operator, '>=') 
    145145 
Note: See TracChangeset for help on using the changeset viewer.