Changeset 6052c02 in sasview for src/sas/qtgui


Ignore:
Timestamp:
Jul 9, 2018 12:13:03 PM (6 years ago)
Author:
Torin Cooper-Bennun <torin.cooper-bennun@…>
Branches:
ESS_GUI_iss959
Children:
085e3c9d
Parents:
515c23df
Message:

added S(Q) tab with a preliminary (example) param. tree, incl. attempt to use comboboxes for some properties

Location:
src/sas/qtgui/Perspectives/Fitting
Files:
3 edited

Legend:

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

    re20870bc r6052c02  
    4545from sas.qtgui.Perspectives.Fitting.ViewDelegate import PolyViewDelegate 
    4646from sas.qtgui.Perspectives.Fitting.ViewDelegate import MagnetismViewDelegate 
     47from sas.qtgui.Perspectives.Fitting.ViewDelegate import StructureViewDelegate 
    4748from sas.qtgui.Perspectives.Fitting.Constraint import Constraint 
    4849from sas.qtgui.Perspectives.Fitting.MultiConstraint import MultiConstraint 
     
    5051 
    5152 
    52  
    53 TAB_MAGNETISM = 4 
    54 TAB_POLY = 3 
     53TAB_STRUCTURE = 3 
     54TAB_POLY = 4 
     55TAB_MAGNETISM = 5 
     56 
    5557CATEGORY_DEFAULT = "Choose category..." 
    5658CATEGORY_STRUCTURE = "Structure Factor" 
     
    195197        # Enable/disable UI components 
    196198        self.setEnablementOnDataLoad() 
     199 
     200    @property 
     201    def structureView(self): 
     202        return self.lstStructureOptions 
    197203 
    198204    def initializeGlobals(self): 
     
    307313        self._poly_model = ToolTippedItemModel() 
    308314        self._magnet_model = ToolTippedItemModel() 
     315        self._structure_model = ToolTippedItemModel() 
    309316 
    310317        # Param model displayed in param list 
     
    361368        # Delegates for custom editing and display 
    362369        self.lstMagnetic.setItemDelegate(MagnetismViewDelegate(self)) 
     370 
     371        # Structure factor options model (TEMPORARY EXAMPLE) 
     372 
     373        header_list = ["Property", "Value"] 
     374        num_cols = len(header_list) 
     375        self._structure_model.setHorizontalHeaderLabels(header_list) 
     376 
     377        self.structure_params = [ 
     378            "mixture", 
     379            "effective radius", 
     380            "volume fraction" 
     381        ] 
     382 
     383        # these are just an example 
     384        param_vals = [ 
     385            "P(Q)S(Q)", 
     386            "ER_mean_curvature", 
     387            "VR_something_or_other" 
     388        ] 
     389 
     390        num_SoQs = 3 
     391        for i in range(num_SoQs): 
     392            item_toplevel = QtGui.QStandardItem() 
     393            item_toplevel.setEditable(False) 
     394            item_toplevel.setText("S{}(Q)".format(i+1)) 
     395 
     396            for param, val in zip(self.structure_params, param_vals): 
     397                item1 = QtGui.QStandardItem() 
     398                item1.setEditable(False) 
     399                item1.setText(param) 
     400 
     401                item2 = QtGui.QStandardItem() 
     402                item2.setText(val) 
     403 
     404                item_toplevel.appendRow([item1, item2]) 
     405 
     406            row_toplevel = [item_toplevel] 
     407            for i in range(num_cols - 1): 
     408                item = QtGui.QStandardItem() 
     409                item.setEditable(False) 
     410                row_toplevel.append(item) 
     411 
     412            self._structure_model.appendRow(row_toplevel) 
     413 
     414        self.lstStructureOptions.setModel(self._structure_model) 
     415        self.lstStructureOptions.setItemDelegate(StructureViewDelegate(self)) 
     416        self.lstStructureOptions.setAlternatingRowColors(True) 
     417        self.lstStructureOptions.setStyleSheet(stylesheet) 
    363418 
    364419    def initializeCategoryCombo(self): 
  • src/sas/qtgui/Perspectives/Fitting/UI/FittingWidgetUI.ui

    rd4dac80 r6052c02  
    77    <x>0</x> 
    88    <y>0</y> 
    9     <width>680</width> 
     9    <width>487</width> 
    1010    <height>605</height> 
    1111   </rect> 
     
    352352      </attribute> 
    353353     </widget> 
     354     <widget class="QWidget" name="tabStructure"> 
     355      <attribute name="title"> 
     356       <string>S(Q) Options</string> 
     357      </attribute> 
     358      <layout class="QGridLayout" name="gridLayout_7"> 
     359       <property name="leftMargin"> 
     360        <number>15</number> 
     361       </property> 
     362       <property name="topMargin"> 
     363        <number>15</number> 
     364       </property> 
     365       <property name="rightMargin"> 
     366        <number>15</number> 
     367       </property> 
     368       <property name="bottomMargin"> 
     369        <number>15</number> 
     370       </property> 
     371       <item row="0" column="0"> 
     372        <widget class="QTreeView" name="lstStructureOptions"/> 
     373       </item> 
     374      </layout> 
     375     </widget> 
    354376     <widget class="QWidget" name="tab_4"> 
    355377      <attribute name="title"> 
  • src/sas/qtgui/Perspectives/Fitting/ViewDelegate.py

    rfde5bcd r6052c02  
    44 
    55import sas.qtgui.Utilities.GuiUtils as GuiUtils 
     6 
     7import logging 
     8logger = logging.getLogger(__name__) 
    69 
    710class ModelViewDelegate(QtWidgets.QStyledItemDelegate): 
     
    102105                return 
    103106        QtWidgets.QStyledItemDelegate.setModelData(self, editor, model, index) 
    104  
    105107 
    106108class PolyViewDelegate(QtWidgets.QStyledItemDelegate): 
     
    280282            # Just the default paint 
    281283            QtWidgets.QStyledItemDelegate.paint(self, painter, option, index) 
     284 
     285class StructureViewDelegate(QtWidgets.QStyledItemDelegate): 
     286    """ 
     287    Custom delegate for appearance and behaviour control of the structure 
     288    factor options view 
     289    """ 
     290    def __init__(self, parent=None): 
     291        """ 
     292        Override parent constructor 
     293        """ 
     294 
     295        super(StructureViewDelegate, self).__init__() 
     296 
     297        self.fittingWidget = parent 
     298 
     299    def paint(self, painter, option, index): 
     300        """ 
     301        Override generic painter 
     302        """ 
     303        # TODO override this with something useful ... ? 
     304        super(StructureViewDelegate, self).paint( 
     305            painter, option, index 
     306        ) 
     307 
     308    def createEditor(self, parent, option, index): 
     309        """ 
     310        Override generic createEditor -- certain elements have 
     311        combo boxes 
     312        """ 
     313 
     314        model = self.fittingWidget.structureView.model() 
     315 
     316        if not index.parent(): 
     317            # we only care about child items since we don't edit top-level 
     318            # items in this view anyway 
     319            return super(QtWidgets.QStyledItemDelegate, self).createEditor( 
     320                parent, option, index 
     321            ) 
     322 
     323        # navigate to the parameter name through the parent item (it'll be 
     324        # on the same row, but col. 0) 
     325        parent_item = model.itemFromIndex(index.parent()) 
     326        param_item = parent_item.child(index.row(), 0) 
     327 
     328        #item = model.itemFromIndex(index) 
     329        #print("item (row) [param]: \"{}\" ({}) [{}]".format( 
     330        #    item.text(), index.row(), param_item.text()) 
     331        #) 
     332 
     333        if param_item.text() in ["effective radius", "volume fraction"]: 
     334            # we want a combo box for these 
     335            return QtWidgets.QComboBox(parent) 
     336 
     337        # return default otherwise 
     338        return super(StructureViewDelegate, self).createEditor( 
     339            parent, option, index 
     340        ) 
Note: See TracChangeset for help on using the changeset viewer.