You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ktechlab/src/gui/doublespinbox.h

133 lines
3.8 KiB

/***************************************************************************
* Copyright (C) 2003-2004 by David Saxton *
* david@bluehaze.org *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
***************************************************************************/
#ifndef DOUBLESPINBOX_H
#define DOUBLESPINBOX_H
#include <tqspinbox.h>
/**
Where appropriate, function names with value in them should
be prefixed with "real" - e.g. realValue() - to get the value stored in the
spin box plus the SI magnitude symbol it is showing
@author David Saxton
*/
class DoubleSpinBox : public TQSpinBox
{
TQ_OBJECT
public:
DoubleSpinBox( double lower, double upper, double minAbs, double value, const TQString & unit, TQWidget * parent = 0 );
virtual ~DoubleSpinBox();
/**
* The minimum value is the lowest number that the user can enter.
*/
double minValue() const { return m_minValue; }
/**
* @see minValue
*/
void setMinValue( double minValue ) { m_minValue = minValue; }
/**
* The minimum value is the lowest number that the user can enter.
*/
void setMinValue( int minValue ) { m_minValue = minValue; }
/**
* The maximum value is the highest number that the user can enter.
*/
double maxValue() const { return m_maxValue; }
/**
* @see maxValue
*/
void setMaxValue( double maxValue ) { m_maxValue = maxValue; }
/**
* @see maxValue
*/
void setMaxValue( int maxValue ) { m_maxValue = maxValue; }
/**
* The minimum absolute value is the smallest value that the user can
* enter before the value is considered 0.
*/
void setMinAbsValue( double minAbsValue ) { m_minAbsValue = minAbsValue; }
/**
* The actual value that the user has entered - e.g. if the spinbox
* displays "100 kF", then the value returned will be 1e5.
*/
double value();
/**
* Set the value to be displayed - e.g. if value is 1e5, then the
* spinbox might display "100 kF".
*/
void setValue( double value );
/**
* Sets the unit used, e.g. "F"
*/
void setUnit( const TQString & unit );
public slots:
virtual void stepUp();
virtual void stepDown();
signals:
/**
* This value is emitted whenever the value of the spinbox changes.
*/
void valueChanged( double value );
protected slots:
/**
* Checks if the value has changed - and if so, emits a valueChanged
* signal.
*/
void checkIfChanged();
/**
* Sets the suffix from m_queuedSuffix. Called from TQTimer::singleShot
* to avoid strange recursion problems.
*/
void setQueuedSuffix();
protected:
/**
* Updates the suffix using m_unit and value.
*/
void updateSuffix( double value );
/**
* Returns the multiplication number from what is displayed
* in the box, e.g. "10 kV" will return "1000" due to the letter "k" presence
*/
double getMult();
/**
* Returns the number currently displayed in the spin box.
*/
double getDisplayedNumber( bool * ok );
/**
* Overloaded the method in TQSpinxBox to allow SI prefixes to be entered
*/
virtual int mapTextToValue( bool * ok );
/**
* Overloaded the method in TQSpinxBox to allow SI prefixes to be entered
*/
virtual TQString mapValueToText( int v );
/**
* Returns value rounded off to one significant figure.
*/
double roundToOneSF( double value );
TQString m_queuedSuffix; ///< Used
TQString m_unit;
double m_minValue;
double m_maxValue;
double m_minAbsValue;
double m_lastEmittedValue;
};
#endif