|
Shinya Kitaoka |
810553 |
#pragma once
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef INTFIELD_H
|
|
Toshihiro Shimizu |
890ddd |
#define INTFIELD_H
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "tcommon.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/lineedit.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include <qtoolbar></qtoolbar>
|
|
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 QSlider;
|
|
Toshihiro Shimizu |
890ddd |
class QIntValidator;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
namespace DVGui {
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
/*! \brief The RollerField class provides an object to change an integer value.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
Inherits \b QWidget.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Shinya Kitaoka |
d1f6c4 |
class DVAPI RollerField final : public QWidget {
|
|
Shinya Kitaoka |
120a6e |
Q_OBJECT
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
double m_value;
|
|
Shinya Kitaoka |
120a6e |
double m_minValue;
|
|
Shinya Kitaoka |
120a6e |
double m_maxValue;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
double m_step;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int m_xPos;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
RollerField(QWidget *parent = 0);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
~RollerField() {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setValue(double value);
|
|
Shinya Kitaoka |
120a6e |
double getValue() const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setRange(double minValue, double maxValue);
|
|
Shinya Kitaoka |
120a6e |
void getRange(double &minValue, double &maxValue);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setStep(double _step) { m_step = _step; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected:
|
|
Shinya Kitaoka |
473e70 |
void paintEvent(QPaintEvent *e) override;
|
|
Shinya Kitaoka |
473e70 |
void mousePressEvent(QMouseEvent *) override;
|
|
Shinya Kitaoka |
473e70 |
void mouseMoveEvent(QMouseEvent *) override;
|
|
Shinya Kitaoka |
473e70 |
void mouseReleaseEvent(QMouseEvent *) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void addValue(bool isDragging);
|
|
Shinya Kitaoka |
120a6e |
void removeValue(bool isDragging);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
signals:
|
|
Shinya Kitaoka |
120a6e |
void valueChanged(bool isDragging);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Shinya Kitaoka |
120a6e |
/*! \brief The IntLineEdit class provides an object to manage an integer line
|
|
Shinya Kitaoka |
120a6e |
edit.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
Inherits \b LineEdit, set an integer validator \b QIntValidator.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
You can pass to constructor current value, minimum and max value
|
|
Shinya Kitaoka |
120a6e |
field
|
|
Shinya Kitaoka |
120a6e |
or set this value using setValue(), setRange() .
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Shinya Kitaoka |
120a6e |
class DVAPI IntLineEdit : public LineEdit {
|
|
Shinya Kitaoka |
120a6e |
Q_OBJECT
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QIntValidator *m_validator;
|
|
Shinya Kitaoka |
120a6e |
//! The number of digits showed int the line edit.
|
|
Shinya Kitaoka |
120a6e |
//! If digits is less than 1 the line edit show the natural number without
|
|
Shinya Kitaoka |
120a6e |
//! prepend zeros.
|
|
Shinya Kitaoka |
120a6e |
int m_showedDigits;
|
|
Jeremy Bullock |
771290 |
int m_xMouse;
|
|
Jeremy Bullock |
771290 |
bool m_mouseDragEditing = false;
|
|
shun_iwasawa |
23727d |
bool m_isTyping = false;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
IntLineEdit(QWidget *parent = 0, int value = 1,
|
|
Shinya Kitaoka |
120a6e |
int minValue = (-(std::numeric_limits<int>::max)()),</int>
|
|
Shinya Kitaoka |
120a6e |
int maxValue = ((std::numeric_limits<int>::max)()),</int>
|
|
Shinya Kitaoka |
120a6e |
int showedDigits = 0);
|
|
Shinya Kitaoka |
120a6e |
~IntLineEdit() {}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*! Set text in field to \b value. */
|
|
Shinya Kitaoka |
120a6e |
void setValue(int value);
|
|
Shinya Kitaoka |
120a6e |
/*! Return an integer with text field value. */
|
|
Shinya Kitaoka |
120a6e |
int getValue();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*! Set the range of field from \b minValue to \b maxValue;
|
|
Shinya Kitaoka |
120a6e |
set validator value. */
|
|
Shinya Kitaoka |
120a6e |
void setRange(int minValue, int maxValue);
|
|
Shinya Kitaoka |
120a6e |
/*! Set to \b minValue minimum range value.
|
|
Shinya Kitaoka |
120a6e |
\sa setRange() */
|
|
Shinya Kitaoka |
120a6e |
void setBottomRange(int minValue);
|
|
Shinya Kitaoka |
120a6e |
/*! Set to \b maxValue maximum range value.
|
|
Shinya Kitaoka |
120a6e |
\sa getRange() */
|
|
Shinya Kitaoka |
120a6e |
void setTopRange(int maxValue);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*! Set \b minValue an \b maxValue to current range; to current
|
|
Shinya Kitaoka |
120a6e |
validator minimum and maximum value. */
|
|
Shinya Kitaoka |
120a6e |
void getRange(int &minValue, int &maxValue);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void setLineEditBackgroundColor(QColor color);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected:
|
|
Shinya Kitaoka |
120a6e |
/*! If focus is lost and current text value is out of range emit signal
|
|
Shinya Kitaoka |
120a6e |
\b editingFinished.*/
|
|
Shinya Kitaoka |
473e70 |
void focusOutEvent(QFocusEvent *) override;
|
|
Jeremy Bullock |
771290 |
|
|
Jeremy Bullock |
771290 |
// for dragging the mouse to set the value
|
|
Jeremy Bullock |
771290 |
void mousePressEvent(QMouseEvent *) override;
|
|
Jeremy Bullock |
771290 |
void mouseMoveEvent(QMouseEvent *) override;
|
|
Jeremy Bullock |
771290 |
void mouseReleaseEvent(QMouseEvent *) override;
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
/*! \brief The IntField class provides to view an object to manage an integer
|
|
Shinya Kitaoka |
120a6e |
parameter.
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
Inherits \b QWidget.
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
The class is composed of an horizontal layout which contains two
|
|
Shinya Kitaoka |
120a6e |
object,
|
|
Shinya Kitaoka |
120a6e |
\li a vertical layout with a text field \b IntLineEdit and a
|
|
Shinya Kitaoka |
120a6e |
roller
|
|
Shinya Kitaoka |
120a6e |
\li an horizontal slider QSlider.
|
|
Shinya Kitaoka |
120a6e |
This objects are connected, so if you change one the other
|
|
Shinya Kitaoka |
120a6e |
automatically change.
|
|
Shinya Kitaoka |
120a6e |
You can set current value getValue(), minimum and max value
|
|
Shinya Kitaoka |
120a6e |
using setValue(),
|
|
Shinya Kitaoka |
120a6e |
setRange() or setValues(); by default is value = 0, minimum
|
|
Shinya Kitaoka |
120a6e |
value = 0
|
|
Shinya Kitaoka |
120a6e |
and maximum value = 100.
|
|
Toshihiro Shimizu |
890ddd |
\n Maximum height object is fixed to \b DVGui::WidgetHeight, width depend
|
|
Shinya Kitaoka |
120a6e |
on parent width.
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
To know when integer parameter value change class provides a
|
|
Shinya Kitaoka |
120a6e |
signal, valueChanged();
|
|
Shinya Kitaoka |
120a6e |
class emit signal when slider value change or when editing text
|
|
Shinya Kitaoka |
120a6e |
field is
|
|
Shinya Kitaoka |
120a6e |
finished and current value is changed. Editing text field
|
|
Shinya Kitaoka |
120a6e |
finished may occur
|
|
Shinya Kitaoka |
120a6e |
if focus is lost or enter key is pressed. See SLOT:
|
|
Shinya Kitaoka |
120a6e |
onSliderChanged(int value),
|
|
Shinya Kitaoka |
120a6e |
onEditingFinished().
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Shinya Kitaoka |
120a6e |
class DVAPI IntField : public QWidget {
|
|
Shinya Kitaoka |
120a6e |
Q_OBJECT
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
RollerField *m_roller;
|
|
Shinya Kitaoka |
120a6e |
IntLineEdit *m_lineEdit;
|
|
Shinya Kitaoka |
120a6e |
QSlider *m_slider;
|
|
Shinya Kitaoka |
120a6e |
bool m_isMaxRangeLimited;
|
|
shun-iwasawa |
76d093 |
bool m_isLinearSlider;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
IntField(QWidget *parent = 0, bool isMaxRangeLimited = true,
|
|
Shinya Kitaoka |
120a6e |
bool isRollerHide = true);
|
|
Shinya Kitaoka |
120a6e |
~IntField() {}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*! Set to \b minValue and \b maxValue slider and text field range.
|
|
Shinya Kitaoka |
120a6e |
\sa getRange() */
|
|
Shinya Kitaoka |
120a6e |
void setRange(int minValue, int maxValue);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*! Set \b minValue and \b maxValue to IntField range.
|
|
Shinya Kitaoka |
120a6e |
\sa setRange() */
|
|
Shinya Kitaoka |
120a6e |
void getRange(int &minValue, int &maxValue);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*! Set to \b value current value IntField.
|
|
Shinya Kitaoka |
120a6e |
\sa getValue() */
|
|
Shinya Kitaoka |
120a6e |
void setValue(int value);
|
|
Shinya Kitaoka |
120a6e |
/*! Return current value.
|
|
Shinya Kitaoka |
120a6e |
\sa setValue() */
|
|
Shinya Kitaoka |
120a6e |
int getValue();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*! This is provided for convenience.
|
|
Shinya Kitaoka |
120a6e |
Set to \b value current value IntField; set to \b minValue and
|
|
Shinya Kitaoka |
120a6e |
\b maxValue
|
|
Shinya Kitaoka |
120a6e |
slider and text field range.
|
|
Shinya Kitaoka |
120a6e |
\sa getValue() */
|
|
Shinya Kitaoka |
120a6e |
void setValues(int value, int minValue, int maxValue);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*! If \b enable is false set slider disable and hide it. */
|
|
Shinya Kitaoka |
120a6e |
void enableSlider(bool enable);
|
|
Shinya Kitaoka |
120a6e |
bool sliderIsEnabled();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*! If \b enable is false set roller disable and hide it. */
|
|
Shinya Kitaoka |
120a6e |
void enableRoller(bool enable);
|
|
Shinya Kitaoka |
120a6e |
bool rollerIsEnabled();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void setLineEditBackgroundColor(QColor color);
|
|
Toshihiro Shimizu |
890ddd |
|
|
shun-iwasawa |
76d093 |
protected:
|
|
shun-iwasawa |
76d093 |
void setLinearSlider(bool linear) { m_isLinearSlider = linear; }
|
|
shun-iwasawa |
76d093 |
|
|
shun-iwasawa |
76d093 |
private:
|
|
shun-iwasawa |
76d093 |
int pos2value(int x) const;
|
|
shun-iwasawa |
76d093 |
int value2pos(int v) const;
|
|
shun-iwasawa |
76d093 |
|
|
Toshihiro Shimizu |
890ddd |
protected slots:
|
|
Shinya Kitaoka |
120a6e |
/*! Set to value the text field. If text field value is different from \b
|
|
Shinya Kitaoka |
120a6e |
value
|
|
Shinya Kitaoka |
120a6e |
emit signal valueChanged(). */
|
|
Shinya Kitaoka |
120a6e |
void onSliderChanged(int value);
|
|
Shinya Kitaoka |
120a6e |
void onSliderReleased() { emit valueChanged(false); }
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*! Set slider and roller value to current value in text field.
|
|
Shinya Kitaoka |
120a6e |
\n This protected slot is called when text editing is finished.
|
|
Shinya Kitaoka |
120a6e |
\n If slider value is different from text field value emit signal
|
|
Shinya Kitaoka |
120a6e |
valueChanged(). */
|
|
Shinya Kitaoka |
120a6e |
void onEditingFinished();
|
|
Shinya Kitaoka |
120a6e |
/*! Set text field and slider to roller current value.
|
|
Shinya Kitaoka |
120a6e |
\n If slider and text field value are different from roller value
|
|
Shinya Kitaoka |
120a6e |
emit signal valueChanged(). */
|
|
Shinya Kitaoka |
120a6e |
void onRollerValueChanged(bool isDragging);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
signals:
|
|
Shinya Kitaoka |
120a6e |
/*! This is a signal emitted when IntField, slider or text field, value
|
|
Shinya Kitaoka |
120a6e |
change;
|
|
Shinya Kitaoka |
120a6e |
if slider position change or text field editing is finished.
|
|
Shinya Kitaoka |
120a6e |
\sa onEditingFinished() and onSliderChanged(int value). */
|
|
Shinya Kitaoka |
120a6e |
void valueChanged(bool isDragging);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*! This signal is emitted only when the user edit the value by hand */
|
|
Shinya Kitaoka |
120a6e |
void valueEditedByHand();
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
} // namespace DVGui
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
#endif // INTFIELD_H
|