scrolling of environments view start when you scroll to bottom of widget

This commit is contained in:
iLLiCiTiT 2021-06-14 15:21:26 +02:00
parent b5df50f4bc
commit 0183ac73b2

View file

@ -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):