Changeset ec34023 in sasview


Ignore:
Timestamp:
Jul 11, 2018 9:31:50 AM (6 weeks ago)
Author:
Piotr Rozyczko <rozyczko@…>
Branches:
ESS_GUI_CategroyManager
Children:
693aaf79
Parents:
a74e5ff
Message:

Working GUI. Some elements/func missing to come later.

Location:
src/sas/qtgui/MainWindow
Files:
3 edited

Legend:

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

    ra74e5ff rec34023  
    6767        self.all_data = [] 
    6868 
    69         #TODO: Need to fix it? 
    70         #self.page_id = 200 + self.tab_id 
     69        # Default checked state 
     70        self.chkEnable.setCheckState(QtCore.Qt.Checked) 
    7171 
    7272        # Data for chosen model 
    7373        self.model_data = None 
    74  
    75         # Which shell is being currently displayed? 
    76         self.current_shell_displayed = 0 
    77         # List of all shell-unique parameters 
    78         self.shell_names = [] 
    79  
    80         # signal communicator 
    81         #self.communicate = self.parent.communicate 
    82  
    8374 
    8475    def readCategoryInfo(self): 
     
    9788            self.regenerateModelDict() 
    9889 
     90        self.category_list = sorted(self.master_category_dict.keys()) 
     91 
    9992        # Load the model dict 
    10093        models = load_standard_models() 
     94        # Reverse {map model -> category} 
     95        self.model_to_category = {} 
    10196        for model in models: 
     97            # {model name -> model object} 
    10298            self.models[model.name] = model 
    103  
    104         self.category_list = sorted(self.master_category_dict.keys()) 
     99            # find model.name in self.master_category_dict 
     100            for key, value in self.master_category_dict.items(): 
     101                # value is a list of [[model_name, bool],...] 
     102                if model.name in [name[0] for name in value]: 
     103                    self.model_to_category[model.name] = key 
     104                    break 
    105105 
    106106    def initializeModels(self): 
     
    116116        self.initializeModelList() 
    117117        self.setTableProperties(self.lstCategory) 
     118 
    118119        # Delegates for custom editing and display 
    119         # self.lstCategory.setItemDelegate(CategoryViewDelegate(self)) 
     120        self.lstCategory.setItemDelegate(CategoryViewDelegate(self)) 
    120121        # 
    121122        self.lstCategory.setAlternatingRowColors(True) 
     
    131132        for model in self.models: 
    132133            item = QtGui.QStandardItem(model) 
     134            empty_item = QtGui.QStandardItem() 
    133135            # Add a checkbox to it 
    134136            item.setCheckable(True) 
     137            item.setCheckState(QtCore.Qt.Checked) 
    135138            item.setEditable(False) 
    136             self._category_model.appendRow(item) 
    137  
    138         self.lstCategory.setModel(self._category_model) 
    139         self._category_model.insertColumn(1,[]) 
    140  
    141         #self.cbCategory = QtWidgets.QComboBox() 
    142         #self.cbCategory.addItems(self.category_list) 
    143         #self.cbCategory.setEditable(True) 
    144         #self.cbCategory.addItem(QtGui.QIcon(":/res/bookmark.png"), "New Category") 
    145         #self.cbCategory.setCurrentIndex(0) 
     139            self._category_model.appendRow([item, empty_item]) 
     140 
     141        # Proxy model for showing a subset of model content 
     142        self.model_proxy = QtCore.QSortFilterProxyModel(self) 
     143        self.model_proxy.setSourceModel(self._category_model) 
     144        self.lstCategory.setModel(self.model_proxy) 
    146145 
    147146        for ind, model in enumerate(self.models): 
    148             for cat_index, cat_key in enumerate(self.category_list): 
    149                 if model in self.master_category_dict[cat_key]: 
    150                     current_cat = self.category_list.pop(cat_index) 
    151                     self.category_list.insert(0, current_cat) 
    152             #Define cbCategory 
    153             ### 
    154             self.cbCategory = QtWidgets.QComboBox() 
    155             self.cbCategory.addItems(self.category_list) 
    156             self.cbCategory.setEditable(True) 
    157             self.cbCategory.addItem(QtGui.QIcon(":/res/bookmark.png"), "New Category") 
    158             self.cbCategory.setCurrentIndex(0) 
    159             #### 
    160             ind = self._category_model.index(ind,1) 
    161             self.lstCategory.setIndexWidget(ind,self.cbCategory) 
    162  
    163         #Whenever new category is added it should be updated in all other comboboxes 
    164  
    165     def onCategoryChange(self, index): 
    166         """ 
    167         """ 
    168         new_category = self.cbCategory.currentText() 
    169  
    170         pass 
     147            current_category = self.model_to_category[model] 
     148            self._category_model.item(ind,1).setText(current_category) 
     149 
     150    def onCategoryChange(self, index, row): 
     151        """ 
     152        """ 
     153        # New category from the delegate 
     154        new_category = self.category_list[index] 
     155        # Current item from model 
     156        model = self._category_model.item(row, 0).text() 
     157        self.model_to_category[model] = new_category 
     158 
     159        # Display the current value as txt 
     160        self._category_model.item(row,1).setText(new_category) 
     161 
     162        # Update the backend 
     163        # ??? 
    171164 
    172165    def onNewCategory(self, text): 
     
    177170        # editTextChanged() has to be caught 
    178171        # When text is edited category_list needs to be updated and models initialized again 
    179         text = self.cbCategory.currentText() 
     172        #text = self.cbCategory.currentText() 
    180173        self.category_list.append(text) 
    181174        self.initializeModelList() 
     
    200193    def initializeSignals(self): 
    201194        """ 
    202  
    203195        :return: 
    204196        """ 
    205         self.cbCategory.currentIndexChanged.connect(self.onCategoryChange) 
    206         #TODO: Probably won't work as it is combobox property 
    207         self.cbCategory.editTextChanged.connect(self.onNewCategory) 
    208  
    209     def addActions(self): 
    210         """ 
    211         Add actions to the logo push buttons 
    212         """ 
    213  
    214         self.cmdOK.clicked.connect(self.close) 
    215  
     197        #self.cmdOK.clicked.connect(self.close) 
     198        self.chkEnable.toggled.connect(self.onEnableAll) 
     199 
     200        # every change in txtSearch 
     201        self.txtSearch.textChanged.connect(self.onSearch) 
     202 
     203        # signals from the delegate 
     204        self.lstCategory.itemDelegate().combo_updated.connect(self.onCategoryChange) 
     205 
     206    def onEnableAll(self, isChecked): 
     207        """ 
     208        Respond to the Enable/Disable All checkbox 
     209        """ 
     210        select = QtCore.Qt.Checked if isChecked else QtCore.Qt.Unchecked 
     211        for row in range(self._category_model.rowCount()): 
     212            self._category_model.item(row).setCheckState(select) 
     213        pass 
     214 
     215    def onSearch(self): 
     216        """ 
     217        Respond to text entered in search field 
     218        """ 
     219        if self.txtSearch.isModified(): 
     220            input_to_check = str(self.txtSearch.text()) 
     221 
     222        # redefine the proxy model 
     223        self.model_proxy.setFilterRegExp(QtCore.QRegExp(input_to_check, 
     224                          QtCore.Qt.CaseInsensitive, QtCore.QRegExp.FixedString)) 
    216225 
    217226    def setTableProperties(self, table): 
     
    222231        table.verticalHeader().setVisible(False) 
    223232        table.setAlternatingRowColors(True) 
    224         table.setSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Expanding) 
     233        #table.setSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Expanding) 
     234        table.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) 
    225235        table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) 
    226236        table.resizeColumnsToContents() 
  • src/sas/qtgui/MainWindow/UI/CategoryManagerUI.ui

    ra74e5ff rec34023  
    77    <x>0</x> 
    88    <y>0</y> 
    9     <width>474</width> 
    10     <height>492</height> 
     9    <width>596</width> 
     10    <height>783</height> 
    1111   </rect> 
    1212  </property> 
     
    4747     <layout class="QGridLayout" name="gridLayout"> 
    4848      <item row="0" column="0"> 
    49        <layout class="QHBoxLayout" name="horizontalLayout_2"> 
     49       <layout class="QHBoxLayout" name="horizontalLayout_3"> 
    5050        <item> 
    51          <widget class="QCheckBox" name="cbkCategory"> 
     51         <widget class="QCheckBox" name="chkEnable"> 
    5252          <property name="text"> 
    5353           <string>Enable/Disable all</string> 
     
    5656        </item> 
    5757        <item> 
    58          <widget class="QLineEdit" name="txtSearch"> 
    59           <property name="text"> 
    60            <string/> 
     58         <spacer name="horizontalSpacer_2"> 
     59          <property name="orientation"> 
     60           <enum>Qt::Horizontal</enum> 
    6161          </property> 
    62          </widget> 
     62          <property name="sizeHint" stdset="0"> 
     63           <size> 
     64            <width>40</width> 
     65            <height>20</height> 
     66           </size> 
     67          </property> 
     68         </spacer> 
     69        </item> 
     70        <item> 
     71         <layout class="QHBoxLayout" name="horizontalLayout_2"> 
     72          <item> 
     73           <widget class="QLabel" name="label"> 
     74            <property name="text"> 
     75             <string>Search</string> 
     76            </property> 
     77           </widget> 
     78          </item> 
     79          <item> 
     80           <widget class="QLineEdit" name="txtSearch"> 
     81            <property name="text"> 
     82             <string/> 
     83            </property> 
     84           </widget> 
     85          </item> 
     86         </layout> 
    6387        </item> 
    6488       </layout> 
  • src/sas/qtgui/MainWindow/ViewDelegate.py

    r2393988 rec34023  
    77class CategoryViewDelegate(QtWidgets.QStyledItemDelegate): 
    88    """ 
    9     Custom delegate for appearance and behavior control of the polydispersity view 
     9    Custom delegate for appearance and behavior control of the category manager view 
    1010    """ 
    11  
    12     combo_updated = QtCore.pyqtSignal(str, int) 
    13     filename_updated = QtCore.pyqtSignal(int) 
     11    combo_updated = QtCore.pyqtSignal(int, int) 
    1412 
    1513    def __init__(self, parent=None): 
     
    2119        self.model_name = 1 
    2220        self.model_category = 2 
     21        self.parent = parent 
    2322 
    2423    def editableParameters(self): 
    2524        return [self.model_enable, self.model_category] 
    2625 
    27     # def createEditor(self, widget, option, index): 
    28     #     # Remember the current choice 
    29     #     if not index.isValid(): 
    30     #         return 0 
    31     #     elif index.column() in self.editableParameters(): 
    32     #         self.editor = QtGui.QLineEdit(widget) 
    33     #         validator = QtGui.QDoubleValidator() 
    34     #         self.editor.setValidator(validator) 
    35     #         return self.editor 
    36     #     else: 
    37     #         QtGui.QStyledItemDelegate.createEditor(self, widget, option, index) 
     26    def createEditor(self, widget, option, index): 
     27        """ 
     28        Custom editor for the Category column - combo box with all categories 
     29        """ 
     30        if not index.isValid(): 
     31            return 0 
     32        elif index.column() == 1: 
     33            proxy_model = option.widget.model() 
     34            model_index = proxy_model.mapToSource(index) 
     35            current_text = self.parent._category_model.itemFromIndex(model_index).text() 
     36            categories = self.parent.category_list 
    3837 
    39     # def paint(self, painter, option, index): 
    40     #     """ 
    41     #     Overwrite generic painter for certain columns 
    42     #     """ 
    43     #     if index.column() in (self.model_enable): 
    44     #         # Units - present in nice HTML 
    45     #         options = QtGui.QStyleOptionViewItemV4(option) 
    46     #         self.initStyleOption(options,index) 
    47     # 
    48     #         style = QtGui.QApplication.style() if options.widget is None else options.widget.style() 
    49     # 
    50     #         # Prepare document for inserting into cell 
    51     #         doc = QtGui.QTextDocument() 
    52     # 
    53     #         # Convert the unit description into HTML 
    54     #         text_html = GuiUtils.convertUnitToHTML(str(options.text)) 
    55     #         doc.setHtml(text_html) 
    56     # 
    57     #         # delete the original content 
    58     #         options.text = "" 
    59     #         style.drawControl(QtGui.QStyle.CE_ItemViewItem, options, painter, options.widget); 
    60     # 
    61     #         context = QtGui.QAbstractTextDocumentLayout.PaintContext() 
    62     #         textRect = style.subElementRect(QtGui.QStyle.SE_ItemViewItemText, options) 
    63     # 
    64     #         painter.save() 
    65     #         painter.translate(textRect.topLeft()) 
    66     #         painter.setClipRect(textRect.translated(-textRect.topLeft())) 
    67     #         # Draw the QTextDocument in the cell 
    68     #         doc.documentLayout().draw(painter, context) 
    69     #         painter.restore() 
    70     #     else: 
    71     #         # Just the default paint 
    72     #         QtGui.QStyledItemDelegate.paint(self, painter, option, index) 
     38            self.editor = QtWidgets.QComboBox(widget) 
     39            self.editor.addItems(categories) 
     40 
     41            self.row = index.row() 
     42 
     43            # Scroll to the corresponding text 
     44            self.editor.setCurrentIndex(self.editor.findText(current_text)) 
     45            self.editor.currentIndexChanged.connect(self.onEditorChange) 
     46 
     47            return self.editor 
     48        else: 
     49            QtGui.QStyledItemDelegate.createEditor(self, widget, option, index) 
     50 
     51    def onEditorChange(self, index): 
     52        """ 
     53        """ 
     54        # Notify the parent about the change 
     55        self.combo_updated.emit(index, self.row) 
     56        pass 
Note: See TracChangeset for help on using the changeset viewer.