Skip to content

Commit aad182f

Browse files
authored
Merge pull request #4274 from nyalldawson/scroll_timer
A different approach to avoiding accidently scroll changes
2 parents fb3d07f + ecb233b commit aad182f

File tree

62 files changed

+1022
-318
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+1022
-318
lines changed

python/console/console_settings.ui

+7-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
</widget>
4747
</item>
4848
<item row="0" column="0">
49-
<widget class="QScrollArea" name="scrollArea">
49+
<widget class="QgsScrollArea" name="scrollArea">
5050
<property name="frameShape">
5151
<enum>QFrame::NoFrame</enum>
5252
</property>
@@ -1139,6 +1139,12 @@
11391139
</layout>
11401140
</widget>
11411141
<customwidgets>
1142+
<customwidget>
1143+
<class>QgsScrollArea</class>
1144+
<extends>QScrollArea</extends>
1145+
<header location="global">qgis.gui</header>
1146+
<container>1</container>
1147+
</customwidget>
11421148
<customwidget>
11431149
<class>QgsCollapsibleGroupBox</class>
11441150
<extends>QGroupBox</extends>

python/gui/gui.sip

+1
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@
155155
%Include qgsscalerangewidget.sip
156156
%Include qgsscalevisibilitydialog.sip
157157
%Include qgsscalewidget.sip
158+
%Include qgsscrollarea.sip
158159
%Include qgssearchquerybuilder.sip
159160
%Include qgsshortcutsmanager.sip
160161
%Include qgsslider.sip

python/gui/qgsscrollarea.sip

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class QgsScrollArea : QScrollArea
2+
{
3+
%TypeHeaderCode
4+
#include <qgsscrollarea.h>
5+
%End
6+
7+
public:
8+
explicit QgsScrollArea( QWidget *parent /TransferThis/ = 0 );
9+
void scrollOccurred();
10+
bool hasScrolled() const;
11+
12+
protected:
13+
void wheelEvent( QWheelEvent *event );
14+
15+
};

python/plugins/processing/modeler/ModelerParametersDialog.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,14 @@
3030
from qgis.PyQt.QtCore import Qt, QUrl, QMetaObject
3131
from qgis.PyQt.QtWidgets import (QDialog, QDialogButtonBox, QLabel, QLineEdit,
3232
QFrame, QPushButton, QSizePolicy, QVBoxLayout,
33-
QHBoxLayout, QTabWidget, QWidget, QScrollArea,
33+
QHBoxLayout, QTabWidget, QWidget,
3434
QTextBrowser)
3535
from qgis.PyQt.QtNetwork import QNetworkRequest, QNetworkReply
3636

3737
from qgis.core import QgsNetworkAccessManager
3838

39-
from qgis.gui import QgsMessageBar
39+
from qgis.gui import (QgsMessageBar,
40+
QgsScrollArea)
4041

4142
from processing.gui.wrappers import InvalidParameterValue
4243
from processing.gui.MultipleInputPanel import MultipleInputPanel
@@ -187,7 +188,7 @@ def setupUi(self):
187188
self.tabWidget.setMinimumWidth(300)
188189
self.paramPanel = QWidget()
189190
self.paramPanel.setLayout(self.verticalLayout)
190-
self.scrollArea = QScrollArea()
191+
self.scrollArea = QgsScrollArea()
191192
self.scrollArea.setWidget(self.paramPanel)
192193
self.scrollArea.setWidgetResizable(True)
193194
self.tabWidget.addTab(self.scrollArea, self.tr('Parameters'))

python/plugins/processing/ui/DlgModeler.ui

+8-3
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
<number>0</number>
4545
</property>
4646
<item>
47-
<widget class="QScrollArea" name="scrollArea_1">
47+
<widget class="QgsScrollArea" name="scrollArea_1">
4848
<property name="sizePolicy">
4949
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
5050
<horstretch>0</horstretch>
@@ -138,7 +138,7 @@
138138
<number>0</number>
139139
</property>
140140
<item>
141-
<widget class="QScrollArea" name="scrollArea_2">
141+
<widget class="QgsScrollArea" name="scrollArea_2">
142142
<property name="sizePolicy">
143143
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
144144
<horstretch>0</horstretch>
@@ -222,7 +222,7 @@
222222
<number>2</number>
223223
</property>
224224
<item>
225-
<widget class="QScrollArea" name="scrollArea_3">
225+
<widget class="QgsScrollArea" name="scrollArea_3">
226226
<property name="sizePolicy">
227227
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
228228
<horstretch>0</horstretch>
@@ -505,6 +505,11 @@
505505
</action>
506506
</widget>
507507
<customwidgets>
508+
<customwidget>
509+
<class>QgsScrollArea</class>
510+
<extends>QScrollArea</extends>
511+
<header>qgis.gui</header>
512+
</customwidget>
508513
<customwidget>
509514
<class>QgsFilterLineEdit</class>
510515
<extends>QLineEdit</extends>

python/plugins/processing/ui/widgetParametersPanel.ui

+7-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<number>0</number>
2222
</property>
2323
<item>
24-
<widget class="QScrollArea" name="scrollArea">
24+
<widget class="QgsScrollArea" name="scrollArea">
2525
<property name="frameShape">
2626
<enum>QFrame::NoFrame</enum>
2727
</property>
@@ -88,6 +88,12 @@
8888
</layout>
8989
</widget>
9090
<customwidgets>
91+
<customwidget>
92+
<class>QgsScrollArea</class>
93+
<extends>QScrollArea</extends>
94+
<header>qgis.gui</header>
95+
<container>1</container>
96+
</customwidget>
9197
<customwidget>
9298
<class>QgsCollapsibleGroupBox</class>
9399
<extends>QGroupBox</extends>

src/app/composer/qgsattributeselectiondialog.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
#include <QLabel>
3030
#include <QLineEdit>
3131
#include <QPushButton>
32-
#include <QScrollArea>
3332
#include <QSpinBox>
3433
#include <QSortFilterProxyModel>
3534

src/customwidgets/CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ SET (QGIS_CUSTOMWIDGETS_SRCS
3232
qgsrelationreferencewidgetplugin.cpp
3333
qgsscalerangewidgetplugin.cpp
3434
qgsscalewidgetplugin.cpp
35+
qgsscrollareawidgetplugin.cpp
3536
qgsspinboxplugin.cpp
3637
)
3738

@@ -57,6 +58,7 @@ SET (QGIS_CUSTOMWIDGETS_MOC_HDRS
5758
qgsrelationreferencewidgetplugin.h
5859
qgsscalerangewidgetplugin.h
5960
qgsscalewidgetplugin.h
61+
qgsscrollareawidgetplugin.h
6062
qgsspinboxplugin.h
6163
)
6264

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
/***************************************************************************
2+
qgsscrollareawidgetplugin.cpp
3+
--------------------------------------
4+
Date : March 2017
5+
Copyright : (C) 2017 Nyall Dawson
6+
Email : nyall dot dawson at gmail dot com
7+
***************************************************************************
8+
* *
9+
* This program is free software; you can redistribute it and/or modify *
10+
* it under the terms of the GNU General Public License as published by *
11+
* the Free Software Foundation; either version 2 of the License, or *
12+
* (at your option) any later version. *
13+
* *
14+
***************************************************************************/
15+
16+
17+
#include "qgiscustomwidgets.h"
18+
#include "qgsscrollareawidgetplugin.h"
19+
#include "qgsscrollarea.h"
20+
21+
22+
QgsScrollAreaWidgetPlugin::QgsScrollAreaWidgetPlugin( QObject *parent )
23+
: QObject( parent )
24+
{}
25+
26+
QString QgsScrollAreaWidgetPlugin::name() const
27+
{
28+
return "QgsScrollArea";
29+
}
30+
31+
QString QgsScrollAreaWidgetPlugin::group() const
32+
{
33+
return QgisCustomWidgets::groupName();
34+
}
35+
36+
QString QgsScrollAreaWidgetPlugin::includeFile() const
37+
{
38+
return "qgsscrollarea.h";
39+
}
40+
41+
QIcon QgsScrollAreaWidgetPlugin::icon() const
42+
{
43+
return QIcon( ":/images/icons/qgis-icon-60x60.png" );
44+
}
45+
46+
bool QgsScrollAreaWidgetPlugin::isContainer() const
47+
{
48+
return true;
49+
}
50+
51+
QWidget *QgsScrollAreaWidgetPlugin::createWidget( QWidget *parent )
52+
{
53+
return new QgsScrollArea( parent );
54+
}
55+
56+
bool QgsScrollAreaWidgetPlugin::isInitialized() const
57+
{
58+
return mInitialized;
59+
}
60+
61+
void QgsScrollAreaWidgetPlugin::initialize( QDesignerFormEditorInterface *core )
62+
{
63+
Q_UNUSED( core );
64+
if ( mInitialized )
65+
return;
66+
mInitialized = true;
67+
}
68+
69+
70+
QString QgsScrollAreaWidgetPlugin::toolTip() const
71+
{
72+
return tr( "Scroll area" );
73+
}
74+
75+
QString QgsScrollAreaWidgetPlugin::whatsThis() const
76+
{
77+
return "";
78+
}
79+
80+
QString QgsScrollAreaWidgetPlugin::domXml() const
81+
{
82+
return QString( "<ui language=\"c++\">\n"
83+
" <widget class=\"%1\" name=\"mScrollArea\">\n"
84+
" <property name=\"geometry\">\n"
85+
" <rect>\n"
86+
" <x>0</x>\n"
87+
" <y>0</y>\n"
88+
" <width>300</width>\n"
89+
" <height>100</height>\n"
90+
" </rect>\n"
91+
" </property>\n"
92+
" </widget>\n"
93+
"</ui>\n" )
94+
.arg( name() );
95+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/***************************************************************************
2+
qgsscrollareawidgetplugin.h
3+
--------------------------------------
4+
Date : March 2017
5+
Copyright : (C) 2017 Nyall Dawson
6+
Email : nyall dot dawson at gmail dot com
7+
***************************************************************************
8+
* *
9+
* This program is free software; you can redistribute it and/or modify *
10+
* it under the terms of the GNU General Public License as published by *
11+
* the Free Software Foundation; either version 2 of the License, or *
12+
* (at your option) any later version. *
13+
* *
14+
***************************************************************************/
15+
16+
#ifndef QGSSCROLLAREAWIDGETPLUGIN_H
17+
#define QGSSCROLLAREAWIDGETPLUGIN_H
18+
19+
20+
#include <QtGlobal>
21+
#include <QtUiPlugin/QDesignerCustomWidgetInterface>
22+
#include <QtUiPlugin/QDesignerExportWidget>
23+
#include "qgis_customwidgets.h"
24+
25+
class CUSTOMWIDGETS_EXPORT QgsScrollAreaWidgetPlugin : public QObject, public QDesignerCustomWidgetInterface
26+
{
27+
Q_OBJECT
28+
Q_INTERFACES( QDesignerCustomWidgetInterface )
29+
30+
public:
31+
explicit QgsScrollAreaWidgetPlugin( QObject *parent = 0 );
32+
33+
private:
34+
bool mInitialized = false;
35+
36+
// QDesignerCustomWidgetInterface interface
37+
public:
38+
QString name() const override;
39+
QString group() const override;
40+
QString includeFile() const override;
41+
QIcon icon() const override;
42+
bool isContainer() const override;
43+
QWidget *createWidget( QWidget *parent ) override;
44+
bool isInitialized() const override;
45+
void initialize( QDesignerFormEditorInterface *core ) override;
46+
QString toolTip() const override;
47+
QString whatsThis() const override;
48+
QString domXml() const override;
49+
};
50+
#endif // QGSSCROLLAREAWIDGETPLUGIN_H

src/gui/CMakeLists.txt

100644100755
+2
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ SET(QGIS_GUI_SRCS
296296
qgsscalerangewidget.cpp
297297
qgsscalevisibilitydialog.cpp
298298
qgsscalewidget.cpp
299+
qgsscrollarea.cpp
299300
qgssearchquerybuilder.cpp
300301
qgsshortcutsmanager.cpp
301302
qgsslider.cpp
@@ -443,6 +444,7 @@ SET(QGIS_GUI_MOC_HDRS
443444
qgsscalerangewidget.h
444445
qgsscalevisibilitydialog.h
445446
qgsscalewidget.h
447+
qgsscrollarea.h
446448
qgssearchquerybuilder.h
447449
qgsshortcutsmanager.h
448450
qgsslider.h

src/gui/attributetable/qgsdualview.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include "qgsorganizetablecolumnsdialog.h"
2929
#include "qgseditorwidgetregistry.h"
3030
#include "qgssettings.h"
31+
#include "qgsscrollarea.h"
3132

3233
#include <QClipboard>
3334
#include <QDialog>
@@ -95,7 +96,7 @@ void QgsDualView::init( QgsVectorLayer *layer, QgsMapCanvas *mapCanvas, const Qg
9596
mAttributeForm = new QgsAttributeForm( mLayer, QgsFeature(), mEditorContext );
9697
if ( !context.parentContext() )
9798
{
98-
mAttributeEditorScrollArea = new QScrollArea();
99+
mAttributeEditorScrollArea = new QgsScrollArea();
99100
mAttributeEditorScrollArea->setWidgetResizable( true );
100101
mAttributeEditor->layout()->addWidget( mAttributeEditorScrollArea );
101102
mAttributeEditorScrollArea->setWidget( mAttributeForm );

src/gui/attributetable/qgsdualview.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
class QgsFeatureRequest;
3030
class QSignalMapper;
3131
class QgsMapLayerAction;
32-
class QScrollArea;
32+
class QgsScrollArea;
3333

3434
/** \ingroup gui
3535
* This widget is used to show the attributes of a set of features of a {@link QgsVectorLayer}.
@@ -351,7 +351,7 @@ class GUI_EXPORT QgsDualView : public QStackedWidget, private Ui::QgsDualViewBas
351351
QgsDistanceArea mDistanceArea;
352352
QString mDisplayExpression;
353353
QgsAttributeTableConfig mConfig;
354-
QScrollArea *mAttributeEditorScrollArea = nullptr;
354+
QgsScrollArea *mAttributeEditorScrollArea = nullptr;
355355
QgsMapCanvas *mMapCanvas = nullptr;
356356

357357
friend class TestQgsDualView;

src/gui/qgsattributeform.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "qgslogger.h"
3232
#include "qgstabwidget.h"
3333
#include "qgssettings.h"
34+
#include "qgsscrollarea.h"
3435

3536
#include <QDir>
3637
#include <QTextStream>
@@ -42,7 +43,6 @@
4243
#include <QKeyEvent>
4344
#include <QLabel>
4445
#include <QPushButton>
45-
#include <QScrollArea>
4646
#include <QUiLoader>
4747
#include <QMessageBox>
4848
#include <QToolButton>
@@ -1210,7 +1210,7 @@ void QgsAttributeForm::init()
12101210
if ( mContext.formMode() != QgsAttributeEditorContext::Embed )
12111211
{
12121212
// put the form into a scroll area to nicely handle cases with lots of attributes
1213-
QScrollArea *scrollArea = new QScrollArea( this );
1213+
QgsScrollArea *scrollArea = new QgsScrollArea( this );
12141214
scrollArea->setWidget( formWidget );
12151215
scrollArea->setWidgetResizable( true );
12161216
scrollArea->setFrameShape( QFrame::NoFrame );
@@ -1599,7 +1599,7 @@ QgsAttributeForm::WidgetInfo QgsAttributeForm::createWidgetFromDef( const QgsAtt
15991599

16001600
if ( context.formMode() != QgsAttributeEditorContext::Embed )
16011601
{
1602-
QScrollArea *scrollArea = new QScrollArea( parent );
1602+
QgsScrollArea *scrollArea = new QgsScrollArea( parent );
16031603

16041604
scrollArea->setWidget( myContainer );
16051605
scrollArea->setWidgetResizable( true );

src/gui/qgsattributetypeloaddialog.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
#include <QComboBox>
3030
#include <QLabel>
3131
#include <QFrame>
32-
#include <QScrollArea>
3332
#include <QCompleter>
3433
#include <QSpinBox>
3534
#include <QPushButton>

0 commit comments

Comments
 (0)