else setSizePolicy(QSizePolicy::Maximum, QSizePolicy::MinimumExpanding);
setFocusPolicy(Qt::StrongFocus);
setContextMenuPolicy(Qt::CustomContextMenu);
+ setFocusPolicy(Qt::StrongFocus);
QHBoxLayout *l = new QHBoxLayout;
l->setSpacing(0);
l->setContentsMargins(0, 0, 0, 0);
- m_label = new CustomLabel(label, showSlider, this);
+ m_label = new CustomLabel(label, showSlider, m_maximum - m_minimum, this);
l->addWidget(m_label);
if (decimals == 0) {
- m_label->setStep(m_label->maximum() / (max - min));
+ m_label->setMaximum(max - min);
+ m_label->setStep(1);
m_intEdit = new QSpinBox(this);
m_intEdit->setObjectName("dragBox");
+ m_intEdit->setFocusPolicy(Qt::StrongFocus);
if (!suffix.isEmpty()) m_intEdit->setSuffix(suffix);
m_intEdit->setKeyboardTracking(false);
m_intEdit->setButtonSymbols(QAbstractSpinBox::NoButtons);
else {
m_doubleEdit = new QDoubleSpinBox(this);
m_doubleEdit->setDecimals(decimals);
+ m_doubleEdit->setFocusPolicy(Qt::StrongFocus);
m_doubleEdit->setObjectName("dragBox");
if (!suffix.isEmpty()) m_doubleEdit->setSuffix(suffix);
m_doubleEdit->setKeyboardTracking(false);
m_doubleEdit->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
m_doubleEdit->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
m_doubleEdit->setRange(m_minimum, m_maximum);
- m_doubleEdit->setSingleStep((m_maximum - m_minimum) / 100.0);
+ double factor = 100;
+ if (m_maximum - m_minimum > 10000) factor = 1000;
+ m_label->setStep(1);
+ m_doubleEdit->setSingleStep((m_maximum - m_minimum) / factor);
l->addWidget(m_doubleEdit);
connect(m_doubleEdit, SIGNAL(valueChanged(double)), this, SLOT(slotSetValue(double)));
connect(m_doubleEdit, SIGNAL(editingFinished()), this, SLOT(slotEditingFinished()));
if (m_intEdit) delete m_intEdit;
if (m_doubleEdit) delete m_doubleEdit;
delete m_menu;
- delete m_scale;
- delete m_directUpdate;
+ //delete m_scale;
+ //delete m_directUpdate;
}
int DragValue::spinSize()
void DragValue::slotSetValue(int value)
{
- setValue(value, KdenliveSettings::dragvalue_directupdate());
+ setValue(value, true);
}
void DragValue::slotSetValue(double value)
{
- setValue(value, KdenliveSettings::dragvalue_directupdate());
+ setValue(value, true);
}
void DragValue::setValueFromProgress(double value, bool final)
{
value = m_minimum + value * (m_maximum - m_minimum) / m_label->maximum();
- if (m_decimals == 0) setValue((int) (value + 0.5), final);
+ if (m_decimals == 0) setValue(qRound(value), final);
else setValue(value, final);
}
m_label->setProgressValue((value - m_minimum) / (m_maximum - m_minimum) * m_label->maximum());
}
+void DragValue::focusOutEvent(QFocusEvent*)
+{
+ if (m_intEdit) m_intEdit->setFocusPolicy(Qt::StrongFocus);
+ else m_doubleEdit->setFocusPolicy(Qt::StrongFocus);
+}
+
void DragValue::focusInEvent(QFocusEvent* e)
{
+ if (m_intEdit) m_intEdit->setFocusPolicy(Qt::WheelFocus);
+ else m_doubleEdit->setFocusPolicy(Qt::WheelFocus);
if (e->reason() == Qt::TabFocusReason || e->reason() == Qt::BacktabFocusReason) {
if (m_intEdit) m_intEdit->setFocus(e->reason());
else m_doubleEdit->setFocus(e->reason());
m_intEdit->blockSignals(true);
m_intEdit->clearFocus();
m_intEdit->blockSignals(false);
- if (!KdenliveSettings::dragvalue_directupdate()) emit valueChanged(value, true);
+ if (!KdenliveSettings::dragvalue_directupdate()) emit valueChanged((double) value, true);
}
else {
double value = m_doubleEdit->value();
}
-CustomLabel::CustomLabel(const QString &label, bool showSlider, QWidget* parent) :
+CustomLabel::CustomLabel(const QString &label, bool showSlider, int range, QWidget* parent) :
QProgressBar(parent),
m_dragMode(false),
m_showSlider(showSlider),
//m_precision(pow(10, precision)),
{
setFont(KGlobalSettings::toolBarFont());
- setFormat(" " + label);
- setFocusPolicy(Qt::ClickFocus);
+ setFormat(' ' + label);
+ setFocusPolicy(Qt::StrongFocus);
setCursor(Qt::PointingHandCursor);
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Maximum);
- setRange(0, 1000);
-
- if (!showSlider) {
+ if (showSlider) setRange(0, 1000);
+ else {
+ setRange(0, range);
QSize sh;
const QFontMetrics &fm = fontMetrics();
- sh.setWidth(fm.width(" " + label + " "));
+ sh.setWidth(fm.width(' ' + label + ' '));
setMaximumWidth(sh.width());
setObjectName("dragOnly");
}
void CustomLabel::setProgressValue(double value)
{
- setValue((int) (value + 0.5));
+ setValue(qRound(value));
}
void CustomLabel::setNewValue(double value, bool update)
{
- setValue((int) (value + 0.5));
- emit valueChanged((int) (value + 0.5), update);
+ setValue(qRound(value));
+ emit valueChanged(qRound(value), update);
}
void CustomLabel::setStep(double step)
m_step = step;
}
-#include "dragvalue.moc"
+void CustomLabel::focusInEvent(QFocusEvent*)
+{
+ setFocusPolicy(Qt::WheelFocus);
+}
+void CustomLabel::focusOutEvent(QFocusEvent*)
+{
+ setFocusPolicy(Qt::StrongFocus);
+}
+
+#include "dragvalue.moc"