lineedit->setFont(KGlobalSettings::toolBarFont());
QFontMetrics fm = lineedit->fontMetrics();
lineedit->setMaximumWidth(fm.width("88:88:88:888"));
- setSizePolicy(QSizePolicy::Maximum, QSizePolicy::MinimumExpanding);
-
+ setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);
+
setTimeCodeFormat(KdenliveSettings::frametimecode(), true);
connect(uparrow, SIGNAL(clicked()), this, SLOT(slotValueUp()));
connect(downarrow, SIGNAL(clicked()), this, SLOT(slotValueDown()));
connect(lineedit, SIGNAL(editingFinished()), this, SIGNAL(editingFinished()));
+ connect(lineedit, SIGNAL(cursorPositionChanged(int, int)), this, SLOT(slotCursorPositionChanged(int, int)));
}
void TimecodeDisplay::slotValueUp()
{
- int val = value();
+ int val = getValue();
val++;
setValue(val);
lineedit->clearFocus();
void TimecodeDisplay::slotValueDown()
{
- int val = value();
+ int val = getValue();
val--;
setValue(val);
lineedit->clearFocus();
void TimecodeDisplay::setTimeCodeFormat(bool frametimecode, bool init)
{
if (!init && m_frametimecode == frametimecode) return;
- int val = value();
+ int val = getValue();
m_frametimecode = frametimecode;
if (m_frametimecode) {
QIntValidator *valid = new QIntValidator(lineedit);
return m_minimum;
}
-int TimecodeDisplay::value() const
+int TimecodeDisplay::getValue() const
{
if (m_frametimecode) return lineedit->text().toInt();
else return m_timecode.getFrameCount(lineedit->text());
GenTime TimecodeDisplay::gentime() const
{
- return GenTime(value(), m_timecode.fps());
+ return GenTime(getValue(), m_timecode.fps());
}
Timecode TimecodeDisplay::timecode() const
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
- lineedit->setText(m_timecode.getTimecodeFromFrames(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)
+{
+ 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);
+}
+
#include <timecodedisplay.moc>