X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fclipdurationdialog.cpp;h=5f144bdc512a361a4b53683e1d778fb6506f0f19;hb=05d5da65489ab125958e4f62ded8987bcf4989aa;hp=c350a8c78c79215577baf02c18f138e51010ad58;hpb=e1b746a08a8be305359099eda56ae1cf091b8314;p=kdenlive diff --git a/src/clipdurationdialog.cpp b/src/clipdurationdialog.cpp index c350a8c7..5f144bdc 100644 --- a/src/clipdurationdialog.cpp +++ b/src/clipdurationdialog.cpp @@ -18,18 +18,31 @@ ***************************************************************************/ -#include - #include "clipdurationdialog.h" +#include "clipitem.h" #include "kdenlivesettings.h" + +#include + #include -ClipDurationDialog::ClipDurationDialog(AbstractClipItem *clip, Timecode tc, QWidget * parent): QDialog(parent), m_tc(tc), m_clip(clip) { +ClipDurationDialog::ClipDurationDialog(AbstractClipItem *clip, Timecode tc, QWidget * parent): + QDialog(parent), + m_clip(clip), + m_tc(tc) +{ setFont(KGlobalSettings::toolBarFont()); m_fps = m_tc.fps(); m_view.setupUi(this); - if (clip->type() == TRANSITIONWIDGET) { + bool allowCrop = true; + if (clip->type() == AVWIDGET) { + ClipItem *item = static_cast (clip); + int t = item->clipType(); + if (t == COLOR || t == IMAGE || t == TEXT) allowCrop = false; + } + + if (!allowCrop || clip->type() == TRANSITIONWIDGET) { m_view.crop_up->hide(); m_view.crop_down->hide(); m_view.crop_position->hide(); @@ -45,28 +58,77 @@ ClipDurationDialog::ClipDurationDialog(AbstractClipItem *clip, Timecode tc, QWid connect(m_view.crop_down, SIGNAL(clicked()), this, SLOT(slotCropDown())); connect(m_view.duration_up, SIGNAL(clicked()), this, SLOT(slotDurUp())); connect(m_view.duration_down, SIGNAL(clicked()), this, SLOT(slotDurDown())); - + connect(m_view.crop_position, SIGNAL(textChanged(const QString &)), this, SLOT(slotCheckCrop())); adjustSize(); } -ClipDurationDialog::~ClipDurationDialog() { +ClipDurationDialog::~ClipDurationDialog() +{ +} + +void ClipDurationDialog::setMargins(GenTime min, GenTime max) +{ + m_min = min; + m_max = max; + connect(m_view.clip_position, SIGNAL(textChanged(const QString &)), this, SLOT(slotCheckStart())); + connect(m_view.clip_duration, SIGNAL(textChanged(const QString &)), this, SLOT(slotCheckDuration())); +} + +void ClipDurationDialog::slotCheckStart() +{ + int pos = m_tc.getFrameCount(m_view.clip_position->text(), m_fps); + int dur = m_tc.getFrameCount(m_view.clip_duration->text(), m_fps); + GenTime start(pos, m_fps); + GenTime duration(dur, m_fps); + if (start < m_min) { + m_view.clip_position->setText(m_tc.getTimecode(m_min, m_fps)); + } else if (start + duration > m_max) { + m_view.clip_position->setText(m_tc.getTimecode(m_max - duration, m_fps)); + } +} + +void ClipDurationDialog::slotCheckDuration() +{ + int pos = m_tc.getFrameCount(m_view.clip_position->text(), m_fps); + int dur = m_tc.getFrameCount(m_view.clip_duration->text(), m_fps); + GenTime start(pos, m_fps); + GenTime duration(dur, m_fps); + GenTime maxDuration = m_max == GenTime() ? start + m_clip->maxDuration() : qMin(m_max, start + m_clip->maxDuration()); + if (start + duration > maxDuration) { + m_view.clip_duration->setText(m_tc.getTimecode(maxDuration - start, m_fps)); + } +} + +void ClipDurationDialog::slotCheckCrop() +{ + int dur = m_tc.getFrameCount(m_view.clip_duration->text(), m_fps); + int crop = m_tc.getFrameCount(m_view.crop_position->text(), m_fps); + GenTime duration(dur, m_fps); + GenTime cropStart(crop, m_fps); + GenTime maxDuration = m_clip->maxDuration(); + if (cropStart + duration > maxDuration) { + m_view.crop_position->setText(m_tc.getTimecode(maxDuration - duration, m_fps)); + } } -void ClipDurationDialog::slotPosUp() { +void ClipDurationDialog::slotPosUp() +{ int position = m_tc.getFrameCount(m_view.clip_position->text(), m_fps); //if (duration >= m_clip->duration().frames(m_fps)) return; position ++; m_view.clip_position->setText(m_tc.getTimecode(GenTime(position, m_fps), m_fps)); } -void ClipDurationDialog::slotPosDown() { +void ClipDurationDialog::slotPosDown() +{ int position = m_tc.getFrameCount(m_view.clip_position->text(), m_fps); //if (duration >= m_clip->duration().frames(m_fps)) return; position --; m_view.clip_position->setText(m_tc.getTimecode(GenTime(position, m_fps), m_fps)); } -void ClipDurationDialog::slotDurUp() { +void ClipDurationDialog::slotDurUp() +{ int duration = m_tc.getFrameCount(m_view.clip_duration->text(), m_fps); int crop = m_tc.getFrameCount(m_view.crop_position->text(), m_fps); if (duration + crop > m_clip->maxDuration().frames(m_fps)) return; @@ -74,14 +136,16 @@ void ClipDurationDialog::slotDurUp() { m_view.clip_duration->setText(m_tc.getTimecode(GenTime(duration, m_fps), m_fps)); } -void ClipDurationDialog::slotDurDown() { +void ClipDurationDialog::slotDurDown() +{ int duration = m_tc.getFrameCount(m_view.clip_duration->text(), m_fps); if (duration <= 0) return; duration --; m_view.clip_duration->setText(m_tc.getTimecode(GenTime(duration, m_fps), m_fps)); } -void ClipDurationDialog::slotCropUp() { +void ClipDurationDialog::slotCropUp() +{ int crop = m_tc.getFrameCount(m_view.crop_position->text(), m_fps); int duration = m_tc.getFrameCount(m_view.clip_duration->text(), m_fps); if (duration + crop > m_clip->maxDuration().frames(m_fps)) return; @@ -89,30 +153,34 @@ void ClipDurationDialog::slotCropUp() { m_view.crop_position->setText(m_tc.getTimecode(GenTime(crop, m_fps), m_fps)); } -void ClipDurationDialog::slotCropDown() { +void ClipDurationDialog::slotCropDown() +{ int crop = m_tc.getFrameCount(m_view.crop_position->text(), m_fps); if (crop <= 0) return; crop --; m_view.crop_position->setText(m_tc.getTimecode(GenTime(crop, m_fps), m_fps)); } -GenTime ClipDurationDialog::startPos() const { +GenTime ClipDurationDialog::startPos() const +{ int pos = m_tc.getFrameCount(m_view.clip_position->text(), m_fps); return GenTime(pos, m_fps); } -GenTime ClipDurationDialog::cropStart() const { +GenTime ClipDurationDialog::cropStart() const +{ int pos = m_tc.getFrameCount(m_view.crop_position->text(), m_fps); return GenTime(pos, m_fps); } -GenTime ClipDurationDialog::duration() const { +GenTime ClipDurationDialog::duration() const +{ int pos = m_tc.getFrameCount(m_view.clip_duration->text(), m_fps); return GenTime(pos, m_fps); } -void ClipDurationDialog::wheelEvent(QWheelEvent * event) { - kDebug() << "jaa"; +void ClipDurationDialog::wheelEvent(QWheelEvent * event) +{ if (m_view.clip_position->underMouse()) { if (event->delta() > 0) slotPosUp();