def _addNewDescriptorTableRow(self, name, descriptor): """ Adds a new row to the descriptor table. """ row = self.descriptorsTable.rowCount() self.descriptorsTable.insertRow(row) item_widget = QTableWidgetItem(name) item_widget.setFont(self.labelfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable) item_widget.setTextAlignment(Qt.AlignLeft) self.descriptorsTable.setItem(row, 0, item_widget) self.descriptorsTable.resizeColumnToContents(0) s = self._makeProperAAString(descriptor) item_widget = QTableWidgetItem(s) item_widget.setFont(self.descriptorfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable) item_widget.setTextAlignment(Qt.AlignLeft) self.descriptorsTable.setItem(row, 1, item_widget) self.descriptorsTable.setColumnWidth(1, self.descriptorsTable.width()-self.descriptorsTable.columnWidth(0)-20) self.descriptorsTable.setRowHeight(row, 16)
def _addNewDescriptorTableRow(self, name, descriptor): """ Adds a new row to the descriptor table. """ row = self.descriptorsTable.rowCount() self.descriptorsTable.insertRow(row) item_widget = QTableWidgetItem(name) item_widget.setFont(self.labelfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable) item_widget.setTextAlignment(Qt.AlignLeft) self.descriptorsTable.setItem(row, 0, item_widget) self.descriptorsTable.resizeColumnToContents(0) s = self._makeProperAAString(descriptor) item_widget = QTableWidgetItem(s) item_widget.setFont(self.descriptorfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable) item_widget.setTextAlignment(Qt.AlignLeft) self.descriptorsTable.setItem(row, 1, item_widget) self.descriptorsTable.setColumnWidth( 1, self.descriptorsTable.width() - self.descriptorsTable.columnWidth(0) - 20) self.descriptorsTable.setRowHeight(row, 16)
def populate_tbl_helper(hsgui, tbl, col_headers, col_editable, row_list, row2_data_tup ): #tbl = main_skel.chip_TBL hheader = tbl.horizontalHeader() sort_col = hheader.sortIndicatorSection() sort_ord = hheader.sortIndicatorOrder() tbl.sortByColumn(0, Qt.AscendingOrder) # Basic Sorting prevBlockSignals = tbl.blockSignals(True) tbl.clear() tbl.setColumnCount(len(col_headers)) tbl.setRowCount(len(row_list)) tbl.verticalHeader().hide() tbl.setHorizontalHeaderLabels(col_headers) tbl.setSelectionMode( QAbstractItemView.SingleSelection ) tbl.setSelectionBehavior( QAbstractItemView.SelectRows) tbl.setSortingEnabled(False) for row in iter(row_list): data_tup = row2_data_tup[row] for col, data in enumerate(data_tup): item = QTableWidgetItem() try: int_data = int(data) item.setData(Qt.DisplayRole, int_data) except ValueError: # for strings item.setText(str(data)) except TypeError: #for lists item.setText(str(data)) item.setTextAlignment(Qt.AlignHCenter) if col_editable[col]: item.setFlags(item.flags() | Qt.ItemIsEditable) else: item.setFlags(item.flags() ^ Qt.ItemIsEditable) tbl.setItem(row, col, item) tbl.setSortingEnabled(True) tbl.sortByColumn(sort_col,sort_ord) # Move back to old sorting tbl.show() tbl.blockSignals(prevBlockSignals)
def populate_tbl_helper(hsgui, tbl, col_headers, col_editable, row_list, row2_data_tup ): #tbl = main_skel.chip_TBL hheader = tbl.horizontalHeader() sort_col = hheader.sortIndicatorSection() sort_ord = hheader.sortIndicatorOrder() tbl.sortByColumn(0, Qt.AscendingOrder) # Basic Sorting prevBlockSignals = tbl.blockSignals(True) tbl.clear() tbl.setColumnCount(len(col_headers)) tbl.setRowCount(len(row_list)) tbl.verticalHeader().hide() tbl.setHorizontalHeaderLabels(col_headers) tbl.setSelectionMode( QAbstractItemView.SingleSelection ) tbl.setSelectionBehavior( QAbstractItemView.SelectRows) tbl.setSortingEnabled(False) for row in iter(row_list): data_tup = row2_data_tup[row] for col, data in enumerate(data_tup): item = QTableWidgetItem() try: int_data = int(data) item.setData(Qt.DisplayRole, int_data) except ValueError: # for strings item.setText(str(data)) except TypeError: #for lists item.setText(str(data)) item.setTextAlignment(Qt.AlignHCenter) if col_editable[col]: item.setFlags(item.flags() | Qt.ItemIsEditable) else: item.setFlags(item.flags() ^ Qt.ItemIsEditable) tbl.setItem(row, col, item) tbl.setSortingEnabled(True) tbl.sortByColumn(sort_col,sort_ord) # Move back to old sorting tbl.show() tbl.blockSignals(prevBlockSignals)
def _fillSequenceTable(self): """ """ self.setComboBox = QComboBox() for chunk in self.win.assy.molecules: if chunk.isProteinChunk(): aa_list = chunk.protein.get_amino_acids() aa_list_len = len(aa_list) self.sequenceTable.setRowCount(aa_list_len) for index in range(aa_list_len): item_widget = QTableWidgetItem("") item_widget.setFont(self.labelfont) item_widget.setCheckState(Qt.Checked) item_widget.setTextAlignment(Qt.AlignLeft) item_widget.setSizeHint(QSize(20, 12)) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsUserCheckable) self.sequenceTable.setItem(index, 0, item_widget) item_widget = QTableWidgetItem(str(index + 1)) item_widget.setFont(self.labelfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) item_widget.setTextAlignment(Qt.AlignCenter) self.sequenceTable.setItem(index, 1, item_widget) item_widget = QTableWidgetItem("Any") item_widget.setFont(self.labelfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) item_widget.setTextAlignment(Qt.AlignCenter) self.sequenceTable.setItem(index, 2, item_widget) aa_string = self._get_mutation_descriptor( self._get_aa_for_index(index)) item_widget = QTableWidgetItem(aa_string) item_widget.setFont(self.descriptorfont) self.sequenceTable.setItem(index, 3, item_widget) self.sequenceTable.setRowHeight(index, 16) self.win.connect(self.sequenceTable, SIGNAL("cellClicked(int, int)"), self._sequenceTableCellChanged) self.sequenceTable.resizeColumnsToContents() self.sequenceTable.setColumnWidth(0, 35) self.sequenceTable.setColumnWidth(2, 80)
def _fillSequenceTable(self): """ """ self.setComboBox = QComboBox() for chunk in self.win.assy.molecules: if chunk.isProteinChunk(): aa_list = chunk.protein.get_amino_acids() aa_list_len = len(aa_list) self.sequenceTable.setRowCount(aa_list_len) for index in range(aa_list_len): item_widget = QTableWidgetItem("") item_widget.setFont(self.labelfont) item_widget.setCheckState(Qt.Checked) item_widget.setTextAlignment(Qt.AlignLeft) item_widget.setSizeHint(QSize(20,12)) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsUserCheckable) self.sequenceTable.setItem(index, 0, item_widget) item_widget = QTableWidgetItem(str(index+1)) item_widget.setFont(self.labelfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) item_widget.setTextAlignment(Qt.AlignCenter) self.sequenceTable.setItem(index, 1, item_widget) item_widget = QTableWidgetItem("Any") item_widget.setFont(self.labelfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) item_widget.setTextAlignment(Qt.AlignCenter) self.sequenceTable.setItem(index, 2, item_widget) aa_string = self._get_mutation_descriptor( self._get_aa_for_index(index)) item_widget = QTableWidgetItem(aa_string) item_widget.setFont(self.descriptorfont) self.sequenceTable.setItem(index, 3, item_widget) self.sequenceTable.setRowHeight(index, 16) self.win.connect(self.sequenceTable, SIGNAL("cellClicked(int, int)"), self._sequenceTableCellChanged) self.sequenceTable.resizeColumnsToContents() self.sequenceTable.setColumnWidth(0, 35) self.sequenceTable.setColumnWidth(2, 80)
def _fillSequenceTable(self): """ Fills in the sequence table. """ if not self.current_protein: return else: currentProteinChunk = self.current_protein self.editingItem = True aa_list = currentProteinChunk.protein.get_amino_acids() aa_list_len = len(aa_list) self.sequenceTable.setRowCount(aa_list_len) for index in range(aa_list_len): # Selection checkbox column item_widget = QTableWidgetItem("") item_widget.setFont(self.labelfont) item_widget.setCheckState(Qt.Checked) item_widget.setTextAlignment(Qt.AlignLeft) item_widget.setSizeHint(QSize(20,12)) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsUserCheckable) self.sequenceTable.setItem(index, 0, item_widget) # Amino acid index column item_widget = QTableWidgetItem(str(index+1)) item_widget.setFont(self.labelfont) item_widget.setFlags( Qt.ItemIsSelectable | Qt.ItemIsEnabled) item_widget.setTextAlignment(Qt.AlignCenter) self.sequenceTable.setItem(index, 1, item_widget) # Mutation descriptor name column aa = self._get_aa_for_index(index) item_widget = QTableWidgetItem(self._get_descriptor_name(aa)) item_widget.setFont(self.labelfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) item_widget.setTextAlignment(Qt.AlignCenter) self.sequenceTable.setItem(index, 2, item_widget) # Backrub checkbox column item_widget = QTableWidgetItem("") item_widget.setFont(self.labelfont) if aa.get_backrub_mode(): item_widget.setCheckState(Qt.Checked) else: item_widget.setCheckState(Qt.Unchecked) item_widget.setTextAlignment(Qt.AlignLeft) item_widget.setSizeHint(QSize(20,12)) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsUserCheckable) self.sequenceTable.setItem(index, 3, item_widget) # Mutation descriptor column aa_string = self._get_mutation_descriptor(aa) item_widget = QTableWidgetItem(aa_string) item_widget.setFont(self.descriptorfont) self.sequenceTable.setItem(index, 4, item_widget) self.sequenceTable.setRowHeight(index, 16) self.editingItem = False self.sequenceTable.resizeColumnsToContents() self.sequenceTable.setColumnWidth(0, 35) self.sequenceTable.setColumnWidth(2, 80) self.sequenceTable.setColumnWidth(3, 35) return
def _fillSequenceTable(self): """ Fills in the sequence table. """ if not self.current_protein: return else: currentProteinChunk = self.current_protein self.editingItem = True aa_list = currentProteinChunk.protein.get_amino_acids() aa_list_len = len(aa_list) self.sequenceTable.setRowCount(aa_list_len) for index in range(aa_list_len): # Selection checkbox column item_widget = QTableWidgetItem("") item_widget.setFont(self.labelfont) item_widget.setCheckState(Qt.Checked) item_widget.setTextAlignment(Qt.AlignLeft) item_widget.setSizeHint(QSize(20, 12)) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsUserCheckable) self.sequenceTable.setItem(index, 0, item_widget) # Amino acid index column item_widget = QTableWidgetItem(str(index + 1)) item_widget.setFont(self.labelfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) item_widget.setTextAlignment(Qt.AlignCenter) self.sequenceTable.setItem(index, 1, item_widget) # Mutation descriptor name column aa = self._get_aa_for_index(index) item_widget = QTableWidgetItem(self._get_descriptor_name(aa)) item_widget.setFont(self.labelfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) item_widget.setTextAlignment(Qt.AlignCenter) self.sequenceTable.setItem(index, 2, item_widget) # Backrub checkbox column item_widget = QTableWidgetItem("") item_widget.setFont(self.labelfont) if aa.get_backrub_mode(): item_widget.setCheckState(Qt.Checked) else: item_widget.setCheckState(Qt.Unchecked) item_widget.setTextAlignment(Qt.AlignLeft) item_widget.setSizeHint(QSize(20, 12)) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsUserCheckable) self.sequenceTable.setItem(index, 3, item_widget) # Mutation descriptor column aa_string = self._get_mutation_descriptor(aa) item_widget = QTableWidgetItem(aa_string) item_widget.setFont(self.descriptorfont) self.sequenceTable.setItem(index, 4, item_widget) self.sequenceTable.setRowHeight(index, 16) self.editingItem = False self.sequenceTable.resizeColumnsToContents() self.sequenceTable.setColumnWidth(0, 35) self.sequenceTable.setColumnWidth(2, 80) self.sequenceTable.setColumnWidth(3, 35) return
def _updateModel(self, what=SkyModel.UpdateAll, origin=None): if origin is self or not what & (SkyModel.UpdateTags | SkyModel.UpdateGroupStyle): return model = self.model self._setting_model = True # to ignore cellChanged() signals (in valueChanged()) # _item_cb is a dict (with row,col keys) containing the widgets (CheckBoxes ComboBoxes) per each cell self._item_cb = {} # lists of "list" and "plot" checkboxes per each grouping (excepting the default grouping); each entry is an (row,col,item) tuple. # used as argument to self._showControls() self._list_controls = [] self._plot_controls = [] # list of selection callbacks (to which signals are connected) self._callbacks = [] # set requisite number of rows,and start filling self.table.setRowCount(len(model.groupings)) for irow, group in enumerate(model.groupings): self.table.setItem(irow, 0, QTableWidgetItem(group.name)) if group is model.selgroup: self._irow_selgroup = irow # total # source in group: skip for "current" if group is not model.curgroup: self.table.setItem(irow, 1, QTableWidgetItem(str(group.total))) # selection controls: skip for current and selection if group not in (model.curgroup, model.selgroup): btns = QWidget() lo = QHBoxLayout(btns) lo.setContentsMargins(0, 0, 0, 0) lo.setSpacing(0) # make selector buttons (depending on which group we're in) if group is model.defgroup: Buttons = (("+", lambda src, grp=group: True, "select all sources"), ("-", lambda src, grp=group: False, "unselect all sources")) else: Buttons = ( ("=", lambda src, grp=group: grp.func(src), "select only this grouping"), ("+", lambda src, grp=group: src.selected or grp.func(src), "add grouping to selection"), ("-", lambda src, grp=group: src.selected and not grp. func(src), "remove grouping from selection"), ("&&", lambda src, grp=group: src.selected and grp.func(src), "intersect selection with grouping")) lo.addStretch(1) for label, predicate, tooltip in Buttons: btn = QToolButton(btns) btn.setText(label) btn.setMinimumWidth(24) btn.setMaximumWidth(24) btn.setToolTip(tooltip) lo.addWidget(btn) # add callback QObject.connect( btn, SIGNAL("clicked()"), self._currier.curry(self.selectSources, predicate)) lo.addStretch(1) self.table.setCellWidget(irow, 2, btns) # "list" checkbox (not for current and selected groupings: these are always listed) if group not in (model.curgroup, model.selgroup): item = self._makeCheckItem("", group, "show_list") self.table.setItem(irow, self.ColList, item) item.setToolTip( """<P>If checked, sources in this grouping will be listed in the source table. If un-checked, sources will be excluded from the table. If partially checked, then the default list/no list setting of "all sources" will be in effect. </P>""") # "plot" checkbox (not for the current grouping, since that's always plotted) if group is not model.curgroup: item = self._makeCheckItem("", group, "show_plot") self.table.setItem(irow, self.ColPlot, item) item.setToolTip( """<P>If checked, sources in this grouping will be included in the plot. If un-checked, sources will be excluded from the plot. If partially checked, then the default plot/no plot setting of "all sources" will be in effect. </P>""") # custom style control # for default, current and selected, this is just a text label if group is model.defgroup: item = QTableWidgetItem("default:") item.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) item.setToolTip( """<P>This is the default plot style used for all sources for which a custom grouping style is not selected.</P>""" ) self.table.setItem(irow, self.ColApply, item) elif group is model.curgroup: item = QTableWidgetItem("") item.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) item.setToolTip( """<P>This is the plot style used for the highlighted source, if any.</P>""" ) self.table.setItem(irow, self.ColApply, item) elif group is model.selgroup: item = QTableWidgetItem("") item.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) item.setToolTip( """<P>This is the plot style used for the currently selected sources.</P>""" ) self.table.setItem(irow, self.ColApply, item) # for the rest, a combobox with custom priorities else: cb = QComboBox() cb.addItems(["default"] + ["custom %d" % p for p in range(1, 10)]) index = max(0, min(group.style.apply, 9)) # dprint(0,group.name,"apply",index) cb.setCurrentIndex(index) QObject.connect( cb, SIGNAL("activated(int)"), self._currier.xcurry(self._valueChanged, (irow, self.ColApply))) self.table.setCellWidget(irow, self.ColApply, cb) cb.setToolTip( """<P>This controls whether sources within this group are plotted with a customized plot style. Customized styles have numeric priority; if a source belongs to multiple groups, then the style with the lowest priority takes precedence.<P>""") # attribute comboboxes for icol, attr in self.AttrByCol.items(): # get list of options for this style attribute. If dealing with first grouping (i==0), which is # the "all sources" grouping, then remove the "default" option (which is always first in the list) options = PlotStyles.StyleAttributeOptions[attr] if irow == 0: options = options[1:] # make combobox cb = QComboBox() cb.addItems(list(map(str, options))) # the "label" option is also editable if attr == "label": cb.setEditable(True) try: index = options.index(getattr(group.style, attr)) cb.setCurrentIndex(index) except ValueError: cb.setEditText(str(getattr(group.style, attr))) slot = self._currier.xcurry(self._valueChanged, (irow, icol)) QObject.connect(cb, SIGNAL("activated(int)"), slot) QObject.connect(cb, SIGNAL("editTextChanged(const QString &)"), slot) cb.setEnabled(group is model.defgroup or group.style.apply) self.table.setCellWidget(irow, icol, cb) label = attr if irow: cb.setToolTip( """<P>This is the %s used to plot sources in this group, when a "custom" style for the group is enabled via the style control.<P>""" % label) else: cb.setToolTip( "<P>This is the default %s used for all sources for which a custom style is not specified below.<P>" % label) self.table.resizeColumnsToContents() # re-enable processing of cellChanged() signals self._setting_model = False
def _loadGroupBox1(self, pmGroupBox): """ Load widgets in group box. """ self.labelfont = QFont("Helvetica", 12) self.descriptorfont = QFont("Courier New", 12) self.headerdata = ['', 'ID', 'Set', 'Descriptor'] self.set_names = ["Any", "Same", "Locked", "Polar", "Apolar"] self.rosetta_set_names = ["ALLAA", "NATRO", "NATAA", "POLAR", "APOLA"] self.descriptor_list = [ "GAVILMFWCSTYNQDEHKRP", "____________________", "____________________", "________CSTYNQDEHKR_", "GAVILMFW___________P" ] self.descriptorsTable = PM_TableWidget(pmGroupBox) self.descriptorsTable.setFixedHeight(100) self.descriptorsTable.setRowCount(len(self.set_names)) self.descriptorsTable.setColumnCount(2) self.descriptorsTable.verticalHeader().setVisible(False) self.descriptorsTable.horizontalHeader().setVisible(False) for index in range(len(self.set_names)): item_widget = QTableWidgetItem(self.set_names[index]) item_widget.setFont(self.labelfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable) item_widget.setTextAlignment(Qt.AlignCenter) self.descriptorsTable.setItem(index, 0, item_widget) item_widget = QTableWidgetItem(self.descriptor_list[index]) item_widget.setFont(self.descriptorfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable) item_widget.setTextAlignment(Qt.AlignCenter) self.descriptorsTable.setItem(index, 1, item_widget) self.descriptorsTable.setRowHeight(index, 16) pass self.descriptorsTable.resizeColumnsToContents() self.applyDescriptorPushButton = PM_PushButton(pmGroupBox, text="Apply", setAsDefault=True) self.selectAllPushButton = PM_PushButton(pmGroupBox, text="All", setAsDefault=True) self.selectNonePushButton = PM_PushButton(pmGroupBox, text="None", setAsDefault=True) self.selectInvertPushButton = PM_PushButton(pmGroupBox, text="Invert", setAsDefault=True) self.win.connect(self.applyDescriptorPushButton, SIGNAL("clicked()"), self._applyDescriptor) self.win.connect(self.selectAllPushButton, SIGNAL("clicked()"), self._selectAll) self.win.connect(self.selectNonePushButton, SIGNAL("clicked()"), self._selectNone) self.win.connect(self.selectInvertPushButton, SIGNAL("clicked()"), self._invertSelection) buttonList = [('PM_PushButton', self.applyDescriptorPushButton, 0, 0), ('QSpacerItem', 5, 5, 1, 0), ('PM_PushButton', self.selectAllPushButton, 2, 0), ('PM_PushButton', self.selectNonePushButton, 3, 0), ('PM_PushButton', self.selectInvertPushButton, 4, 0)] self.buttonGrid = PM_WidgetGrid(pmGroupBox, widgetList=buttonList) self.recenterViewCheckBox = \ PM_CheckBox( pmGroupBox, text = "Re-center view", setAsDefault = True, state = Qt.Checked) self.sequenceTable = PM_TableWidget(pmGroupBox) #self.sequenceTable.setModel(self.tableModel) self.sequenceTable.resizeColumnsToContents() self.sequenceTable.verticalHeader().setVisible(False) #self.sequenceTable.setRowCount(0) self.sequenceTable.setColumnCount(4) self.checkbox = QCheckBox() self.sequenceTable.setFixedHeight(345) self.sequenceTable.setHorizontalHeaderLabels(self.headerdata)
def _updateModel(self, what=SkyModel.UpdateAll, origin=None): if origin is self or not what & (SkyModel.UpdateTags | SkyModel.UpdateGroupStyle): return model = self.model self._setting_model = True; # to ignore cellChanged() signals (in valueChanged()) # _item_cb is a dict (with row,col keys) containing the widgets (CheckBoxes ComboBoxes) per each cell self._item_cb = {} # lists of "list" and "plot" checkboxes per each grouping (excepting the default grouping); each entry is an (row,col,item) tuple. # used as argument to self._showControls() self._list_controls = [] self._plot_controls = [] # list of selection callbacks (to which signals are connected) self._callbacks = [] # set requisite number of rows,and start filling self.table.setRowCount(len(model.groupings)) for irow, group in enumerate(model.groupings): self.table.setItem(irow, 0, QTableWidgetItem(group.name)) if group is model.selgroup: self._irow_selgroup = irow # total # source in group: skip for "current" if group is not model.curgroup: self.table.setItem(irow, 1, QTableWidgetItem(str(group.total))) # selection controls: skip for current and selection if group not in (model.curgroup, model.selgroup): btns = QWidget() lo = QHBoxLayout(btns) lo.setContentsMargins(0, 0, 0, 0) lo.setSpacing(0) # make selector buttons (depending on which group we're in) if group is model.defgroup: Buttons = ( ("+", lambda src, grp=group: True, "select all sources"), ("-", lambda src, grp=group: False, "unselect all sources")) else: Buttons = ( ("=", lambda src, grp=group: grp.func(src), "select only this grouping"), ("+", lambda src, grp=group: src.selected or grp.func(src), "add grouping to selection"), ("-", lambda src, grp=group: src.selected and not grp.func(src), "remove grouping from selection"), ("&&", lambda src, grp=group: src.selected and grp.func(src), "intersect selection with grouping")) lo.addStretch(1) for label, predicate, tooltip in Buttons: btn = QToolButton(btns) btn.setText(label) btn.setMinimumWidth(24) btn.setMaximumWidth(24) btn.setToolTip(tooltip) lo.addWidget(btn) # add callback QObject.connect(btn, SIGNAL("clicked()"), self._currier.curry(self.selectSources, predicate)) lo.addStretch(1) self.table.setCellWidget(irow, 2, btns) # "list" checkbox (not for current and selected groupings: these are always listed) if group not in (model.curgroup, model.selgroup): item = self._makeCheckItem("", group, "show_list") self.table.setItem(irow, self.ColList, item) item.setToolTip("""<P>If checked, sources in this grouping will be listed in the source table. If un-checked, sources will be excluded from the table. If partially checked, then the default list/no list setting of "all sources" will be in effect. </P>""") # "plot" checkbox (not for the current grouping, since that's always plotted) if group is not model.curgroup: item = self._makeCheckItem("", group, "show_plot") self.table.setItem(irow, self.ColPlot, item) item.setToolTip("""<P>If checked, sources in this grouping will be included in the plot. If un-checked, sources will be excluded from the plot. If partially checked, then the default plot/no plot setting of "all sources" will be in effect. </P>""") # custom style control # for default, current and selected, this is just a text label if group is model.defgroup: item = QTableWidgetItem("default:") item.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) item.setToolTip( """<P>This is the default plot style used for all sources for which a custom grouping style is not selected.</P>""") self.table.setItem(irow, self.ColApply, item) elif group is model.curgroup: item = QTableWidgetItem("") item.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) item.setToolTip("""<P>This is the plot style used for the highlighted source, if any.</P>""") self.table.setItem(irow, self.ColApply, item) elif group is model.selgroup: item = QTableWidgetItem("") item.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) item.setToolTip("""<P>This is the plot style used for the currently selected sources.</P>""") self.table.setItem(irow, self.ColApply, item) # for the rest, a combobox with custom priorities else: cb = QComboBox() cb.addItems(["default"] + ["custom %d" % p for p in range(1, 10)]) index = max(0, min(group.style.apply, 9)) # dprint(0,group.name,"apply",index) cb.setCurrentIndex(index) QObject.connect(cb, SIGNAL("activated(int)"), self._currier.xcurry(self._valueChanged, (irow, self.ColApply))) self.table.setCellWidget(irow, self.ColApply, cb) cb.setToolTip("""<P>This controls whether sources within this group are plotted with a customized plot style. Customized styles have numeric priority; if a source belongs to multiple groups, then the style with the lowest priority takes precedence.<P>""") # attribute comboboxes for icol, attr in self.AttrByCol.items(): # get list of options for this style attribute. If dealing with first grouping (i==0), which is # the "all sources" grouping, then remove the "default" option (which is always first in the list) options = PlotStyles.StyleAttributeOptions[attr] if irow == 0: options = options[1:] # make combobox cb = QComboBox() cb.addItems(list(map(str, options))) # the "label" option is also editable if attr == "label": cb.setEditable(True) try: index = options.index(getattr(group.style, attr)) cb.setCurrentIndex(index) except ValueError: cb.setEditText(str(getattr(group.style, attr))) slot = self._currier.xcurry(self._valueChanged, (irow, icol)) QObject.connect(cb, SIGNAL("activated(int)"), slot) QObject.connect(cb, SIGNAL("editTextChanged(const QString &)"), slot) cb.setEnabled(group is model.defgroup or group.style.apply) self.table.setCellWidget(irow, icol, cb) label = attr if irow: cb.setToolTip("""<P>This is the %s used to plot sources in this group, when a "custom" style for the group is enabled via the style control.<P>""" % label) else: cb.setToolTip( "<P>This is the default %s used for all sources for which a custom style is not specified below.<P>" % label) self.table.resizeColumnsToContents() # re-enable processing of cellChanged() signals self._setting_model = False
def _loadGroupBox1(self, pmGroupBox): """ Load widgets in group box. """ self.labelfont = QFont("Helvetica", 12) self.descriptorfont = QFont("Courier New", 12) self.headerdata = ['', 'ID', 'Set', 'Descriptor'] self.set_names = ["Any", "Same", "Locked", "Polar", "Apolar"] self.rosetta_set_names = ["ALLAA", "NATRO", "NATAA", "POLAR", "APOLA"] self.descriptor_list = ["GAVILMFWCSTYNQDEHKRP", "____________________", "____________________", "________CSTYNQDEHKR_", "GAVILMFW___________P"] self.descriptorsTable = PM_TableWidget( pmGroupBox) self.descriptorsTable.setFixedHeight(100) self.descriptorsTable.setRowCount(len(self.set_names)) self.descriptorsTable.setColumnCount(2) self.descriptorsTable.verticalHeader().setVisible(False) self.descriptorsTable.horizontalHeader().setVisible(False) for index in range(len(self.set_names)): item_widget = QTableWidgetItem(self.set_names[index]) item_widget.setFont(self.labelfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable) item_widget.setTextAlignment(Qt.AlignCenter) self.descriptorsTable.setItem(index, 0, item_widget) item_widget = QTableWidgetItem(self.descriptor_list[index]) item_widget.setFont(self.descriptorfont) item_widget.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable) item_widget.setTextAlignment(Qt.AlignCenter) self.descriptorsTable.setItem(index, 1, item_widget) self.descriptorsTable.setRowHeight(index, 16) pass self.descriptorsTable.resizeColumnsToContents() self.applyDescriptorPushButton = PM_PushButton( pmGroupBox, text = "Apply", setAsDefault = True) self.selectAllPushButton = PM_PushButton( pmGroupBox, text = "All", setAsDefault = True) self.selectNonePushButton = PM_PushButton( pmGroupBox, text = "None", setAsDefault = True) self.selectInvertPushButton = PM_PushButton( pmGroupBox, text = "Invert", setAsDefault = True) self.win.connect(self.applyDescriptorPushButton, SIGNAL("clicked()"), self._applyDescriptor) self.win.connect(self.selectAllPushButton, SIGNAL("clicked()"), self._selectAll) self.win.connect(self.selectNonePushButton, SIGNAL("clicked()"), self._selectNone) self.win.connect(self.selectInvertPushButton, SIGNAL("clicked()"), self._invertSelection) buttonList = [('PM_PushButton', self.applyDescriptorPushButton, 0, 0), ('QSpacerItem', 5, 5, 1, 0), ('PM_PushButton', self.selectAllPushButton, 2, 0), ('PM_PushButton', self.selectNonePushButton, 3, 0), ('PM_PushButton', self.selectInvertPushButton, 4, 0)] self.buttonGrid = PM_WidgetGrid( pmGroupBox, widgetList = buttonList) self.recenterViewCheckBox = \ PM_CheckBox( pmGroupBox, text = "Re-center view", setAsDefault = True, state = Qt.Checked) self.sequenceTable = PM_TableWidget( pmGroupBox) #self.sequenceTable.setModel(self.tableModel) self.sequenceTable.resizeColumnsToContents() self.sequenceTable.verticalHeader().setVisible(False) #self.sequenceTable.setRowCount(0) self.sequenceTable.setColumnCount(4) self.checkbox = QCheckBox() self.sequenceTable.setFixedHeight(345) self.sequenceTable.setHorizontalHeaderLabels(self.headerdata)