From 769314949b5e86cc7eb66a6685388d319965b1e8 Mon Sep 17 00:00:00 2001 From: Pierre Baillargeon Date: Thu, 16 Jan 2025 10:59:28 -0500 Subject: [PATCH] EMSUSD-1997 adjust collection UI spacing - Adjust the spacing in the include/exclude header buttons. - Add a themeMenuButton function to the Theme class. - Call it to adjust the menu indicator for buttons with menus. --- .../collection/includeExcludeWidget.py | 32 ++++++++++++------- .../usdSharedComponents/common/menuButton.py | 5 ++- .../usdSharedComponents/common/theme.py | 21 ++++++++++-- 3 files changed, 41 insertions(+), 17 deletions(-) diff --git a/lib/mayaUsd/resources/ae/usd-shared-components/src/python/usdSharedComponents/collection/includeExcludeWidget.py b/lib/mayaUsd/resources/ae/usd-shared-components/src/python/usdSharedComponents/collection/includeExcludeWidget.py index 5431af31f..7cd71be80 100644 --- a/lib/mayaUsd/resources/ae/usd-shared-components/src/python/usdSharedComponents/collection/includeExcludeWidget.py +++ b/lib/mayaUsd/resources/ae/usd-shared-components/src/python/usdSharedComponents/collection/includeExcludeWidget.py @@ -48,43 +48,52 @@ def __init__( self._expressionMenu = ExpressionMenu(data, self) menuButton = MenuButton(self._expressionMenu, self) + spacer = QWidget() + spacer.setMinimumWidth(0) + spacer.setSizePolicy( + QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed + ) + self._filterWidget = QLineEdit() self._filterWidget.setSizePolicy( QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed ) + self._filterWidget.setMaximumWidth(Theme.instance().uiScaled(165)) self._filterWidget.setPlaceholderText(SEARCH_PLACEHOLDER_LABEL) self._filterWidget.setClearButtonEnabled(True) separator = QFrame() separator.setFrameShape(QFrame.VLine) + separator.setMaximumHeight(Theme.instance().uiScaled(20)) headerWidget = QWidget(self) headerLayout = QHBoxLayout(headerWidget) + topMargin = Theme.instance().uiScaled(4) + margin = Theme.instance().uiScaled(2) + headerLayout.setContentsMargins(margin, topMargin, margin, margin) addBtn = QToolButton(headerWidget) addBtn.setToolTip(ADD_OBJECTS_TOOLTIP) addBtn.setIcon(Theme.instance().icon("add")) addBtn.setPopupMode(QToolButton.InstantPopup) + Theme.instance().themeMenuButton(addBtn, True) self._addBtnMenu = QMenu(addBtn) - if Host.instance().canPick: self._addBtnMenu.addAction(INCLUDE_OBJECTS_LABEL, self.onAddToIncludePrimClicked) self._addBtnMenu.addAction(EXCLUDE_OBJECTS_LABEL, self.onAddToExcludePrimClicked) self._addBtnMenu.addSeparator() - self._addBtnMenu.addAction(ADD_SELECTION_TO_INCLUDE_LABEL, self._onAddSelectionToInclude) self._addBtnMenu.addAction(ADD_SELECTION_TO_EXCLUDE_LABEL, self._onAddSelectionToExclude) - self._addBtnMenu.aboutToShow.connect(self._onAboutToShowAddMenu) - addBtn.setMenu(self._addBtnMenu) - headerLayout.addWidget(addBtn) self._deleteBtn = QToolButton(headerWidget) self._deleteBtn.setToolTip(REMOVE_OBJECTS_TOOLTIP) self._deleteBtn.setIcon(Theme.instance().icon("delete")) self._deleteBtn.setPopupMode(QToolButton.InstantPopup) + self._deleteBtn.setEnabled(False) + self._deleteBtnMenu = QMenu(self._deleteBtn) self._deleteBtnMenu.addAction( REMOVE_FROM_INCLUDES_LABEL, self.onRemoveSelectionFromInclude @@ -93,13 +102,14 @@ def __init__( REMOVE_FROM_EXCLUDES_LABEL, self.onRemoveSelectionFromExclude ) self._deleteBtn.setMenu(self._deleteBtnMenu) - headerLayout.addWidget(self._deleteBtn) - - self._deleteBtn.setEnabled(False) + headerLayout.addWidget(addBtn) + headerLayout.addWidget(self._deleteBtn) + headerLayout.addWidget(spacer) headerLayout.addWidget(self._filterWidget) headerLayout.addWidget(separator) headerLayout.addWidget(menuButton) + mainLayout.addWidget(headerWidget) self._include = StringListPanel(data.getIncludeData(), True, INCLUDE_LABEL, self) @@ -226,7 +236,7 @@ def onListSelectionChanged(self): if includesSelected and excludeSelected: self._deleteBtn.setToolTip(REMOVE_OBJECTS_TOOLTIP) self._deleteBtn.setPopupMode(QToolButton.InstantPopup) - self._deleteBtn.setStyleSheet("") + Theme.instance().themeMenuButton(self._deleteBtn, True) else: if includesSelected: self._deleteBtn.setToolTip(REMOVE_FROM_INCLUDE_TOOLTIP) @@ -235,9 +245,7 @@ def onListSelectionChanged(self): self._deleteBtn.setToolTip(REMOVE_FROM_EXCLUDE_TOOLTIP) self._deleteBtn.pressed.connect(self.onRemoveSelectionFromExclude) self._deleteBtn.setPopupMode(QToolButton.DelayedPopup) - self._deleteBtn.setStyleSheet( - """QToolButton::menu-indicator { width: 0px; }""" - ) + Theme.instance().themeMenuButton(self._deleteBtn, False) def onIncludeAllToggle(self, _: Qt.CheckState): incAll = self._include.cbIncludeAll.isChecked() diff --git a/lib/mayaUsd/resources/ae/usd-shared-components/src/python/usdSharedComponents/common/menuButton.py b/lib/mayaUsd/resources/ae/usd-shared-components/src/python/usdSharedComponents/common/menuButton.py index 5fd0f5cbd..42f63fa45 100644 --- a/lib/mayaUsd/resources/ae/usd-shared-components/src/python/usdSharedComponents/common/menuButton.py +++ b/lib/mayaUsd/resources/ae/usd-shared-components/src/python/usdSharedComponents/common/menuButton.py @@ -11,9 +11,8 @@ def __init__(self, menu: QMenu, parent: QWidget = None): super(MenuButton, self).__init__(parent) self.setIcon(Theme.instance().icon("menu")) self.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + self.setMaximumWidth(Theme.instance().uiScaled(16)) self.setArrowType(Qt.NoArrow) self.setPopupMode(QToolButton.InstantPopup) - self.setStyleSheet(""" - QToolButton::menu-indicator { width: 0px; } - """) + Theme.instance().themeMenuButton(self, False) self.setMenu(menu) \ No newline at end of file diff --git a/lib/mayaUsd/resources/ae/usd-shared-components/src/python/usdSharedComponents/common/theme.py b/lib/mayaUsd/resources/ae/usd-shared-components/src/python/usdSharedComponents/common/theme.py index 47df175c6..27d3a3fa8 100644 --- a/lib/mayaUsd/resources/ae/usd-shared-components/src/python/usdSharedComponents/common/theme.py +++ b/lib/mayaUsd/resources/ae/usd-shared-components/src/python/usdSharedComponents/common/theme.py @@ -2,12 +2,12 @@ from PySide6 import QtSvg from PySide6.QtCore import QRect, Qt # type: ignore from PySide6.QtGui import QImage, QPixmap, QPalette, QPainter, QColor, QPen, QIcon # type: ignore - from PySide6.QtWidgets import QWidget, QTabWidget # type: ignore + from PySide6.QtWidgets import QWidget, QTabWidget, QToolButton # type: ignore except: from PySide2 import QtSvg # type: ignore from PySide2.QtCore import QRect, Qt # type: ignore from PySide2.QtGui import QImage, QPixmap, QPalette, QPainter, QColor, QPen, QIcon # type: ignore - from PySide2.QtWidgets import QWidget, QTabWidget # type: ignore + from PySide2.QtWidgets import QWidget, QTabWidget, QToolButton # type: ignore from enum import Flag, auto from typing import Union @@ -107,6 +107,23 @@ def themeTab(self, tab: QTabWidget): tab.setDocumentMode(True) tab.tabBar().setCursor(Qt.ArrowCursor) + def themeMenuButton(self, menuButton: QToolButton, showMenuIndicator: bool): + if showMenuIndicator: + menuButton.setStyleSheet(""" + QToolButton { border: 0px; } + QToolButton::menu-indicator { + subcontrol-position: right bottom; + subcontrol-origin: border; + top: 4px; + left: 4px; + }""") + else: + menuButton.setStyleSheet(""" + QToolButton { border: 0px; } + QToolButton::menu-indicator { + width: 0px; + }""") + @property def palette(self) -> Palette: if self._palette is None: