From dc11f1be5061a3d6d3d51dd277b3341f1d5fc1c3 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Sat, 12 Mar 2022 18:16:15 +0200 Subject: [PATCH] - installed an eventFilter for the Sliders in the Preferences tab such that only if a slider has focus the mouse wheel will change its value - in Preferences made sure that the changes of the scrollbar no longer interfere with signalling changes --- CHANGELOG.md | 3 +++ appGUI/GUIElements.py | 7 +++++++ appGUI/preferences/PreferencesUIManager.py | 6 +++++- app_Main.py | 2 +- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5427ea24..9f7ec0d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,9 @@ CHANGELOG for FlatCAM beta 12.03.2022 - added to the application an older contribution by another user: Columnar Layout for the Preferences Tab. It can be set in Preferences -> General -> GUI section +- installed an eventFilter for the Sliders in the Preferences tab such that only if a slider has focus the mouse wheel will change its value +- in Preferences made sure that the changes of the scrollbar no longer interfere with signalling changes + 11.03.2022 diff --git a/appGUI/GUIElements.py b/appGUI/GUIElements.py index 7f6f1ea6..0847cee6 100644 --- a/appGUI/GUIElements.py +++ b/appGUI/GUIElements.py @@ -1075,6 +1075,7 @@ class FCSliderWithSpinner(QtWidgets.QFrame): self.spinner.valueChanged.connect(self._on_spinner) self.valueChanged = self.spinner.valueChanged + self.slider.installEventFilter(self) def get_value(self) -> int: return self.spinner.get_value() @@ -1090,6 +1091,12 @@ class FCSliderWithSpinner(QtWidgets.QFrame): slider_value = self.slider.value() self.spinner.set_value(slider_value) + def eventFilter(self, object, event): + if event.type() == QtCore.QEvent.Type.Wheel: + if not self.slider.hasFocus(): + return True + return False + class FCSpinner(QtWidgets.QSpinBox): returnPressed = QtCore.pyqtSignal() diff --git a/appGUI/preferences/PreferencesUIManager.py b/appGUI/preferences/PreferencesUIManager.py index 49f5e9da..e6814535 100644 --- a/appGUI/preferences/PreferencesUIManager.py +++ b/appGUI/preferences/PreferencesUIManager.py @@ -14,7 +14,7 @@ if '_' not in builtins.__dict__: _ = gettext.gettext -class PreferencesUIManager: +class PreferencesUIManager(QtCore.QObject): def __init__(self, defaults: AppDefaults, data_path: str, ui, inform, options): """ @@ -26,6 +26,7 @@ class PreferencesUIManager: :param inform: a pyqtSignal used to display information's in the StatusBar of the GUI :param options: a dict holding the current defaults loaded in the application """ + super(PreferencesUIManager, self).__init__() self.defaults = defaults self.data_path = data_path @@ -1239,6 +1240,9 @@ class PreferencesUIManager: Will color the Preferences tab text to Red color. :return: """ + if isinstance(self.sender(), QtWidgets.QScrollBar): + return + if self.preferences_changed_flag is False: self.inform.emit('[WARNING_NOTCL] %s' % _("Preferences edited but not saved.")) diff --git a/app_Main.py b/app_Main.py index 651b660b..a242c347 100644 --- a/app_Main.py +++ b/app_Main.py @@ -6562,7 +6562,7 @@ class App(QtCore.QObject): # detect changes in the preferences for idx in range(self.ui.pref_tab_area.count()): - for tb in self.ui.pref_tab_area.widget(idx).findChildren(QtCore.QObject): + for tb in self.ui.pref_tab_area.widget(idx).findChildren(QtWidgets.QWidget): try: try: tb.textEdited.disconnect(self.preferencesUiManager.on_preferences_edited)