setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
setAccelerated(true);
+ setValue(m_minimum);
+
setTimeCodeFormat(KdenliveSettings::frametimecode(), true);
- connect(lineEdit(), SIGNAL(returnPressed()), this, SLOT(slotEditingFinished()));
- connect(lineEdit(), SIGNAL(cursorPositionChanged(int, int)), this, SLOT(slotCursorPositionChanged(int, int)));
+ connect(lineEdit(), SIGNAL(editingFinished()), this, SLOT(slotEditingFinished()));
}
// virtual protected
QAbstractSpinBox::StepEnabled TimecodeDisplay::stepEnabled () const
{
QAbstractSpinBox::StepEnabled result = QAbstractSpinBox::StepNone;
- if (getValue() > m_minimum) result |= QAbstractSpinBox::StepDownEnabled;
- if (m_maximum == -1 || getValue() < m_maximum) result |= QAbstractSpinBox::StepUpEnabled;
+ if (m_value > m_minimum) result |= QAbstractSpinBox::StepDownEnabled;
+ if (m_maximum == -1 || m_value < m_maximum) result |= QAbstractSpinBox::StepUpEnabled;
return result;
}
// virtual
void TimecodeDisplay::stepBy(int steps)
{
- int val = getValue();
- val += steps;
+ int val = m_value + steps;
setValue(val);
emit editingFinished();
}
void TimecodeDisplay::setTimeCodeFormat(bool frametimecode, bool init)
{
if (!init && m_frametimecode == frametimecode) return;
- int val = getValue();
m_frametimecode = frametimecode;
+ lineEdit()->clear();
if (m_frametimecode) {
QIntValidator *valid = new QIntValidator(lineEdit());
valid->setBottom(0);
lineEdit()->setValidator(valid);
+ lineEdit()->setInputMask(QString());
} else {
- lineEdit()->setValidator(m_timecode.validator());
+ lineEdit()->setValidator(0);
+ lineEdit()->setInputMask(m_timecode.mask());
}
- setValue(val);
+ setValue(m_value);
}
void TimecodeDisplay::slotUpdateTimeCodeFormat()
void TimecodeDisplay::keyPressEvent(QKeyEvent *e)
{
- if (e->key() == Qt::Key_Return)
- slotEditingFinished();
+ if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) {
+ e->setAccepted(true);
+ clearFocus();
+ }
else
QAbstractSpinBox::keyPressEvent(e);
}
int TimecodeDisplay::getValue() const
{
- if (m_frametimecode) return lineEdit()->text().toInt();
- else return m_timecode.getFrameCount(lineEdit()->text());
+ return m_value;
}
GenTime TimecodeDisplay::gentime() const
{
- return GenTime(getValue(), m_timecode.fps());
+ return GenTime(m_value, m_timecode.fps());
}
Timecode TimecodeDisplay::timecode() const
value = m_minimum;
if (m_maximum > m_minimum && value > m_maximum)
value = m_maximum;
-
- if (value == getValue() && !lineEdit()->text().isEmpty()) return;
- //downarrow->setEnabled(value > m_minimum);
- //uparrow->setEnabled(m_maximum < m_minimum || value < m_maximum);
+ if (value == m_value && !lineEdit()->text().isEmpty()) return;
+ m_value = value;
if (m_frametimecode)
lineEdit()->setText(QString::number(value));
void TimecodeDisplay::setValue(GenTime value)
{
- setValue(m_timecode.getTimecode(value));
+ setValue((int) value.frames(m_timecode.fps()));
}
-void TimecodeDisplay::slotCursorPositionChanged(int oldPos, int newPos)
-{
- if (!lineEdit()->hasFocus()) return;
- lineEdit()->blockSignals(true);
- QString text = lineEdit()->text();
-
- if (newPos < text.size() && !text.at(newPos).isDigit()) {
- // char at newPos is a separator (':' or ';')
-
- // make it possible move the cursor backwards at separators
- if (newPos == oldPos - 1)
- lineEdit()->setSelection(newPos, -1);
- else
- lineEdit()->setSelection(newPos + 2, -1);
- } else if (newPos < text.size()) {
- lineEdit()->setSelection(newPos + 1, -1);
- } else {
- lineEdit()->setSelection(newPos, -1);
- }
-
- lineEdit()->blockSignals(false);
-}
void TimecodeDisplay::slotEditingFinished()
{
- clearFocus();
lineEdit()->deselect();
+ if (m_frametimecode) setValue(lineEdit()->text().toInt());
+ else setValue(lineEdit()->text());
emit editingFinished();
}