Changes in / [9b17efd:551f2bc] in sasview
- Location:
- src/sas/qtgui
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/qtgui/MainWindow/DataExplorer.py
r2b8286c r33b3e4d 574 574 new_plots = [] 575 575 for item, plot in plots.items(): 576 if self.updatePlot(plot) and filename !=plot.name:576 if self.updatePlot(plot) or filename not in plot.name: 577 577 continue 578 578 # Don't plot intermediate results, e.g. P(Q), S(Q) … … 583 583 # Don't include plots from different fitpages, but always include the original data 584 584 if fitpage_name in plot.name or filename == plot.name: 585 # 'sophisticated' test to generate standalone plot for residuals586 if 'esiduals' in plot.title:585 # Residuals get their own plot 586 if plot.plot_role == Data1D.ROLE_RESIDUAL: 587 587 plot.yscale='linear' 588 588 self.plotData([(item, plot)]) … … 686 686 687 687 # Update the active chart list 688 #self.active_plots[new_plot.data.id] = new_plot688 self.active_plots[new_plot.data.name] = new_plot 689 689 690 690 def appendPlot(self): … … 729 729 data_id = data.name 730 730 if data_id in ids_keys: 731 self.active_plots[data_id].replacePlot(data_id, data) 731 # We have data, let's replace data that needs replacing 732 if data.plot_role != Data1D.ROLE_DATA: 733 self.active_plots[data_id].replacePlot(data_id, data) 732 734 return True 733 735 elif data_id in ids_vals: 734 list(self.active_plots.values())[ids_vals.index(data_id)].replacePlot(data_id, data) 736 if data.plot_role != Data1D.ROLE_DATA: 737 list(self.active_plots.values())[ids_vals.index(data_id)].replacePlot(data_id, data) 735 738 return True 736 739 return False … … 946 949 self.context_menu.addAction(self.actionQuick3DPlot) 947 950 self.context_menu.addAction(self.actionEditMask) 951 #self.context_menu.addSeparator() 952 #self.context_menu.addAction(self.actionFreezeResults) 948 953 self.context_menu.addSeparator() 949 954 self.context_menu.addAction(self.actionDelete) … … 957 962 self.actionEditMask.triggered.connect(self.showEditDataMask) 958 963 self.actionDelete.triggered.connect(self.deleteItem) 964 self.actionFreezeResults.triggered.connect(self.freezeSelectedItems) 959 965 960 966 def onCustomContextMenu(self, position): … … 977 983 self.actionQuick3DPlot.setEnabled(is_2D) 978 984 self.actionEditMask.setEnabled(is_2D) 985 986 # Freezing 987 # check that the selection has inner items 988 freeze_enabled = False 989 if model_item.parent() is not None: 990 freeze_enabled = True 991 self.actionFreezeResults.setEnabled(freeze_enabled) 992 979 993 # Fire up the menu 980 994 self.context_menu.exec_(self.current_view.mapToGlobal(position)) … … 1112 1126 mask_editor.exec_() 1113 1127 1128 def freezeItem(self, item=None): 1129 """ 1130 Freeze given item 1131 """ 1132 if item is None: 1133 return 1134 self.model.beginResetModel() 1135 new_item = self.cloneTheory(item) 1136 self.model.appendRow(new_item) 1137 self.model.endResetModel() 1138 1139 def freezeSelectedItems(self): 1140 """ 1141 Freeze selected items 1142 """ 1143 indices = self.treeView.selectedIndexes() 1144 1145 proxy = self.treeView.model() 1146 model = proxy.sourceModel() 1147 1148 for index in indices: 1149 row_index = proxy.mapToSource(index) 1150 item_to_copy = model.itemFromIndex(row_index) 1151 if item_to_copy and item_to_copy.isCheckable(): 1152 self.freezeItem(item_to_copy) 1153 1114 1154 def deleteItem(self): 1115 1155 """ … … 1272 1312 1273 1313 # Caption for the theories 1274 checkbox_item.setChild(2, QtGui.QStandardItem(" THEORIES"))1314 checkbox_item.setChild(2, QtGui.QStandardItem("FIT RESULTS")) 1275 1315 1276 1316 # New row in the model -
src/sas/qtgui/MainWindow/DataManager.py
r4e255d1 ra54bbf2b 118 118 new_plot.path = path 119 119 new_plot.list_group_id = [] 120 # Assign the plot role to data 121 new_plot.plot_role = Data1D.ROLE_DATA 120 122 ##post data to plot 121 123 # plot data -
src/sas/qtgui/MainWindow/UI/DataExplorerUI.ui
rf4a6f2c r33b3e4d 508 508 </property> 509 509 </action> 510 <action name="actionFreezeResults"> 511 <property name="text"> 512 <string>Freeze Results</string> 513 </property> 514 </action> 510 515 </widget> 511 516 <resources/> -
src/sas/qtgui/MainWindow/UI/MainWindowUI.ui
r2f14b5d r33b3e4d 415 415 </property> 416 416 </action> 417 417 <action name="actionEditMask"> 418 418 <property name="text"> 419 419 <string>Edit Mask</string> … … 549 549 <action name="actionFreeze_Theory"> 550 550 <property name="text"> 551 <string>Freeze Theory</string>551 <string>Freeze Fit Results</string> 552 552 </property> 553 553 </action> -
src/sas/qtgui/Perspectives/Fitting/FittingLogic.py
r61f0c75 ra54bbf2b 154 154 new_plot.xaxis(_xaxis, _xunit) 155 155 new_plot.yaxis(_yaxis, _yunit) 156 157 if component is not None: 158 new_plot.plot_role = Data1D.ROLE_DELETABLE #deletable 156 159 157 160 return new_plot -
src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py
rf3cc979 r8b745c36 128 128 129 129 # Find param in volume_params 130 poly_pars = parameters.form_volume_parameters130 poly_pars = copy.deepcopy(parameters.form_volume_parameters) 131 131 if is2D: 132 132 poly_pars += parameters.orientation_parameters -
src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
rf3cc979 r6889ba2 273 273 self.theory_item = None 274 274 275 # list column widths 276 self.lstParamHeaderSizes = {} 277 275 278 # signal communicator 276 279 self.communicate = self.parent.communicate … … 361 364 self.lstParams.customContextMenuRequested.connect(self.showModelContextMenu) 362 365 self.lstParams.setAttribute(QtCore.Qt.WA_MacShowFocusRect, False) 366 # Column resize signals 367 self.lstParams.header().sectionResized.connect(self.onColumnWidthUpdate) 368 363 369 # Poly model displayed in poly list 364 370 self.lstPoly.setModel(self._poly_model) … … 1108 1114 self.SASModelToQModel(model, structure_factor) 1109 1115 1116 for column, width in self.lstParamHeaderSizes.items(): 1117 self.lstParams.setColumnWidth(column, width) 1118 1110 1119 # Update plot 1111 1120 self.updateData() … … 1669 1678 self._model_model.itemChanged.connect(self.onMainParamsChange) 1670 1679 1671 # Adjust the table cells width.1672 # TODO: find a way to dynamically adjust column width while resized expanding1673 self.lstParams.resizeColumnToContents(0)1674 self.lstParams.resizeColumnToContents(4)1675 self.lstParams.resizeColumnToContents(5)1676 self.lstParams.setSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Expanding)1677 1678 1680 def iterateOverPolyModel(self, func): 1679 1681 """ … … 2014 2016 self.magnet_params = {} 2015 2017 self.setMagneticModel() 2016 2017 # Adjust the table cells width2018 self.lstParams.resizeColumnToContents(0)2019 self.lstParams.setSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Expanding)2020 2018 2021 2019 # Now we claim the model has been loaded … … 2342 2340 2343 2341 # add polydisperse parameters if asked 2344 if self.chkPolydispersity.isChecked() :2342 if self.chkPolydispersity.isChecked() and self._poly_model.rowCount() > 0: 2345 2343 for key, value in self.poly_params.items(): 2346 2344 model.setParam(key, value) 2347 2345 # add magnetic params if asked 2348 2346 if self.chkMagnetism.isChecked(): 2349 for key, value in self.magnet_params.items() :2347 for key, value in self.magnet_params.items() and self._magnet_model.rowCount() > 0: 2350 2348 model.setParam(key, value) 2351 2349 … … 2481 2479 residuals_plot = FittingUtilities.plotResiduals(self.data, weighted_data) 2482 2480 residuals_plot.id = "Residual " + residuals_plot.id 2481 residuals_plot.plot_role = Data1D.ROLE_RESIDUAL 2483 2482 self.createNewIndex(residuals_plot) 2484 2483 return residuals_plot … … 2726 2725 fname_index = self._poly_model.index(row_index, self.lstPoly.itemDelegate().poly_filename) 2727 2726 self._poly_model.setData(fname_index, fname) 2727 2728 def onColumnWidthUpdate(self, index, old_size, new_size): 2729 """ 2730 Simple state update of the current column widths in the param list 2731 """ 2732 self.lstParamHeaderSizes[index] = new_size 2728 2733 2729 2734 def setMagneticModel(self): -
src/sas/qtgui/Plotting/Plotter2D.py
rfce6c55 r676a430 445 445 self.ymin, self.ymax)) 446 446 447 cbax = self.figure.add_axes([0.8 4, 0.2, 0.02, 0.7])447 cbax = self.figure.add_axes([0.88, 0.2, 0.02, 0.7]) 448 448 449 449 # Current labels for axes -
src/sas/qtgui/Plotting/PlotterData.py
rcee5c78 ra54bbf2b 17 17 """ 18 18 """ 19 ROLE_DATA=0 20 ROLE_DEFAULT=1 21 ROLE_DELETABLE=2 22 ROLE_RESIDUAL=3 19 23 def __init__(self, x=None, y=None, dx=None, dy=None): 20 24 """ … … 35 39 self.title = "" 36 40 self.scale = None 41 # plot_role: 42 # 0: data - no reload on param change 43 # 1: normal lifecycle (fit) 44 # 2: deletable on model change (Q(I), S(I)...) 45 # 3: separate chart on Show Plot (residuals) 46 self.plot_role = Data1D.ROLE_DEFAULT 37 47 38 48 def copy_from_datainfo(self, data1d): … … 184 194 self.title = "" 185 195 self.scale = None 196 # Always default 197 self.plot_role = Data1D.ROLE_DEFAULT 186 198 187 199 def copy_from_datainfo(self, data2d): -
src/sas/qtgui/Utilities/GuiUtils.py
r5d28d6b ra54bbf2b 322 322 assert isinstance(item, QtGui.QStandardItem) 323 323 324 # lists of plots names/ids for all deletable plots on item 324 325 names = [p.name for p in new_plots if p.name is not None] 325 326 ids = [p.id for p in new_plots if p.id is not None] … … 329 330 for index in range(item.rowCount()): 330 331 plot_item = item.child(index) 331 if plot_item.isCheckable(): 332 plot_data = plot_item.child(0).data() 333 if (plot_data.id is not None) and (plot_data.id not in ids) and (plot_data.name not in names): 334 items_to_delete.append(plot_item) 332 if not plot_item.isCheckable(): 333 continue 334 plot_data = plot_item.child(0).data() 335 if (plot_data.id is not None) and \ 336 (plot_data.id not in ids) and \ 337 (plot_data.name not in names) and \ 338 (plot_data.plot_role == Data1D.ROLE_DELETABLE): 339 items_to_delete.append(plot_item) 335 340 336 341 for plot_item in items_to_delete:
Note: See TracChangeset
for help on using the changeset viewer.