Index: src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingWidget.py (revision ce67f3500605dce00131350119c84c2aeb83ea66)
+++ src/sas/qtgui/Perspectives/Fitting/FittingWidget.py (revision 8aa3c4d403b8826d49db21b1bb7b4af93cb016fc)
@@ -49,7 +49,9 @@
from sas.qtgui.Perspectives.Fitting.MultiConstraint import MultiConstraint
from sas.qtgui.Perspectives.Fitting.ReportPageLogic import ReportPageLogic
+from sas.qtgui.Perspectives.Fitting.OrderWidget import OrderWidget
TAB_MAGNETISM = 4
TAB_POLY = 3
+TAB_ORDERING = 5
CATEGORY_DEFAULT = "Choose category..."
MODEL_DEFAULT = "Choose model..."
@@ -210,4 +212,6 @@
logic = FittingLogic(data=GuiUtils.dataFromItem(data_item))
self._logic.append(logic)
+ # update the ordering tab
+ self.order_widget.updateData(self.all_data)
# Overwrite data type descriptor
@@ -324,4 +328,11 @@
self.tabResolution.setLayout(layout)
+ # Order widget
+ layout = QtWidgets.QGridLayout()
+ # pass all data items to access multiple datasets
+ self.order_widget = OrderWidget(self, self.all_data)
+ layout.addWidget(self.order_widget)
+ self.tabOrder.setLayout(layout)
+
# Define bold font for use in various controls
self.boldFont = QtGui.QFont()
@@ -412,4 +423,6 @@
# Delegates for custom editing and display
self.lstMagnetic.setItemDelegate(MagnetismViewDelegate(self))
+ # Initial status of the ordering tab - invisible
+ self.tabFitting.removeTab(TAB_ORDERING)
def initializeCategoryCombo(self):
@@ -500,4 +513,9 @@
""" Enable/disable chain fitting """
self.is_chain_fitting = isChecked
+ # show/hide the ordering tab
+ if isChecked:
+ self.tabFitting.insertTab(TAB_ORDERING, self.tabOrder, "Order")
+ else:
+ self.tabFitting.removeTab(TAB_ORDERING)
def toggle2D(self, isChecked):
@@ -1756,5 +1774,9 @@
fitters = []
- for fit_index in self.all_data:
+ # order datasets if chain fit
+ order = self.all_data
+ if self.is_chain_fitting:
+ order = self.order_widget.ordering()
+ for fit_index in order:
fitter_single = Fit() if fitter is None else fitter
data = GuiUtils.dataFromItem(fit_index)
Index: src/sas/qtgui/Perspectives/Fitting/OrderWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/OrderWidget.py (revision 8aa3c4d403b8826d49db21b1bb7b4af93cb016fc)
+++ src/sas/qtgui/Perspectives/Fitting/OrderWidget.py (revision 8aa3c4d403b8826d49db21b1bb7b4af93cb016fc)
@@ -0,0 +1,51 @@
+"""
+Widget/logic for dataset ordering.
+"""
+from PyQt5 import QtWidgets
+
+import sas.qtgui.Utilities.GuiUtils as GuiUtils
+
+# Local UI
+from sas.qtgui.Perspectives.Fitting.UI.OrderWidgetUI import Ui_OrderWidgetUI
+
+class OrderWidget(QtWidgets.QWidget, Ui_OrderWidgetUI):
+ def __init__(self, parent=None, all_data=None):
+ super(OrderWidget, self).__init__()
+
+ self.setupUi(self)
+ self.all_data = all_data
+ self.order = {}
+
+ self.setupTable()
+
+ def updateData(self, all_data):
+ """
+ Read in new datasets and update the view
+ """
+ self.all_data = all_data
+ self.lstOrder.clear()
+ self.setupTable()
+
+ def setupTable(self):
+ """
+ Populate the widget with dataset names in original order
+ """
+ if self.all_data is None: return
+ for item in self.all_data:
+ if not hasattr(item, 'data'): continue
+ dataset = GuiUtils.dataFromItem(item)
+ if dataset is None: continue
+ dataset_name = dataset.filename
+ self.order[dataset_name] = item
+ self.lstOrder.addItem(dataset_name)
+
+ def ordering(self):
+ """
+ Returns the current ordering of the datasets
+ """
+ order = []
+ for row in range(self.lstOrder.count()):
+ item_name = self.lstOrder.item(row).text()
+ order.append(self.order[item_name])
+ return order
+
Index: src/sas/qtgui/Perspectives/Fitting/UI/FittingWidgetUI.ui
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/UI/FittingWidgetUI.ui (revision 0d2629ff4d28162d942ff463cdf4793c5af2e692)
+++ src/sas/qtgui/Perspectives/Fitting/UI/FittingWidgetUI.ui (revision 8aa3c4d403b8826d49db21b1bb7b4af93cb016fc)
@@ -7,6 +7,6 @@
0
0
- 651
- 540
+ 540
+ 600
@@ -428,4 +428,9 @@
+
+
+ Order
+
+
Index: src/sas/qtgui/Perspectives/Fitting/UI/OrderWidgetUI.ui
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/UI/OrderWidgetUI.ui (revision 8aa3c4d403b8826d49db21b1bb7b4af93cb016fc)
+++ src/sas/qtgui/Perspectives/Fitting/UI/OrderWidgetUI.ui (revision 8aa3c4d403b8826d49db21b1bb7b4af93cb016fc)
@@ -0,0 +1,56 @@
+
+
+ OrderWidgetUI
+
+
+
+ 0
+ 0
+ 511
+ 417
+
+
+
+ Dataset Ordering
+
+
+ -
+
+
+ Data Order
+
+
+
-
+
+
+ <html><head/><body><p>Drag and drop items to define the order of fitting.</p></body></html>
+
+
+
+ -
+
+
+ QAbstractItemView::NoEditTriggers
+
+
+ QAbstractItemView::InternalMove
+
+
+ Qt::MoveAction
+
+
+ true
+
+
+ QAbstractItemView::ExtendedSelection
+
+
+
+
+
+
+
+
+
+
+