|
|
|
/*
|
|
|
|
* knuminput.h
|
|
|
|
*
|
|
|
|
* Copyright (c) 1997 Patrick Dowler <dowler@morgul.fsh.uvic.ca>
|
|
|
|
* Copyright (c) 2000 Dirk A. Mueller <mueller@kde.org>
|
|
|
|
* Copyright (c) 2002 Marc Mutz <mutz@kde.org>
|
|
|
|
*
|
|
|
|
* Requires the Qt widget libraries, available at no cost at
|
|
|
|
* http://www.troll.no/
|
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Library General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Library General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Library General Public License
|
|
|
|
* along with this library; see the file COPYING.LIB. If not, write to
|
|
|
|
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
* Boston, MA 02110-1301, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef K_NUMINPUT_H
|
|
|
|
#define K_NUMINPUT_H
|
|
|
|
|
|
|
|
#include <tqwidget.h>
|
|
|
|
#include <tqspinbox.h>
|
|
|
|
#include <kdelibs_export.h>
|
|
|
|
|
|
|
|
class TQLabel;
|
|
|
|
class TQSlider;
|
|
|
|
class TQLineEdit;
|
|
|
|
class TQLayout;
|
|
|
|
class TQValidator;
|
|
|
|
|
|
|
|
class KIntSpinBox;
|
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------ */
|
|
|
|
|
|
|
|
/**
|
|
|
|
* You need to inherit from this class if you want to implement K*NumInput
|
|
|
|
* for a different variable type
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
class KDEUI_EXPORT KNumInput : public TQWidget
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
Q_PROPERTY( TQString label READ label WRITE setLabel )
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
* Default constructor
|
|
|
|
* @param parent If parent is 0, the new widget becomes a top-level window. If parent is another widget, this widget becomes a child window inside parent. The new widget is deleted when its parent is deleted.
|
|
|
|
* @param name The name is sent to the TQObject constructor.
|
|
|
|
*/
|
|
|
|
KNumInput(TQWidget* parent=0, const char* name=0);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param below A pointer to another KNumInput.
|
|
|
|
* @param parent parent widget
|
|
|
|
* @param name name of the widget
|
|
|
|
*/
|
|
|
|
KNumInput(KNumInput* below, TQWidget* parent=0, const char* name=0);
|
|
|
|
~KNumInput();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the text and tqalignment of the main description label.
|
|
|
|
*
|
|
|
|
* @param label The text of the label.
|
|
|
|
* Use TQString::null to remove an existing one.
|
|
|
|
*
|
|
|
|
* @param a one of @p AlignLeft, @p AlignHCenter, YAlignRight and
|
|
|
|
* @p AlignTop, @p AlignVCenter, @p AlignBottom.
|
|
|
|
* default is @p AlignLeft | @p AlignTop.
|
|
|
|
*
|
|
|
|
* The vertical tqalignment flags have special meaning with this
|
|
|
|
* widget:
|
|
|
|
*
|
|
|
|
* @li @p AlignTop The label is placed above the edit/slider
|
|
|
|
* @li @p AlignVCenter The label is placed left beside the edit
|
|
|
|
* @li @p AlignBottom The label is placed below the edit/slider
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
virtual void setLabel(const TQString & label, int a = AlignLeft | AlignTop);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the text of the label.
|
|
|
|
*/
|
|
|
|
TQString label() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return if the num input has a slider.
|
|
|
|
* @since 3.1
|
|
|
|
*/
|
|
|
|
bool showSlider() const { return m_slider; }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the spacing of tickmarks for the slider.
|
|
|
|
*
|
|
|
|
* @param minor Minor tickmark separation.
|
|
|
|
* @param major Major tickmark separation.
|
|
|
|
*/
|
|
|
|
void setSteps(int minor, int major);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Specifies that this widget may stretch horizontally, but is
|
|
|
|
* fixed vertically (like TQSpinBox itself).
|
|
|
|
*/
|
|
|
|
TQSizePolicy sizePolicy() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns a size which fits the contents of the control.
|
|
|
|
*
|
|
|
|
* @return the preferred size necessary to show the control
|
|
|
|
*/
|
|
|
|
virtual TQSize tqsizeHint() const;
|
|
|
|
|
|
|
|
protected:
|
|
|
|
/**
|
|
|
|
* Call this function whenever you change something in the geometry
|
|
|
|
* of your KNumInput child.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
void layout(bool deep);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* You need to overwrite this method and implement your layout
|
|
|
|
* calculations there.
|
|
|
|
*
|
|
|
|
* See KIntNumInput::doLayout and KDoubleNumInput::doLayout implementation
|
|
|
|
* for details.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
virtual void doLayout() = 0;
|
|
|
|
|
|
|
|
KNumInput* m_prev, *m_next;
|
|
|
|
int m_colw1, m_colw2;
|
|
|
|
|
|
|
|
TQLabel* m_label;
|
|
|
|
TQSlider* m_slider;
|
|
|
|
TQSize m_sizeSlider, m_sizeLabel;
|
|
|
|
|
|
|
|
int m_tqalignment;
|
|
|
|
|
|
|
|
private:
|
|
|
|
void init();
|
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual void virtual_hook( int id, void* data );
|
|
|
|
private:
|
|
|
|
class KNumInputPrivate;
|
|
|
|
KNumInputPrivate *d;
|
|
|
|
};
|
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------ */
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @short An input widget for integer numbers, consisting of a spinbox and a slider.
|
|
|
|
*
|
|
|
|
* KIntNumInput combines a TQSpinBox and optionally a QSlider
|
|
|
|
* with a label to make an easy to use control for setting some integer
|
|
|
|
* parameter. This is especially nice for configuration dialogs,
|
|
|
|
* which can have many such combinated controls.
|
|
|
|
*
|
|
|
|
* The slider is created only when the user specifies a range
|
|
|
|
* for the control using the setRange function with the slider
|
|
|
|
* parameter set to "true".
|
|
|
|
*
|
|
|
|
* A special feature of KIntNumInput, designed specifically for
|
|
|
|
* the situation when there are several KIntNumInputs in a column,
|
|
|
|
* is that you can specify what portion of the control is taken by the
|
|
|
|
* TQSpinBox (the remaining portion is used by the slider). This makes
|
|
|
|
* it very simple to have all the sliders in a column be the same size.
|
|
|
|
*
|
|
|
|
* It uses KIntValidator validator class. KIntNumInput enforces the
|
|
|
|
* value to be in the given range, and can display it in any base
|
|
|
|
* between 2 and 36.
|
|
|
|
*
|
|
|
|
* \image html kintnuminput.png "KDE Int Number Input Spinbox"
|
|
|
|
*
|
|
|
|
* @version $Id$
|
|
|
|
*/
|
|
|
|
|
|
|
|
class KDEUI_EXPORT KIntNumInput : public KNumInput
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
Q_PROPERTY( int value READ value WRITE setValue )
|
|
|
|
Q_PROPERTY( int minValue READ minValue WRITE setMinValue )
|
|
|
|
Q_PROPERTY( int maxValue READ maxValue WRITE setMaxValue )
|
|
|
|
Q_PROPERTY( int referencePoint READ referencePoint WRITE setReferencePoint )
|
|
|
|
Q_PROPERTY( double relativeValue READ relativeValue WRITE setRelativeValue )
|
|
|
|
Q_PROPERTY( TQString suffix READ suffix WRITE setSuffix )
|
|
|
|
Q_PROPERTY( TQString prefix READ prefix WRITE setPrefix )
|
|
|
|
Q_PROPERTY( TQString specialValueText READ specialValueText WRITE setSpecialValueText )
|
|
|
|
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
* Constructs an input control for integer values
|
|
|
|
* with base 10 and initial value 0.
|
|
|
|
*/
|
|
|
|
KIntNumInput(TQWidget *parent=0, const char *name=0);
|
|
|
|
/**
|
|
|
|
* Constructor
|
|
|
|
* It constructs a TQSpinBox that allows the input of integer numbers
|
|
|
|
* in the range of -INT_MAX to +INT_MAX. To set a descriptive label,
|
|
|
|
* use setLabel(). To enforce the value being in a range and optionally to
|
|
|
|
* attach a slider to it, use setRange().
|
|
|
|
*
|
|
|
|
* @param value initial value for the control
|
|
|
|
* @param base numeric base used for display
|
|
|
|
* @param parent parent QWidget
|
|
|
|
* @param name internal name for this widget
|
|
|
|
*/
|
|
|
|
KIntNumInput(int value, TQWidget* parent=0, int base = 10, const char *name=0);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Constructor
|
|
|
|
*
|
|
|
|
* the difference to the one above is the "below" parameter. It tells
|
|
|
|
* this instance that it is visually put below some other KNumInput widget.
|
|
|
|
* Note that these two KNumInput's need not to have the same parent widget
|
|
|
|
* or be in the same layout group.
|
|
|
|
* The effect is that it'll adjust it's layout in correspondence
|
|
|
|
* with the layout of the other KNumInput's (you can build an arbitrary long
|
|
|
|
* chain).
|
|
|
|
*
|
|
|
|
* @param below append KIntNumInput to the KNumInput chain
|
|
|
|
* @param value initial value for the control
|
|
|
|
* @param base numeric base used for display
|
|
|
|
* @param parent parent QWidget
|
|
|
|
* @param name internal name for this widget
|
|
|
|
*/
|
|
|
|
KIntNumInput(KNumInput* below, int value, TQWidget* parent=0, int base = 10, const char *name=0);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Destructor
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
virtual ~KIntNumInput();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the current value.
|
|
|
|
*/
|
|
|
|
int value() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the curent value in units of the referencePoint.
|
|
|
|
* @since 3.1
|
|
|
|
*/
|
|
|
|
double relativeValue() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the current reference point
|
|
|
|
* @since 3.1
|
|
|
|
*/
|
|
|
|
int referencePoint() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the suffix displayed behind the value.
|
|
|
|
* @see setSuffix()
|
|
|
|
*/
|
|
|
|
TQString suffix() const;
|
|
|
|
/**
|
|
|
|
* @return the prefix displayed in front of the value.
|
|
|
|
* @see setPrefix()
|
|
|
|
*/
|
|
|
|
TQString prefix() const;
|
|
|
|
/**
|
|
|
|
* @return the string displayed for a special value.
|
|
|
|
* @see setSpecialValueText()
|
|
|
|
*/
|
|
|
|
TQString specialValueText() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param min minimum value
|
|
|
|
* @param max maximum value
|
|
|
|
* @param step step size for the QSlider
|
|
|
|
* @param slider whether the slider is created or not
|
|
|
|
*/
|
|
|
|
void setRange(int min, int max, int step=1, bool slider=true);
|
|
|
|
/**
|
|
|
|
* Sets the minimum value.
|
|
|
|
*/
|
|
|
|
void setMinValue(int min);
|
|
|
|
/**
|
|
|
|
* @return the minimum value.
|
|
|
|
*/
|
|
|
|
int minValue() const;
|
|
|
|
/**
|
|
|
|
* Sets the maximum value.
|
|
|
|
*/
|
|
|
|
void setMaxValue(int max);
|
|
|
|
/**
|
|
|
|
* @return the maximum value.
|
|
|
|
*/
|
|
|
|
int maxValue() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the special value text. If set, the SpinBox will display
|
|
|
|
* this text instead of the numeric value whenever the current
|
|
|
|
* value is equal to minVal(). Typically this is used for indicating
|
|
|
|
* that the choice has a special (default) meaning.
|
|
|
|
*/
|
|
|
|
void setSpecialValueText(const TQString& text);
|
|
|
|
|
|
|
|
virtual void setLabel(const TQString & label, int a = AlignLeft | AlignTop);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method returns the minimum size necessary to display the
|
|
|
|
* control. The minimum size is enough to show all the labels
|
|
|
|
* in the current font (font change may tqinvalidate the return value).
|
|
|
|
*
|
|
|
|
* @return the minimum size necessary to show the control
|
|
|
|
*/
|
|
|
|
virtual TQSize tqminimumSizeHint() const;
|
|
|
|
|
|
|
|
public slots:
|
|
|
|
/**
|
|
|
|
* Sets the value of the control.
|
|
|
|
*/
|
|
|
|
void setValue(int);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the value in units of the referencePoint
|
|
|
|
* @since 3.1
|
|
|
|
*/
|
|
|
|
void setRelativeValue(double);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the reference point for relativeValue.
|
|
|
|
* @since 3.1
|
|
|
|
*/
|
|
|
|
void setReferencePoint(int);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the suffix to @p suffix.
|
|
|
|
* Use TQString::null to disable this feature.
|
|
|
|
* Formatting has to be provided (e.g. a space separator between the
|
|
|
|
* prepended @p value and the suffix's text has to be provided
|
|
|
|
* as the first character in the suffix).
|
|
|
|
*
|
|
|
|
* @see TQSpinBox::setSuffix(), #setPrefix()
|
|
|
|
*/
|
|
|
|
void setSuffix(const TQString &suffix);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the prefix to @p prefix.
|
|
|
|
* Use TQString::null to disable this feature.
|
|
|
|
* Formatting has to be provided (see above).
|
|
|
|
*
|
|
|
|
* @see TQSpinBox::setPrefix(), #setSuffix()
|
|
|
|
*/
|
|
|
|
void setPrefix(const TQString &prefix);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* sets focus to the edit widget and marks all text in if mark == true
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
void setEditFocus( bool mark = true );
|
|
|
|
|
|
|
|
signals:
|
|
|
|
/**
|
|
|
|
* Emitted every time the value changes (by calling setValue() or
|
|
|
|
* by user interaction).
|
|
|
|
*/
|
|
|
|
void valueChanged(int);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Emitted whenever valueChanged is. Contains the change
|
|
|
|
* relative to the referencePoint.
|
|
|
|
* @since 3.1
|
|
|
|
*/
|
|
|
|
void relativeValueChanged(double);
|
|
|
|
|
|
|
|
private slots:
|
|
|
|
void spinValueChanged(int);
|
|
|
|
void slotEmitRelativeValueChanged(int);
|
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual void doLayout();
|
|
|
|
void resizeEvent ( TQResizeEvent * );
|
|
|
|
|
|
|
|
KIntSpinBox* m_spin;
|
|
|
|
TQSize m_sizeSpin;
|
|
|
|
|
|
|
|
private:
|
|
|
|
void init(int value, int _base);
|
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual void virtual_hook( int id, void* data );
|
|
|
|
private:
|
|
|
|
class KIntNumInputPrivate;
|
|
|
|
KIntNumInputPrivate *d;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------ */
|
|
|
|
|
|
|
|
class KDoubleLine;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @short An input control for real numbers, consisting of a spinbox and a slider.
|
|
|
|
*
|
|
|
|
* KDoubleNumInput combines a TQSpinBox and optionally a QSlider
|
|
|
|
* with a label to make an easy to use control for setting some float
|
|
|
|
* parameter. This is especially nice for configuration dialogs,
|
|
|
|
* which can have many such combinated controls.
|
|
|
|
*
|
|
|
|
* The slider is created only when the user specifies a range
|
|
|
|
* for the control using the setRange function with the slider
|
|
|
|
* parameter set to "true".
|
|
|
|
*
|
|
|
|
* A special feature of KDoubleNumInput, designed specifically for
|
|
|
|
* the situation when there are several instances in a column,
|
|
|
|
* is that you can specify what portion of the control is taken by the
|
|
|
|
* TQSpinBox (the remaining portion is used by the slider). This makes
|
|
|
|
* it very simple to have all the sliders in a column be the same size.
|
|
|
|
*
|
|
|
|
* It uses the KDoubleValidator validator class. KDoubleNumInput
|
|
|
|
* enforces the value to be in the given range, but see the class
|
|
|
|
* documentation of KDoubleSpinBox for the tricky
|
|
|
|
* interrelationship of precision and values. All of what is said
|
|
|
|
* there applies here, too.
|
|
|
|
*
|
|
|
|
* @see KIntNumInput, KDoubleSpinBox
|
|
|
|
*/
|
|
|
|
|
|
|
|
class KDEUI_EXPORT KDoubleNumInput : public KNumInput
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
Q_PROPERTY( double value READ value WRITE setValue )
|
|
|
|
Q_PROPERTY( double minValue READ minValue WRITE setMinValue )
|
|
|
|
Q_PROPERTY( double maxValue READ maxValue WRITE setMaxValue )
|
|
|
|
Q_PROPERTY( TQString suffix READ suffix WRITE setSuffix )
|
|
|
|
Q_PROPERTY( TQString prefix READ prefix WRITE setPrefix )
|
|
|
|
Q_PROPERTY( TQString specialValueText READ specialValueText WRITE setSpecialValueText )
|
|
|
|
Q_PROPERTY( int precision READ precision WRITE setPrecision )
|
|
|
|
Q_PROPERTY( double referencePoint READ referencePoint WRITE setReferencePoint )
|
|
|
|
Q_PROPERTY( double relativeValue READ relativeValue WRITE setRelativeValue )
|
|
|
|
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
* Constructs an input control for double values
|
|
|
|
* with initial value 0.00.
|
|
|
|
*/
|
|
|
|
KDoubleNumInput(TQWidget *parent=0, const char *name=0);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @deprecated (value is rounded to a multiple of 1/100)
|
|
|
|
* Constructor
|
|
|
|
*
|
|
|
|
* @param value initial value for the control
|
|
|
|
* @param parent parent QWidget
|
|
|
|
* @param name internal name for this widget
|
|
|
|
*/
|
|
|
|
KDoubleNumInput(double value, TQWidget *parent=0, const char *name=0) KDE_DEPRECATED;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Constructor
|
|
|
|
*
|
|
|
|
* @param lower lower boundary value
|
|
|
|
* @param upper upper boundary value
|
|
|
|
* @param value initial value for the control
|
|
|
|
* @param step step size to use for up/down arrow clicks
|
|
|
|
* @param precision number of digits after the decimal point
|
|
|
|
* @param parent parent QWidget
|
|
|
|
* @param name internal name for this widget
|
|
|
|
* @since 3.1
|
|
|
|
*/
|
|
|
|
KDoubleNumInput(double lower, double upper, double value, double step=0.01,
|
|
|
|
int precision=2, TQWidget *parent=0, const char *name=0);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* destructor
|
|
|
|
*/
|
|
|
|
virtual ~KDoubleNumInput();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @deprecated (rounds @p value to a multiple of 1/100)
|
|
|
|
* Constructor
|
|
|
|
*
|
|
|
|
* puts it visually below other KNumInput
|
|
|
|
*
|
|
|
|
* @param below
|
|
|
|
* @param value initial value for the control
|
|
|
|
* @param parent parent QWidget
|
|
|
|
* @param name internal name for this widget
|
|
|
|
**/
|
|
|
|
KDoubleNumInput(KNumInput* below, double value, TQWidget* parent=0, const char* name=0) KDE_DEPRECATED;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Constructor
|
|
|
|
*
|
|
|
|
* the difference here is the "below" parameter. It tells this
|
|
|
|
* instance that it is visually put below some other KNumInput
|
|
|
|
* widget. Note that these two KNumInput's need not to have the
|
|
|
|
* same parent widget or be in the same layout group. The effect
|
|
|
|
* is that it'll adjust it's layout in correspondence with the
|
|
|
|
* layout of the other KNumInput's (you can build an arbitrary long
|
|
|
|
* chain).
|
|
|
|
*
|
|
|
|
* @param below append KDoubleNumInput to the KDoubleNumInput chain
|
|
|
|
* @param lower lower boundary value
|
|
|
|
* @param upper upper boundary value
|
|
|
|
* @param value initial value for the control
|
|
|
|
* @param step step size to use for up/down arrow clicks
|
|
|
|
* @param precision number of digits after the decimal point
|
|
|
|
* @param parent parent QWidget
|
|
|
|
* @param name internal name for this widget
|
|
|
|
* @since 3.1
|
|
|
|
*/
|
|
|
|
KDoubleNumInput(KNumInput* below,
|
|
|
|
double lower, double upper, double value, double step=0.02,
|
|
|
|
int precision=2, TQWidget *parent=0, const char *name=0);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the current value.
|
|
|
|
*/
|
|
|
|
double value() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the suffix.
|
|
|
|
* @see setSuffix()
|
|
|
|
*/
|
|
|
|
TQString suffix() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the prefix.
|
|
|
|
* @see setPrefix()
|
|
|
|
*/
|
|
|
|
TQString prefix() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the precision.
|
|
|
|
* @see setPrecision()
|
|
|
|
*/
|
|
|
|
int precision() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the string displayed for a special value.
|
|
|
|
* @see setSpecialValueText()
|
|
|
|
*/
|
|
|
|
TQString specialValueText() const { return m_specialvalue; }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param min minimum value
|
|
|
|
* @param max maximum value
|
|
|
|
* @param step step size for the QSlider
|
|
|
|
* @param slider whether the slider is created or not
|
|
|
|
*/
|
|
|
|
void setRange(double min, double max, double step=1, bool slider=true);
|
|
|
|
/**
|
|
|
|
* Sets the minimum value.
|
|
|
|
*/
|
|
|
|
void setMinValue(double min);
|
|
|
|
/**
|
|
|
|
* @return the minimum value.
|
|
|
|
*/
|
|
|
|
double minValue() const;
|
|
|
|
/**
|
|
|
|
* Sets the maximum value.
|
|
|
|
*/
|
|
|
|
void setMaxValue(double max);
|
|
|
|
/**
|
|
|
|
* @return the maximum value.
|
|
|
|
*/
|
|
|
|
double maxValue() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Specifies the number of digits to use.
|
|
|
|
*/
|
|
|
|
void setPrecision(int precision);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the reference point for relativeValue calculation
|
|
|
|
* @since 3.1
|
|
|
|
*/
|
|
|
|
double referencePoint() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the current value in units of referencePoint.
|
|
|
|
* @since 3.1
|
|
|
|
*/
|
|
|
|
double relativeValue() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the special value text. If set, the spin box will display
|
|
|
|
* this text instead of the numeric value whenever the current
|
|
|
|
* value is equal to minVal(). Typically this is used for indicating
|
|
|
|
* that the choice has a special (default) meaning.
|
|
|
|
*/
|
|
|
|
void setSpecialValueText(const TQString& text);
|
|
|
|
|
|
|
|
virtual void setLabel(const TQString & label, int a = AlignLeft | AlignTop);
|
|
|
|
virtual TQSize tqminimumSizeHint() const;
|
|
|
|
virtual bool eventFilter(TQObject*, TQEvent*);
|
|
|
|
|
|
|
|
public slots:
|
|
|
|
/**
|
|
|
|
* Sets the value of the control.
|
|
|
|
*/
|
|
|
|
void setValue(double);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the value in units of referencePoint.
|
|
|
|
* @since 3.1
|
|
|
|
*/
|
|
|
|
void setRelativeValue(double);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the reference Point to @p ref. It @p ref == 0, emitting of
|
|
|
|
* relativeValueChanged is blocked and relativeValue
|
|
|
|
* just returns 0.
|
|
|
|
* @since 3.1
|
|
|
|
*/
|
|
|
|
void setReferencePoint(double ref);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the suffix to be displayed to @p suffix. Use TQString::null to disable
|
|
|
|
* this feature. Note that the suffix is attached to the value without any
|
|
|
|
* spacing. So if you prefer to display a space separator, set suffix
|
|
|
|
* to something like " cm".
|
|
|
|
* @see setSuffix()
|
|
|
|
*/
|
|
|
|
void setSuffix(const TQString &suffix);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the prefix to be displayed to @p prefix. Use TQString::null to disable
|
|
|
|
* this feature. Note that the prefix is attached to the value without any
|
|
|
|
* spacing.
|
|
|
|
* @see setPrefix()
|
|
|
|
*/
|
|
|
|
void setPrefix(const TQString &prefix);
|
|
|
|
|
|
|
|
signals:
|
|
|
|
/**
|
|
|
|
* Emitted every time the value changes (by calling setValue() or
|
|
|
|
* by user interaction).
|
|
|
|
*/
|
|
|
|
void valueChanged(double);
|
|
|
|
/**
|
|
|
|
* This is an overloaded member function, provided for
|
|
|
|
* convenience. It essentially behaves like the above function.
|
|
|
|
*
|
|
|
|
* Contains the value in units of referencePoint.
|
|
|
|
* @since 3.1
|
|
|
|
*/
|
|
|
|
void relativeValueChanged(double);
|
|
|
|
|
|
|
|
private slots:
|
|
|
|
void sliderMoved(int);
|
|
|
|
void slotEmitRelativeValueChanged(double);
|
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual void doLayout();
|
|
|
|
void resizeEvent ( TQResizeEvent * );
|
|
|
|
|
|
|
|
virtual void resetEditBox();
|
|
|
|
|
|
|
|
// ### no longer used, remove when BIC allowed
|
|
|
|
KDoubleLine* edit;
|
|
|
|
|
|
|
|
bool m_range;
|
|
|
|
double m_lower, m_upper, m_step;
|
|
|
|
// ### end no longer used
|
|
|
|
|
|
|
|
TQSize m_sizeEdit;
|
|
|
|
|
|
|
|
friend class KDoubleLine;
|
|
|
|
private:
|
|
|
|
void init(double value, double lower, double upper,
|
|
|
|
double step, int precision);
|
|
|
|
double mapSliderToSpin(int) const;
|
|
|
|
void updateLegacyMembers();
|
|
|
|
// ### no longer used, remove when BIC allowed:
|
|
|
|
TQString m_specialvalue, m_prefix, m_suffix;
|
|
|
|
double m_value;
|
|
|
|
short m_precision;
|
|
|
|
// ### end remove when BIC allowed
|
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual void virtual_hook( int id, void* data );
|
|
|
|
private:
|
|
|
|
class KDoubleNumInputPrivate;
|
|
|
|
KDoubleNumInputPrivate *d;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------ */
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @short A TQSpinBox with support for arbitrary base numbers.
|
|
|
|
*
|
|
|
|
* A TQSpinBox with support for arbitrary base numbers
|
|
|
|
* (e.g. hexadecimal).
|
|
|
|
*
|
|
|
|
* The class provides an easy interface to use other
|
|
|
|
* numeric systems than the decimal.
|
|
|
|
*/
|
|
|
|
class KDEUI_EXPORT KIntSpinBox : public TQSpinBox
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
Q_PROPERTY( int base READ base WRITE setBase )
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Constructor.
|
|
|
|
*
|
|
|
|
* Constructs a widget with an integer inputline with a little scrollbar
|
|
|
|
* and a slider, with minimal value 0, maximal value 99, step 1, base 10
|
|
|
|
* and initial value 0.
|
|
|
|
*/
|
|
|
|
KIntSpinBox( TQWidget *parent=0, const char *name=0);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Constructor.
|
|
|
|
*
|
|
|
|
* Constructs a widget with an integer inputline with a little scrollbar
|
|
|
|
* and a slider.
|
|
|
|
*
|
|
|
|
* @param lower The lowest valid value.
|
|
|
|
* @param upper The greatest valid value.
|
|
|
|
* @param step The step size of the scrollbar.
|
|
|
|
* @param value The actual value.
|
|
|
|
* @param base The base of the used number system.
|
|
|
|
* @param parent The parent of the widget.
|
|
|
|
* @param name The Name of the widget.
|
|
|
|
*/
|
|
|
|
KIntSpinBox(int lower, int upper, int step, int value, int base = 10,
|
|
|
|
TQWidget* parent = 0, const char* name = 0);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Destructor.
|
|
|
|
*/
|
|
|
|
virtual ~KIntSpinBox();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the base in which the numbers in the spin box are represented.
|
|
|
|
*/
|
|
|
|
void setBase(int base);
|
|
|
|
/**
|
|
|
|
* @return the base in which numbers in the spin box are represented.
|
|
|
|
*/
|
|
|
|
int base() const;
|
|
|
|
/**
|
|
|
|
* sets focus and optionally marks all text
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
void setEditFocus(bool mark);
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Overloaded the method in QSpinBox
|
|
|
|
* to make use of the base given in the constructor.
|
|
|
|
*/
|
|
|
|
virtual TQString mapValueToText(int);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Overloaded the method in QSpinBox
|
|
|
|
* to make use of the base given in the constructor.
|
|
|
|
*/
|
|
|
|
virtual int mapTextToValue(bool*);
|
|
|
|
|
|
|
|
private:
|
|
|
|
int val_base;
|
|
|
|
protected:
|
|
|
|
virtual void virtual_hook( int id, void* data );
|
|
|
|
private:
|
|
|
|
class KIntSpinBoxPrivate;
|
|
|
|
KIntSpinBoxPrivate *d;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/* --------------------------------------------------------------------------- */
|
|
|
|
|
|
|
|
/**
|
|
|
|
@short A spin box for fractional numbers.
|
|
|
|
|
|
|
|
This class provides a spin box for fractional numbers.
|
|
|
|
|
|
|
|
\image html kdoublespinbox.png "KDE Fractional Number Spinbox"
|
|
|
|
|
|
|
|
See below for code examples on how to use this class.
|
|
|
|
|
|
|
|
\b Parameters \n
|
|
|
|
|
|
|
|
To make successful use of KDoubleSpinBox, you need to understand the
|
|
|
|
relationship between precision and available range.
|
|
|
|
|
|
|
|
@li precision: The number of digits after the decimal point.
|
|
|
|
@li maxValue/minValue: upper and lower bounds of the valid range
|
|
|
|
@li lineStep: the size of the step that is made when the user hits
|
|
|
|
the up or down buttons
|
|
|
|
|
|
|
|
Since we work with fixed-point numbers internally, the maximum
|
|
|
|
precision is a function of the valid range and vice versa. More
|
|
|
|
precisely, the following relationships hold:
|
|
|
|
\code
|
|
|
|
max( abs(minValue()), abs(maxValue() ) <= INT_MAX/10^precision
|
|
|
|
maxPrecision = floor( log10( INT_MAX/max(abs(minValue()),abs(maxValue())) ) )
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
Since the value, bounds and lineStep are rounded to the current
|
|
|
|
precision, you may find that the order of setting these
|
|
|
|
parameters matters. As an example, the following are @em not equivalent (try
|
|
|
|
it!):
|
|
|
|
|
|
|
|
\code
|
|
|
|
// sets precision,
|
|
|
|
// then min/max value (rounded to precision and clipped to obtainable range if needed)
|
|
|
|
// then value and lineStep
|
|
|
|
KDoubleSpinBox * spin = new KDoubleSpinBox( 0, 9.999, 0.001, 4.321, 3, this );
|
|
|
|
|
|
|
|
// sets minValue to 0; maxValue to 10.00(!); value to 4.32(!) and only then
|
|
|
|
// increases the precision - too late, since e.g. value has already been rounded...
|
|
|
|
KDoubleSpinBox * spin = new KDoubleSpinBox( this );
|
|
|
|
spin->setMinValue( 0 );
|
|
|
|
spin->setMaxValue( 9.999 );
|
|
|
|
spin->setValue( 4.321 );
|
|
|
|
spin->setPrecision( 3 );
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
@author Marc Mutz <mutz@kde.org>
|
|
|
|
@version $Id$
|
|
|
|
@since 3.1
|
|
|
|
**/
|
|
|
|
|
|
|
|
class KDEUI_EXPORT KDoubleSpinBox : public TQSpinBox {
|
|
|
|
Q_OBJECT
|
|
|
|
Q_PROPERTY( bool acceptLocalizedNumbers READ acceptLocalizedNumbers WRITE setAcceptLocalizedNumbers )
|
|
|
|
Q_OVERRIDE( double maxValue READ maxValue WRITE setMaxValue )
|
|
|
|
Q_OVERRIDE( double minValue READ minValue WRITE setMinValue )
|
|
|
|
Q_OVERRIDE( double lineStep READ lineStep WRITE setLineStep )
|
|
|
|
Q_OVERRIDE( double value READ value WRITE setValue )
|
|
|
|
Q_PROPERTY( int precision READ precision WRITE setPrecision )
|
|
|
|
|
|
|
|
public:
|
|
|
|
/** Constructs a KDoubleSpinBox with parent @p parent and
|
|
|
|
default values for range and value (whatever QRangeControl
|
|
|
|
uses) and precision (2). */
|
|
|
|
KDoubleSpinBox( TQWidget * parent=0, const char * name=0 );
|
|
|
|
|
|
|
|
/** Constructs a KDoubleSpinBox with parent @p parent, range
|
|
|
|
[ @p lower, @p upper ], lineStep @p step, precision @p
|
|
|
|
precision and initial value @p value. */
|
|
|
|
KDoubleSpinBox( double lower, double upper, double step, double value,
|
|
|
|
int precision=2, TQWidget * parent=0, const char * name=0 );
|
|
|
|
|
|
|
|
virtual ~KDoubleSpinBox();
|
|
|
|
|
|
|
|
/** @return whether the spinbox uses localized numbers */
|
|
|
|
bool acceptLocalizedNumbers() const;
|
|
|
|
|
|
|
|
/** Sets whether to use and accept localized numbers as returned by
|
|
|
|
KLocale::formatNumber() */
|
|
|
|
virtual void setAcceptLocalizedNumbers( bool accept );
|
|
|
|
|
|
|
|
/** Sets a new range for the spin box values. Note that @p lower, @p
|
|
|
|
upper and @p step are rounded to @p precision decimal points
|
|
|
|
first. */
|
|
|
|
void setRange( double lower, double upper, double step=0.01, int precision=2 );
|
|
|
|
|
|
|
|
/** @return the current number of digits displayed to the right of the
|
|
|
|
decimal point. */
|
|
|
|
int precision() const;
|
|
|
|
|
|
|
|
/** Equivalent to setPrecision( @p precision, @p false ); Needed
|
|
|
|
since Qt's tqmoc doesn't ignore trailing parameters with default
|
|
|
|
args when searching for a property setter method. */
|
|
|
|
void setPrecision( int precision );
|
|
|
|
|
|
|
|
/** Sets the precision (number of digits to the right of the decimal point). Note
|
|
|
|
that there is a tradeoff between the precision used and the available range of
|
|
|
|
values. See the class documentation above for more information on this.
|
|
|
|
|
|
|
|
@param precision the new precision to use
|
|
|
|
|
|
|
|
@param force if true, disables checking of bounds violations that can
|
|
|
|
arise if you increase the precision so much that the
|
|
|
|
minimum and maximum values can't be represented
|
|
|
|
anymore. Disabling is useful if you were going to disable range
|
|
|
|
control in any case.
|
|
|
|
**/
|
|
|
|
virtual void setPrecision( int precision, bool force );
|
|
|
|
|
|
|
|
/** @return the current value */
|
|
|
|
double value() const;
|
|
|
|
|
|
|
|
/** @return the current lower bound */
|
|
|
|
double minValue() const;
|
|
|
|
|
|
|
|
/** Sets the lower bound of the range to @p value, subject to the
|
|
|
|
contraints that @p value is first rounded to the current
|
|
|
|
precision and then clipped to the maximum range interval that can
|
|
|
|
be handled at that precision.
|
|
|
|
@see maxValue, minValue, setMaxValue, setRange
|
|
|
|
*/
|
|
|
|
void setMinValue( double value );
|
|
|
|
|
|
|
|
/** @return the current upper bound */
|
|
|
|
double maxValue() const;
|
|
|
|
|
|
|
|
/** Sets the upper bound of the range to @p value, subject to the
|
|
|
|
contraints that @p value is first rounded to the current
|
|
|
|
precision and then clipped to the maximum range interval
|
|
|
|
that can be handled at that precision.
|
|
|
|
@see minValue, maxValue, setMinValue, setRange
|
|
|
|
*/
|
|
|
|
void setMaxValue( double value );
|
|
|
|
|
|
|
|
/** @return the current step size */
|
|
|
|
double lineStep() const;
|
|
|
|
|
|
|
|
/** Sets the step size for clicking the up/down buttons to @p step,
|
|
|
|
subject to the constraints that @p step is first rounded to the
|
|
|
|
current precision and then clipped to the meaningful interval
|
|
|
|
[ 1, @p maxValue() - @p minValue() ]. */
|
|
|
|
void setLineStep( double step );
|
|
|
|
|
|
|
|
/** Overridden to ignore any setValidator() calls. */
|
|
|
|
void setValidator( const TQValidator * );
|
|
|
|
|
|
|
|
signals:
|
|
|
|
/** Emitted whenever TQSpinBox::valueChanged( int ) is emitted. */
|
|
|
|
void valueChanged( double value );
|
|
|
|
|
|
|
|
public slots:
|
|
|
|
/** Sets the current value to @p value, subject to the constraints
|
|
|
|
that @p value is first rounded to the current precision and then
|
|
|
|
clipped to the interval [ @p minValue() , @p maxValue() ]. */
|
|
|
|
virtual void setValue( double value );
|
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual TQString mapValueToText(int);
|
|
|
|
virtual int mapTextToValue(bool*);
|
|
|
|
|
|
|
|
protected slots:
|
|
|
|
void slotValueChanged( int value );
|
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual void virtual_hook( int id, void* data );
|
|
|
|
private:
|
|
|
|
typedef TQSpinBox base;
|
|
|
|
void updateValidator();
|
|
|
|
int maxPrecision() const;
|
|
|
|
|
|
|
|
class Private;
|
|
|
|
Private * d;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // K_NUMINPUT_H
|