X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fdragvalue.cpp;h=64a8f2eec69f53b43f8ed4c0ffc14f31fc13aa5e;hb=4ae3260592acc87712db77b7d3fe0cc2be7d76bc;hp=8ef11178385b3a6a31eae3c02137951befc040c0;hpb=4359bf84c589b4cdd98c4591b1571fd8366cb112;p=kdenlive diff --git a/src/dragvalue.cpp b/src/dragvalue.cpp index 8ef11178..64a8f2ee 100644 --- a/src/dragvalue.cpp +++ b/src/dragvalue.cpp @@ -43,30 +43,33 @@ #include -DragValue::DragValue(const QString &label, double defaultValue, int decimals, double min, double max, int id, const QString suffix, bool showSlider, QWidget* parent) : - QWidget(parent), - m_maximum(max), - m_minimum(min), - m_decimals(decimals), - m_default(defaultValue), - m_id(id), - m_intEdit(NULL), - m_doubleEdit(NULL) +DragValue::DragValue(const QString &label, double defaultValue, int decimals, double min, double max, int id, const QString &suffix, bool showSlider, QWidget* parent) : + QWidget(parent), + m_maximum(max), + m_minimum(min), + m_decimals(decimals), + m_default(defaultValue), + m_id(id), + m_intEdit(NULL), + m_doubleEdit(NULL) { if (showSlider) setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); 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); @@ -76,10 +79,10 @@ DragValue::DragValue(const QString &label, double defaultValue, int decimals, do l->addWidget(m_intEdit); connect(m_intEdit, SIGNAL(valueChanged(int)), this, SLOT(slotSetValue(int))); connect(m_intEdit, SIGNAL(editingFinished()), this, SLOT(slotEditingFinished())); - } - else { + } 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); @@ -87,7 +90,10 @@ DragValue::DragValue(const QString &label, double defaultValue, int decimals, do 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())); @@ -96,11 +102,13 @@ DragValue::DragValue(const QString &label, double defaultValue, int decimals, do connect(m_label, SIGNAL(valueChanged(double,bool)), this, SLOT(setValueFromProgress(double,bool))); connect(m_label, SIGNAL(resetValue()), this, SLOT(slotReset())); setLayout(l); - if (m_intEdit) m_label->setMaximumHeight(m_intEdit->sizeHint().height()); - else m_label->setMaximumHeight(m_doubleEdit->sizeHint().height()); + if (m_intEdit) + m_label->setMaximumHeight(m_intEdit->sizeHint().height()); + else + m_label->setMaximumHeight(m_doubleEdit->sizeHint().height()); m_menu = new QMenu(this); - + m_scale = new KSelectAction(i18n("Scaling"), this); m_scale->addAction(i18n("Normal scale")); m_scale->addAction(i18n("Pixel scale")); @@ -124,7 +132,7 @@ DragValue::DragValue(const QString &label, double defaultValue, int decimals, do m_menu->addAction(timeline); } - connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(slotShowContextMenu(const QPoint&))); + connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotShowContextMenu(QPoint))); connect(m_scale, SIGNAL(triggered(int)), this, SLOT(slotSetScaleMode(int))); connect(m_directUpdate, SIGNAL(triggered(bool)), this, SLOT(slotSetDirectUpdate(bool))); } @@ -132,23 +140,27 @@ DragValue::DragValue(const QString &label, double defaultValue, int decimals, do DragValue::~DragValue() { - if (m_intEdit) delete m_intEdit; - if (m_doubleEdit) delete m_doubleEdit; + delete m_intEdit; + delete m_doubleEdit; delete m_menu; - delete m_scale; - delete m_directUpdate; + //delete m_scale; + //delete m_directUpdate; } int DragValue::spinSize() { - if (m_intEdit) return m_intEdit->sizeHint().width(); - else return m_doubleEdit->sizeHint().width(); + if (m_intEdit) + return m_intEdit->sizeHint().width(); + else + return m_doubleEdit->sizeHint().width(); } void DragValue::setSpinSize(int width) { - if (m_intEdit) m_intEdit->setMinimumWidth(width); - else m_doubleEdit->setMinimumWidth(width); + if (m_intEdit) + m_intEdit->setMinimumWidth(width); + else + m_doubleEdit->setMinimumWidth(width); } void DragValue::slotSetInTimeline() @@ -179,24 +191,34 @@ qreal DragValue::value() const void DragValue::setMaximum(qreal max) { - m_maximum = max; - if (m_intEdit) m_intEdit->setRange(m_minimum, m_maximum); - else m_doubleEdit->setRange(m_minimum, m_maximum); + if (m_maximum != max) { + m_maximum = max; + if (m_intEdit) + m_intEdit->setRange(m_minimum, m_maximum); + else + m_doubleEdit->setRange(m_minimum, m_maximum); + } } void DragValue::setMinimum(qreal min) { - m_minimum = min; - if (m_intEdit) m_intEdit->setRange(m_minimum, m_maximum); - else m_doubleEdit->setRange(m_minimum, m_maximum); + if (m_minimum != min) { + m_minimum = min; + if (m_intEdit) + m_intEdit->setRange(m_minimum, m_maximum); + else + m_doubleEdit->setRange(m_minimum, m_maximum); + } } void DragValue::setRange(qreal min, qreal max) { m_maximum = max; m_minimum = min; - if (m_intEdit) m_intEdit->setRange(m_minimum, m_maximum); - else m_doubleEdit->setRange(m_minimum, m_maximum); + if (m_intEdit) + m_intEdit->setRange(m_minimum, m_maximum); + else + m_doubleEdit->setRange(m_minimum, m_maximum); } void DragValue::setPrecision(int /*precision*/) @@ -236,19 +258,21 @@ void DragValue::slotReset() 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); - else setValue(value, final); + if (m_decimals == 0) + setValue(qRound(value), final); + else + setValue(value, final); } void DragValue::setValue(double value, bool final) @@ -270,8 +294,19 @@ void DragValue::setValue(double value, bool 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()); @@ -287,7 +322,7 @@ void DragValue::slotEditingFinished() 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(); @@ -338,24 +373,24 @@ void DragValue::setInTimelineProperty(bool intimeline) } -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_step(10.0) - //m_precision(pow(10, precision)), + //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"); } @@ -460,13 +495,13 @@ void CustomLabel::slotValueDec(double factor) 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) @@ -474,5 +509,14 @@ 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"