|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef INTPAIRFIELD_H
|
|
Toshihiro Shimizu |
890ddd |
#define INTPAIRFIELD_H
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/intfield.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tcommon.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 QSlider;
|
|
Toshihiro Shimizu |
890ddd |
class QLabel;
|
|
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 IntPairField class provides to view an object to manage a pair
|
|
Toshihiro Shimizu |
890ddd |
of int parameter.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
Inherits \b QWidget.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
The object is composed of an horizontal layout \b QHBoxLayout which contains
|
|
Toshihiro Shimizu |
890ddd |
two pair [label, text field] and a slider with two grab, one for each int
|
|
Toshihiro Shimizu |
890ddd |
value to manage. [label, text field] are a \b QLabel and a \b IntLineEdit.
|
|
Toshihiro Shimizu |
890ddd |
Objects are inserted in the following order: a label and respective text field,
|
|
Toshihiro Shimizu |
890ddd |
the slider and the other pair [lebel,text field].
|
|
Toshihiro Shimizu |
890ddd |
Object size width is not fixed, while height is equal to DVGui::WidgetHeight, 20;
|
|
Toshihiro Shimizu |
890ddd |
labels width depend from its text lenght, text fields has fixed size, while
|
|
Toshihiro Shimizu |
890ddd |
slider width change in according with widget size.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
Objects contained in this widget are connected, so if you change one value the
|
|
Toshihiro Shimizu |
890ddd |
other automatically change, if it is necessary. You can set current value,
|
|
Toshihiro Shimizu |
890ddd |
getValues(), minimum and max value, getRange(), using setValues(), setRange().
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
To know when one of two int parameter value change class provides a signal,
|
|
Toshihiro Shimizu |
890ddd |
valuesChanged(); class emit signal when a grab slider position change or when
|
|
Toshihiro Shimizu |
890ddd |
editing text field, left or right is finished and current value is changed.
|
|
Toshihiro Shimizu |
890ddd |
Editing text field finished may occur if focus is lost or enter key is pressed.
|
|
Toshihiro Shimizu |
890ddd |
See SLOT: onLeftEditingFinished() and onRightEditingFinished().
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
\b Example:
|
|
Toshihiro Shimizu |
890ddd |
\code
|
|
Toshihiro Shimizu |
890ddd |
IntPairField* intPairFieldExample = new IntPairField(this);
|
|
Toshihiro Shimizu |
890ddd |
intPairFieldExample->setLeftText(tr("Left Value:"));
|
|
Toshihiro Shimizu |
890ddd |
intPairFieldExample->setRightText(tr("Rigth Value:"));
|
|
Toshihiro Shimizu |
890ddd |
intPairFieldExample->setRange(0,10);
|
|
Toshihiro Shimizu |
890ddd |
intPairFieldExample->setValues(std::make_pair(3,8));
|
|
Toshihiro Shimizu |
890ddd |
\endcode
|
|
Toshihiro Shimizu |
890ddd |
\b Result:
|
|
Toshihiro Shimizu |
890ddd |
\image html DoublePairField.jpg
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
class DVAPI IntPairField : public QWidget
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
Q_OBJECT
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QPixmap m_handleLeftPixmap, m_handleRightPixmap, m_handleLeftGrayPixmap, m_handleRightGrayPixmap;
|
|
Toshihiro Shimizu |
890ddd |
Q_PROPERTY(QPixmap HandleLeftPixmap READ getHandleLeftPixmap WRITE setHandleLeftPixmap);
|
|
Toshihiro Shimizu |
890ddd |
Q_PROPERTY(QPixmap HandleRightPixmap READ getHandleRightPixmap WRITE setHandleRightPixmap);
|
|
Toshihiro Shimizu |
890ddd |
Q_PROPERTY(QPixmap HandleLeftGrayPixmap READ getHandleLeftGrayPixmap WRITE setHandleLeftGrayPixmap);
|
|
Toshihiro Shimizu |
890ddd |
Q_PROPERTY(QPixmap HandleRightGrayPixmap READ getHandleRightGrayPixmap WRITE setHandleRightGrayPixmap);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
IntLineEdit *m_leftLineEdit;
|
|
Toshihiro Shimizu |
890ddd |
IntLineEdit *m_rightLineEdit;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QColor m_lightLineColor; /*-- スライダ溝の明るい色(白) --*/
|
|
Toshihiro Shimizu |
890ddd |
QColor m_darkLineColor; /*-- スライダ溝の暗い色(128,128,128) --*/
|
|
Toshihiro Shimizu |
890ddd |
Q_PROPERTY(QColor LightLineColor READ getLightLineColor WRITE setLightLineColor);
|
|
Toshihiro Shimizu |
890ddd |
Q_PROPERTY(QColor DarkLineColor READ getDarkLineColor WRITE setDarkLineColor);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QLabel *m_leftLabel, *m_rightLabel;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
std::pair<int, int=""> m_values;</int,>
|
|
Toshihiro Shimizu |
890ddd |
int m_minValue, m_maxValue;
|
|
Toshihiro Shimizu |
890ddd |
int m_grabOffset, m_grabIndex;
|
|
Toshihiro Shimizu |
890ddd |
int m_leftMargin, m_rightMargin;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
bool m_isMaxRangeLimited;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
IntPairField(QWidget *parent = 0, bool isMaxRangeLimited = true);
|
|
Toshihiro Shimizu |
890ddd |
~IntPairField() {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*! Set current values to \b values. */
|
|
Toshihiro Shimizu |
890ddd |
void setValues(const std::pair<int, int=""> &values);</int,>
|
|
Toshihiro Shimizu |
890ddd |
/*! Return a pair containing current values. */
|
|
Toshihiro Shimizu |
890ddd |
std::pair<int, int=""> getValues() const { return m_values; }</int,>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*! Set left label string to \b QString \b text. Recompute left margin adding
|
|
Toshihiro Shimizu |
890ddd |
label width. */
|
|
Toshihiro Shimizu |
890ddd |
void setLeftText(const QString &text);
|
|
Toshihiro Shimizu |
890ddd |
/*! Set right label string to \b QString \b text. Recompute right margin adding
|
|
Toshihiro Shimizu |
890ddd |
label width. */
|
|
Toshihiro Shimizu |
890ddd |
void setRightText(const QString &text);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void setLabelsEnabled(bool enable);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*! Set range of \b IntPairField to \b minValue, \b maxValue. */
|
|
Toshihiro Shimizu |
890ddd |
void setRange(int minValue, int maxValue);
|
|
Toshihiro Shimizu |
890ddd |
/*! Set \b minValue and \b maxValue to IntPairField range. */
|
|
Toshihiro Shimizu |
890ddd |
void getRange(int &minValue, int &maxValue);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QPixmap getHandleLeftPixmap() const { return m_handleLeftPixmap; }
|
|
Toshihiro Shimizu |
890ddd |
void setHandleLeftPixmap(const QPixmap &pixmap) { m_handleLeftPixmap = pixmap; }
|
|
Toshihiro Shimizu |
890ddd |
QPixmap getHandleRightPixmap() const { return m_handleRightPixmap; }
|
|
Toshihiro Shimizu |
890ddd |
void setHandleRightPixmap(const QPixmap &pixmap) { m_handleRightPixmap = pixmap; }
|
|
Toshihiro Shimizu |
890ddd |
QPixmap getHandleLeftGrayPixmap() const { return m_handleLeftGrayPixmap; }
|
|
Toshihiro Shimizu |
890ddd |
void setHandleLeftGrayPixmap(const QPixmap &pixmap) { m_handleLeftGrayPixmap = pixmap; }
|
|
Toshihiro Shimizu |
890ddd |
QPixmap getHandleRightGrayPixmap() const { return m_handleRightGrayPixmap; }
|
|
Toshihiro Shimizu |
890ddd |
void setHandleRightGrayPixmap(const QPixmap &pixmap) { m_handleRightGrayPixmap = pixmap; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void setLightLineColor(const QColor &color) { m_lightLineColor = color; }
|
|
Toshihiro Shimizu |
890ddd |
QColor getLightLineColor() const { return m_lightLineColor; }
|
|
Toshihiro Shimizu |
890ddd |
void setDarkLineColor(const QColor &color) { m_darkLineColor = color; }
|
|
Toshihiro Shimizu |
890ddd |
QColor getDarkLineColor() const { return m_darkLineColor; }
|
|
Toshihiro Shimizu |
890ddd |
protected:
|
|
Toshihiro Shimizu |
890ddd |
/*! Return value corresponding \b x position. */
|
|
Toshihiro Shimizu |
890ddd |
double pos2value(int x) const;
|
|
Toshihiro Shimizu |
890ddd |
/*! Return x position corresponding \b value. */
|
|
Toshihiro Shimizu |
890ddd |
int value2pos(double v) const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*! Set current value to \b value.
|
|
Toshihiro Shimizu |
890ddd |
Set left or right value, or both, to value depending on current slider
|
|
Toshihiro Shimizu |
890ddd |
grab edited and \b value. */
|
|
Toshihiro Shimizu |
890ddd |
void setValue(int v);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void paintEvent(QPaintEvent *);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void mousePressEvent(QMouseEvent *event);
|
|
Toshihiro Shimizu |
890ddd |
void mouseMoveEvent(QMouseEvent *event);
|
|
Toshihiro Shimizu |
890ddd |
void mouseReleaseEvent(QMouseEvent *event);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected slots:
|
|
Toshihiro Shimizu |
890ddd |
/*! Set current left value to value in left text field; if necessary, if left
|
|
Toshihiro Shimizu |
890ddd |
value is greater than right, change also current right value.
|
|
Toshihiro Shimizu |
890ddd |
\n This protected slot is called when text editing is finished.
|
|
Toshihiro Shimizu |
890ddd |
\n Emit valuesChanged().
|
|
Toshihiro Shimizu |
890ddd |
\n If current left value is equal to left text field value, return and do nothing. */
|
|
Toshihiro Shimizu |
890ddd |
void onLeftEditingFinished();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*! Set current right value to value in right text field; if necessary, if right
|
|
Toshihiro Shimizu |
890ddd |
value is lower than left, change also current left value.
|
|
Toshihiro Shimizu |
890ddd |
\n This protected slot is called when text editing is finished.
|
|
Toshihiro Shimizu |
890ddd |
\n Emit valuesChanged().
|
|
Toshihiro Shimizu |
890ddd |
\n If current right value is equal to right text field value return and do nothing. */
|
|
Toshihiro Shimizu |
890ddd |
void onRightEditingFinished();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
signals:
|
|
Toshihiro Shimizu |
890ddd |
/*! This signal is emitted when change one of two IntField value;
|
|
Toshihiro Shimizu |
890ddd |
if one slider grab position change or if one text field editing is finished. */
|
|
Toshihiro Shimizu |
890ddd |
void valuesChanged(bool isDragging);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
} //namespace DVGui
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#endif // INTPAIRFIELD_H
|