21#include "moc_qgsrangeslider.cpp"
30 mStyleOption.minimum = 0;
31 mStyleOption.maximum = 100;
34 setFocusPolicy( Qt::FocusPolicy( style()->styleHint( QStyle::SH_Button_FocusPolicy ) ) );
35 QSizePolicy sp( QSizePolicy::Expanding, QSizePolicy::Fixed, QSizePolicy::Slider );
36 if ( mStyleOption.orientation == Qt::Vertical )
39 setAttribute( Qt::WA_WState_OwnSizePolicy,
false );
41 setAttribute( Qt::WA_Hover );
42 setMouseTracking(
true );
47 return mStyleOption.maximum;
52 if ( mStyleOption.maximum ==
maximum )
56 mStyleOption.minimum = std::min(
maximum, mStyleOption.minimum );
61 mUpperValue = std::min( mUpperValue,
maximum );
62 mLowerValue = std::min( mLowerValue,
maximum );
71 return mStyleOption.minimum;
76 if ( mStyleOption.minimum ==
minimum )
79 mStyleOption.maximum = std::max(
minimum, mStyleOption.maximum );
84 mUpperValue = std::max( mUpperValue,
minimum );
85 mLowerValue = std::max( mLowerValue,
minimum );
97 if ( mStyleOption.minimum ==
minimum && mStyleOption.maximum ==
maximum )
100 mStyleOption.minimum =
minimum;
101 mStyleOption.maximum =
maximum;
104 if ( mUpperValue <
minimum || mLowerValue < minimum || mUpperValue >
maximum || mLowerValue >
maximum )
106 mUpperValue = std::min(
maximum, std::max( mUpperValue,
minimum ) );
107 mLowerValue = std::min(
maximum, std::max( mLowerValue,
minimum ) );
124 mLowerValue = std::min( mStyleOption.maximum, std::max( mStyleOption.minimum,
lowerValue ) );
125 if ( mFixedRangeSize >= 0 )
127 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
128 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
132 mUpperValue = std::max( mLowerValue, mUpperValue );
149 mUpperValue = std::max( mStyleOption.minimum, std::min( mStyleOption.maximum,
upperValue ) );
150 if ( mFixedRangeSize >= 0 )
152 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
153 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
157 mLowerValue = std::min( mLowerValue, mUpperValue );
166 if ( lower == mLowerValue && upper == mUpperValue )
170 std::swap( lower, upper );
172 mLowerValue = std::min( mStyleOption.maximum, std::max( mStyleOption.minimum, lower ) );
173 mUpperValue = std::min( mStyleOption.maximum, std::max( mStyleOption.minimum, upper ) );
174 if ( mFixedRangeSize >= 0 )
176 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
177 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
181 mUpperValue = std::min( mStyleOption.maximum, std::max( mStyleOption.minimum, upper ) );
189 switch (
event->type() )
191 case QEvent::HoverEnter:
192 case QEvent::HoverLeave:
193 case QEvent::HoverMove:
194 if (
const QHoverEvent *he =
static_cast<const QHoverEvent *
>(
event ) )
195 updateHoverControl( he->pos() );
200 return QWidget::event(
event );
203int QgsRangeSlider::pick(
const QPoint &pt )
const
205 return mStyleOption.orientation == Qt::Horizontal ? pt.x() : pt.y();
208int QgsRangeSlider::pixelPosToRangeValue(
int pos )
const
210 const QRect gr = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderGroove,
this );
211 const QRect sr = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderHandle,
this );
212 int sliderMin, sliderMax, sliderLength;
213 if ( mStyleOption.orientation == Qt::Horizontal )
215 sliderLength = sr.width();
217 sliderMax = gr.right() - sliderLength + 1;
221 sliderLength = sr.height();
223 sliderMax = gr.bottom() - sliderLength + 1;
226 int value = QStyle::sliderValueFromPosition( mStyleOption.minimum, mStyleOption.maximum, pos - sliderMin, sliderMax - sliderMin );
228 value = mStyleOption.maximum + mStyleOption.minimum - value;
232bool QgsRangeSlider::updateHoverControl(
const QPoint &pos )
234 const QRect lastHoverRect = mHoverRect;
235 const bool doesHover = testAttribute( Qt::WA_Hover );
236 if ( doesHover && newHoverControl( pos ) )
238 update( lastHoverRect );
239 update( mHoverRect );
245bool QgsRangeSlider::newHoverControl(
const QPoint &pos )
247 const Control lastHoverControl = mHoverControl;
248 const QStyle::SubControl lastHoverSubControl = mHoverSubControl;
250 mStyleOption.subControls = QStyle::SC_All;
252 mStyleOption.sliderPosition = unFlippedSliderPosition( mLowerValue );
253 const QRect lowerHandleRect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderHandle,
this );
254 mStyleOption.sliderPosition = unFlippedSliderPosition( mUpperValue );
255 const QRect upperHandleRect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderHandle,
this );
257 const QRect grooveRect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderGroove,
this );
258 const QRect tickmarksRect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderTickmarks,
this );
259 if ( lowerHandleRect.contains( pos ) )
261 mHoverRect = lowerHandleRect;
262 mHoverControl = Lower;
263 mHoverSubControl = QStyle::SC_SliderHandle;
264 setCursor( Qt::OpenHandCursor );
266 else if ( upperHandleRect.contains( pos ) )
268 mHoverRect = upperHandleRect;
269 mHoverControl = Upper;
270 mHoverSubControl = QStyle::SC_SliderHandle;
271 setCursor( Qt::OpenHandCursor );
273 else if ( grooveRect.contains( pos ) )
275 mHoverRect = grooveRect;
276 mHoverControl = None;
277 mHoverSubControl = QStyle::SC_SliderGroove;
279 if ( selectedRangeRect().contains( pos ) )
280 setCursor( Qt::OpenHandCursor );
284 else if ( tickmarksRect.contains( pos ) )
286 mHoverRect = tickmarksRect;
287 mHoverControl = None;
288 mHoverSubControl = QStyle::SC_SliderTickmarks;
293 mHoverRect = QRect();
294 mHoverControl = None;
295 mHoverSubControl = QStyle::SC_None;
298 return mHoverSubControl != lastHoverSubControl || mHoverControl != lastHoverControl;
301QRect QgsRangeSlider::selectedRangeRect()
305 mStyleOption.activeSubControls = mHoverControl == Lower || mActiveControl == Lower ? QStyle::SC_SliderHandle : QStyle::SC_None;
306 mStyleOption.sliderPosition = unFlippedSliderPosition( mLowerValue );
307 const QRect lowerHandleRect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderHandle,
nullptr );
309 mStyleOption.activeSubControls = mHoverControl == Upper || mActiveControl == Lower ? QStyle::SC_SliderHandle : QStyle::SC_None;
310 mStyleOption.sliderPosition = unFlippedSliderPosition( mUpperValue );
311 const QRect upperHandleRect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderHandle,
nullptr );
313 const QRect grooveRect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderGroove,
nullptr );
315 switch ( mStyleOption.orientation )
318 selectionRect = mFlipped ? QRect( upperHandleRect.right(), grooveRect.y(), lowerHandleRect.left() - upperHandleRect.right(), grooveRect.height() )
319 : QRect( lowerHandleRect.right(), grooveRect.y(), upperHandleRect.left() - lowerHandleRect.right(), grooveRect.height() );
323 selectionRect = mFlipped ? QRect( grooveRect.x(), lowerHandleRect.top(), grooveRect.width(), upperHandleRect.bottom() - lowerHandleRect.top() )
324 : QRect( grooveRect.x(), upperHandleRect.top(), grooveRect.width(), lowerHandleRect.bottom() - upperHandleRect.top() );
328 return selectionRect.adjusted( -1, 1, 1, -1 );
333 return mFixedRangeSize;
338 if ( size == mFixedRangeSize )
341 mFixedRangeSize = size;
343 if ( mFixedRangeSize >= 0 )
349void QgsRangeSlider::applyStep(
int step )
351 switch ( mFocusControl )
355 const int newLowerValue = std::min( mUpperValue, std::min( mStyleOption.maximum, std::max( mStyleOption.minimum, mLowerValue + step ) ) );
356 if ( newLowerValue != mLowerValue )
358 mLowerValue = newLowerValue;
359 if ( mFixedRangeSize >= 0 )
361 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
362 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
372 const int newUpperValue = std::max( mLowerValue, std::min( mStyleOption.maximum, std::max( mStyleOption.minimum, mUpperValue + step ) ) );
373 if ( newUpperValue != mUpperValue )
375 mUpperValue = newUpperValue;
376 if ( mFixedRangeSize >= 0 )
378 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
379 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
391 const int previousWidth = mUpperValue - mLowerValue;
392 const int newLowerValue = std::min( mUpperValue, std::min( mStyleOption.maximum, std::max( mStyleOption.minimum, mLowerValue + step ) ) );
393 if ( newLowerValue != mLowerValue )
395 mLowerValue = newLowerValue;
396 if ( mFixedRangeSize >= 0 )
398 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
399 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
403 mUpperValue = std::min( mStyleOption.maximum, mLowerValue + previousWidth );
411 const int previousWidth = mUpperValue - mLowerValue;
412 const int newUpperValue = std::max( mLowerValue, std::min( mStyleOption.maximum, std::max( mStyleOption.minimum, mUpperValue + step ) ) );
413 if ( newUpperValue != mUpperValue )
415 mUpperValue = newUpperValue;
416 if ( mFixedRangeSize >= 0 )
418 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
419 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
423 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - previousWidth );
438int QgsRangeSlider::unFlippedSliderPosition(
int value )
const
440 return mFlipped ? mStyleOption.maximum + mStyleOption.minimum - value : value;
465 mStyleOption.tickPosition = position;
471 return mStyleOption.tickPosition;
476 mStyleOption.tickInterval = interval;
482 return mStyleOption.tickInterval;
488 if ( !testAttribute( Qt::WA_WState_OwnSizePolicy ) )
490 setSizePolicy( sizePolicy().transposed() );
491 setAttribute( Qt::WA_WState_OwnSizePolicy,
false );
499 return mStyleOption.orientation;
515 QPainter painter(
this );
517 mStyleOption.initFrom(
this );
518 mStyleOption.rect = rect();
519 mStyleOption.sliderPosition = mStyleOption.minimum;
520 mStyleOption.subControls = QStyle::SC_SliderGroove | QStyle::SC_SliderTickmarks;
522 mStyleOption.activeSubControls = mHoverSubControl;
524 style()->drawComplexControl( QStyle::CC_Slider, &mStyleOption, &painter );
526 QColor color = palette().color( QPalette::Highlight );
527 color.setAlpha( 160 );
528 painter.setBrush( QBrush( color ) );
529 painter.setPen( Qt::NoPen );
530 painter.drawRect( selectedRangeRect() );
533 mStyleOption.subControls = QStyle::SC_SliderHandle;
534 mStyleOption.activeSubControls = mHoverControl == Lower || mActiveControl == Lower ? QStyle::SC_SliderHandle : QStyle::SC_None;
535 mStyleOption.sliderPosition = unFlippedSliderPosition( mLowerValue );
536 if ( mActiveControl == Lower )
537 mStyleOption.state |= QStyle::State_Sunken;
539 mStyleOption.state &= ~QStyle::State_Sunken;
540 style()->drawComplexControl( QStyle::CC_Slider, &mStyleOption, &painter );
543 mStyleOption.activeSubControls = mHoverControl == Upper || mActiveControl == Lower ? QStyle::SC_SliderHandle : QStyle::SC_None;
544 mStyleOption.sliderPosition = unFlippedSliderPosition( mUpperValue );
545 if ( mActiveControl == Upper )
546 mStyleOption.state |= QStyle::State_Sunken;
548 mStyleOption.state &= ~QStyle::State_Sunken;
549 style()->drawComplexControl( QStyle::CC_Slider, &mStyleOption, &painter );
551 if ( hasFocus() && mFocusControl != None )
554 QStyleOptionFocusRect option;
555 option.initFrom(
this );
556 option.state = QStyle::State_KeyboardFocusChange;
557 if ( mFocusControl == Lower )
559 mStyleOption.sliderPosition = unFlippedSliderPosition( mLowerValue );
560 option.rect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderHandle,
this );
562 else if ( mFocusControl == Upper )
564 mStyleOption.sliderPosition = unFlippedSliderPosition( mUpperValue );
565 option.rect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderHandle,
this );
567 else if ( mFocusControl == Range )
569 option.rect = selectedRangeRect();
570 if ( mStyleOption.orientation == Qt::Horizontal )
571 option.rect = option.rect.adjusted( 0, -1, 0, 1 );
573 option.rect = option.rect.adjusted( -1, 0, 1, 0 );
575 style()->drawPrimitive( QStyle::PE_FrameFocusRect, &option, &painter );
581 if ( mStyleOption.maximum == mStyleOption.minimum || (
event->buttons() ^
event->button() ) )
589 mStyleOption.sliderPosition = unFlippedSliderPosition( mLowerValue );
590 const bool overLowerControl = style()->hitTestComplexControl( QStyle::CC_Slider, &mStyleOption,
event->pos(),
this ) == QStyle::SC_SliderHandle;
591 const QRect lowerSliderRect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderHandle,
this );
592 mStyleOption.sliderPosition = unFlippedSliderPosition( mUpperValue );
593 const bool overUpperControl = style()->hitTestComplexControl( QStyle::CC_Slider, &mStyleOption,
event->pos(),
this ) == QStyle::SC_SliderHandle;
594 const QRect upperSliderRect = style()->subControlRect( QStyle::CC_Slider, &mStyleOption, QStyle::SC_SliderHandle,
this );
596 const bool overSelectedRange = selectedRangeRect().contains(
event->pos() );
598 mLowerClickOffset = pick(
event->pos() - lowerSliderRect.topLeft() );
599 mUpperClickOffset = pick(
event->pos() - upperSliderRect.topLeft() );
601 mPreDragLowerValue = mLowerValue;
602 mPreDragUpperValue = mUpperValue;
603 mRangeDragOffset = 0;
605 if ( ( overLowerControl || overUpperControl ) &&
event->modifiers() & Qt::ShiftModifier )
607 mActiveControl = Range;
608 mRangeDragOffset = overUpperControl ? mUpperClickOffset : mLowerClickOffset;
609 mFocusControl = overUpperControl ? Upper : Lower;
611 else if ( overLowerControl && overUpperControl )
612 mActiveControl = Both;
613 else if ( overLowerControl )
615 mActiveControl = Lower;
616 mFocusControl = Lower;
618 else if ( overUpperControl )
620 mActiveControl = Upper;
621 mFocusControl = Upper;
623 else if ( overSelectedRange )
625 mActiveControl = Range;
626 mFocusControl = Range;
629 mActiveControl = None;
631 if ( mActiveControl != None )
633 mStartDragPos = pixelPosToRangeValue( pick(
event->pos() ) - mRangeDragOffset );
639 if ( mActiveControl == None )
647 int newPosition = pixelPosToRangeValue( pick(
event->pos() ) );
649 bool changed =
false;
650 Control destControl = mActiveControl;
651 if ( destControl == Both )
654 if ( newPosition < mStartDragPos )
657 mFocusControl = Lower;
658 if ( mUpperValue != mPreDragUpperValue )
661 mUpperValue = mPreDragUpperValue;
662 if ( mFixedRangeSize >= 0 )
665 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
666 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
670 else if ( newPosition > mStartDragPos )
673 mFocusControl = Upper;
674 if ( mLowerValue != mPreDragLowerValue )
677 mLowerValue = mPreDragLowerValue;
678 if ( mFixedRangeSize >= 0 )
681 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
682 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
689 if ( mUpperValue != mPreDragUpperValue )
692 mUpperValue = mPreDragUpperValue;
693 if ( mFixedRangeSize >= 0 )
696 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
697 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
700 if ( mLowerValue != mPreDragLowerValue )
703 mLowerValue = mPreDragLowerValue;
704 if ( mFixedRangeSize >= 0 )
707 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
708 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
714 switch ( destControl )
723 newPosition = std::min( mUpperValue, pixelPosToRangeValue( pick(
event->pos() ) - mLowerClickOffset ) );
724 if ( mLowerValue != newPosition )
726 mLowerValue = newPosition;
727 if ( mFixedRangeSize >= 0 )
730 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
731 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
742 newPosition = std::max( mLowerValue, pixelPosToRangeValue( pick(
event->pos() ) - mUpperClickOffset ) );
743 if ( mUpperValue != newPosition )
745 mUpperValue = newPosition;
746 if ( mFixedRangeSize >= 0 )
749 mLowerValue = std::max( mStyleOption.minimum, mUpperValue - mFixedRangeSize );
750 mUpperValue = std::min( mLowerValue + mFixedRangeSize, mStyleOption.maximum );
760 newPosition = pixelPosToRangeValue( pick(
event->pos() ) - mRangeDragOffset );
761 int delta = newPosition - mStartDragPos;
766 const int maxDelta = mStyleOption.maximum - mPreDragUpperValue;
767 delta = std::min( maxDelta, delta );
768 mLowerValue = mPreDragLowerValue + delta;
769 mUpperValue = mPreDragUpperValue + delta;
772 else if ( delta < 0 )
776 const int maxDelta = mPreDragLowerValue - mStyleOption.minimum;
777 delta = std::min( maxDelta, delta );
778 mLowerValue = mPreDragLowerValue - delta;
779 mUpperValue = mPreDragUpperValue - delta;
796 if ( mActiveControl == None ||
event->buttons() )
803 mActiveControl = None;
809 Control destControl = mFocusControl;
810 if ( ( destControl == Lower || destControl == Upper ) && mLowerValue == mUpperValue )
813 switch (
event->key() )
817 switch ( mStyleOption.orientation )
820 if ( destControl == Both )
821 mFocusControl = mFlipped ? Upper : Lower;
823 applyStep( mFlipped ? mSingleStep : -mSingleStep );
829 switch ( mFocusControl )
832 mFocusControl = Range;
835 mFocusControl = Upper;
840 mFocusControl = Lower;
846 switch ( mFocusControl )
851 mFocusControl = Upper;
854 mFocusControl = Lower;
857 mFocusControl = Range;
869 switch ( mStyleOption.orientation )
872 if ( destControl == Both )
873 mFocusControl = mFlipped ? Lower : Upper;
874 applyStep( mFlipped ? -mSingleStep : mSingleStep );
880 switch ( mFocusControl )
885 mFocusControl = Upper;
888 mFocusControl = Lower;
891 mFocusControl = Range;
897 switch ( mFocusControl )
900 mFocusControl = Range;
903 mFocusControl = Upper;
908 mFocusControl = Lower;
920 switch ( mStyleOption.orientation )
925 switch ( mFocusControl )
928 mFocusControl = Range;
931 mFocusControl = Upper;
936 mFocusControl = Lower;
942 switch ( mFocusControl )
945 mFocusControl = Upper;
950 mFocusControl = Lower;
953 mFocusControl = Range;
961 if ( destControl == Both )
962 mFocusControl = mFlipped ? Upper : Lower;
964 applyStep( mFlipped ? mSingleStep : -mSingleStep );
972 switch ( mStyleOption.orientation )
977 switch ( mFocusControl )
980 mFocusControl = Upper;
985 mFocusControl = Lower;
988 mFocusControl = Range;
994 switch ( mFocusControl )
997 mFocusControl = Range;
1000 mFocusControl = Upper;
1005 mFocusControl = Lower;
1013 if ( destControl == Both )
1014 mFocusControl = mFlipped ? Lower : Upper;
1016 applyStep( mFlipped ? -mSingleStep : mSingleStep );
1022 case Qt::Key_PageUp:
1024 switch ( mStyleOption.orientation )
1026 case Qt::Horizontal:
1027 if ( destControl == Both )
1028 mFocusControl = mFlipped ? Lower : Upper;
1030 applyStep( mFlipped ? -mPageStep : mPageStep );
1034 if ( destControl == Both )
1035 mFocusControl = mFlipped ? Upper : Lower;
1037 applyStep( mFlipped ? mPageStep : -mPageStep );
1043 case Qt::Key_PageDown:
1045 switch ( mStyleOption.orientation )
1047 case Qt::Horizontal:
1048 if ( destControl == Both )
1049 mFocusControl = mFlipped ? Upper : Lower;
1051 applyStep( mFlipped ? mPageStep : -mPageStep );
1055 if ( destControl == Both )
1056 mFocusControl = mFlipped ? Lower : Upper;
1058 applyStep( mFlipped ? -mPageStep : mPageStep );
1065 switch ( destControl )
1068 applyStep( mFlipped ? mUpperValue - mLowerValue : mStyleOption.minimum - mLowerValue );
1072 applyStep( mFlipped ? mStyleOption.maximum - mUpperValue : mLowerValue - mUpperValue );
1076 applyStep( mFlipped ? mStyleOption.maximum - mUpperValue : mStyleOption.minimum - mLowerValue );
1080 if ( destControl == Both )
1081 mFocusControl = mFlipped ? Upper : Lower;
1083 applyStep( mFlipped ? mStyleOption.maximum - mUpperValue : mStyleOption.minimum - mLowerValue );
1093 switch ( destControl )
1096 applyStep( mFlipped ? mStyleOption.minimum - mLowerValue : mUpperValue - mLowerValue );
1100 applyStep( mFlipped ? mLowerValue - mUpperValue : mStyleOption.maximum - mUpperValue );
1104 applyStep( mFlipped ? mStyleOption.minimum - mLowerValue : mStyleOption.maximum - mUpperValue );
1108 if ( destControl == Both )
1109 mFocusControl = mFlipped ? Lower : Upper;
1111 applyStep( mFlipped ? mStyleOption.minimum - mLowerValue : mStyleOption.maximum - mUpperValue );
1130 static constexpr int SLIDER_LENGTH = 84;
1131 static constexpr int TICK_SPACE = 5;
1133 int thick = style()->pixelMetric( QStyle::PM_SliderThickness, &mStyleOption,
this );
1134 if ( mStyleOption.tickPosition & QSlider::TicksAbove )
1135 thick += TICK_SPACE;
1136 if ( mStyleOption.tickPosition & QSlider::TicksBelow )
1137 thick += TICK_SPACE;
1138 int w = thick, h = SLIDER_LENGTH;
1139 if ( mStyleOption.orientation == Qt::Horizontal )
1143 return style()->sizeFromContents( QStyle::CT_Slider, &mStyleOption, QSize( w, h ),
this );
1149 const int length = style()->pixelMetric( QStyle::PM_SliderLength, &mStyleOption,
this );
1150 if ( mStyleOption.orientation == Qt::Horizontal )
1151 s.setWidth( length );
1153 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.