1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QABSTRACTSCROLLAREA_P_H
#define QABSTRACTSCROLLAREA_P_H
//
// W A R N I N G
// -------------
//
// This file is not part of the Qt API. It exists purely as an
// implementation detail. This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//
#include <QtWidgets/private/qtwidgetsglobal_p.h>
#include "private/qframe_p.h"
#include "qabstractscrollarea.h"
#include <QtGui/private/qgridlayoutengine_p.h>
QT_BEGIN_NAMESPACE
#if QT_CONFIG(scrollarea)
class QScrollBar;
class QAbstractScrollAreaScrollBarContainer;
class Q_AUTOTEST_EXPORT QAbstractScrollAreaPrivate: public QFramePrivate
{
Q_DECLARE_PUBLIC(QAbstractScrollArea)
public:
QAbstractScrollAreaPrivate();
~QAbstractScrollAreaPrivate();
void replaceScrollBar(QScrollBar *scrollBar, Qt::Orientation orientation);
QHVContainer<QAbstractScrollAreaScrollBarContainer *> scrollBarContainers;
QScrollBar *hbar, *vbar;
Qt::ScrollBarPolicy vbarpolicy, hbarpolicy;
bool shownOnce;
bool inResize;
mutable QSize sizeHint;
QAbstractScrollArea::SizeAdjustPolicy sizeAdjustPolicy;
QWidget *viewport;
QWidget *cornerWidget;
QRect cornerPaintingRect;
int left, top, right, bottom; // viewport margin
int xoffset, yoffset;
QPoint overshoot;
void init();
void layoutChildren();
void layoutChildren_helper(bool *needHorizontalScrollbar, bool *needVerticalScrollbar);
virtual void scrollBarPolicyChanged(Qt::Orientation, Qt::ScrollBarPolicy) {}
virtual bool canStartScrollingAt( const QPoint &startPos ) const;
void flashScrollBars();
void setScrollBarTransient(QScrollBar *scrollBar, bool transient);
void _q_hslide(int);
void _q_vslide(int);
void _q_showOrHideScrollBars();
virtual QPoint contentsOffset() const;
inline bool viewportEvent(QEvent *event)
{ return q_func()->viewportEvent(event); }
QScopedPointer<QObject> viewportFilter;
};
class QAbstractScrollAreaFilter : public QObject
{
Q_OBJECT
public:
QAbstractScrollAreaFilter(QAbstractScrollAreaPrivate *p) : d(p)
{ setObjectName(QLatin1StringView("qt_abstractscrollarea_filter")); }
bool eventFilter(QObject *o, QEvent *e) override
{ return (o == d->viewport ? d->viewportEvent(e) : false); }
private:
QAbstractScrollAreaPrivate *d;
};
class QBoxLayout;
class QAbstractScrollAreaScrollBarContainer : public QWidget
{
public:
enum LogicalPosition { LogicalLeft = 1, LogicalRight = 2 };
QAbstractScrollAreaScrollBarContainer(Qt::Orientation orientation, QWidget *parent);
void addWidget(QWidget *widget, LogicalPosition position);
QWidgetList widgets(LogicalPosition position);
void removeWidget(QWidget *widget);
QScrollBar *scrollBar;
QBoxLayout *layout;
private:
int scrollBarLayoutIndex() const;
Qt::Orientation orientation;
};
#endif // QT_CONFIG(scrollarea)
QT_END_NAMESPACE
#endif // QABSTRACTSCROLLAREA_P_H
|