def getColorPolygonAndBrushStyle( initial_color: Union[QColor, Qt.GlobalColor, QGradient] = QColor(), initial_polygon: NodePolygon = NodePolygon.Circle, initial_brushstyle: Qt.BrushStyle = Qt.NoBrush, parent: Optional[QWidget] = None, title: str = '', options: Union[QColorDialog.ColorDialogOptions, QColorDialog.ColorDialogOption] = QColorDialog.ColorDialogOptions()) \ -> (QColor, NodePolygon): dlg = QColorDialog(parent) # Add buttons to select polygon polygons_group = QButtonGroup(parent) polygons_layout = QHBoxLayout(parent) for p in NodePolygon: if p == NodePolygon.Custom: continue button = QToolButton(parent) button.setCheckable(True) button.setText(p.name) button.setIcon(QIcon(nodePolygonToPixmap(p, button.iconSize()))) if p == initial_polygon: button.setChecked(True) polygons_group.addButton(button) polygons_group.setId(button, p.value) polygons_layout.addWidget(button) dlg.layout().insertLayout(dlg.layout().count()-1, polygons_layout) # Add buttons to select brush style brushstyle_group = QButtonGroup(parent) brushstyle_layout = QHBoxLayout(parent) for p in NODE_BRUSH_STYLES: button = QToolButton(parent) button.setCheckable(True) button.setIcon(QIcon(nodeBrushStyleToPixmap(p, button.iconSize()))) if p == initial_brushstyle: button.setChecked(True) brushstyle_group.addButton(button) brushstyle_group.setId(button, p) brushstyle_layout.addWidget(button) dlg.layout().insertLayout(dlg.layout().count()-1, brushstyle_layout) if title: dlg.setWindowTitle(title) dlg.setOptions(options) dlg.setCurrentColor(initial_color) dlg.exec_() return (dlg.selectedColor(), NodePolygon(polygons_group.checkedId()), brushstyle_group.checkedId(), )
def _add_button(self, parent, index, button_info): if hasattr(parent, '_title'): self._adjust_title(parent) # split title into two lines if long orig_title = button_info.title title = orig_title if '\n' not in title and len(title) > 6: title = split_title(title) if button_info.highlight_icon is None: icon = button_info.icon else: icon = button_info.highlight_icon if not button_info.group: group_first = group_follow = False else: buttons = self._groups.setdefault(parent, {}) group_first = button_info.group not in buttons # first button in drop down group_follow = not group_first # subsequent buttons if not group_follow: b = QToolButton(parent) if button_info.vr_mode is not None: b.vr_mode = button_info.vr_mode b.setAutoRaise(True) if icon is None: style = Qt.ToolButtonTextOnly else: if not self.show_button_titles: style = Qt.ToolButtonIconOnly elif self.compact: style = Qt.ToolButtonTextBesideIcon else: style = Qt.ToolButtonTextUnderIcon b.setToolButtonStyle(style) if icon is None: action = QAction(title) else: action = QAction(icon, title) if button_info.description: action.setToolTip(button_info.description) if button_info.callback is not None: action.triggered.connect(button_info.callback) actions = self._actions.setdefault(orig_title, []) actions.append(action) if group_follow: button = self._groups[parent][button_info.group] button.addAction(action) else: if not group_first: b.setDefaultAction(action) else: b.setPopupMode(b.MenuButtonPopup) b.triggered.connect( lambda action, b=b: self._update_button_action(b, action)) self._groups[parent][button_info.group] = b b.addAction(action) self._update_button_action(b, action) # print('Font height:', b.fontMetrics().height()) # DEBUG # print('Font size:', b.fontInfo().pixelSize()) # DEBUG # print('Icon size:', b.iconSize()) # DEBUG if not group_follow: if self.compact: row = index % self.compact_height if row < self.compact_height: parent._layout.setRowStretch(row, 1) column = index // self.compact_height parent._layout.addWidget(b, row, column, Qt.AlignLeft | Qt.AlignVCenter) else: if not self.show_button_titles or button_info.icon is None: align = Qt.AlignCenter else: align = Qt.AlignTop b.setIconSize(2 * b.iconSize()) parent._layout.addWidget(b, 0, index, align) global _debug if _debug: _debug = False policy = b.sizePolicy() print('expanding:', int(policy.expandingDirections())) print('horizontal policy:', policy.horizontalPolicy()) print('horizontal stretch:', policy.horizontalStretch()) print('vertical policy:', policy.verticalPolicy()) print('vertical stretch:', policy.verticalStretch())