Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef DOUBLEFIELD_H
Toshihiro Shimizu 890ddd
#define DOUBLEFIELD_H
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tcommon.h"
Toshihiro Shimizu 890ddd
#include "toonzqt/intfield.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#undef DVAPI
Toshihiro Shimizu 890ddd
#undef DVVAR
Toshihiro Shimizu 890ddd
#ifdef TOONZQT_EXPORTS
Toshihiro Shimizu 890ddd
#define DVAPI DV_EXPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_EXPORT_VAR
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#define DVAPI DV_IMPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_IMPORT_VAR
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// forward declaration
Toshihiro Shimizu 890ddd
class QDoubleValidator;
Toshihiro Shimizu 890ddd
class QSlider;
Toshihiro Shimizu 890ddd
class TMeasuredValue;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
namespace DVGui
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
/*! \brief The DoubleValueLineEdit is abstract class.
Toshihiro Shimizu 890ddd
		Inherits \b LineEdit.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
class DVAPI DoubleValueLineEdit : public LineEdit
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	Q_OBJECT
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	DoubleValueLineEdit(QWidget *parent = 0)
Toshihiro Shimizu 890ddd
		: LineEdit(parent)
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	~DoubleValueLineEdit() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual void setValue(double value) = 0;
Toshihiro Shimizu 890ddd
	virtual double getValue() = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual void setRange(double minValue, double maxValue) = 0;
Toshihiro Shimizu 890ddd
	virtual void getRange(double &minValue, double &maxValue) = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual int getDecimals() { return 2; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	/*! If focus is lost and current value is out of range emit signal \b lostFocus. */
Toshihiro Shimizu 890ddd
	void focusOutEvent(QFocusEvent *);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
signals:
Toshihiro Shimizu 890ddd
	/*! To emit when value change. */
Toshihiro Shimizu 890ddd
	void valueChanged();
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
/*! \brief The DoubleValueField class provides to view an object to manage a
Toshihiro Shimizu 890ddd
					 generic double parameter, with two cipher after decimal point.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		Inherits \b QWidget.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		The class is composed of an horizontal layout which contains two object,
Toshihiro Shimizu 890ddd
		\li a vertical layout with a text field \b PrimaryDoubleLineEdit and a roller
Toshihiro Shimizu 890ddd
		\li an horizontal slider QSlider.
Toshihiro Shimizu 890ddd
		This objects are connected, so if you change one the other automatically change.
Toshihiro Shimizu 890ddd
		It's possible to set current value getValue(), minimum and max value, getRange(),
Toshihiro Shimizu 890ddd
		using setValue(), setRange() or setValues(); by default value = 0, minimum
Toshihiro Shimizu 890ddd
		value = -100.0 and maximum value = 100.0.
Toshihiro Shimizu 890ddd
\n	Maximum height object is fixed to \b DVGui::WidgetHeight, while width depend
Toshihiro Shimizu 890ddd
		on parent width.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		To know when double parameter value change class provides a signal, valueChanged();
Toshihiro Shimizu 890ddd
		class emit signal when slider value change or when editing text field is
Toshihiro Shimizu 890ddd
		finished and current value is changed. Editing text field finished may occur
Toshihiro Shimizu 890ddd
		if focus is lost or enter key is pressed. See SLOT: onSliderChanged(int value),
Toshihiro Shimizu 890ddd
		onEditingFinished().
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
class DVAPI DoubleValueField : public QWidget
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	Q_OBJECT
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	RollerField *m_roller;
Toshihiro Shimizu 890ddd
	DoubleValueLineEdit *m_lineEdit;
Toshihiro Shimizu 890ddd
	QSlider *m_slider;
Toshihiro Shimizu 890ddd
	QWidget *m_spaceWidget;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	DoubleValueField(QWidget *parent, DoubleValueLineEdit *lineEdit);
Toshihiro Shimizu 890ddd
	~DoubleValueField() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void getRange(double &minValue, double &maxValue);
Toshihiro Shimizu 890ddd
	void setRange(double minValue = 0, double maxValue = 0);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setValue(double value);
Toshihiro Shimizu 890ddd
	double getValue();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	/*! This is provided for convenience.
Toshihiro Shimizu 890ddd
			Set to \b value current value DoubleField; set to \b minValue and \b maxValue
Toshihiro Shimizu 890ddd
			slider and text field range.
Toshihiro Shimizu 890ddd
			\sa getValue() */
Toshihiro Shimizu 890ddd
	void setValues(double value, double minValue = 0, double maxValue = 0);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	/*! If \b enable is false set slider disable and hide it. */
Toshihiro Shimizu 890ddd
	void enableSlider(bool enable);
Toshihiro Shimizu 890ddd
	bool isSliderEnabled();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	/*! If \b enable is false set roller disable and hide it. */
Toshihiro Shimizu 890ddd
	void enableRoller(bool enable);
Toshihiro Shimizu 890ddd
	bool isRollerEnabled();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected slots:
Toshihiro Shimizu 890ddd
	/*! Set to value the text field and roller. If text field value is different from \b value
Toshihiro Shimizu 890ddd
			emit signal valueChanged(int value). */
Toshihiro Shimizu 890ddd
	void onSliderChanged(int value);
Toshihiro Shimizu 890ddd
	void onSliderReleased() { emit valueChanged(false); }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	/*! Set slider and roller value to current value in text field.
Toshihiro Shimizu 890ddd
			This protected slot is called when text editing is finished.
Toshihiro Shimizu 890ddd
			If slider value is different from text field value emit signal valueChanged(). */
Toshihiro Shimizu 890ddd
	void onLineEditValueChanged();
Toshihiro Shimizu 890ddd
	/*! Set text field and slider to roller current value.
Toshihiro Shimizu 890ddd
	\n	If slider and text field value are different from roller value
Toshihiro Shimizu 890ddd
			emit signal valueChanged(). */
Toshihiro Shimizu 890ddd
	void onRollerValueChanged(bool isDragging);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
signals:
Toshihiro Shimizu 890ddd
	/*!	This signal is emitted when DoubleFiel, slider, roller or text field, value change;
Toshihiro Shimizu 890ddd
			if slider position change or text field editing is finished.
Toshihiro Shimizu 890ddd
			\sa onEditingFinished() and onSliderChanged(int value). */
Toshihiro Shimizu 890ddd
	void valueChanged(bool);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	/*! This signal is emitted only when users edited the value by hand
Toshihiro Shimizu 890ddd
  */
Toshihiro Shimizu 890ddd
	void valueEditedByHand();
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
/*! \brief The DoubleLineEdit class provides to view an object to manage a double field.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		Inherits \b LineEdit, set a double validator \b QDoubleValidator.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		You can pass to constructor current value, getValue(), minimum and max value
Toshihiro Shimizu 890ddd
		field, getRange(), and number of decimals, getDecimals() or you can set this
Toshihiro Shimizu 890ddd
		value using setValue(), setRange() and setDecimals().
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
class DVAPI DoubleLineEdit : public DoubleValueLineEdit
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	Q_OBJECT
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	QDoubleValidator *m_validator;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	DoubleLineEdit(QWidget *parent = 0, double value = 1);
Toshihiro Shimizu 890ddd
	~DoubleLineEdit() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	/*! Set text field value to double value \b value. */
Toshihiro Shimizu 890ddd
	void setValue(double value);
Toshihiro Shimizu 890ddd
	/*! Return a double with field value. */
Toshihiro Shimizu 890ddd
	double getValue();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	/*! Set the range of field from \b minValue to \b maxValue;
Toshihiro Shimizu 890ddd
			set validator value. */
Toshihiro Shimizu 890ddd
	void setRange(double minValue, double maxValue);
Toshihiro Shimizu 890ddd
	/*! Set \b minValue an \b maxValue to current range; to current
Toshihiro Shimizu 890ddd
			validator minimum and maximum value. */
Toshihiro Shimizu 890ddd
	void getRange(double &minValue, double &maxValue);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	/*! Set lenght of field value decimal part to \b decimals. */
Toshihiro Shimizu 890ddd
	void setDecimals(int decimals);
Toshihiro Shimizu 890ddd
	/*! Return lenght of field value decimal part. */
Toshihiro Shimizu 890ddd
	int getDecimals();
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
/*! \brief The DoubleField class provides a DoubleValueField with a DoubleLineEdit.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		Inherits \b DoubleValueField.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI DoubleField : public DoubleValueField
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	DoubleField(QWidget *parent = 0, bool isRollerHide = true, int decimals = 2);
Toshihiro Shimizu 890ddd
	~DoubleField() {}
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
/*! \brief The MeasuredDoubleLineEdit class provides to view an object to manage
Toshihiro Shimizu 890ddd
            a double lineEdit with its misure.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
class DVAPI MeasuredDoubleLineEdit : public DoubleValueLineEdit
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	Q_OBJECT
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TMeasuredValue *m_value;
Toshihiro Shimizu 890ddd
	double m_minValue;
Toshihiro Shimizu 890ddd
	double m_maxValue;
Toshihiro Shimizu 890ddd
	bool m_modified;
Toshihiro Shimizu 890ddd
	double m_errorHighlighting;
Toshihiro Shimizu 890ddd
	int m_errorHighlightingTimerId;
Toshihiro Shimizu 890ddd
	int m_decimals;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	MeasuredDoubleLineEdit(QWidget *parent = 0);
Toshihiro Shimizu 890ddd
	~MeasuredDoubleLineEdit();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setValue(double value);
Toshihiro Shimizu 890ddd
	double getValue();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setRange(double minValue, double maxValue);
Toshihiro Shimizu 890ddd
	void getRange(double &minValue, double &maxValue);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 3bfa54
	void setMeasure(std::string measureName);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setDecimals(int decimals);
Toshihiro Shimizu 890ddd
	int getDecimals();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	// called after setText()
Toshihiro Shimizu 890ddd
	void postSetText() { onEditingFinished(); }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	void valueToText();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	void timerEvent(QTimerEvent *e);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected slots:
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void onEditingFinished();
Toshihiro Shimizu 890ddd
	void onTextChanged(const QString &);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
/*! \brief The MeasuredDoubleField class provides a DoubleValueField with a ValueLineEdit.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		Inherits \b PrimaryDoubleField.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI MeasuredDoubleField : public DoubleValueField
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	Q_OBJECT
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	MeasuredDoubleField(QWidget *parent = 0, bool isRollerHide = true);
Toshihiro Shimizu 890ddd
	~MeasuredDoubleField() {}
Toshihiro Shimizu 890ddd
Shinya Kitaoka 3bfa54
	void setMeasure(std::string measureName);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setDecimals(int decimals);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
} //namespace DVGui
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif // DOUBLEFIELD_H