itom 2.2.1
K:/git-itom/sources/itom/itomWidgets/doubleRangeWidget.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 DOUBLERANGEWIDGET_H
00032 #define DOUBLERANGEWIDGET_H
00033 
00034 // Qt includes
00035 #include <QSlider>
00036 
00037 
00038 #include "commonWidgets.h"
00039 
00040 class DoubleRangeSlider;
00041 class DoubleSpinBox;
00042 class DoubleRangeWidgetPrivate;
00043 class ValueProxy;
00044 
00050 class ITOMWIDGETS_EXPORT DoubleRangeWidget : public QWidget
00051 {
00052   Q_OBJECT
00053   Q_PROPERTY(int decimals READ decimals WRITE setDecimals)
00054   Q_PROPERTY(double singleStep READ singleStep WRITE setSingleStep)
00055   Q_PROPERTY(double minimum READ minimum WRITE setMinimum)
00056   Q_PROPERTY(double maximum READ maximum WRITE setMaximum)
00057   Q_PROPERTY(double minimumValue READ minimumValue WRITE setMinimumValue)
00058   Q_PROPERTY(double maximumValue READ maximumValue WRITE setMaximumValue)
00059   Q_PROPERTY(QString prefix READ prefix WRITE setPrefix)
00060   Q_PROPERTY(QString suffix READ suffix WRITE setSuffix)
00061   Q_PROPERTY(double tickInterval READ tickInterval WRITE setTickInterval)
00062   Q_PROPERTY(bool autoSpinBoxWidth READ isAutoSpinBoxWidth WRITE setAutoSpinBoxWidth)
00063   Q_PROPERTY(Qt::Alignment spinBoxTextAlignment READ spinBoxTextAlignment WRITE setSpinBoxTextAlignment)
00064   Q_PROPERTY(Qt::Alignment spinBoxAlignment READ spinBoxAlignment WRITE setSpinBoxAlignment)
00065   Q_PROPERTY(bool tracking READ hasTracking WRITE setTracking)
00066   Q_PROPERTY(bool symmetricMoves READ symmetricMoves WRITE setSymmetricMoves)
00067 
00068 public:
00070   typedef QWidget Superclass;
00071 
00075   explicit DoubleRangeWidget(QWidget* parent = 0);
00076   
00078   virtual ~DoubleRangeWidget();
00079 
00086   virtual double minimum()const;
00087   virtual void setMinimum(double minimum);
00088 
00095   virtual double maximum()const;
00096   virtual void setMaximum(double maximum);
00099   virtual void setRange(double min, double max);
00100   virtual void range(double minimumAndMaximum[2])const;
00101 
00106   virtual double minimumValue()const;
00107 
00112   virtual double maximumValue()const;
00113 
00117   virtual void values(double &minValue, double &maxValue)const;
00118 
00124   virtual double singleStep()const;
00125   virtual void setSingleStep(double step);
00126 
00129   virtual int decimals()const;
00130 
00135   virtual QString prefix()const;
00136  virtual  void setPrefix(const QString& prefix);
00137 
00142   virtual QString suffix()const;
00143   virtual void setSuffix(const QString& suffix);
00144 
00150   virtual double tickInterval()const;
00151   virtual void setTickInterval(double ti);
00152 
00157   virtual void setSpinBoxAlignment(Qt::Alignment alignment);
00158   virtual Qt::Alignment spinBoxAlignment()const;
00159 
00164   virtual void setSpinBoxTextAlignment(Qt::Alignment alignment);
00165   virtual Qt::Alignment spinBoxTextAlignment()const;
00166 
00173   virtual void setTracking(bool enable);
00174   virtual bool hasTracking()const;
00175 
00180   // RangeWidget siblings.
00181   virtual bool isAutoSpinBoxWidth()const;
00182   virtual void setAutoSpinBoxWidth(bool autoWidth);
00183   
00187   virtual bool symmetricMoves()const;
00188   virtual void setSymmetricMoves(bool symmetry);
00189 
00192   virtual DoubleRangeSlider* slider()const;
00195   virtual DoubleSpinBox* minimumSpinBox()const;
00198   virtual DoubleSpinBox* maximumSpinBox()const;
00199 
00202   virtual void setValueProxy(ValueProxy* proxy);
00203   virtual ValueProxy* valueProxy() const;
00204 
00205 public Q_SLOTS:
00208   virtual void reset();
00209   virtual void setMinimumValue(double value);
00210   virtual void setMaximumValue(double value);
00213   virtual void setValues(double minValue, double maxValue);
00214 
00217   virtual void setDecimals(int decimals);
00218 
00219 Q_SIGNALS:
00222   //void sliderMoved(double position);
00223   void minimumValueChanged(double value);
00224   void minimumValueIsChanging(double value);
00225   void maximumValueChanged(double value);
00226   void maximumValueIsChanging(double value);
00227   void valuesChanged(double minValue, double maxValue);
00228   void rangeChanged(double min, double max);
00229 
00230 protected Q_SLOTS:
00231   virtual void startChanging();
00232   virtual void stopChanging();
00233   virtual void changeValues(double newMinValue, double newMaxValue);
00234   virtual void changeMinimumValue(double value);
00235   virtual void changeMaximumValue(double value);
00237   virtual void setSliderValues();
00238   virtual void setMinimumToMaximumSpinBox(double minimum);
00239   virtual void setMaximumToMinimumSpinBox(double maximum);
00240   virtual void onSliderRangeChanged(double min, double max);
00241 
00242   virtual void onValueProxyAboutToBeModified();
00243   virtual void onValueProxyModified();
00244 
00245 protected:
00246   virtual bool eventFilter(QObject *obj, QEvent *event);
00247 
00249   virtual void setSlider(DoubleRangeSlider* slider);
00250 
00251 protected:
00252   QScopedPointer<DoubleRangeWidgetPrivate> d_ptr;
00253 
00254 private:
00255   Q_DECLARE_PRIVATE(DoubleRangeWidget);
00256   Q_DISABLE_COPY(DoubleRangeWidget);
00257 
00258 };
00259 
00260 #endif
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Properties Friends