From 6ad81b67821eca67e96cfa8e84b5149a3960d613 Mon Sep 17 00:00:00 2001 From: "Arens, Tobias" <t.arens@fz-juelich.de> Date: Fri, 8 Sep 2023 11:51:48 +0200 Subject: [PATCH] Resolve "Make Slider only scrollable when clicking on them" --- CMakeLists.txt | 2 ++ include/pSlider.h | 43 +++++++++++++++++++++++++++++++++++++++ src/pSlider.cpp | 36 ++++++++++++++++++++++++++++++++ ui/alignmentGridBox.ui | 21 +++++++++++-------- ui/control.ui | 27 ++++++++++++++---------- ui/coordinateSystemBox.ui | 21 +++++++++++-------- ui/filterBeforeBox.ui | 11 +++++++--- 7 files changed, 131 insertions(+), 30 deletions(-) create mode 100644 include/pSlider.h create mode 100644 src/pSlider.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 1adffc0cd..e8bc34134 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -391,6 +391,7 @@ target_sources(petrack_core PRIVATE include/frameRange.h include/pdoublespinbox.h include/pspinbox.h + include/pSlider.h include/filterBeforeBox.h include/intrinsicBox.h include/intrinsicCameraParams.h @@ -491,6 +492,7 @@ target_sources(petrack_core PRIVATE ui/pGroupBox.ui src/alignmentGridBox.cpp ui/alignmentGridBox.ui + src/pSlider.cpp ui/about.ui ui/codeMarker.ui ui/colorMarker.ui diff --git a/include/pSlider.h b/include/pSlider.h new file mode 100644 index 000000000..6919d2336 --- /dev/null +++ b/include/pSlider.h @@ -0,0 +1,43 @@ +/* + * PeTrack - Software for tracking pedestrians movement in videos + * Copyright (C) 2023 Forschungszentrum Jülich GmbH, IAS-7 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#ifndef PSLIDER_H +#define PSLIDER_H + + +#include <QScrollEvent> +#include <QSlider> + +/** + * Custom Slider-class that changes scrolling behaviour. + * + * To prevent an unwanted change in value when scrolling on the UI, this custom + * implementation of the Slider only scrolls, if it has focus. + */ +class PSlider : public QSlider +{ + Q_OBJECT +public: + PSlider(QWidget *parent = nullptr) : QSlider(parent){}; + +protected: + void wheelEvent(QWheelEvent *event) override; +}; + + +#endif // PSLIDER_H diff --git a/src/pSlider.cpp b/src/pSlider.cpp new file mode 100644 index 000000000..6da39698e --- /dev/null +++ b/src/pSlider.cpp @@ -0,0 +1,36 @@ +/* + * PeTrack - Software for tracking pedestrians movement in videos + * Copyright (C) 2023 Forschungszentrum Jülich GmbH, IAS-7 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#include "pSlider.h" + + +/** + * Overwritten event that only scrolls if there is focus on this object + * @param e QTEvent + */ +void PSlider::wheelEvent(QWheelEvent *e) +{ + if(hasFocus()) + { + QSlider::wheelEvent(e); + } + else + { + e->ignore(); + } +} \ No newline at end of file diff --git a/ui/alignmentGridBox.ui b/ui/alignmentGridBox.ui index 0e4d08dd2..c6d410e5f 100644 --- a/ui/alignmentGridBox.ui +++ b/ui/alignmentGridBox.ui @@ -164,7 +164,7 @@ </widget> </item> <item row="0" column="1"> - <widget class="QScrollBar" name="grid3DTransX"> + <widget class="PSlider" name="grid3DTransX"> <property name="sizePolicy"> <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> <horstretch>0</horstretch> @@ -233,7 +233,7 @@ </widget> </item> <item row="1" column="1"> - <widget class="QScrollBar" name="grid3DTransY"> + <widget class="PSlider" name="grid3DTransY"> <property name="minimumSize"> <size> <width>0</width> @@ -293,7 +293,7 @@ </widget> </item> <item row="2" column="1"> - <widget class="QScrollBar" name="grid3DTransZ"> + <widget class="PSlider" name="grid3DTransZ"> <property name="sizePolicy"> <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> <horstretch>0</horstretch> @@ -368,7 +368,7 @@ </widget> </item> <item row="3" column="1"> - <widget class="QScrollBar" name="grid3DResolution"> + <widget class="PSlider" name="grid3DResolution"> <property name="minimumSize"> <size> <width>0</width> @@ -475,7 +475,7 @@ </widget> </item> <item row="0" column="1"> - <widget class="QScrollBar" name="gridTransX"> + <widget class="PSlider" name="gridTransX"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> <horstretch>0</horstretch> @@ -550,7 +550,7 @@ </widget> </item> <item row="1" column="1"> - <widget class="QScrollBar" name="gridTransY"> + <widget class="PSlider" name="gridTransY"> <property name="minimumSize"> <size> <width>0</width> @@ -616,7 +616,7 @@ </widget> </item> <item row="2" column="1"> - <widget class="QScrollBar" name="gridRotate"> + <widget class="PSlider" name="gridRotate"> <property name="sizePolicy"> <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> <horstretch>0</horstretch> @@ -706,7 +706,7 @@ </widget> </item> <item row="3" column="1"> - <widget class="QScrollBar" name="gridScale"> + <widget class="PSlider" name="gridScale"> <property name="minimumSize"> <size> <width>0</width> @@ -781,6 +781,11 @@ <extends>QSpinBox</extends> <header>pspinbox.h</header> </customwidget> + <customwidget> + <class>PSlider</class> + <extends>QSlider</extends> + <header>pSlider.h</header> + </customwidget> </customwidgets> <resources/> <connections> diff --git a/ui/control.ui b/ui/control.ui index d1f534d74..bad8bd868 100644 --- a/ui/control.ui +++ b/ui/control.ui @@ -534,7 +534,7 @@ </widget> </item> <item> - <widget class="QScrollBar" name="markerBrightness"> + <widget class="PSlider" name="markerBrightness"> <property name="sizePolicy"> <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> <horstretch>0</horstretch> @@ -815,7 +815,7 @@ </widget> </item> <item> - <widget class="QScrollBar" name="recoColorZ"> + <widget class="PSlider" name="recoColorZ"> <property name="minimumSize"> <size> <width>100</width> @@ -866,7 +866,7 @@ </widget> </item> <item> - <widget class="QScrollBar" name="recoGreyLevel"> + <widget class="PSlider" name="recoGreyLevel"> <property name="value"> <number>50</number> </property> @@ -889,7 +889,7 @@ </widget> </item> <item> - <widget class="QScrollBar" name="recoSymbolSize"> + <widget class="PSlider" name="recoSymbolSize"> <property name="minimum"> <number>1</number> </property> @@ -1015,7 +1015,7 @@ </widget> </item> <item row="0" column="2"> - <widget class="QScrollBar" name="mapX"> + <widget class="PSlider" name="mapX"> <property name="sizePolicy"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> <horstretch>0</horstretch> @@ -1082,7 +1082,7 @@ </widget> </item> <item row="1" column="4"> - <widget class="QScrollBar" name="mapH"> + <widget class="PSlider" name="mapH"> <property name="maximum"> <number>395</number> </property> @@ -1105,7 +1105,7 @@ </widget> </item> <item row="1" column="2"> - <widget class="QScrollBar" name="mapW"> + <widget class="PSlider" name="mapW"> <property name="maximum"> <number>395</number> </property> @@ -1115,7 +1115,7 @@ </widget> </item> <item row="0" column="4"> - <widget class="QScrollBar" name="mapY"> + <widget class="PSlider" name="mapY"> <property name="sizePolicy"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> <horstretch>0</horstretch> @@ -2277,7 +2277,7 @@ </widget> </item> <item row="0" column="1"> - <widget class="QScrollBar" name="trackRegionScale"> + <widget class="PSlider" name="trackRegionScale"> <property name="minimum"> <number>1</number> </property> @@ -2303,7 +2303,7 @@ </widget> </item> <item row="1" column="1"> - <widget class="QScrollBar" name="trackRegionLevels"> + <widget class="PSlider" name="trackRegionLevels"> <property name="minimum"> <number>0</number> </property> @@ -2319,7 +2319,7 @@ </widget> </item> <item row="2" column="1"> - <widget class="QScrollBar" name="trackErrorExponent"> + <widget class="PSlider" name="trackErrorExponent"> <property name="minimum"> <number>-10</number> </property> @@ -4126,6 +4126,11 @@ <extends>QSpinBox</extends> <header>pspinbox.h</header> </customwidget> + <customwidget> + <class>PSlider</class> + <extends>QSlider</extends> + <header>pSlider.h</header> + </customwidget> <customwidget> <class>PDoubleSpinBox</class> <extends>QDoubleSpinBox</extends> diff --git a/ui/coordinateSystemBox.ui b/ui/coordinateSystemBox.ui index 28009814a..6ba54109a 100644 --- a/ui/coordinateSystemBox.ui +++ b/ui/coordinateSystemBox.ui @@ -226,7 +226,7 @@ </widget> </item> <item row="2" column="1"> - <widget class="QScrollBar" name="coord3DTransZ"> + <widget class="PSlider" name="coord3DTransZ"> <property name="minimumSize"> <size> <width>0</width> @@ -260,7 +260,7 @@ </widget> </item> <item row="0" column="1"> - <widget class="QScrollBar" name="coord3DTransX"> + <widget class="PSlider" name="coord3DTransX"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> <horstretch>0</horstretch> @@ -303,7 +303,7 @@ </widget> </item> <item row="1" column="1"> - <widget class="QScrollBar" name="coord3DTransY"> + <widget class="PSlider" name="coord3DTransY"> <property name="minimumSize"> <size> <width>0</width> @@ -420,7 +420,7 @@ </widget> </item> <item row="3" column="1"> - <widget class="QScrollBar" name="coord3DAxeLen"> + <widget class="PSlider" name="coord3DAxeLen"> <property name="minimumSize"> <size> <width>0</width> @@ -676,7 +676,7 @@ </widget> </item> <item row="1" column="1"> - <widget class="QScrollBar" name="coordTransX"> + <widget class="PSlider" name="coordTransX"> <property name="minimumSize"> <size> <width>0</width> @@ -726,7 +726,7 @@ </widget> </item> <item row="2" column="1"> - <widget class="QScrollBar" name="coordTransY"> + <widget class="PSlider" name="coordTransY"> <property name="minimumSize"> <size> <width>0</width> @@ -773,7 +773,7 @@ </widget> </item> <item row="4" column="1"> - <widget class="QScrollBar" name="coordScale"> + <widget class="PSlider" name="coordScale"> <property name="minimumSize"> <size> <width>0</width> @@ -873,7 +873,7 @@ </widget> </item> <item row="3" column="1"> - <widget class="QScrollBar" name="coordRotate"> + <widget class="PSlider" name="coordRotate"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> <horstretch>0</horstretch> @@ -1141,6 +1141,11 @@ <extends>QSpinBox</extends> <header>pspinbox.h</header> </customwidget> + <customwidget> + <class>PSlider</class> + <extends>QSlider</extends> + <header>pSlider.h</header> + </customwidget> <customwidget> <class>PDoubleSpinBox</class> <extends>QDoubleSpinBox</extends> diff --git a/ui/filterBeforeBox.ui b/ui/filterBeforeBox.ui index 3c5de164e..7d290e127 100644 --- a/ui/filterBeforeBox.ui +++ b/ui/filterBeforeBox.ui @@ -229,7 +229,7 @@ <item row="3" column="1"> <layout class="QHBoxLayout" name="horizontalLayout_10"> <item> - <widget class="QScrollBar" name="filterBorderParamSize"> + <widget class="PSlider" name="filterBorderParamSize"> <property name="sizePolicy"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> <horstretch>0</horstretch> @@ -277,7 +277,7 @@ </widget> </item> <item row="0" column="1"> - <widget class="QScrollBar" name="filterBrightParam"> + <widget class="PSlider" name="filterBrightParam"> <property name="minimumSize"> <size> <width>100</width> @@ -310,7 +310,7 @@ </widget> </item> <item row="1" column="1"> - <widget class="QScrollBar" name="filterContrastParam"> + <widget class="PSlider" name="filterContrastParam"> <property name="minimumSize"> <size> <width>100</width> @@ -407,6 +407,11 @@ <extends>QSpinBox</extends> <header>pspinbox.h</header> </customwidget> + <customwidget> + <class>PSlider</class> + <extends>QSlider</extends> + <header>pSlider.h</header> + </customwidget> </customwidgets> <tabstops> <tabstop>filterBrightContrast</tabstop> -- GitLab