From 2f3b7146ec3a3f8616dcd7a896cb3cb8455de4f1 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 3 Sep 2021 12:21:51 +0200 Subject: [PATCH] validation error title are scrollable --- .../widgets/validations_widget.py | 53 +++++++++++++++++-- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git a/openpype/tools/new_publisher/widgets/validations_widget.py b/openpype/tools/new_publisher/widgets/validations_widget.py index 50bd4c9c52..d521d82922 100644 --- a/openpype/tools/new_publisher/widgets/validations_widget.py +++ b/openpype/tools/new_publisher/widgets/validations_widget.py @@ -239,18 +239,65 @@ class ValidateActionsWidget(QtWidgets.QFrame): self.controller.run_action(self._plugin, action) +class VerticallScrollArea(QtWidgets.QScrollArea): + def __init__(self, *args, **kwargs): + super(VerticallScrollArea, self).__init__(*args, **kwargs) + + self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) + self.setLayoutDirection(QtCore.Qt.RightToLeft) + self.setViewportMargins(0, 0, 0, 0) + + self.verticalScrollBar().installEventFilter(self) + + def setVerticalScrollBar(self, widget): + old_widget = self.verticalScrollBar() + if old_widget: + old_widget.removeEventFilter(self) + + super(VerticallScrollArea, self).setVerticalScrollBar(widget) + if widget: + widget.installEventFilter(self) + + def setWidget(self, widget): + old_widget = self.widget() + if old_widget: + old_widget.removeEventFilter(self) + + super(VerticallScrollArea, self).setWidget(widget) + if widget: + widget.installEventFilter(self) + + def eventFilter(self, obj, event): + if ( + event.type() == QtCore.QEvent.Resize + and (obj is self.widget() or obj is self.verticalScrollBar()) + ): + width = self.widget().width() + if self.verticalScrollBar().isVisible(): + width += self.verticalScrollBar().width() + self.setMinimumWidth(width) + return super(VerticallScrollArea, self).eventFilter(obj, event) + + class ValidationsWidget(QtWidgets.QWidget): def __init__(self, controller, parent): super(ValidationsWidget, self).__init__(parent) self.setAttribute(QtCore.Qt.WA_TranslucentBackground) - errors_widget = QtWidgets.QWidget(self) - errors_widget.setAttribute(QtCore.Qt.WA_TranslucentBackground) + errors_scroll = VerticallScrollArea(self) + errors_scroll.setWidgetResizable(True) + errors_scroll.setAttribute(QtCore.Qt.WA_TranslucentBackground) + + errors_widget = QtWidgets.QWidget(errors_scroll) errors_widget.setFixedWidth(200) + errors_widget.setAttribute(QtCore.Qt.WA_TranslucentBackground) errors_layout = QtWidgets.QVBoxLayout(errors_widget) errors_layout.setContentsMargins(0, 0, 0, 0) + errors_scroll.setWidget(errors_widget) + error_details_widget = QtWidgets.QWidget(self) error_details_input = QtWidgets.QTextEdit(error_details_widget) error_details_input.setObjectName("InfoText") @@ -269,7 +316,7 @@ class ValidationsWidget(QtWidgets.QWidget): content_layout.setSpacing(0) content_layout.setContentsMargins(0, 0, 0, 0) - content_layout.addWidget(errors_widget, 0) + content_layout.addWidget(errors_scroll, 0) content_layout.addWidget(error_details_widget, 1) top_label = QtWidgets.QLabel("Publish validation report", self)