|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/doublepairfield.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/dvdialog.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "tcommon.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
shun-iwasawa |
c86c5d |
#include <cmath></cmath>
|
|
shun-iwasawa |
c86c5d |
|
|
Toshihiro Shimizu |
890ddd |
#include <qlabel></qlabel>
|
|
Toshihiro Shimizu |
890ddd |
#include <qpainter></qpainter>
|
|
Toshihiro Shimizu |
890ddd |
#include <qmouseevent></qmouseevent>
|
|
Toshihiro Shimizu |
890ddd |
#include <qslider></qslider>
|
|
Toshihiro Shimizu |
890ddd |
#include <qhboxlayout></qhboxlayout>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
using namespace DVGui;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef MACOSX
|
|
Toshihiro Shimizu |
890ddd |
#define MARGIN_OFFSET 7
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
#define MARGIN_OFFSET 2
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// DoubleValuePairField
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
DoubleValuePairField::DoubleValuePairField(QWidget *parent,
|
|
Shinya Kitaoka |
120a6e |
bool isMaxRangeLimited,
|
|
Shinya Kitaoka |
120a6e |
DoubleValueLineEdit *leftLineEdit,
|
|
Shinya Kitaoka |
120a6e |
DoubleValueLineEdit *rightLineEdit)
|
|
Shinya Kitaoka |
120a6e |
: QWidget(parent)
|
|
Shinya Kitaoka |
120a6e |
, m_values(0, 0)
|
|
Shinya Kitaoka |
120a6e |
, m_minValue(0)
|
|
Shinya Kitaoka |
120a6e |
, m_maxValue(100)
|
|
Shinya Kitaoka |
120a6e |
, m_grabOffset(0)
|
|
Shinya Kitaoka |
120a6e |
, m_grabIndex(-1)
|
|
Shinya Kitaoka |
120a6e |
, m_leftMargin(72)
|
|
Shinya Kitaoka |
120a6e |
, m_rightMargin(72)
|
|
Shinya Kitaoka |
120a6e |
, m_isMaxRangeLimited(isMaxRangeLimited)
|
|
Shinya Kitaoka |
120a6e |
, m_leftLineEdit(leftLineEdit)
|
|
shun-iwasawa |
f53bf9 |
, m_rightLineEdit(rightLineEdit)
|
|
shun-iwasawa |
f53bf9 |
, m_isLinear(true) {
|
|
Shinya Kitaoka |
120a6e |
assert(m_leftLineEdit);
|
|
Shinya Kitaoka |
120a6e |
assert(m_rightLineEdit);
|
|
Shinya Kitaoka |
120a6e |
setObjectName("DoublePairField");
|
|
Shinya Kitaoka |
120a6e |
setFixedHeight(WidgetHeight);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m_leftLabel = new QLabel("", this);
|
|
Shinya Kitaoka |
120a6e |
m_rightLabel = new QLabel("", this);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m_leftLineEdit->setFixedWidth(60);
|
|
Shinya Kitaoka |
120a6e |
m_rightLineEdit->setFixedWidth(60);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//---- layout
|
|
Shinya Kitaoka |
120a6e |
QHBoxLayout *m_mainLayout = new QHBoxLayout;
|
|
Shinya Kitaoka |
120a6e |
m_mainLayout->setMargin(0);
|
|
Shinya Kitaoka |
120a6e |
m_mainLayout->setSpacing(3);
|
|
Shinya Kitaoka |
120a6e |
{
|
|
Shinya Kitaoka |
120a6e |
m_mainLayout->addWidget(m_leftLabel, 1);
|
|
Shinya Kitaoka |
120a6e |
m_mainLayout->addWidget(m_leftLineEdit, 1, Qt::AlignLeft);
|
|
Shinya Kitaoka |
120a6e |
m_mainLayout->addSpacing(35);
|
|
Shinya Kitaoka |
120a6e |
m_mainLayout->addStretch(100);
|
|
Shinya Kitaoka |
120a6e |
m_mainLayout->addWidget(m_rightLabel, 1);
|
|
Shinya Kitaoka |
120a6e |
m_mainLayout->addWidget(m_rightLineEdit, 1, Qt::AlignRight);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
setLayout(m_mainLayout);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//---- signal-slot connections
|
|
Shinya Kitaoka |
120a6e |
bool ret = connect(m_leftLineEdit, SIGNAL(editingFinished()),
|
|
Shinya Kitaoka |
120a6e |
SLOT(onLeftEditingFinished()));
|
|
shun-iwasawa |
76d093 |
ret = ret && connect(m_rightLineEdit, SIGNAL(editingFinished()),
|
|
shun-iwasawa |
443318 |
SLOT(onRightEditingFinished()));
|
|
Shinya Kitaoka |
120a6e |
assert(ret);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
double DoubleValuePairField::pos2value(int x) const {
|
|
shun-iwasawa |
76d093 |
int xMin = m_leftMargin, xMax = width() - m_rightMargin - 1;
|
|
shun-iwasawa |
76d093 |
if (m_isLinear)
|
|
shun-iwasawa |
76d093 |
return m_minValue + (m_maxValue - m_minValue) * (x - xMin) / (xMax - xMin);
|
|
shun-iwasawa |
76d093 |
|
|
shun-iwasawa |
76d093 |
// nonlinear slider case
|
|
shun-iwasawa |
76d093 |
double posRatio = (double)(x - xMin) / (double)(xMax - xMin);
|
|
shun-iwasawa |
76d093 |
double t;
|
|
shun-iwasawa |
76d093 |
if (posRatio <= 0.5)
|
|
shun-iwasawa |
76d093 |
t = 0.04 * posRatio;
|
|
shun-iwasawa |
76d093 |
else if (posRatio <= 0.75)
|
|
shun-iwasawa |
76d093 |
t = -0.02 + 0.08 * posRatio;
|
|
shun-iwasawa |
76d093 |
else if (posRatio <= 0.9)
|
|
shun-iwasawa |
76d093 |
t = -0.26 + 0.4 * posRatio;
|
|
shun-iwasawa |
76d093 |
else
|
|
shun-iwasawa |
76d093 |
t = -8.0 + 9.0 * posRatio;
|
|
shun-iwasawa |
76d093 |
return m_minValue + (m_maxValue - m_minValue) * t;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int DoubleValuePairField::value2pos(double v) const {
|
|
shun-iwasawa |
76d093 |
int xMin = m_leftMargin, xMax = width() - m_rightMargin - 1;
|
|
shun-iwasawa |
76d093 |
if (m_isLinear)
|
|
shun-iwasawa |
76d093 |
return xMin + (int)(((xMax - xMin) * (v - m_minValue)) /
|
|
shun-iwasawa |
76d093 |
(m_maxValue - m_minValue));
|
|
shun-iwasawa |
76d093 |
|
|
shun-iwasawa |
76d093 |
// nonlinear slider case
|
|
shun-iwasawa |
76d093 |
double valueRatio =
|
|
shun-iwasawa |
76d093 |
(v - (double)m_minValue) / (double)(m_maxValue - m_minValue);
|
|
shun-iwasawa |
76d093 |
double t;
|
|
shun-iwasawa |
76d093 |
if (valueRatio <= 0.02)
|
|
shun-iwasawa |
76d093 |
t = valueRatio / 0.04;
|
|
shun-iwasawa |
76d093 |
else if (valueRatio <= 0.04)
|
|
shun-iwasawa |
76d093 |
t = (valueRatio + 0.02) / 0.08;
|
|
shun-iwasawa |
76d093 |
else if (valueRatio <= 0.1)
|
|
shun-iwasawa |
76d093 |
t = (valueRatio + 0.26) / 0.4;
|
|
shun-iwasawa |
76d093 |
else
|
|
shun-iwasawa |
76d093 |
t = (valueRatio + 8.0) / 9.0;
|
|
shun-iwasawa |
76d093 |
return xMin + (int)(t * (double)(xMax - xMin));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void DoubleValuePairField::paintEvent(QPaintEvent *) {
|
|
Shinya Kitaoka |
120a6e |
QPainter p(this);
|
|
Shinya Kitaoka |
120a6e |
p.setBrush(Qt::NoBrush);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
int x0 = value2pos(m_minValue);
|
|
Shinya Kitaoka |
120a6e |
int x1 = value2pos(m_maxValue);
|
|
Shinya Kitaoka |
120a6e |
int y = height() / 2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Jeremy Bullock |
72c1f1 |
p.setPen(QPen(getDarkLineColor(), 4));
|
|
Jeremy Bullock |
2739e0 |
p.drawLine(x0 - 1, y, x1, y);
|
|
Jeremy Bullock |
2739e0 |
|
|
Shinya Kitaoka |
120a6e |
p.setPen(Qt::black);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
int y1 = height() - 1;
|
|
Shinya Kitaoka |
120a6e |
int x;
|
|
Shinya Kitaoka |
120a6e |
x = value2pos(m_values.first);
|
|
Shinya Kitaoka |
120a6e |
QRect sliderRect = QRect(x0, -5, x1 - x0 + 1, 10);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (sliderRect.contains(QPoint(x, 0)))
|
|
Shinya Kitaoka |
120a6e |
p.drawPixmap(x - m_handleLeftPixmap.width() + 1, 2, m_handleLeftPixmap);
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
p.drawPixmap(sliderRect.right() - m_handleLeftPixmap.width() + 1, 2,
|
|
Shinya Kitaoka |
120a6e |
m_handleLeftGrayPixmap);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
x = value2pos(m_values.second);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (sliderRect.contains(QPoint(x, 0)))
|
|
Shinya Kitaoka |
120a6e |
p.drawPixmap(x, 2, m_handleRightPixmap);
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
p.drawPixmap(sliderRect.right(), 2, m_handleRightGrayPixmap);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void DoubleValuePairField::setLeftText(const QString &text) {
|
|
Shinya Kitaoka |
120a6e |
QString oldText = m_leftLabel->text();
|
|
Toshihiro Shimizu |
890ddd |
|
|
shun-iwasawa |
443318 |
int oldLabelSize = fontMetrics().horizontalAdvance(oldText);
|
|
shun-iwasawa |
443318 |
int newLabelSize = fontMetrics().horizontalAdvance(text);
|
|
Shinya Kitaoka |
120a6e |
int labelSize = newLabelSize - oldLabelSize;
|
|
Shinya Kitaoka |
120a6e |
m_leftMargin += labelSize + MARGIN_OFFSET;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
m_leftLabel->setText(text);
|
|
Shinya Kitaoka |
120a6e |
update();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void DoubleValuePairField::setRightText(const QString &text) {
|
|
Shinya Kitaoka |
120a6e |
QString oldText = m_rightLabel->text();
|
|
Toshihiro Shimizu |
890ddd |
|
|
shun-iwasawa |
443318 |
int oldLabelSize = fontMetrics().horizontalAdvance(oldText);
|
|
shun-iwasawa |
443318 |
int newLabelSize = fontMetrics().horizontalAdvance(text);
|
|
Shinya Kitaoka |
120a6e |
int labelSize = newLabelSize - oldLabelSize;
|
|
Shinya Kitaoka |
120a6e |
m_rightMargin += labelSize + MARGIN_OFFSET;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
m_rightLabel->setText(text);
|
|
Shinya Kitaoka |
120a6e |
update();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void DoubleValuePairField::setLabelsEnabled(bool enable) {
|
|
Shinya Kitaoka |
120a6e |
if (!enable) {
|
|
Shinya Kitaoka |
120a6e |
m_rightLabel->hide();
|
|
Shinya Kitaoka |
120a6e |
m_leftLabel->hide();
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
m_rightLabel->show();
|
|
Shinya Kitaoka |
120a6e |
m_leftLabel->show();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void DoubleValuePairField::setValue(double value) {
|
|
shun-iwasawa |
c86c5d |
int decimals = std::min(m_leftLineEdit->getDecimals(), 4);
|
|
shun-iwasawa |
c86c5d |
value = tround(value * std::pow(10, decimals)) * std::pow(0.1, decimals);
|
|
Shinya Kitaoka |
120a6e |
value = tcrop(value, m_minValue, m_maxValue);
|
|
Shinya Kitaoka |
120a6e |
if (m_grabIndex == 0) // Left grab
|
|
Shinya Kitaoka |
120a6e |
{
|
|
Shinya Kitaoka |
120a6e |
m_values.first = value;
|
|
Shinya Kitaoka |
120a6e |
m_leftLineEdit->setValue(m_values.first);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (value > m_values.second) {
|
|
Shinya Kitaoka |
120a6e |
m_values.second = value;
|
|
Shinya Kitaoka |
120a6e |
m_rightLineEdit->setValue(m_values.second);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
} else // Right grab
|
|
Shinya Kitaoka |
120a6e |
{
|
|
Shinya Kitaoka |
120a6e |
m_values.second = value;
|
|
Shinya Kitaoka |
120a6e |
m_rightLineEdit->setValue(m_values.second);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (value < m_values.first) {
|
|
Shinya Kitaoka |
120a6e |
m_values.first = value;
|
|
Shinya Kitaoka |
120a6e |
m_leftLineEdit->setValue(m_values.first);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void DoubleValuePairField::setValues(const std::pair<double, double=""> &values) {</double,>
|
|
Shinya Kitaoka |
120a6e |
assert(values.first <= values.second);
|
|
Shinya Kitaoka |
120a6e |
m_values.first = tcrop(values.first, m_minValue, m_maxValue);
|
|
Shinya Kitaoka |
120a6e |
m_leftLineEdit->setValue(m_values.first);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
m_values.second = values.second;
|
|
Shinya Kitaoka |
120a6e |
if (m_isMaxRangeLimited)
|
|
Shinya Kitaoka |
120a6e |
m_values.second = tcrop(values.second, m_values.first, m_maxValue);
|
|
Shinya Kitaoka |
120a6e |
m_rightLineEdit->setValue(m_values.second);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
update();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void DoubleValuePairField::setRange(double minValue, double maxValue) {
|
|
Shinya Kitaoka |
120a6e |
m_minValue = minValue;
|
|
Shinya Kitaoka |
120a6e |
m_maxValue = maxValue;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (!m_isMaxRangeLimited) maxValue = (std::numeric_limits<int>::max)();</int>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
m_leftLineEdit->setRange(minValue, maxValue);
|
|
Shinya Kitaoka |
120a6e |
m_rightLineEdit->setRange(minValue, maxValue);
|
|
Shinya Kitaoka |
120a6e |
update();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void DoubleValuePairField::getRange(double &minValue, double &maxValue) {
|
|
Shinya Kitaoka |
120a6e |
minValue = m_minValue;
|
|
Shinya Kitaoka |
120a6e |
maxValue = m_maxValue;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void DoubleValuePairField::mousePressEvent(QMouseEvent *event) {
|
|
Shinya Kitaoka |
120a6e |
if (event->button() == Qt::LeftButton) {
|
|
Shinya Kitaoka |
120a6e |
int x = event->pos().x();
|
|
Shinya Kitaoka |
120a6e |
int cur0, cur1;
|
|
Shinya Kitaoka |
120a6e |
if (m_values.first > m_maxValue)
|
|
Shinya Kitaoka |
120a6e |
cur0 = value2pos(m_maxValue) - 5;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
cur0 = value2pos(m_values.first);
|
|
Shinya Kitaoka |
120a6e |
if (m_values.second > m_maxValue)
|
|
Shinya Kitaoka |
120a6e |
cur1 = value2pos(m_maxValue);
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
cur1 = value2pos(m_values.second);
|
|
Shinya Kitaoka |
120a6e |
int d0 = abs(cur0 - x);
|
|
Shinya Kitaoka |
120a6e |
int d1 = abs(cur1 - x);
|
|
Shinya Kitaoka |
120a6e |
int d, cur;
|
|
Shinya Kitaoka |
120a6e |
if (d0 < d1 || (d0 == d1 && x < cur0)) {
|
|
Shinya Kitaoka |
120a6e |
d = abs(d0);
|
|
Shinya Kitaoka |
120a6e |
cur = cur0;
|
|
Shinya Kitaoka |
120a6e |
m_grabIndex = 0;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
d = abs(d1);
|
|
Shinya Kitaoka |
120a6e |
cur = cur1;
|
|
Shinya Kitaoka |
120a6e |
m_grabIndex = 1;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (d < 6)
|
|
Shinya Kitaoka |
120a6e |
m_grabOffset = cur - x;
|
|
Shinya Kitaoka |
120a6e |
else {
|
|
Shinya Kitaoka |
120a6e |
m_grabOffset = 0;
|
|
Shinya Kitaoka |
120a6e |
setValue(pos2value(x));
|
|
Shinya Kitaoka |
120a6e |
emit valuesChanged(true);
|
|
Shinya Kitaoka |
120a6e |
update();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void DoubleValuePairField::mouseMoveEvent(QMouseEvent *event) {
|
|
Shinya Kitaoka |
120a6e |
if (event->buttons()) {
|
|
Shinya Kitaoka |
120a6e |
std::pair<double, double=""> oldValues = m_values;</double,>
|
|
shun-iwasawa |
76d093 |
int x = event->pos().x() + m_grabOffset;
|
|
Shinya Kitaoka |
120a6e |
setValue(pos2value(x));
|
|
Shinya Kitaoka |
120a6e |
if (oldValues != m_values) {
|
|
Shinya Kitaoka |
120a6e |
emit valuesChanged(true);
|
|
Shinya Kitaoka |
120a6e |
update();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void DoubleValuePairField::mouseReleaseEvent(QMouseEvent *event) {
|
|
Shinya Kitaoka |
120a6e |
m_grabOffset = 0;
|
|
Shinya Kitaoka |
120a6e |
m_grabIndex = 0;
|
|
Shinya Kitaoka |
120a6e |
emit valuesChanged(false);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void DoubleValuePairField::onLeftEditingFinished() {
|
|
Shinya Kitaoka |
120a6e |
double value = m_leftLineEdit->getValue();
|
|
Shinya Kitaoka |
120a6e |
if (value == m_values.first) return;
|
|
Shinya Kitaoka |
120a6e |
if (!m_isMaxRangeLimited && value < m_minValue)
|
|
Shinya Kitaoka |
120a6e |
value = m_minValue;
|
|
Shinya Kitaoka |
120a6e |
else if (m_isMaxRangeLimited)
|
|
shun-iwasawa |
76d093 |
value = tcrop(value, m_minValue, m_maxValue);
|
|
Shinya Kitaoka |
120a6e |
m_values.first = value;
|
|
Shinya Kitaoka |
120a6e |
if (m_values.first > m_values.second) {
|
|
Shinya Kitaoka |
120a6e |
m_values.second = m_values.first;
|
|
Shinya Kitaoka |
120a6e |
m_rightLineEdit->setValue(m_values.second);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
emit valuesChanged(false);
|
|
Shinya Kitaoka |
120a6e |
update();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void DoubleValuePairField::onRightEditingFinished() {
|
|
Shinya Kitaoka |
120a6e |
double value = m_rightLineEdit->getValue();
|
|
Shinya Kitaoka |
120a6e |
if (value == m_values.second) return;
|
|
Shinya Kitaoka |
120a6e |
if (m_isMaxRangeLimited) value = tcrop(value, m_minValue, m_maxValue);
|
|
shun-iwasawa |
76d093 |
m_values.second = value;
|
|
Shinya Kitaoka |
120a6e |
if (m_values.second < m_values.first) {
|
|
Shinya Kitaoka |
120a6e |
m_values.first = m_values.second;
|
|
Shinya Kitaoka |
120a6e |
m_leftLineEdit->setValue(m_values.first);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
emit valuesChanged(false);
|
|
Shinya Kitaoka |
120a6e |
update();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// DoublePairField
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
DoublePairField::DoublePairField(QWidget *parent, bool isMaxRangeLimited)
|
|
Shinya Kitaoka |
120a6e |
: DoubleValuePairField(parent, isMaxRangeLimited, new DoubleLineEdit(0),
|
|
Shinya Kitaoka |
120a6e |
new DoubleLineEdit(0)) {
|
|
Shinya Kitaoka |
120a6e |
DoubleLineEdit *leftLineEdit = dynamic_cast<doublelineedit *="">(m_leftLineEdit);</doublelineedit>
|
|
Shinya Kitaoka |
120a6e |
leftLineEdit->setDecimals(2);
|
|
Shinya Kitaoka |
120a6e |
DoubleLineEdit *rightLineEdit =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<doublelineedit *="">(m_rightLineEdit);</doublelineedit>
|
|
Shinya Kitaoka |
120a6e |
rightLineEdit->setDecimals(2);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// MeasuredDoublePairField
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
MeasuredDoublePairField::MeasuredDoublePairField(QWidget *parent,
|
|
Shinya Kitaoka |
120a6e |
bool isMaxRangeLimited)
|
|
Shinya Kitaoka |
120a6e |
: DoubleValuePairField(parent, isMaxRangeLimited,
|
|
Shinya Kitaoka |
120a6e |
new MeasuredDoubleLineEdit(0),
|
|
Shinya Kitaoka |
120a6e |
new MeasuredDoubleLineEdit(0)) {
|
|
Shinya Kitaoka |
120a6e |
m_leftLineEdit->setFixedSize(63, WidgetHeight);
|
|
Shinya Kitaoka |
120a6e |
m_rightLineEdit->setFixedSize(63, WidgetHeight);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void MeasuredDoublePairField::setMeasure(std::string measureName) {
|
|
Shinya Kitaoka |
120a6e |
MeasuredDoubleLineEdit *leftLineEdit =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<measureddoublelineedit *="">(m_leftLineEdit);</measureddoublelineedit>
|
|
Shinya Kitaoka |
120a6e |
assert(leftLineEdit);
|
|
Shinya Kitaoka |
120a6e |
leftLineEdit->setMeasure(measureName);
|
|
Shinya Kitaoka |
120a6e |
MeasuredDoubleLineEdit *rightLineEdit =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<measureddoublelineedit *="">(m_rightLineEdit);</measureddoublelineedit>
|
|
Shinya Kitaoka |
120a6e |
assert(rightLineEdit);
|
|
Shinya Kitaoka |
120a6e |
rightLineEdit->setMeasure(measureName);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*--設定ファイルからインタフェースの精度を変える--*/
|
|
Shinya Kitaoka |
120a6e |
void MeasuredDoublePairField::setPrecision(int precision) {
|
|
Shinya Kitaoka |
120a6e |
MeasuredDoubleLineEdit *leftLineEdit =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<measureddoublelineedit *="">(m_leftLineEdit);</measureddoublelineedit>
|
|
Shinya Kitaoka |
120a6e |
if (leftLineEdit) leftLineEdit->setDecimals(precision);
|
|
Shinya Kitaoka |
120a6e |
MeasuredDoubleLineEdit *rightLineEdit =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<measureddoublelineedit *="">(m_rightLineEdit);</measureddoublelineedit>
|
|
Shinya Kitaoka |
120a6e |
if (rightLineEdit) rightLineEdit->setDecimals(precision);
|
|
Toshihiro Shimizu |
890ddd |
}
|