123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- /*=========================================================================
- Library: CTK
- Copyright (c) Kitware Inc.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0.txt
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- =========================================================================*/
- #ifndef __ctkRangeSlider_h
- #define __ctkRangeSlider_h
- // Qt includes
- #include <QSlider>
- // CTK includes
- #include <ctkPimpl.h>
- #include "ctkWidgetsExport.h"
- class QStylePainter;
- class ctkRangeSliderPrivate;
- /// \ingroup Widgets
- ///
- /// A ctkRangeSlider is a slider that lets you input 2 values instead of one
- /// (see QSlider). These values are typically a lower and upper bound.
- /// Values are comprised between the range of the slider. See setRange(),
- /// minimum() and maximum(). The upper bound can't be smaller than the
- /// lower bound and vice-versa.
- /// When setting new values (setMinimumValue(), setMaximumValue() or
- /// setValues()), make sure they lie between the range (minimum(), maximum())
- /// of the slider, they would be forced otherwised. If it is not the behavior
- /// you desire, you can set the range first (setRange(), setMinimum(),
- /// setMaximum())
- /// TODO: support triggerAction(QAbstractSlider::SliderSingleStepSub) that
- /// moves both values at a time.
- /// \sa ctkDoubleRangeSlider, ctkDoubleSlider, ctkRangeWidget
- class CTK_WIDGETS_EXPORT ctkRangeSlider : public QSlider
- {
- Q_OBJECT
- Q_PROPERTY(int minimumValue READ minimumValue WRITE setMinimumValue)
- Q_PROPERTY(int maximumValue READ maximumValue WRITE setMaximumValue)
- Q_PROPERTY(int minimumPosition READ minimumPosition WRITE setMinimumPosition)
- Q_PROPERTY(int maximumPosition READ maximumPosition WRITE setMaximumPosition)
- Q_PROPERTY(bool symmetricMoves READ symmetricMoves WRITE setSymmetricMoves)
- Q_PROPERTY(QString handleToolTip READ handleToolTip WRITE setHandleToolTip)
- public:
- // Superclass typedef
- typedef QSlider Superclass;
- /// Constructor, builds a ctkRangeSlider that ranges from 0 to 100 and has
- /// a lower and upper values of 0 and 100 respectively, other properties
- /// are set the QSlider default properties.
- explicit ctkRangeSlider( Qt::Orientation o, QWidget* par= 0 );
- explicit ctkRangeSlider( QWidget* par = 0 );
- virtual ~ctkRangeSlider();
- ///
- /// This property holds the slider's current minimum value.
- /// The slider silently forces minimumValue to be within the legal range:
- /// minimum() <= minimumValue() <= maximumValue() <= maximum().
- /// Changing the minimumValue also changes the minimumPosition.
- int minimumValue() const;
- ///
- /// This property holds the slider's current maximum value.
- /// The slider forces the maximum value to be within the legal range:
- /// The slider silently forces maximumValue to be within the legal range:
- /// Changing the maximumValue also changes the maximumPosition.
- int maximumValue() const;
- ///
- /// This property holds the current slider minimum position.
- /// If tracking is enabled (the default), this is identical to minimumValue.
- int minimumPosition() const;
- void setMinimumPosition(int min);
- ///
- /// This property holds the current slider maximum position.
- /// If tracking is enabled (the default), this is identical to maximumValue.
- int maximumPosition() const;
- void setMaximumPosition(int max);
- ///
- /// Utility function that set the minimum position and
- /// maximum position at once.
- void setPositions(int min, int max);
-
- ///
- /// When symmetricMoves is true, moving a handle will move the other handle
- /// symmetrically, otherwise the handles are independent. False by default
- bool symmetricMoves()const;
- void setSymmetricMoves(bool symmetry);
- ///
- /// Controls the text to display for the handle tooltip. It is in addition
- /// to the widget tooltip.
- /// "%1" is replaced by the current value of the slider.
- /// Empty string (by default) means no tooltip.
- QString handleToolTip()const;
- void setHandleToolTip(const QString& toolTip);
- Q_SIGNALS:
- ///
- /// This signal is emitted when the slider minimum value has changed,
- /// with the new slider value as argument.
- void minimumValueChanged(int min);
- ///
- /// This signal is emitted when the slider maximum value has changed,
- /// with the new slider value as argument.
- void maximumValueChanged(int max);
- ///
- /// Utility signal that is fired when minimum or maximum values have changed.
- void valuesChanged(int min, int max);
- ///
- /// This signal is emitted when sliderDown is true and the slider moves.
- /// This usually happens when the user is dragging the minimum slider.
- /// The value is the new slider minimum position.
- /// This signal is emitted even when tracking is turned off.
- void minimumPositionChanged(int min);
- ///
- /// This signal is emitted when sliderDown is true and the slider moves.
- /// This usually happens when the user is dragging the maximum slider.
- /// The value is the new slider maximum position.
- /// This signal is emitted even when tracking is turned off.
- void maximumPositionChanged(int max);
- ///
- /// Utility signal that is fired when minimum or maximum positions
- /// have changed.
- void positionsChanged(int min, int max);
- public Q_SLOTS:
- ///
- /// This property holds the slider's current minimum value.
- /// The slider silently forces min to be within the legal range:
- /// minimum() <= min <= maximumValue() <= maximum().
- /// Note: Changing the minimumValue also changes the minimumPosition.
- /// \sa stMaximumValue, setValues, setMinimum, setMaximum, setRange
- void setMinimumValue(int min);
- ///
- /// This property holds the slider's current maximum value.
- /// The slider silently forces max to be within the legal range:
- /// minimum() <= minimumValue() <= max <= maximum().
- /// Note: Changing the maximumValue also changes the maximumPosition.
- /// \sa stMinimumValue, setValues, setMinimum, setMaximum, setRange
- void setMaximumValue(int max);
- ///
- /// Utility function that set the minimum value and maximum value at once.
- /// The slider silently forces min and max to be within the legal range:
- /// minimum() <= min <= max <= maximum().
- /// Note: Changing the minimumValue and maximumValue also changes the
- /// minimumPosition and maximumPosition.
- /// \sa setMinimumValue, setMaximumValue, setMinimum, setMaximum, setRange
- void setValues(int min, int max);
- protected Q_SLOTS:
- void onRangeChanged(int minimum, int maximum);
- protected:
- ctkRangeSlider( ctkRangeSliderPrivate* impl, Qt::Orientation o, QWidget* par= 0 );
- ctkRangeSlider( ctkRangeSliderPrivate* impl, QWidget* par = 0 );
- // Description:
- // Standard Qt UI events
- virtual void mousePressEvent(QMouseEvent* ev);
- virtual void mouseMoveEvent(QMouseEvent* ev);
- virtual void mouseReleaseEvent(QMouseEvent* ev);
- bool isMinimumSliderDown()const;
- bool isMaximumSliderDown()const;
- // Description:
- // Rendering is done here.
- virtual void paintEvent(QPaintEvent* ev);
- virtual void initMinimumSliderStyleOption(QStyleOptionSlider* option) const;
- virtual void initMaximumSliderStyleOption(QStyleOptionSlider* option) const;
- // Description:
- // Reimplemented for the tooltips
- virtual bool event(QEvent* event);
- protected:
- QScopedPointer<ctkRangeSliderPrivate> d_ptr;
- private:
- Q_DECLARE_PRIVATE(ctkRangeSlider);
- Q_DISABLE_COPY(ctkRangeSlider);
- };
- #endif
|