21#include "moc_qgsrangeslider.cpp"
31 mStyleOption.minimum = 0;
32 mStyleOption.maximum = 100;
35 setFocusPolicy( Qt::FocusPolicy( style()->styleHint( QStyle::SH_Button_FocusPolicy ) ) );
36 QSizePolicy sp( QSizePolicy::Expanding, QSizePolicy::Fixed, QSizePolicy::Slider );
37 if ( mStyleOption.orientation == Qt::Vertical )
40 setAttribute( Qt::WA_WState_OwnSizePolicy,
false );
42 setAttribute( Qt::WA_Hover );
43 setMouseTracking(
true );
48 return mStyleOption.maximum;
53 if ( mStyleOption.maximum ==
maximum )
57 mStyleOption.minimum = std::min(
maximum, mStyleOption.minimum );
62 mUpperValue = std::min( mUpperValue,
maximum );
63 mLowerValue = std::min( mLowerValue,
maximum );
72 return mStyleOption.minimum;
77 if ( mStyleOption.minimum ==
minimum )
80 mStyleOption.maximum = std::max(
minimum, mStyleOption.maximum );
85 mUpperValue = std::max( mUpperValue,
minimum );
86 mLowerValue = std::max( mLowerValue,
minimum );
98 if ( mStyleOption.minimum ==
minimum && mStyleOption.maximum ==
maximum )
101 mStyleOption.minimum =
minimum;
102 mStyleOption.maximum =
maximum;
105 if ( mUpperValue <
minimum || mLowerValue < minimum || mUpperValue >
maximum || mLowerValue >
maximum )
107 mUpperValue = std::min(
maximum, std::max( mUpperValue,
minimum ) );
108 mLowerValue = std::min(
maximum, std::max( mLowerValue,
minimum ) );
125 mLowerValue = std::min( mStyleOption.maximum, std::max( mStyleOption.minimum,
lowerValue ) );
126 if ( mFixedRangeSize >= 0 )
128 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
129 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
133 mUpperValue = std::max( mLowerValue, mUpperValue );
150 mUpperValue = std::max( mStyleOption.minimum, std::min( mStyleOption.maximum,
upperValue ) );
151 if ( mFixedRangeSize >= 0 )
153 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
154 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
158 mLowerValue = std::min( mLowerValue, mUpperValue );
167 if ( lower == mLowerValue && upper == mUpperValue )
171 std::swap( lower, upper );
173 mLowerValue = std::min( mStyleOption.maximum, std::max( mStyleOption.minimum, lower ) );
174 mUpperValue = std::min( mStyleOption.maximum, std::max( mStyleOption.minimum, upper ) );
175 if ( mFixedRangeSize >= 0 )
177 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
178 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
182 mUpperValue = std::min( mStyleOption.maximum, std::max( mStyleOption.minimum, upper ) );
190 switch (
event->type() )
192 case QEvent::HoverEnter:
193 case QEvent::HoverLeave:
194 case QEvent::HoverMove:
195 if (
const QHoverEvent *he =
static_cast<const QHoverEvent *
>(
event ) )
196 updateHoverControl( he->pos() );
201 return QWidget::event(
event );
204int QgsRangeSlider::pick(
const QPoint &pt )
const
206 return mStyleOption.orientation == Qt::Horizontal ? pt.x() : pt.y();
209int QgsRangeSlider::pixelPosToRangeValue(
int pos )
const
211 const QRect gr = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderGroove,
this );
212 const QRect sr = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderHandle,
this );
213 int sliderMin, sliderMax, sliderLength;
214 if ( mStyleOption.orientation == Qt::Horizontal )
216 sliderLength = sr.width();
218 sliderMax = gr.right() - sliderLength + 1;
222 sliderLength = sr.height();
224 sliderMax = gr.bottom() - sliderLength + 1;
227 int value = QStyle::sliderValueFromPosition( mStyleOption.minimum, mStyleOption.maximum, pos - sliderMin, sliderMax - sliderMin );
229 value = mStyleOption.maximum + mStyleOption.minimum - value;
233bool QgsRangeSlider::updateHoverControl(
const QPoint &pos )
235 const QRect lastHoverRect = mHoverRect;
236 const bool doesHover = testAttribute( Qt::WA_Hover );
237 if ( doesHover && newHoverControl( pos ) )
239 update( lastHoverRect );
240 update( mHoverRect );
246bool QgsRangeSlider::newHoverControl(
const QPoint &pos )
248 const Control lastHoverControl = mHoverControl;
249 const QStyle::SubControl lastHoverSubControl = mHoverSubControl;
251 mStyleOption.subControls = QStyle::SC_All;
253 mStyleOption.sliderPosition = unFlippedSliderPosition( mLowerValue );
254 const QRect lowerHandleRect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderHandle,
this );
255 mStyleOption.sliderPosition = unFlippedSliderPosition( mUpperValue );
256 const QRect upperHandleRect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderHandle,
this );
258 const QRect grooveRect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderGroove,
this );
259 const QRect tickmarksRect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderTickmarks,
this );
260 if ( lowerHandleRect.contains( pos ) )
262 mHoverRect = lowerHandleRect;
263 mHoverControl = Lower;
264 mHoverSubControl = QStyle::SC_SliderHandle;
265 setCursor( Qt::OpenHandCursor );
267 else if ( upperHandleRect.contains( pos ) )
269 mHoverRect = upperHandleRect;
270 mHoverControl = Upper;
271 mHoverSubControl = QStyle::SC_SliderHandle;
272 setCursor( Qt::OpenHandCursor );
274 else if ( grooveRect.contains( pos ) )
276 mHoverRect = grooveRect;
277 mHoverControl = None;
278 mHoverSubControl = QStyle::SC_SliderGroove;
280 if ( selectedRangeRect().contains( pos ) )
281 setCursor( Qt::OpenHandCursor );
285 else if ( tickmarksRect.contains( pos ) )
287 mHoverRect = tickmarksRect;
288 mHoverControl = None;
289 mHoverSubControl = QStyle::SC_SliderTickmarks;
294 mHoverRect = QRect();
295 mHoverControl = None;
296 mHoverSubControl = QStyle::SC_None;
299 return mHoverSubControl != lastHoverSubControl || mHoverControl != lastHoverControl;
302QRect QgsRangeSlider::selectedRangeRect()
306 mStyleOption.activeSubControls = mHoverControl == Lower || mActiveControl == Lower ? QStyle::SC_SliderHandle : QStyle::SC_None;
307 mStyleOption.sliderPosition = unFlippedSliderPosition( mLowerValue );
308 const QRect lowerHandleRect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderHandle,
nullptr );
310 mStyleOption.activeSubControls = mHoverControl == Upper || mActiveControl == Lower ? QStyle::SC_SliderHandle : QStyle::SC_None;
311 mStyleOption.sliderPosition = unFlippedSliderPosition( mUpperValue );
312 const QRect upperHandleRect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderHandle,
nullptr );
314 const QRect grooveRect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderGroove,
nullptr );
316 switch ( mStyleOption.orientation )
319 selectionRect = mFlipped ? QRect( upperHandleRect.right(), grooveRect.y(), lowerHandleRect.left() - upperHandleRect.right(), grooveRect.height() )
320 : QRect( lowerHandleRect.right(), grooveRect.y(), upperHandleRect.left() - lowerHandleRect.right(), grooveRect.height() );
324 selectionRect = mFlipped ? QRect( grooveRect.x(), lowerHandleRect.top(), grooveRect.width(), upperHandleRect.bottom() - lowerHandleRect.top() )
325 : QRect( grooveRect.x(), upperHandleRect.top(), grooveRect.width(), lowerHandleRect.bottom() - upperHandleRect.top() );
329 return selectionRect.adjusted( -1, 1, 1, -1 );
334 return mFixedRangeSize;
339 if ( size == mFixedRangeSize )
342 mFixedRangeSize = size;
344 if ( mFixedRangeSize >= 0 )
350void QgsRangeSlider::applyStep(
int step )
352 switch ( mFocusControl )
356 const int newLowerValue = std::min( mUpperValue, std::min( mStyleOption.maximum, std::max( mStyleOption.minimum, mLowerValue + step ) ) );
357 if ( newLowerValue != mLowerValue )
359 mLowerValue = newLowerValue;
360 if ( mFixedRangeSize >= 0 )
362 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
363 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
373 const int newUpperValue = std::max( mLowerValue, std::min( mStyleOption.maximum, std::max( mStyleOption.minimum, mUpperValue + step ) ) );
374 if ( newUpperValue != mUpperValue )
376 mUpperValue = newUpperValue;
377 if ( mFixedRangeSize >= 0 )
379 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
380 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
392 const int previousWidth = mUpperValue - mLowerValue;
393 const int newLowerValue = std::min( mUpperValue, std::min( mStyleOption.maximum, std::max( mStyleOption.minimum, mLowerValue + step ) ) );
394 if ( newLowerValue != mLowerValue )
396 mLowerValue = newLowerValue;
397 if ( mFixedRangeSize >= 0 )
399 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
400 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
404 mUpperValue = std::min( mStyleOption.maximum, mLowerValue + previousWidth );
412 const int previousWidth = mUpperValue - mLowerValue;
413 const int newUpperValue = std::max( mLowerValue, std::min( mStyleOption.maximum, std::max( mStyleOption.minimum, mUpperValue + step ) ) );
414 if ( newUpperValue != mUpperValue )
416 mUpperValue = newUpperValue;
417 if ( mFixedRangeSize >= 0 )
419 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
420 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
424 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - previousWidth );
439int QgsRangeSlider::unFlippedSliderPosition(
int value )
const
441 return mFlipped ? mStyleOption.maximum + mStyleOption.minimum - value : value;
466 mStyleOption.tickPosition = position;
472 return mStyleOption.tickPosition;
477 mStyleOption.tickInterval = interval;
483 return mStyleOption.tickInterval;
489 if ( !testAttribute( Qt::WA_WState_OwnSizePolicy ) )
491 setSizePolicy( sizePolicy().transposed() );
492 setAttribute( Qt::WA_WState_OwnSizePolicy,
false );
500 return mStyleOption.orientation;
516 QPainter painter(
this );
518 mStyleOption.initFrom(
this );
519 mStyleOption.rect = rect();
520 mStyleOption.sliderPosition = mStyleOption.minimum;
521 mStyleOption.subControls = QStyle::SC_SliderGroove | QStyle::SC_SliderTickmarks;
523 mStyleOption.activeSubControls = mHoverSubControl;
525 style()->drawComplexControl( QStyle::CC_Slider, &mStyleOption, &painter );
527 QColor color = palette().color( QPalette::Highlight );
528 color.setAlpha( 160 );
529 painter.setBrush( QBrush( color ) );
530 painter.setPen( Qt::NoPen );
531 painter.drawRect( selectedRangeRect() );
534 mStyleOption.subControls = QStyle::SC_SliderHandle;
535 mStyleOption.activeSubControls = mHoverControl == Lower || mActiveControl == Lower ? QStyle::SC_SliderHandle : QStyle::SC_None;
536 mStyleOption.sliderPosition = unFlippedSliderPosition( mLowerValue );
537 if ( mActiveControl == Lower )
538 mStyleOption.state |= QStyle::State_Sunken;
540 mStyleOption.state &= ~QStyle::State_Sunken;
541 style()->drawComplexControl( QStyle::CC_Slider, &mStyleOption, &painter );
544 mStyleOption.activeSubControls = mHoverControl == Upper || mActiveControl == Lower ? QStyle::SC_SliderHandle : QStyle::SC_None;
545 mStyleOption.sliderPosition = unFlippedSliderPosition( mUpperValue );
546 if ( mActiveControl == Upper )
547 mStyleOption.state |= QStyle::State_Sunken;
549 mStyleOption.state &= ~QStyle::State_Sunken;
550 style()->drawComplexControl( QStyle::CC_Slider, &mStyleOption, &painter );
552 if ( hasFocus() && mFocusControl != None )
555 QStyleOptionFocusRect option;
556 option.initFrom(
this );
557 option.state = QStyle::State_KeyboardFocusChange;
558 if ( mFocusControl == Lower )
560 mStyleOption.sliderPosition = unFlippedSliderPosition( mLowerValue );
561 option.rect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderHandle,
this );
563 else if ( mFocusControl == Upper )
565 mStyleOption.sliderPosition = unFlippedSliderPosition( mUpperValue );
566 option.rect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderHandle,
this );
568 else if ( mFocusControl == Range )
570 option.rect = selectedRangeRect();
571 if ( mStyleOption.orientation == Qt::Horizontal )
572 option.rect = option.rect.adjusted( 0, -1, 0, 1 );
574 option.rect = option.rect.adjusted( -1, 0, 1, 0 );
576 style()->drawPrimitive( QStyle::PE_FrameFocusRect, &option, &painter );
582 if ( mStyleOption.maximum == mStyleOption.minimum || (
event->buttons() ^
event->button() ) )
590 mStyleOption.sliderPosition = unFlippedSliderPosition( mLowerValue );
591 const bool overLowerControl = style()->hitTestComplexControl( QStyle::CC_Slider, &mStyleOption,
event->pos(),
this ) == QStyle::SC_SliderHandle;
592 const QRect lowerSliderRect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderHandle,
this );
593 mStyleOption.sliderPosition = unFlippedSliderPosition( mUpperValue );
594 const bool overUpperControl = style()->hitTestComplexControl( QStyle::CC_Slider, &mStyleOption,
event->pos(),
this ) == QStyle::SC_SliderHandle;
595 const QRect upperSliderRect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderHandle,
this );
597 const bool overSelectedRange = selectedRangeRect().contains(
event->pos() );
599 mLowerClickOffset = pick(
event->pos() - lowerSliderRect.topLeft() );
600 mUpperClickOffset = pick(
event->pos() - upperSliderRect.topLeft() );
602 mPreDragLowerValue = mLowerValue;
603 mPreDragUpperValue = mUpperValue;
604 mRangeDragOffset = 0;
606 if ( ( overLowerControl || overUpperControl ) &&
event->modifiers() & Qt::ShiftModifier )
608 mActiveControl = Range;
609 mRangeDragOffset = overUpperControl ? mUpperClickOffset : mLowerClickOffset;
610 mFocusControl = overUpperControl ? Upper : Lower;
612 else if ( overLowerControl && overUpperControl )
613 mActiveControl = Both;
614 else if ( overLowerControl )
616 mActiveControl = Lower;
617 mFocusControl = Lower;
619 else if ( overUpperControl )
621 mActiveControl = Upper;
622 mFocusControl = Upper;
624 else if ( overSelectedRange )
626 mActiveControl = Range;
627 mFocusControl = Range;
630 mActiveControl = None;
632 if ( mActiveControl != None )
634 mStartDragPos = pixelPosToRangeValue( pick(
event->pos() ) - mRangeDragOffset );
640 if ( mActiveControl == None )
648 int newPosition = pixelPosToRangeValue( pick(
event->pos() ) );
650 bool changed =
false;
651 Control destControl = mActiveControl;
652 if ( destControl == Both )
655 if ( newPosition < mStartDragPos )
658 mFocusControl = Lower;
659 if ( mUpperValue != mPreDragUpperValue )
662 mUpperValue = mPreDragUpperValue;
663 if ( mFixedRangeSize >= 0 )
666 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
667 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
671 else if ( newPosition > mStartDragPos )
674 mFocusControl = Upper;
675 if ( mLowerValue != mPreDragLowerValue )
678 mLowerValue = mPreDragLowerValue;
679 if ( mFixedRangeSize >= 0 )
682 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
683 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
690 if ( mUpperValue != mPreDragUpperValue )
693 mUpperValue = mPreDragUpperValue;
694 if ( mFixedRangeSize >= 0 )
697 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
698 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
701 if ( mLowerValue != mPreDragLowerValue )
704 mLowerValue = mPreDragLowerValue;
705 if ( mFixedRangeSize >= 0 )
708 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
709 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
715 switch ( destControl )
724 newPosition = std::min( mUpperValue, pixelPosToRangeValue( pick(
event->pos() ) - mLowerClickOffset ) );
725 if ( mLowerValue != newPosition )
727 mLowerValue = newPosition;
728 if ( mFixedRangeSize >= 0 )
731 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
732 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
743 newPosition = std::max( mLowerValue, pixelPosToRangeValue( pick(
event->pos() ) - mUpperClickOffset ) );
744 if ( mUpperValue != newPosition )
746 mUpperValue = newPosition;
747 if ( mFixedRangeSize >= 0 )
750 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
751 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
761 newPosition = pixelPosToRangeValue( pick(
event->pos() ) - mRangeDragOffset );
762 int delta = newPosition - mStartDragPos;
767 const int maxDelta = mStyleOption.maximum - mPreDragUpperValue;
768 delta = std::min( maxDelta, delta );
769 mLowerValue = mPreDragLowerValue + delta;
770 mUpperValue = mPreDragUpperValue + delta;
773 else if ( delta < 0 )
777 const int maxDelta = mPreDragLowerValue - mStyleOption.minimum;
778 delta = std::min( maxDelta, delta );
779 mLowerValue = mPreDragLowerValue - delta;
780 mUpperValue = mPreDragUpperValue - delta;
797 if ( mActiveControl == None ||
event->buttons() )
804 mActiveControl = None;
810 Control destControl = mFocusControl;
811 if ( ( destControl == Lower || destControl == Upper ) && mLowerValue == mUpperValue )
814 switch (
event->key() )
818 switch ( mStyleOption.orientation )
821 if ( destControl == Both )
822 mFocusControl = mFlipped ? Upper : Lower;
824 applyStep( mFlipped ? mSingleStep : -mSingleStep );
830 switch ( mFocusControl )
833 mFocusControl = Range;
836 mFocusControl = Upper;
841 mFocusControl = Lower;
847 switch ( mFocusControl )
852 mFocusControl = Upper;
855 mFocusControl = Lower;
858 mFocusControl = Range;
870 switch ( mStyleOption.orientation )
873 if ( destControl == Both )
874 mFocusControl = mFlipped ? Lower : Upper;
875 applyStep( mFlipped ? -mSingleStep : mSingleStep );
881 switch ( mFocusControl )
886 mFocusControl = Upper;
889 mFocusControl = Lower;
892 mFocusControl = Range;
898 switch ( mFocusControl )
901 mFocusControl = Range;
904 mFocusControl = Upper;
909 mFocusControl = Lower;
921 switch ( mStyleOption.orientation )
926 switch ( mFocusControl )
929 mFocusControl = Range;
932 mFocusControl = Upper;
937 mFocusControl = Lower;
943 switch ( mFocusControl )
946 mFocusControl = Upper;
951 mFocusControl = Lower;
954 mFocusControl = Range;
962 if ( destControl == Both )
963 mFocusControl = mFlipped ? Upper : Lower;
965 applyStep( mFlipped ? mSingleStep : -mSingleStep );
973 switch ( mStyleOption.orientation )
978 switch ( mFocusControl )
981 mFocusControl = Upper;
986 mFocusControl = Lower;
989 mFocusControl = Range;
995 switch ( mFocusControl )
998 mFocusControl = Range;
1001 mFocusControl = Upper;
1006 mFocusControl = Lower;
1014 if ( destControl == Both )
1015 mFocusControl = mFlipped ? Lower : Upper;
1017 applyStep( mFlipped ? -mSingleStep : mSingleStep );
1023 case Qt::Key_PageUp:
1025 switch ( mStyleOption.orientation )
1027 case Qt::Horizontal:
1028 if ( destControl == Both )
1029 mFocusControl = mFlipped ? Lower : Upper;
1031 applyStep( mFlipped ? -mPageStep : mPageStep );
1035 if ( destControl == Both )
1036 mFocusControl = mFlipped ? Upper : Lower;
1038 applyStep( mFlipped ? mPageStep : -mPageStep );
1044 case Qt::Key_PageDown:
1046 switch ( mStyleOption.orientation )
1048 case Qt::Horizontal:
1049 if ( destControl == Both )
1050 mFocusControl = mFlipped ? Upper : Lower;
1052 applyStep( mFlipped ? mPageStep : -mPageStep );
1056 if ( destControl == Both )
1057 mFocusControl = mFlipped ? Lower : Upper;
1059 applyStep( mFlipped ? -mPageStep : mPageStep );
1066 switch ( destControl )
1069 applyStep( mFlipped ? mUpperValue - mLowerValue : mStyleOption.minimum - mLowerValue );
1073 applyStep( mFlipped ? mStyleOption.maximum - mUpperValue : mLowerValue - mUpperValue );
1077 applyStep( mFlipped ? mStyleOption.maximum - mUpperValue : mStyleOption.minimum - mLowerValue );
1081 if ( destControl == Both )
1082 mFocusControl = mFlipped ? Upper : Lower;
1084 applyStep( mFlipped ? mStyleOption.maximum - mUpperValue : mStyleOption.minimum - mLowerValue );
1094 switch ( destControl )
1097 applyStep( mFlipped ? mStyleOption.minimum - mLowerValue : mUpperValue - mLowerValue );
1101 applyStep( mFlipped ? mLowerValue - mUpperValue : mStyleOption.maximum - mUpperValue );
1105 applyStep( mFlipped ? mStyleOption.minimum - mLowerValue : mStyleOption.maximum - mUpperValue );
1109 if ( destControl == Both )
1110 mFocusControl = mFlipped ? Lower : Upper;
1112 applyStep( mFlipped ? mStyleOption.minimum - mLowerValue : mStyleOption.maximum - mUpperValue );
1131 static constexpr int SLIDER_LENGTH = 84;
1132 static constexpr int TICK_SPACE = 5;
1134 int thick = style()->pixelMetric( QStyle::PM_SliderThickness, &mStyleOption,
this );
1135 if ( mStyleOption.tickPosition & QSlider::TicksAbove )
1136 thick += TICK_SPACE;
1137 if ( mStyleOption.tickPosition & QSlider::TicksBelow )
1138 thick += TICK_SPACE;
1139 int w = thick, h = SLIDER_LENGTH;
1140 if ( mStyleOption.orientation == Qt::Horizontal )
1144 return style()->sizeFromContents( QStyle::CT_Slider, &mStyleOption, QSize( w, h ),
this );
1150 const int length = style()->pixelMetric( QStyle::PM_SliderLength, &mStyleOption,
this );
1151 if ( mStyleOption.orientation == Qt::Horizontal )
1152 s.setWidth( length );
1154 s.setHeight( length );
void setUpperValue(int value)
Sets the upper value for the range currently selected in the widget.
void setRangeLimits(int minimum, int maximum)
Sets the minimum and maximum range limits for values allowed in the widget.
QgsRangeSlider(QWidget *parent=nullptr)
Constructor for QgsRangeSlider, with the specified parent widget.
void setOrientation(Qt::Orientation orientation)
Sets the orientation of the slider.
void setTickInterval(int interval)
Sets the interval for tick marks shown in the widget.
int upperValue() const
Returns the upper value for the range selected in the widget.
int tickInterval() const
Returns the interval for tick marks shown in the widget.
void paintEvent(QPaintEvent *event) override
void fixedRangeSizeChanged(int size)
Emitted when the widget's fixed range size is changed.
void rangeLimitsChanged(int minimum, int maximum)
Emitted when the limits of values allowed in the widget is changed.
QSize sizeHint() const override
void keyPressEvent(QKeyEvent *event) override
void mouseMoveEvent(QMouseEvent *event) override
void rangeChanged(int minimum, int maximum)
Emitted when the range selected in the widget is changed.
int maximum() const
Returns the maximum value allowed by the widget.
void mousePressEvent(QMouseEvent *event) override
bool event(QEvent *event) override
void setSingleStep(int step)
Sets the single step value for the widget.
void setMinimum(int minimum)
Sets the minimum value allowed in the widget.
void setPageStep(int step)
Sets the page step value for the widget.
Qt::Orientation orientation() const
Returns the orientation of the slider.
void setMaximum(int maximum)
Sets the maximum value allowed in the widget.
int pageStep() const
Returns the page step value for the widget.
void setFlippedDirection(bool flipped)
Sets whether the slider has its values flipped.
int fixedRangeSize() const
Returns the slider's fixed range size, or -1 if not set.
int minimum() const
Returns the minimum value allowed by the widget.
QSize minimumSizeHint() const override
void setRange(int lower, int upper)
Sets the current range selected in the widget.
void setLowerValue(int value)
Sets the lower value for the range currently selected in the widget.
int lowerValue() const
Returns the lower value for the range selected in the widget.
void setTickPosition(QSlider::TickPosition position)
Sets the position of the tick marks shown in the widget.
void setFixedRangeSize(int size)
Sets the slider's fixed range size.
void mouseReleaseEvent(QMouseEvent *event) override
bool flippedDirection() const
Returns true if the slider has its values flipped.
QSlider::TickPosition tickPosition() const
Returns the position of the tick marks shown in the widget.
int singleStep() const
Returns the single step value for the widget.