- /* if (value < m_minimum)
- value = m_minimum;
- if (value > m_maximum)
- value = m_maximum;*/
- if (m_frametimecode) lineedit->setText(QString::number(value));
- else lineedit->setText(m_timecode.getTimecodeFromFrames(value));
-
- /* setEditText(KGlobal::locale()->formatNumber(value, d->decimals));
- d->slider->blockSignals(true);
- d->slider->setValue(int((value - d->minimum) * 256 / (d->maximum - d->minimum) + 0.5));
- d->slider->blockSignals(false);*/
- //emit valueChanged(value, true);
+ if (value < m_minimum)
+ 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 (m_frametimecode)
+ lineEdit()->setText(QString::number(value));
+ else {
+ QString v = m_timecode.getTimecodeFromFrames(value);
+ lineEdit()->setText(v);
+ }
+}
+
+void TimecodeDisplay::setValue(GenTime value)
+{
+ setValue(m_timecode.getTimecode(value));
+}
+
+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();
+ emit editingFinished();