mirror of
https://github.com/qgis/QGIS.git
synced 2025-03-31 00:03:42 -04:00
106 lines
2.8 KiB
C++
106 lines
2.8 KiB
C++
/***************************************************************************
|
|
qgsscrollarea.h
|
|
---------------
|
|
begin : March 2017
|
|
copyright : (C) 2017 by Nyall Dawson
|
|
email : nyall dot dawson at gmail dot com
|
|
***************************************************************************
|
|
* *
|
|
* 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 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#ifndef QGSSCROLLAREA_H
|
|
#define QGSSCROLLAREA_H
|
|
|
|
#include <QScrollArea>
|
|
#include "qgis.h"
|
|
#include "qgis_gui.h"
|
|
#include <QTimer>
|
|
class ScrollAreaFilter;
|
|
|
|
/**
|
|
* \class QgsScrollArea
|
|
* \ingroup gui
|
|
* A QScrollArea subclass with improved scrolling behavior.
|
|
*
|
|
* QgsScrollArea should be used instead of QScrollArea widgets.
|
|
* In most cases the use is identical, however QgsScrollArea
|
|
* has extra logic to avoid wheel events changing child widget
|
|
* values when the mouse cursor is temporarily located over
|
|
* a child widget during a scroll event.
|
|
*
|
|
* All QGIS code and plugins should use QgsScrollArea in place
|
|
* of QScrollArea.
|
|
*
|
|
* \since QGIS 3.0
|
|
*/
|
|
class GUI_EXPORT QgsScrollArea : public QScrollArea
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
|
|
/**
|
|
* Constructor for QgsScrollArea.
|
|
*/
|
|
explicit QgsScrollArea( QWidget *parent SIP_TRANSFERTHIS = nullptr );
|
|
|
|
/**
|
|
* Should be called when a scroll occurs on with the
|
|
* QScrollArea itself or its child viewport().
|
|
*/
|
|
void scrollOccurred();
|
|
|
|
/**
|
|
* Returns true if a scroll recently occurred within
|
|
* the QScrollArea or its child viewport()
|
|
*/
|
|
bool hasScrolled() const;
|
|
|
|
protected:
|
|
void wheelEvent( QWheelEvent *event ) override;
|
|
|
|
private:
|
|
QTimer mTimer;
|
|
ScrollAreaFilter *mFilter = nullptr;
|
|
};
|
|
|
|
#ifndef SIP_RUN
|
|
|
|
///@cond PRIVATE
|
|
|
|
/**
|
|
* \class ScrollAreaFilter
|
|
* Swallows wheel events for QScrollArea children for a short period
|
|
* following a scroll.
|
|
*/
|
|
class ScrollAreaFilter : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
|
|
ScrollAreaFilter( QgsScrollArea *parent = nullptr,
|
|
QWidget *viewPort = nullptr );
|
|
|
|
protected:
|
|
bool eventFilter( QObject *obj, QEvent *event ) override;
|
|
|
|
private:
|
|
QgsScrollArea *mScrollAreaWidget = nullptr;
|
|
QWidget *mViewPort = nullptr;
|
|
|
|
void addChild( QObject *child );
|
|
void removeChild( QObject *child );
|
|
|
|
};
|
|
|
|
///@endcond PRIVATE
|
|
|
|
#endif
|
|
|
|
#endif // QGSSCROLLAREA_H
|