9#include <QtQml/qqmlinfo.h>
10#include <QtQuick/private/qquickflickable_p.h>
11#if QT_CONFIG(accessibility)
12#include <QtQuick/private/qquickaccessibleattached_p.h>
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
136 qreal visualPos = position;
138 if (minimumSize > size && size != 1.0)
139 visualPos = position / (1.0 - size) * (1.0 - minimumSize);
141 qreal maximumSize = qMax<qreal>(0.0, 1.0 - visualPos);
142 qreal visualSize = qMax<qreal>(minimumSize,
143 qMin<qreal>(qMax(size, minimumSize) + qMin<qreal>(0, visualPos),
146 visualPos = qMax<qreal>(0,qMin<qreal>(visualPos,qMax<qreal>(0, 1.0 - visualSize)));
148 return VisualArea(visualPos, visualSize);
153 if (minimumSize > size && minimumSize != 1.0)
154 return position * (1.0 - size) / (1.0 - minimumSize);
160 const qreal effectiveStep = stepSize * (1.0 - size);
161 if (qFuzzyIsNull(effectiveStep))
164 return qRound(position / effectiveStep) * effectiveStep;
169 Q_Q(
const QQuickScrollBar);
170 if (orientation == Qt::Horizontal)
171 return logicalPosition(point.x() - q->leftPadding()) / q->availableWidth();
173 return logicalPosition(point.y() - q->topPadding()) / q->availableHeight();
178 Q_Q(QQuickScrollBar);
184 q->setAcceptedMouseButtons(Qt::LeftButton);
185#if QT_CONFIG(quicktemplates2_multitouch)
186 q->setAcceptTouchEvents(
true);
189 q->setCursor(Qt::ArrowCursor);
192 q->setAcceptedMouseButtons(Qt::NoButton);
193#if QT_CONFIG(quicktemplates2_multitouch)
194 q->setAcceptTouchEvents(
false);
201 emit q->interactiveChanged();
206 Q_Q(QQuickScrollBar);
207#if QT_CONFIG(quicktemplates2_hover)
208 bool hover = hovered;
212 q->setActive(moving || (interactive && (pressed || hover)));
217 Q_Q(QQuickScrollBar);
223 const VisualArea visual = visualArea();
225 if (orientation == Qt::Horizontal) {
226 contentItem->setPosition(QPointF(q->leftPadding() + visual.position * q->availableWidth(), q->topPadding()));
227 contentItem->setSize(QSizeF(q->availableWidth() * visual.size, q->availableHeight()));
229 contentItem->setPosition(QPointF(q->leftPadding(), q->topPadding() + visual.position * q->availableHeight()));
230 contentItem->setSize(QSizeF(q->availableWidth(), q->availableHeight() * visual.size));
236 Q_Q(QQuickScrollBar);
237 QQuickControlPrivate::itemImplicitWidthChanged(item);
238 QQuickIndicatorButton *indicatorButton = q->decreaseVisual();
239 if (!indicatorButton || item != indicatorButton->indicator()) {
240 indicatorButton = q->increaseVisual();
241 if (!indicatorButton || item != indicatorButton->indicator())
245 emit indicatorButton->implicitIndicatorWidthChanged();
250 Q_Q(QQuickScrollBar);
251 QQuickControlPrivate::itemImplicitHeightChanged(item);
252 QQuickIndicatorButton *indicatorButton = q->decreaseVisual();
253 if (!indicatorButton || item != indicatorButton->indicator()) {
254 indicatorButton = q->increaseVisual();
255 if (!indicatorButton || item != indicatorButton->indicator())
259 emit indicatorButton->implicitIndicatorHeightChanged();
264 Q_Q(QQuickScrollBar);
265 QQuickControlPrivate::handlePress(point, timestamp);
266 if (QQuickIndicatorButton *indicatorButton = q->decreaseVisual()) {
267 QQuickItem *decreaseArrow = indicatorButton->indicator();
268 if (decreaseArrow && decreaseArrow->contains(q->mapToItem(decreaseArrow, point + QPointF(0.5, 0.5)))) {
269 indicatorButton->setPressed(
true);
275 if (QQuickIndicatorButton *increaseObject = q->increaseVisual()) {
276 QQuickItem *increaseArrow = increaseObject->indicator();
277 if (increaseArrow && increaseArrow->contains(q->mapToItem(increaseArrow, point + QPointF(0.5, 0.5)))) {
278 increaseObject->setPressed(
true);
284 offset = positionAt(point) - position;
285 qreal sz = qMax(size, logicalPosition(minimumSize));
286 if (offset < 0 || offset > sz)
294 Q_Q(QQuickScrollBar);
295 QQuickControlPrivate::handleMove(point, timestamp);
298
299
300
301
302
303
307 qreal pos = qMax<qreal>(0.0, qMin<qreal>(positionAt(point) - offset, 1.0 - size));
308 if (snapMode == QQuickScrollBar::SnapAlways)
309 pos = snapPosition(pos);
316 Q_Q(QQuickScrollBar);
317 QQuickControlPrivate::handleRelease(point, timestamp);
319 if (orientation == Qt::Vertical) {
320 if (point.y() < q->topPadding() || point.y() >= (q->height() - q->bottomPadding()))
323 if (point.x() < q->leftPadding() || point.x() >= (q->width() - q->rightPadding()))
327 qreal pos = qMax<qreal>(0.0, qMin<qreal>(positionAt(point) - offset, 1.0 - size));
328 if (snapMode != QQuickScrollBar::NoSnap)
329 pos = snapPosition(pos);
332 q->setPressed(
false);
338 Q_Q(QQuickScrollBar);
339 QQuickControlPrivate::handleUngrab();
341 q->setPressed(
false);
346 Q_Q(QQuickScrollBar);
347 if (!qFuzzyCompare(newVisualArea.size, oldVisualArea.size))
348 emit q->visualSizeChanged();
349 if (!qFuzzyCompare(newVisualArea.position, oldVisualArea.position))
350 emit q->visualPositionChanged();
355 Q_Q(QQuickScrollBar);
356 auto updateHoverOnButton = [&](QQuickIndicatorButton *sbButton) {
358 bool hovered = newHoverState.value_or(
false);
359 if (!newHoverState.has_value()) {
360 if (QQuickItem *indicator = sbButton->indicator())
361 hovered = indicator->contains(q->mapToItem(indicator, pos));
363 sbButton->setHovered(hovered);
366 updateHoverOnButton(q->decreaseVisual());
367 updateHoverOnButton(q->increaseVisual());
370QQuickScrollBar::QQuickScrollBar(QQuickItem *parent)
371 : QQuickControl(*(
new QQuickScrollBarPrivate), parent)
373 Q_D(QQuickScrollBar);
374 d->decreaseVisual =
new QQuickIndicatorButton(
this);
375 d->increaseVisual =
new QQuickIndicatorButton(
this);
376 d->setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Fixed);
377 setKeepMouseGrab(
true);
378 setAcceptedMouseButtons(Qt::LeftButton);
379#if QT_CONFIG(quicktemplates2_multitouch)
380 setAcceptTouchEvents(
true);
383 setCursor(Qt::ArrowCursor);
387QQuickScrollBarAttached *QQuickScrollBar::qmlAttachedProperties(QObject *object)
389 return new QQuickScrollBarAttached(object);
393
394
395
396
397
398
399
400
401
402
403
404qreal QQuickScrollBar::size()
const
406 Q_D(
const QQuickScrollBar);
410void QQuickScrollBar::setSize(qreal size)
412 Q_D(QQuickScrollBar);
413 if (!qt_is_finite(size))
415 size = qBound(0.0, size, 1.0);
416 if (qFuzzyCompare(d->size, size))
419 const auto oldVisualArea = d->visualArea();
421 if (d->size + d->position > 1.0) {
422 d->setPosition(1.0 - d->size,
false);
425 if (isComponentComplete())
428 d->visualAreaChange(d->visualArea(), oldVisualArea);
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448qreal QQuickScrollBar::position()
const
450 Q_D(
const QQuickScrollBar);
454void QQuickScrollBar::setPosition(qreal position)
456 Q_D(QQuickScrollBar);
457 d->setPosition(position);
462 Q_Q(QQuickScrollBar);
463 if (!qt_is_finite(newPosition) || qFuzzyCompare(position, newPosition))
466 auto oldVisualArea = visualArea();
467 position = newPosition;
468 if (q->isComponentComplete())
470 emit q->positionChanged();
471 if (notifyVisualChange)
472 visualAreaChange(visualArea(), oldVisualArea);
474#if QT_CONFIG(accessibility)
475 if (QAccessible::isActive()) {
476 if (QAccessibleInterface *accessible = QAccessible::queryAccessibleInterface(q)) {
477 QAccessibleValueInterface *valueInterface = accessible->valueInterface();
478 Q_ASSERT(valueInterface);
479 QAccessibleValueChangeEvent event(q, valueInterface->currentValue());
480 QAccessible::updateAccessibility(&event);
487
488
489
490
491
492
493qreal QQuickScrollBar::stepSize()
const
495 Q_D(
const QQuickScrollBar);
499void QQuickScrollBar::setStepSize(qreal step)
501 Q_D(QQuickScrollBar);
502 if (!qt_is_finite(step) || qFuzzyCompare(d->stepSize, step))
506 emit stepSizeChanged();
510
511
512
513
514
515
516
517
518
519
520
521bool QQuickScrollBar::isActive()
const
523 Q_D(
const QQuickScrollBar);
527void QQuickScrollBar::setActive(
bool active)
529 Q_D(QQuickScrollBar);
530 if (d->active == active)
534 emit activeChanged();
538
539
540
541
542bool QQuickScrollBar::isPressed()
const
544 Q_D(
const QQuickScrollBar);
548void QQuickScrollBar::setPressed(
bool pressed)
550 Q_D(QQuickScrollBar);
552 if (QQuickIndicatorButton *button = decreaseVisual())
553 button->setPressed(
false);
554 if (QQuickIndicatorButton *button = increaseVisual())
555 button->setPressed(
false);
557 if (d->pressed == pressed)
560 d->pressed = pressed;
561 setAccessibleProperty(
"pressed", pressed);
563 emit pressedChanged();
567
568
569
570
571
572
573
574
575
576
577
578
579
580Qt::Orientation QQuickScrollBar::orientation()
const
582 Q_D(
const QQuickScrollBar);
583 return d->orientation;
586void QQuickScrollBar::setOrientation(Qt::Orientation orientation)
588 Q_D(QQuickScrollBar);
589 if (d->orientation == orientation)
592 if (orientation == Qt::Horizontal)
593 d->setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Fixed);
595 d->setSizePolicy(QLayoutPolicy::Fixed, QLayoutPolicy::Preferred);
597 d->orientation = orientation;
598 if (isComponentComplete())
600 emit orientationChanged();
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633QQuickScrollBar::SnapMode QQuickScrollBar::snapMode()
const
635 Q_D(
const QQuickScrollBar);
639void QQuickScrollBar::setSnapMode(SnapMode mode)
641 Q_D(QQuickScrollBar);
642 if (d->snapMode == mode)
646 emit snapModeChanged();
650
651
652
653
654
655
656
657
658
659bool QQuickScrollBar::isInteractive()
const
661 Q_D(
const QQuickScrollBar);
662 return d->interactive;
665void QQuickScrollBar::setInteractive(
bool interactive)
667 Q_D(QQuickScrollBar);
668 d->explicitInteractive =
true;
669 d->setInteractive(interactive);
672void QQuickScrollBar::resetInteractive()
674 Q_D(QQuickScrollBar);
675 d->explicitInteractive =
false;
676 d->setInteractive(
true);
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704QQuickScrollBar::Policy QQuickScrollBar::policy()
const
706 Q_D(
const QQuickScrollBar);
710void QQuickScrollBar::setPolicy(Policy policy)
712 Q_D(QQuickScrollBar);
713 if (d->policy == policy)
717 emit policyChanged();
721
722
723
724
725
726
727
728
729bool QQuickScrollBar::isHorizontal()
const
731 Q_D(
const QQuickScrollBar);
732 return d->orientation == Qt::Horizontal;
736
737
738
739
740
741
742
743
744bool QQuickScrollBar::isVertical()
const
746 Q_D(
const QQuickScrollBar);
747 return d->orientation == Qt::Vertical;
751
752
753
754
755
756
757
758qreal QQuickScrollBar::minimumSize()
const
760 Q_D(
const QQuickScrollBar);
761 return d->minimumSize;
764void QQuickScrollBar::setMinimumSize(qreal minimumSize)
766 Q_D(QQuickScrollBar);
767 if (!qt_is_finite(minimumSize) || qFuzzyCompare(d->minimumSize, minimumSize))
770 auto oldVisualArea = d->visualArea();
771 d->minimumSize = qBound(0.0, minimumSize, 1.0);
772 if (isComponentComplete())
774 emit minimumSizeChanged();
775 d->visualAreaChange(d->visualArea(), oldVisualArea);
779
780
781
782
783
784
785
786
787
788qreal QQuickScrollBar::visualSize()
const
790 Q_D(
const QQuickScrollBar);
791 return d->visualArea().size;
795
796
797
798
799
800
801
802
803
804qreal QQuickScrollBar::visualPosition()
const
806 Q_D(
const QQuickScrollBar);
807 return d->visualArea().position;
810QQuickIndicatorButton *QQuickScrollBar::decreaseVisual()
812 Q_D(QQuickScrollBar);
813 return d->decreaseVisual;
816QQuickIndicatorButton *QQuickScrollBar::increaseVisual()
818 Q_D(QQuickScrollBar);
819 return d->increaseVisual;
823
824
825
826
827
828
829void QQuickScrollBar::increase()
831 Q_D(QQuickScrollBar);
832 qreal step = qFuzzyIsNull(d->stepSize) ? 0.1 : d->stepSize;
833 bool wasActive = d->active;
835 setPosition(qMin<qreal>(1.0 - d->size, d->position + step));
836 setActive(wasActive);
840
841
842
843
844
845
846void QQuickScrollBar::decrease()
848 Q_D(QQuickScrollBar);
849 qreal step = qFuzzyIsNull(d->stepSize) ? 0.1 : d->stepSize;
850 bool wasActive = d->active;
852 setPosition(qMax<qreal>(0.0, d->position - step));
853 setActive(wasActive);
856void QQuickScrollBar::mousePressEvent(QMouseEvent *event)
858 Q_D(QQuickScrollBar);
859 QQuickControl::mousePressEvent(event);
860 d->handleMove(event->position(), event->timestamp());
863#if QT_CONFIG(quicktemplates2_hover)
864void QQuickScrollBar::hoverChange()
866 Q_D(QQuickScrollBar);
870void QQuickScrollBar::hoverEnterEvent(QHoverEvent *event)
872 Q_D(QQuickScrollBar);
873 QQuickControl::hoverEnterEvent(event);
874 d->updateHover(event->position());
878void QQuickScrollBar::hoverMoveEvent(QHoverEvent *event)
880 Q_D(QQuickScrollBar);
881 QQuickControl::hoverMoveEvent(event);
882 d->updateHover(event->position());
886void QQuickScrollBar::hoverLeaveEvent(QHoverEvent *event)
888 Q_D(QQuickScrollBar);
889 QQuickControl::hoverLeaveEvent(event);
891 d->updateHover(QPoint(),
false);
896void QQuickScrollBar::classBegin()
898 Q_D(QQuickScrollBar);
899 QQuickControl::classBegin();
901 QQmlContext *context = qmlContext(
this);
903 QQmlEngine::setContextForObject(d->decreaseVisual, context);
904 QQmlEngine::setContextForObject(d->increaseVisual, context);
908void QQuickScrollBar::componentComplete()
910 Q_D(QQuickScrollBar);
911 QQuickIndicatorButtonPrivate::get(d->decreaseVisual)->executeIndicator(
true);
912 QQuickIndicatorButtonPrivate::get(d->increaseVisual)->executeIndicator(
true);
914 QQuickControl::componentComplete();
917#if QT_CONFIG(accessibility)
918void QQuickScrollBar::accessibilityActiveChanged(
bool active)
920 QQuickControl::accessibilityActiveChanged(active);
922 Q_D(QQuickScrollBar);
924 setAccessibleProperty(
"pressed", d->pressed);
926 if (QQuickAccessibleAttached *accessibleAttached = QQuickControlPrivate::accessibleAttached(
this)) {
927 connect(accessibleAttached, &QQuickAccessibleAttached::increaseAction,
this, &QQuickScrollBar::increase);
928 connect(accessibleAttached, &QQuickAccessibleAttached::decreaseAction,
this, &QQuickScrollBar::decrease);
931 if (QQuickAccessibleAttached *accessibleAttached = QQuickControlPrivate::accessibleAttached(
this)) {
932 disconnect(accessibleAttached, &QQuickAccessibleAttached::increaseAction,
this, &QQuickScrollBar::increase);
933 disconnect(accessibleAttached, &QQuickAccessibleAttached::decreaseAction,
this, &QQuickScrollBar::decrease);
938QAccessible::Role QQuickScrollBar::accessibleRole()
const
940 return QAccessible::ScrollBar;
950 QQuickItemPrivate::get(flickable)->removeItemChangeListener(
this, QQuickItemPrivate::Geometry);
951 QQuickItemPrivate::get(flickable)->removeItemChangeListener(
this, QQuickItemPrivate::Destroyed);
963 QQuickItemPrivate::get(item)->updateOrAddGeometryChangeListener(
this, QQuickGeometryChange::Size);
964 QQuickItemPrivate::get(item)->updateOrAddItemChangeListener(
this, QQuickItemPrivate::Destroyed);
974 Q_ASSERT(flickable && horizontal);
979 QObject *area = flickable->property(
"visibleArea").value<QObject *>();
980 QObject::connect(area, SIGNAL(widthRatioChanged(qreal)), horizontal, SLOT(setSize(qreal)));
981 QObject::connect(area, SIGNAL(xPositionChanged(qreal)), horizontal, SLOT(setPosition(qreal)));
984 QQuickItem *parent = horizontal->parentItem();
985 if (parent && parent == flickable->parentItem())
986 horizontal->stackAfter(flickable);
990 if (
auto control = qobject_cast<QQuickControl*>(q_func()->parent())) {
991 const auto visibility = horizontal->policy() != QQuickScrollBar::AlwaysOff
992 ? QQuickControlPrivate::UnhideVisibility::Show : QQuickControlPrivate::UnhideVisibility::Hide;
993 QQuickControlPrivate::unhideOldItem(control, horizontal, visibility);
997 horizontal->setSize(area->property(
"widthRatio").toReal());
998 horizontal->setPosition(area->property(
"xPosition").toReal());
1003 Q_ASSERT(flickable && vertical);
1008 QObject *area = flickable->property(
"visibleArea").value<QObject *>();
1009 QObject::connect(area, SIGNAL(heightRatioChanged(qreal)), vertical, SLOT(setSize(qreal)));
1010 QObject::connect(area, SIGNAL(yPositionChanged(qreal)), vertical, SLOT(setPosition(qreal)));
1013 QQuickItem *parent = vertical->parentItem();
1014 if (parent && parent == flickable->parentItem())
1015 vertical->stackAfter(flickable);
1017 if (
auto control = qobject_cast<QQuickControl*>(q_func()->parent())) {
1018 const auto visibility = vertical->policy() != QQuickScrollBar::AlwaysOff
1019 ? QQuickControlPrivate::UnhideVisibility::Show : QQuickControlPrivate::UnhideVisibility::Hide;
1020 QQuickControlPrivate::unhideOldItem(control, vertical, visibility);
1024 vertical->setSize(area->property(
"heightRatio").toReal());
1025 vertical->setPosition(area->property(
"yPosition").toReal());
1030 Q_ASSERT(horizontal);
1032 QQuickControlPrivate::hideOldItem(horizontal);
1037 const QQmlProperty visibleProperty(horizontal, QStringLiteral(
"visible"));
1038 const QQmlProperty parentProperty(horizontal, QStringLiteral(
"parent"));
1039 QQmlPropertyPrivate::removeBinding(visibleProperty);
1040 QQmlPropertyPrivate::removeBinding(parentProperty);
1048 QObject *area = flickable->property(
"visibleArea").value<QObject *>();
1049 QObject::disconnect(area, SIGNAL(widthRatioChanged(qreal)), horizontal, SLOT(setSize(qreal)));
1050 QObject::disconnect(area, SIGNAL(xPositionChanged(qreal)), horizontal, SLOT(setPosition(qreal)));
1057 QQuickControlPrivate::hideOldItem(vertical);
1058 const QQmlProperty visibleProperty(vertical, QStringLiteral(
"visible"));
1059 const QQmlProperty parentProperty(vertical, QStringLiteral(
"parent"));
1060 QQmlPropertyPrivate::removeBinding(visibleProperty);
1061 QQmlPropertyPrivate::removeBinding(parentProperty);
1069 QObject *area = flickable->property(
"visibleArea").value<QObject *>();
1070 QObject::disconnect(area, SIGNAL(heightRatioChanged(qreal)), vertical, SLOT(setSize(qreal)));
1071 QObject::disconnect(area, SIGNAL(yPositionChanged(qreal)), vertical, SLOT(setPosition(qreal)));
1101 const qreal viewwidth = f->width();
1102 const qreal maxxextent = -f->maxXExtent() + f->minXExtent();
1103 const qreal cx = horizontal->position() * (maxxextent + viewwidth) - f->minXExtent();
1105 if (!qIsNaN(cx) && !qFuzzyCompare(cx,
flickable->contentX()))
1116 const qreal viewheight = f->height();
1117 const qreal maxyextent = -f->maxYExtent() + f->minYExtent();
1118 const qreal cy = vertical->position() * (maxyextent + viewheight) - f->minYExtent();
1120 if (!qIsNaN(cy) && !qFuzzyCompare(cy,
flickable->contentY()))
1131 Q_ASSERT(horizontal && flickable);
1132 if (horizontal->parentItem() != flickable)
1134 horizontal->setWidth(flickable->width());
1136 horizontal->setY(flickable->height() - horizontal->height());
1141 Q_ASSERT(vertical && flickable);
1142 if (vertical->parentItem() != flickable)
1144 vertical->setHeight(flickable->height());
1146 vertical->setX(vertical->isMirrored() ? 0 : flickable->width() - vertical->width());
1153 if (horizontal && horizontal->height() > 0) {
1154#ifdef QT_QUICK_NEW_GEOMETRY_CHANGED_HANDLING
1155 bool move = qFuzzyIsNull(horizontal->y()) || qFuzzyCompare(horizontal->y(), diff.height() - horizontal->height());
1157 bool move = qFuzzyIsNull(horizontal->y()) || qFuzzyCompare(horizontal->y(), item->height() - diff.height() - horizontal->height());
1162 if (vertical && vertical->width() > 0) {
1163#ifdef QT_QUICK_NEW_GEOMETRY_CHANGED_HANDLING
1164 bool move = qFuzzyIsNull(vertical->x()) || qFuzzyCompare(vertical->x(), diff.width() - vertical->width());
1166 bool move = qFuzzyIsNull(vertical->x()) || qFuzzyCompare(vertical->x(), item->width() - diff.width() - vertical->width());
1175 if (item == vertical && flickable)
1181 if (item == horizontal && flickable)
1189 if (item == horizontal)
1190 horizontal =
nullptr;
1191 if (item == vertical)
1195QQuickScrollBarAttached::QQuickScrollBarAttached(QObject *parent)
1196 : QObject(*(
new QQuickScrollBarAttachedPrivate), parent)
1198 Q_D(QQuickScrollBarAttached);
1199 d->setFlickable(qobject_cast<QQuickFlickable *>(parent));
1201 if (parent && !d->flickable && !qobject_cast<QQuickScrollView *>(parent))
1202 qmlWarning(parent) <<
"ScrollBar attached property must be attached to an object deriving from Flickable or ScrollView";
1205QQuickScrollBarAttached::~QQuickScrollBarAttached()
1207 Q_D(QQuickScrollBarAttached);
1208 if (d->horizontal) {
1209 QQuickItemPrivate::get(d->horizontal)->removeItemChangeListener(d, QsbHorizontalChangeTypes);
1210 d->horizontal =
nullptr;
1213 QQuickItemPrivate::get(d->vertical)->removeItemChangeListener(d, QsbVerticalChangeTypes);
1214 d->vertical =
nullptr;
1216 d->setFlickable(
nullptr);
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233QQuickScrollBar *QQuickScrollBarAttached::horizontal()
const
1235 Q_D(
const QQuickScrollBarAttached);
1236 return d->horizontal;
1239void QQuickScrollBarAttached::setHorizontal(QQuickScrollBar *horizontal)
1241 Q_D(QQuickScrollBarAttached);
1242 if (d->horizontal == horizontal)
1245 if (d->horizontal) {
1246 QQuickItemPrivate::get(d->horizontal)->removeItemChangeListener(d, QsbHorizontalChangeTypes);
1247 QObjectPrivate::disconnect(d->horizontal, &QQuickScrollBar::positionChanged, d, &QQuickScrollBarAttachedPrivate::scrollHorizontal);
1251 d->cleanupHorizontal();
1254 d->horizontal = horizontal;
1257 if (!horizontal->parentItem())
1258 horizontal->setParentItem(qobject_cast<QQuickItem *>(parent()));
1259 horizontal->setOrientation(Qt::Horizontal);
1261 QQuickItemPrivate::get(horizontal)->addItemChangeListener(d, QsbHorizontalChangeTypes);
1262 QObjectPrivate::connect(horizontal, &QQuickScrollBar::positionChanged, d, &QQuickScrollBarAttachedPrivate::scrollHorizontal);
1265 d->initHorizontal();
1267 emit horizontalChanged();
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284QQuickScrollBar *QQuickScrollBarAttached::vertical()
const
1286 Q_D(
const QQuickScrollBarAttached);
1290void QQuickScrollBarAttached::setVertical(QQuickScrollBar *vertical)
1292 Q_D(QQuickScrollBarAttached);
1293 if (d->vertical == vertical)
1297 QQuickItemPrivate::get(d->vertical)->removeItemChangeListener(d, QsbVerticalChangeTypes);
1298 QObjectPrivate::disconnect(d->vertical, &QQuickScrollBar::mirroredChanged, d, &QQuickScrollBarAttachedPrivate::mirrorVertical);
1299 QObjectPrivate::disconnect(d->vertical, &QQuickScrollBar::positionChanged, d, &QQuickScrollBarAttachedPrivate::scrollVertical);
1303 d->cleanupVertical();
1306 d->vertical = vertical;
1309 if (!vertical->parentItem())
1310 vertical->setParentItem(qobject_cast<QQuickItem *>(parent()));
1311 vertical->setOrientation(Qt::Vertical);
1313 QQuickItemPrivate::get(vertical)->addItemChangeListener(d, QsbVerticalChangeTypes);
1314 QObjectPrivate::connect(vertical, &QQuickScrollBar::mirroredChanged, d, &QQuickScrollBarAttachedPrivate::mirrorVertical);
1315 QObjectPrivate::connect(vertical, &QQuickScrollBar::positionChanged, d, &QQuickScrollBarAttachedPrivate::scrollVertical);
1320 emit verticalChanged();
1325#include "moc_qquickscrollbar_p.cpp"
Combined button and popup list for selecting options.