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