From a5273cb7589fb17a6429bbc67d7e307cbf878afe Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Tue, 8 Feb 2022 17:06:59 +0100 Subject: [PATCH] Only allow scroll wheel edits when spinbox is active (cherry picked from commit ebc3d626d152a07692f2de598c294348ad199597) --- .../project_manager/delegates.py | 8 +++--- .../project_manager/widgets.py | 26 +++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/openpype/tools/project_manager/project_manager/delegates.py b/openpype/tools/project_manager/project_manager/delegates.py index 842352cba1..31487ff132 100644 --- a/openpype/tools/project_manager/project_manager/delegates.py +++ b/openpype/tools/project_manager/project_manager/delegates.py @@ -2,7 +2,9 @@ from Qt import QtWidgets, QtCore from .widgets import ( NameTextEdit, - FilterComboBox + FilterComboBox, + SpinBoxScrollFixed, + DoubleSpinBoxScrollFixed ) from .multiselection_combobox import MultiSelectionComboBox @@ -89,9 +91,9 @@ class NumberDelegate(QtWidgets.QStyledItemDelegate): def createEditor(self, parent, option, index): if self.decimals > 0: - editor = QtWidgets.QDoubleSpinBox(parent) + editor = DoubleSpinBoxScrollFixed(parent) else: - editor = QtWidgets.QSpinBox(parent) + editor = SpinBoxScrollFixed(parent) editor.setObjectName("NumberEditor") # Set min/max diff --git a/openpype/tools/project_manager/project_manager/widgets.py b/openpype/tools/project_manager/project_manager/widgets.py index 4b5aca35ef..02d4eda0fc 100644 --- a/openpype/tools/project_manager/project_manager/widgets.py +++ b/openpype/tools/project_manager/project_manager/widgets.py @@ -429,3 +429,29 @@ class ConfirmProjectDeletion(QtWidgets.QDialog): def _on_confirm_text_change(self): enabled = self._confirm_input.text() == self._project_name self._confirm_btn.setEnabled(enabled) + + +class SpinBoxScrollFixed(QtWidgets.QSpinBox): + """QSpinBox which only allow edits change with scroll wheel when active""" + def __init__(self, *args, **kwargs): + super(SpinBoxScrollFixed, self).__init__(*args, **kwargs) + self.setFocusPolicy(QtCore.Qt.StrongFocus) + + def wheelEvent(self, event): + if not self.hasFocus(): + event.ignore() + else: + super(SpinBoxScrollFixed, self).wheelEvent(event) + + +class DoubleSpinBoxScrollFixed(QtWidgets.QDoubleSpinBox): + """QDoubleSpinBox which only allow edits with scroll wheel when active""" + def __init__(self, *args, **kwargs): + super(DoubleSpinBoxScrollFixed, self).__init__(*args, **kwargs) + self.setFocusPolicy(QtCore.Qt.StrongFocus) + + def wheelEvent(self, event): + if not self.hasFocus(): + event.ignore() + else: + super(DoubleSpinBoxScrollFixed, self).wheelEvent(event)