itom 2.2.1
K:/git-itom/sources/itom/itomWidgets/rangeWidget.h
00001 /* ********************************************************************
00002     itom software
00003     URL: http://www.uni-stuttgart.de/ito
00004     Copyright (C) 2016, Institut fuer Technische Optik (ITO),
00005     Universitaet Stuttgart, Germany
00006 
00007     This file is part of itom and its software development toolkit (SDK).
00008 
00009     itom is free software; you can redistribute it and/or modify it
00010     under the terms of the GNU Library General Public Licence as published by
00011     the Free Software Foundation; either version 2 of the Licence, or (at
00012     your option) any later version.
00013    
00014     In addition, as a special exception, the Institut fuer Technische
00015     Optik (ITO) gives you certain additional rights.
00016     These rights are described in the ITO LGPL Exception version 1.0,
00017     which can be found in the file LGPL_EXCEPTION.txt in this package.
00018 
00019     itom is distributed in the hope that it will be useful, but
00020     WITHOUT ANY WARRANTY; without even the implied warranty of
00021     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library
00022     General Public Licence for more details.
00023 
00024     You should have received a copy of the GNU Library General Public License
00025     along with itom. If not, see <http://www.gnu.org/licenses/>.
00026 
00027     This file is a port and modified version of the 
00028     Common framework (http://www.commontk.org)
00029 *********************************************************************** */
00030 
00031 #ifndef RANGEWIDGET_H
00032 #define RANGEWIDGET_H
00033 
00034 // Qt includes
00035 #include <QSlider>
00036 
00037 
00038 #include "commonWidgets.h"
00039 
00040 class RangeSlider;
00041 class QSpinBox;
00042 class RangeWidgetPrivate;
00043 
00044 namespace ito {
00045     class IntervalMeta; //forward declaration
00046 }
00047 
00053 class ITOMWIDGETS_EXPORT RangeWidget : public QWidget
00054 {
00055   Q_OBJECT
00056   Q_PROPERTY(int singleStep READ singleStep WRITE setSingleStep)
00057   Q_PROPERTY(int minimum READ minimum WRITE setMinimum)
00058   Q_PROPERTY(int maximum READ maximum WRITE setMaximum)
00059   Q_PROPERTY(int minimumValue READ minimumValue WRITE setMinimumValue)
00060   Q_PROPERTY(int maximumValue READ maximumValue WRITE setMaximumValue)
00061   Q_PROPERTY(uint stepSizeValue READ stepSizeValue WRITE setStepSizeValue)
00062   Q_PROPERTY(uint minimumRange READ minimumRange WRITE setMinimumRange)
00063   Q_PROPERTY(uint maximumRange READ maximumRange WRITE setMaximumRange)
00064   Q_PROPERTY(uint stepSizeRange READ stepSizeRange WRITE setStepSizeRange)
00065   Q_PROPERTY(bool rangeIncludeLimits READ rangeIncludeLimits WRITE setRangeIncludeLimits)
00066   Q_PROPERTY(QString prefix READ prefix WRITE setPrefix)
00067   Q_PROPERTY(QString suffix READ suffix WRITE setSuffix)
00068   Q_PROPERTY(int tickInterval READ tickInterval WRITE setTickInterval)
00069   Q_PROPERTY(bool autoSpinBoxWidth READ isAutoSpinBoxWidth WRITE setAutoSpinBoxWidth)
00070   Q_PROPERTY(Qt::Alignment spinBoxTextAlignment READ spinBoxTextAlignment WRITE setSpinBoxTextAlignment)
00071   Q_PROPERTY(Qt::Alignment spinBoxAlignment READ spinBoxAlignment WRITE setSpinBoxAlignment)
00072   Q_PROPERTY(bool tracking READ hasTracking WRITE setTracking)
00073   Q_PROPERTY(bool symmetricMoves READ symmetricMoves WRITE setSymmetricMoves)
00074 
00075 public:
00077   typedef QWidget Superclass;
00078 
00082   explicit RangeWidget(QWidget* parent = 0);
00083   
00085   virtual ~RangeWidget();
00086 
00093   virtual int minimum()const;
00094   virtual void setMinimum(int minimum);
00095 
00102   virtual int maximum()const;
00103   virtual void setMaximum(int maximum);
00106   virtual void setRange(int min, int max);
00107   virtual void range(int minimumAndMaximum[2])const;
00108 
00113   virtual int minimumValue()const;
00114 
00119   virtual int maximumValue()const;
00120 
00124   virtual void values(int &minValue, int &maxValue)const;
00125 
00131   virtual int singleStep()const;
00132   virtual void setSingleStep(int step);
00133 
00137   uint stepSizeValue() const;
00138   void setStepSizeValue(uint stepSize);
00139   
00143   uint minimumRange() const;
00144   void setMinimumRange(uint min);
00145   
00149   uint maximumRange() const;
00150   void setMaximumRange(uint max);
00151   
00155   uint stepSizeRange() const;
00156   void setStepSizeRange(uint stepSize);
00157   
00162   bool rangeIncludeLimits() const;
00163   void setRangeIncludeLimits(bool include);
00164 
00169   virtual QString prefix()const;
00170   virtual void setPrefix(const QString& prefix);
00171 
00176   virtual QString suffix()const;
00177   virtual void setSuffix(const QString& suffix);
00178 
00184   virtual int tickInterval()const;
00185   virtual void setTickInterval(int ti);
00186 
00191   virtual void setSpinBoxAlignment(Qt::Alignment alignment);
00192   virtual Qt::Alignment spinBoxAlignment()const;
00193 
00198   virtual void setSpinBoxTextAlignment(Qt::Alignment alignment);
00199   virtual Qt::Alignment spinBoxTextAlignment()const;
00200 
00207   virtual void setTracking(bool enable);
00208   virtual bool hasTracking()const;
00209 
00214   // RangeWidget siblings.
00215   virtual bool isAutoSpinBoxWidth()const;
00216   virtual void setAutoSpinBoxWidth(bool autoWidth);
00217   
00221   virtual bool symmetricMoves()const;
00222   virtual void setSymmetricMoves(bool symmetry);
00223 
00226   virtual RangeSlider* slider()const;
00229   virtual QSpinBox* minimumSpinBox()const;
00232   virtual QSpinBox* maximumSpinBox()const;
00233 
00238   void setLimitsFromIntervalMeta(const ito::IntervalMeta &intervalMeta);
00239 
00240 public Q_SLOTS:
00243   virtual void reset();
00244   virtual void setMinimumValue(int value);
00245   virtual void setMaximumValue(int value);
00248   virtual void setValues(int minValue, int maxValue);
00249 
00250 Q_SIGNALS:
00253   //void sliderMoved(int position);
00254   void minimumValueChanged(int value);
00255   void minimumValueIsChanging(int value);
00256   void maximumValueChanged(int value);
00257   void maximumValueIsChanging(int value);
00258   void valuesChanged(int minValue, int maxValue);
00259   void rangeChanged(int min, int max);
00260 
00261 protected Q_SLOTS:
00262   virtual void startChanging();
00263   virtual void stopChanging();
00264   virtual void changeValues(int newMinValue, int newMaxValue);
00265   virtual void changeMinimumValue(int value);
00266   virtual void changeMaximumValue(int value);
00268   virtual void setSliderValues();
00269   virtual void setMinimumToMaximumSpinBox(int minimum);
00270   virtual void setMaximumToMinimumSpinBox(int maximum);
00271   virtual void onSliderRangeChanged(int min, int max);
00272 
00273 protected:
00274   virtual bool eventFilter(QObject *obj, QEvent *event);
00275 
00277   void setSlider(RangeSlider* slider);
00278 
00279 protected:
00280   QScopedPointer<RangeWidgetPrivate> d_ptr;
00281 
00282 private:
00283   Q_DECLARE_PRIVATE(RangeWidget);
00284   Q_DISABLE_COPY(RangeWidget);
00285 
00286 };
00287 
00288 #endif
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Properties Friends