From 052a54cda58f34e15d0f353671c9f933dd35ea10 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Tue, 15 Feb 2011 00:25:08 +0000 Subject: [PATCH] * Cleanup timecode display widget * Fix guide inserted at wrong pos when editing time in dialog svn path=/trunk/kdenlive/; revision=5409 --- src/CMakeLists.txt | 1 - src/abstractscopewidget.cpp | 2 + src/clipdurationdialog.cpp | 1 + src/customtrackview.cpp | 3 +- src/geometrywidget.cpp | 7 +- src/positionedit.cpp | 1 + src/smallruler.cpp | 1 + src/timecodedisplay.cpp | 102 +++++++++++++---------- src/timecodedisplay.h | 13 +-- src/widgets/timecodedisplay_ui.ui | 131 ------------------------------ 10 files changed, 79 insertions(+), 183 deletions(-) delete mode 100644 src/widgets/timecodedisplay_ui.ui diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 817fb835..555e3b48 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -120,7 +120,6 @@ kde4_add_ui_files(kdenlive_UI widgets/cliptranscode_ui.ui widgets/templateclip_ui.ui widgets/keyframeeditor_ui.ui - widgets/timecodedisplay_ui.ui widgets/tracksconfigdialog_ui.ui widgets/urlval_ui.ui widgets/vectorscope_ui.ui diff --git a/src/abstractscopewidget.cpp b/src/abstractscopewidget.cpp index a3b328cd..2ef642bb 100644 --- a/src/abstractscopewidget.cpp +++ b/src/abstractscopewidget.cpp @@ -20,6 +20,8 @@ #include #include +#include + // Uncomment for Scope debugging. //#define DEBUG_ASW diff --git a/src/clipdurationdialog.cpp b/src/clipdurationdialog.cpp index 920ca288..6365bdf1 100644 --- a/src/clipdurationdialog.cpp +++ b/src/clipdurationdialog.cpp @@ -23,6 +23,7 @@ #include #include +#include #include diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index b7cda93f..fa107694 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -4997,7 +4997,8 @@ void CustomTrackView::slotAddGuide(bool dialog) if (dialog) { MarkerDialog d(NULL, marker, m_document->timecode(), i18n("Add Guide"), this); if (d.exec() != QDialog::Accepted) return; - marker.setComment(d.newMarker().comment()); + marker = d.newMarker(); + } else { marker.setComment(m_document->timecode().getDisplayTimecodeFromFrames(m_cursorPos, false)); } diff --git a/src/geometrywidget.cpp b/src/geometrywidget.cpp index efb8613c..7eae9fd8 100644 --- a/src/geometrywidget.cpp +++ b/src/geometrywidget.cpp @@ -300,12 +300,14 @@ void GeometryWidget::slotPositionChanged(int pos, bool seek) m_scene->removeItem(m_previous); } } + else if (m_previous && m_previous->scene() && m_previous->data(Qt::UserRole).toInt() == previousItem.frame()) { + // previous frame already here, do nothing + } else { if (m_previous == NULL) { m_previous = new QGraphicsRectItem(0, 0, previousItem.w(), previousItem.h()); m_previous->setBrush(QColor(200, 200, 0, 20)); m_previous->setPen(QPen(Qt::white, 0, Qt::DotLine)); - m_previous->setPos(previousItem.x(), previousItem.y()); m_previous->setZValue(-1); m_previous->setEnabled(false); @@ -314,7 +316,8 @@ void GeometryWidget::slotPositionChanged(int pos, bool seek) m_previous->setPos(previousItem.x(), previousItem.y()); m_previous->setRect(0, 0, previousItem.w(), previousItem.h()); } - m_scene->addItem(m_previous); + m_previous->setData(Qt::UserRole, previousItem.frame()); + if (m_previous->scene() == 0) m_scene->addItem(m_previous); } m_rect->setPos(item.x(), item.y()); diff --git a/src/positionedit.cpp b/src/positionedit.cpp index 51ac2dfb..f03b8da3 100644 --- a/src/positionedit.cpp +++ b/src/positionedit.cpp @@ -23,6 +23,7 @@ #include #include +#include PositionEdit::PositionEdit(const QString name, int pos, int min, int max, const Timecode tc, QWidget* parent) : QWidget(parent) diff --git a/src/smallruler.cpp b/src/smallruler.cpp index 4011bf3c..5f287b35 100644 --- a/src/smallruler.cpp +++ b/src/smallruler.cpp @@ -23,6 +23,7 @@ #include #include +#include #include #include diff --git a/src/timecodedisplay.cpp b/src/timecodedisplay.cpp index 55d5fd08..72cb9a5b 100644 --- a/src/timecodedisplay.cpp +++ b/src/timecodedisplay.cpp @@ -27,43 +27,44 @@ #include #include #include - +#include +#include +#include TimecodeDisplay::TimecodeDisplay(Timecode t, QWidget *parent) - : QWidget(parent), + : QAbstractSpinBox(parent), m_timecode(t), m_minimum(0), m_maximum(-1) { - setupUi(this); - lineedit->setFont(KGlobalSettings::toolBarFont()); - QFontMetrics fm = lineedit->fontMetrics(); - lineedit->setMaximumWidth(fm.width("88:88:88:888")); - setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); + lineEdit()->setFont(KGlobalSettings::toolBarFont()); + lineEdit()->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + QFontMetrics fm = lineEdit()->fontMetrics(); + setMinimumWidth(fm.width("88:88:88:88888888") + contentsMargins().right() + contentsMargins().right()); + setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum); + setAccelerated(true); 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))); + connect(lineEdit(), SIGNAL(returnPressed()), this, SLOT(slotEditingFinished())); + connect(lineEdit(), SIGNAL(cursorPositionChanged(int, int)), this, SLOT(slotCursorPositionChanged(int, int))); } -void TimecodeDisplay::slotValueUp() +// virtual protected +QAbstractSpinBox::StepEnabled TimecodeDisplay::stepEnabled () const { - int val = getValue(); - val++; - setValue(val); - lineedit->clearFocus(); - emit editingFinished(); + QAbstractSpinBox::StepEnabled result = QAbstractSpinBox::StepNone; + if (getValue() > m_minimum) result |= QAbstractSpinBox::StepDownEnabled; + if (m_maximum == -1 || getValue() < m_maximum) result |= QAbstractSpinBox::StepUpEnabled; + return result; } -void TimecodeDisplay::slotValueDown() +// virtual +void TimecodeDisplay::stepBy(int steps) { int val = getValue(); - val--; + val += steps; setValue(val); - lineedit->clearFocus(); emit editingFinished(); } @@ -73,11 +74,11 @@ void TimecodeDisplay::setTimeCodeFormat(bool frametimecode, bool init) int val = getValue(); m_frametimecode = frametimecode; if (m_frametimecode) { - QIntValidator *valid = new QIntValidator(lineedit); + QIntValidator *valid = new QIntValidator(lineEdit()); valid->setBottom(0); - lineedit->setValidator(valid); + lineEdit()->setValidator(valid); } else { - lineedit->setValidator(m_timecode.validator()); + lineEdit()->setValidator(m_timecode.validator()); } setValue(val); } @@ -95,21 +96,28 @@ void TimecodeDisplay::updateTimeCode(Timecode t) void TimecodeDisplay::keyPressEvent(QKeyEvent *e) { - if (e->key() == Qt::Key_Up) - slotValueUp(); - else if (e->key() == Qt::Key_Down) - slotValueDown(); + if (e->key() == Qt::Key_Return) + slotEditingFinished(); else - QWidget::keyPressEvent(e); + QAbstractSpinBox::keyPressEvent(e); } +void TimecodeDisplay::mouseReleaseEvent(QMouseEvent *e) +{ + QAbstractSpinBox::mouseReleaseEvent(e); + if (!lineEdit()->underMouse()) { + clearFocus(); + } +} + +/* void TimecodeDisplay::wheelEvent(QWheelEvent *e) { if (e->delta() > 0) slotValueUp(); else slotValueDown(); -} +}*/ int TimecodeDisplay::maximum() const @@ -124,8 +132,8 @@ int TimecodeDisplay::minimum() const int TimecodeDisplay::getValue() const { - if (m_frametimecode) return lineedit->text().toInt(); - else return m_timecode.getFrameCount(lineedit->text()); + if (m_frametimecode) return lineEdit()->text().toInt(); + else return m_timecode.getFrameCount(lineEdit()->text()); } GenTime TimecodeDisplay::gentime() const @@ -156,15 +164,15 @@ void TimecodeDisplay::setValue(int value) 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 == 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)); + lineEdit()->setText(QString::number(value)); else { QString v = m_timecode.getTimecodeFromFrames(value); - lineedit->setText(v); + lineEdit()->setText(v); } } @@ -175,24 +183,32 @@ void TimecodeDisplay::setValue(GenTime value) void TimecodeDisplay::slotCursorPositionChanged(int oldPos, int newPos) { - lineedit->blockSignals(true); - QString text = lineedit->text(); + 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); + lineEdit()->setSelection(newPos, -1); else - lineedit->setSelection(newPos + 2, -1); + lineEdit()->setSelection(newPos + 2, -1); } else if (newPos < text.size()) { - lineedit->setSelection(newPos + 1, -1); + lineEdit()->setSelection(newPos + 1, -1); } else { - lineedit->setSelection(newPos, -1); + lineEdit()->setSelection(newPos, -1); } - lineedit->blockSignals(false); + lineEdit()->blockSignals(false); +} + +void TimecodeDisplay::slotEditingFinished() +{ + clearFocus(); + lineEdit()->deselect(); + emit editingFinished(); } #include diff --git a/src/timecodedisplay.h b/src/timecodedisplay.h index 28045886..a18f757f 100644 --- a/src/timecodedisplay.h +++ b/src/timecodedisplay.h @@ -20,10 +20,10 @@ #ifndef TIMECODEDISPLAY_H_ #define TIMECODEDISPLAY_H_ -#include "ui_timecodedisplay_ui.h" #include "timecode.h" #include "gentime.h" +#include /** * @class TimecodeDisplay @@ -33,7 +33,7 @@ * TimecodeDisplay can be used to insert eigther frames * or a timecode in the format HH:MM:SS:FF */ -class TimecodeDisplay : public QWidget, public Ui::TimecodeDisplay_UI +class TimecodeDisplay : public QAbstractSpinBox { Q_OBJECT @@ -74,6 +74,8 @@ public: * @param t the new timecode */ void updateTimeCode(Timecode t); + virtual void stepBy(int steps); + private: /** timecode for widget */ Timecode m_timecode; @@ -95,8 +97,7 @@ public slots: void slotUpdateTimeCodeFormat(); private slots: - void slotValueUp(); - void slotValueDown(); + void slotEditingFinished(); /** @brief Updates the selection when the cursor position changed. * The digit after the cursor will be selected. @@ -115,7 +116,9 @@ signals: protected: virtual void keyPressEvent(QKeyEvent *e); - virtual void wheelEvent(QWheelEvent *e); + virtual void mouseReleaseEvent(QMouseEvent *); +// virtual void wheelEvent(QWheelEvent *e); + virtual QAbstractSpinBox::StepEnabled stepEnabled () const; }; diff --git a/src/widgets/timecodedisplay_ui.ui b/src/widgets/timecodedisplay_ui.ui deleted file mode 100644 index b31dbc8e..00000000 --- a/src/widgets/timecodedisplay_ui.ui +++ /dev/null @@ -1,131 +0,0 @@ - - - TimecodeDisplay_UI - - - - 0 - 0 - 128 - 25 - - - - Form - - - - 0 - - - -1 - - - - - QToolButton {border: 0px;} - - - QFrame::StyledPanel - - - QFrame::Raised - - - - 0 - - - 0 - - - - - - 0 - 0 - - - - false - - - false - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - 1 - - - - - ... - - - - 4 - 4 - - - - true - - - Qt::UpArrow - - - - - - - ... - - - - 4 - 4 - - - - true - - - Qt::DownArrow - - - - - - - - - Qt::Vertical - - - - - - - - - - - KLineEdit - QLineEdit -
klineedit.h
-
- - KRestrictedLine - KLineEdit -
krestrictedline.h
-
-
- - -
-- 2.39.2