From 0183ac73b2783f779d25fb3d59e26dc8798b8d0a Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Mon, 14 Jun 2021 15:21:26 +0200 Subject: [PATCH] scrolling of environments view start when you scroll to bottom of widget --- openpype/tools/tray/pype_info_widget.py | 52 ++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/openpype/tools/tray/pype_info_widget.py b/openpype/tools/tray/pype_info_widget.py index f95a31f7c2..2965463c37 100644 --- a/openpype/tools/tray/pype_info_widget.py +++ b/openpype/tools/tray/pype_info_widget.py @@ -28,6 +28,8 @@ class EnvironmentsView(QtWidgets.QTreeView): def __init__(self, parent=None): super(EnvironmentsView, self).__init__(parent) + self._scroll_enabled = False + model = QtGui.QStandardItemModel() env = os.environ.copy() @@ -112,8 +114,11 @@ class EnvironmentsView(QtWidgets.QTreeView): else: return super(EnvironmentsView, self).keyPressEvent(event) + def set_scroll_enabled(self, value): + self._scroll_enabled = value + def wheelEvent(self, event): - if not self.hasFocus(): + if not self._scroll_enabled: event.ignore() return return super(EnvironmentsView, self).wheelEvent(event) @@ -200,9 +205,13 @@ class CollapsibleWidget(QtWidgets.QWidget): class PypeInfoWidget(QtWidgets.QWidget): + _resized = QtCore.Signal() + def __init__(self, parent=None): super(PypeInfoWidget, self).__init__(parent) + self._scroll_at_bottom = False + self.setStyleSheet(style.load_stylesheet()) icon = QtGui.QIcon(resources.pype_icon_filepath()) @@ -219,11 +228,39 @@ class PypeInfoWidget(QtWidgets.QWidget): main_layout.addWidget(scroll_area, 1) main_layout.addWidget(self._create_btns_section(), 0) + scroll_area.verticalScrollBar().valueChanged.connect( + self._on_area_scroll + ) + self._resized.connect(self._on_resize) self.resize(740, 540) self.scroll_area = scroll_area self.info_widget = info_widget + def _on_area_scroll(self, value): + vertical_bar = self.scroll_area.verticalScrollBar() + self._scroll_at_bottom = vertical_bar.maximum() == vertical_bar.value() + self.info_widget.set_scroll_enabled(self._scroll_at_bottom) + + def _on_resize(self): + if not self._scroll_at_bottom: + return + vertical_bar = self.scroll_area.verticalScrollBar() + vertical_bar.setValue(vertical_bar.maximum()) + + def resizeEvent(self, event): + super(PypeInfoWidget, self).resizeEvent(event) + self._resized.emit() + self.info_widget.set_content_height( + self.scroll_area.height() + ) + + def showEvent(self, event): + super(PypeInfoWidget, self).showEvent(event) + self.info_widget.set_content_height( + self.scroll_area.height() + ) + def _create_btns_section(self): btns_widget = QtWidgets.QWidget(self) btns_layout = QtWidgets.QHBoxLayout(btns_widget) @@ -282,6 +319,8 @@ class PypeInfoSubWidget(QtWidgets.QWidget): def __init__(self, parent=None): super(PypeInfoSubWidget, self).__init__(parent) + self.env_view = None + main_layout = QtWidgets.QVBoxLayout(self) main_layout.setContentsMargins(0, 0, 0, 0) main_layout.setAlignment(QtCore.Qt.AlignTop) @@ -293,6 +332,14 @@ class PypeInfoSubWidget(QtWidgets.QWidget): main_layout.addWidget(self._create_separator(), 0) main_layout.addWidget(self._create_environ_widget(), 1) + def set_content_height(self, height): + if self.env_view: + self.env_view.setMinimumHeight(height) + + def set_scroll_enabled(self, value): + if self.env_view: + self.env_view.set_scroll_enabled(value) + def _create_separator(self): separator_widget = QtWidgets.QWidget(self) separator_widget.setObjectName("Separator") @@ -369,9 +416,10 @@ class PypeInfoSubWidget(QtWidgets.QWidget): env_view = EnvironmentsView(env_widget) env_view.setMinimumHeight(300) - env_widget.set_content_widget(env_view) + self.env_view = env_view + return env_widget def _create_openpype_info_widget(self):