itom 2.2.1
K:/git-itom/sources/itom/itomWidgets/sliderWidget.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 SLIDERWIDGET_H
00032 #define SLIDERWIDGET_H
00033 
00034 // Qt includes
00035 #include <QSlider>
00036 
00037 
00038 #include "commonWidgets.h"
00039 
00040 class DoubleSlider;
00041 class PopupWidget;
00042 class SliderWidgetPrivate;
00043 class DoubleSpinBox;
00044 class ValueProxy;
00045 
00051 class ITOMWIDGETS_EXPORT SliderWidget : public QWidget
00052 {
00053   Q_OBJECT
00054   Q_FLAGS(SynchronizeSiblings)
00055 
00056   
00057 
00058 
00059   Q_PROPERTY(int decimals READ decimals WRITE setDecimals NOTIFY decimalsChanged)
00060   Q_PROPERTY(double singleStep READ singleStep WRITE setSingleStep)
00061   Q_PROPERTY(double pageStep READ pageStep WRITE setPageStep)
00062   Q_PROPERTY(double minimum READ minimum WRITE setMinimum)
00063   Q_PROPERTY(double maximum READ maximum WRITE setMaximum)
00064   Q_PROPERTY(double value READ value WRITE setValue)
00065   Q_PROPERTY(QString prefix READ prefix WRITE setPrefix)
00066   Q_PROPERTY(QString suffix READ suffix WRITE setSuffix)
00067   Q_PROPERTY(double tickInterval READ tickInterval WRITE setTickInterval)
00068   Q_PROPERTY(QSlider::TickPosition tickPosition READ tickPosition WRITE setTickPosition)
00069   Q_PROPERTY(SynchronizeSiblings synchronizeSiblings READ synchronizeSiblings WRITE setSynchronizeSiblings)
00070   Q_PROPERTY(Qt::Alignment spinBoxAlignment READ spinBoxAlignment WRITE setSpinBoxAlignment)
00071   Q_PROPERTY(bool tracking READ hasTracking WRITE setTracking)
00072   Q_PROPERTY(bool spinBoxVisible READ isSpinBoxVisible WRITE setSpinBoxVisible);
00073   Q_PROPERTY(bool popupSlider READ hasPopupSlider WRITE setPopupSlider);
00074   Q_PROPERTY(bool invertedAppearance READ invertedAppearance WRITE setInvertedAppearance)
00075   Q_PROPERTY(bool invertedControls READ invertedControls WRITE setInvertedControls)
00076 
00077 public:
00078 
00092   enum SynchronizeSibling
00093     {
00094     NoSynchronize = 0x000,
00095     SynchronizeWidth = 0x001,
00096     SynchronizeDecimals = 0x002,
00097     };
00098   Q_DECLARE_FLAGS(SynchronizeSiblings, SynchronizeSibling)
00099 
00100   
00101   typedef QWidget Superclass;
00102 
00104   explicit SliderWidget(QWidget* parent = 0);
00105   virtual ~SliderWidget();
00106 
00113   virtual double minimum()const;
00114   virtual void setMinimum(double minimum);
00115   
00122   virtual double maximum()const;
00123   virtual void setMaximum(double maximum);
00126   virtual void setRange(double min, double max);
00127 
00131   //double sliderPosition()const;
00132   //void setSliderPosition(double position);
00133 
00138   virtual double value()const;
00139 
00145   virtual double singleStep()const;
00146   virtual void setSingleStep(double step);
00147 
00152   virtual double pageStep()const;
00153   virtual void setPageStep(double step);
00154 
00158   virtual int decimals()const;
00159 
00164   virtual QString prefix()const;
00165   virtual void setPrefix(const QString& prefix);
00166 
00171   virtual QString suffix()const;
00172   virtual void setSuffix(const QString& suffix);
00173 
00179   virtual double tickInterval()const;
00180   virtual void setTickInterval(double tick);
00181 
00186   virtual void setTickPosition(QSlider::TickPosition position);
00187   virtual QSlider::TickPosition tickPosition()const;
00188   
00193   virtual void setSpinBoxAlignment(Qt::Alignment alignment);
00194   virtual Qt::Alignment spinBoxAlignment()const;
00195 
00202   virtual void setTracking(bool enable);
00203   virtual bool hasTracking()const;
00204 
00210   virtual SliderWidget::SynchronizeSiblings synchronizeSiblings() const;
00211   virtual void setSynchronizeSiblings(SliderWidget::SynchronizeSiblings options);
00212 
00222   virtual void setInvertedAppearance(bool invertedAppearance);
00223   virtual bool invertedAppearance()const;
00224 
00232   virtual void setInvertedControls(bool invertedControls);
00233   virtual bool invertedControls()const;
00234 
00238   virtual bool isSpinBoxVisible()const;
00239 
00247   virtual bool hasPopupSlider()const;
00248   virtual void setPopupSlider(bool popup);
00249 
00254   virtual PopupWidget* popup()const;
00255 
00260   virtual DoubleSpinBox* spinBox();
00261 
00266   virtual DoubleSlider* slider();
00267 
00273   virtual void setValueProxy(ValueProxy* proxy);
00274   virtual ValueProxy* valueProxy() const;
00275 
00276 public Q_SLOTS:
00279   virtual void reset();
00280   virtual void setValue(double value);
00281   virtual void setSpinBoxVisible(bool);
00282 
00285   virtual void setDecimals(int decimals);
00286 
00287 Q_SIGNALS:
00293   void valueChanged(double value);
00294 
00299   void valueIsChanging(double value);
00300 
00303   void decimalsChanged(int decimals);
00304 
00305 protected Q_SLOTS:
00306 
00307   virtual void startChanging();
00308   virtual void stopChanging();
00309   virtual void setSpinBoxValue(double sliderValue);
00310   virtual void setSliderValue(double spinBoxValue);
00311   virtual void onValueProxyAboutToBeModified();
00312   virtual void onValueProxyModified();
00313 
00314 protected:
00315   virtual bool eventFilter(QObject *obj, QEvent *event);
00316   
00317 protected:
00318   QScopedPointer<SliderWidgetPrivate> d_ptr;
00319 
00320 private:
00321   Q_DECLARE_PRIVATE(SliderWidget);
00322   Q_DISABLE_COPY(SliderWidget);
00323 
00324 };
00325 
00326 Q_DECLARE_OPERATORS_FOR_FLAGS(SliderWidget::SynchronizeSiblings);
00327 
00328 #endif
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Properties Friends