Changeset 6011788 in sasview for src/sas/qtgui/Perspectives/Fitting
- Timestamp:
- May 15, 2017 5:21:45 AM (8 years ago)
- 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:
- 2241130
- Parents:
- ad6b4e2
- Location:
- src/sas/qtgui/Perspectives/Fitting
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
rad6b4e2 r6011788 34 34 from sas.qtgui.Perspectives.Fitting.FitPage import FitPage 35 35 from sas.qtgui.Perspectives.Fitting.ViewDelegate import ModelViewDelegate 36 from sas.qtgui.Perspectives.Fitting.ViewDelegate import PolyViewDelegate 36 37 37 38 TAB_MAGNETISM = 4 … … 77 78 self.chi2 = None 78 79 80 # Does the control support UNDO/REDO 81 # temporarily off 82 self.support_undo = False 83 79 84 # Data for chosen model 80 85 self.model_data = None … … 146 151 self.setPolyModel() 147 152 self.setTableProperties(self.lstPoly) 153 # Delegates for custom editing and display 154 self.lstPoly.setItemDelegate(PolyViewDelegate(self)) 148 155 149 156 # Magnetism model displayed in magnetism list … … 361 368 self.createDefaultDataset() 362 369 363 # TODO: update state stack 364 #state = self.currentState() 370 # Update state stack 371 if self.support_undo: 372 state = self.currentState() 373 self.pushFitPage(state) 365 374 366 375 def onSelectStructureFactor(self): … … 850 859 851 860 # Extract changed value. Assumes proper validation by QValidator/Delegate 852 # TODO: disable model update for uneditable cells/columns853 861 try: 854 862 value = float(item.text()) … … 1068 1076 checked_list = ["Distribution of "+param.name, str(param.default), 1069 1077 str(param.limits[0]), str(param.limits[1]), 1070 "35", "3", " "]1078 "35", "3", "gaussian"] 1071 1079 FittingUtilities.addCheckedListToModel(self._poly_model, checked_list) 1072 1080 1073 1081 #TODO: Need to find cleaner way to input functions 1074 func = QtGui.QComboBox()1075 func.addItems(['rectangle', 'array', 'lognormal', 'gaussian', 'schulz',])1076 func_index = self.lstPoly.model().index(row, 6)1077 self.lstPoly.setIndexWidget(func_index, func)1082 #func = QtGui.QComboBox() 1083 #func.addItems(['rectangle', 'array', 'lognormal', 'gaussian', 'schulz',]) 1084 #func_index = self.lstPoly.model().index(row, 6) 1085 #self.lstPoly.setIndexWidget(func_index, func) 1078 1086 1079 1087 FittingUtilities.addPolyHeadersToModel(self._poly_model) … … 1179 1187 self.q_range_max = fp.fit_options[fp.MAX_RANGE] 1180 1188 self.npts = fp.fit_options[fp.NPTS] 1181 #fp.fit_options[fp.NPTS_FIT] = self.npts_fit1182 1189 self.log_points = fp.fit_options[fp.LOG_POINTS] 1183 1190 self.weighting = fp.fit_options[fp.WEIGHTING] … … 1258 1265 Add a new fit page object with current state 1259 1266 """ 1260 #page_stack.append(new_page)1267 self.page_stack.append(new_page) 1261 1268 pass 1262 1269 … … 1265 1272 Remove top fit page from stack 1266 1273 """ 1267 #ifpage_stack:1268 #page_stack.pop()1274 if self.page_stack: 1275 self.page_stack.pop() 1269 1276 pass 1270 1277 -
src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingWidgetTest.py
r1bc27f1 r6011788 329 329 for row in xrange(self.widget._poly_model.rowCount()): 330 330 func_index = self.widget._poly_model.index(row, 6) 331 self.assertTrue(isinstance(self.widget.lstPoly.indexWidget(func_index), QtGui.QComboBox))331 #self.assertTrue(isinstance(self.widget.lstPoly.indexWidget(func_index), QtGui.QComboBox)) 332 332 self.assertIn('Distribution of', self.widget._poly_model.item(row, 0).text()) 333 333 -
src/sas/qtgui/Perspectives/Fitting/ViewDelegate.py
rad6b4e2 r6011788 4 4 import sas.qtgui.Utilities.GuiUtils as GuiUtils 5 5 6 # Table view columns 7 PROPERTY=0 8 VALUE=1 9 MIN=2 10 MAX=3 11 UNIT=4 6 # Main parameter table view columns 7 PARAM_PROPERTY=0 8 PARAM_VALUE=1 9 PARAM_MIN=2 10 PARAM_MAX=3 11 PARAM_UNIT=4 12 13 # polydispersity functions 14 POLYDISPERSE_FUNCTIONS=['rectangle', 'array', 'lognormal', 'gaussian', 'schulz'] 15 # polydispersity columns 16 POLY_PARAMETER=0 17 POLY_PD=1 18 POLY_MIN=2 19 POLY_MAX=3 20 POLY_NPTS=4 21 POLY_NSIGS=5 22 POLY_FUNCTION=6 23 24 class CustomLineEdit(QtGui.QLineEdit): 25 editingFinished = QtCore.pyqtSignal() 26 def __init__(self, parent=None, old_value=None): 27 super(CustomLineEdit, self).__init__(parent) 28 self.setAutoFillBackground(True) 29 self.old_value = old_value 30 def focusOutEvent(self, event): 31 self.editingFinished.emit() 12 32 13 33 class ModelViewDelegate(QtGui.QStyledItemDelegate): … … 19 39 Overwrite generic painter for certain columns 20 40 """ 21 if index.column() == UNIT or index.column() == MIN or index.column() == MAX:41 if index.column() in (PARAM_UNIT, PARAM_MIN, PARAM_MAX): 22 42 # Units - present in nice HTML 23 43 options = QtGui.QStyleOptionViewItemV4(option) … … 50 70 QtGui.QStyledItemDelegate.paint(self, painter, option, index) 51 71 52 #def sizeHint(self, option, index): 53 # options = QtGui.QStyleOptionViewItemV4(option) 54 # self.initStyleOption(options,index) 72 def createEditor(self, widget, option, index): 73 """ 74 Overwrite generic editor for certain columns 75 """ 76 if not index.isValid(): 77 return 0 78 if index.column() == PARAM_VALUE: #only in the value column 79 editor = QtGui.QLineEdit(widget) 80 validator = QtGui.QDoubleValidator() 81 editor.setValidator(validator) 82 return editor 83 elif index.column() in (PARAM_MIN, PARAM_MAX): 84 # Save current value in case we need to revert 85 #self._old_value = index.data().toFloat()[0] 86 self._old_value = index.data().toString() 87 editor = CustomLineEdit(widget, old_value=self._old_value) 88 editor.editingFinished.connect(self.commitAndCloseEditor) 89 return editor 55 90 56 # doc = QtGui.QTextDocument() 57 # doc.setHtml(options.text) 58 # doc.setTextWidth(options.rect.width()) 59 # return QtCore.QSize(doc.idealWidth(), doc.size().height()) 91 return super(ModelViewDelegate, self).createEditor(widget, option, index) 92 93 #def setEditorData(self, editor, index): 94 # if index.column() == MIN: 95 # #value = index.data().toString()[0] 96 # value = index.model().data(index, QtCore.Qt.DisplayRole).toString() 97 # print "VALUE = ", value 98 # editor.setText('['+value+']') 99 # return editor 100 101 # return super(ModelViewDelegate, self).setEditorData(editor, index) 102 103 def commitAndCloseEditor(self): 104 editor = self.sender() 105 content = editor.text() 106 try: 107 value_float = float(content) 108 except ValueError: 109 # TODO: Notify the user 110 # <scary popup> 111 # Do nothing 112 return 113 self.commitData.emit(editor) 114 self.closeEditor.emit(editor, QtGui.QAbstractItemDelegate.NoHint) 115 116 117 class PolyViewDelegate(QtGui.QStyledItemDelegate): 118 """ 119 Custom delegate for appearance and behavior control of the polydisperisty view 120 """ 121 def createEditor(self, parent, option, index): 122 # TODO: set it to correct index on creation 123 if index.column() == POLY_FUNCTION: 124 editor = QtGui.QComboBox(parent) 125 for function in POLYDISPERSE_FUNCTIONS: 126 editor.addItem(function) 127 return editor 128 else: 129 QtGui.QStyledItemDelegate.createEditor(self, parent, option, index)
Note: See TracChangeset
for help on using the changeset viewer.