X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fclipdurationdialog.cpp;h=5f144bdc512a361a4b53683e1d778fb6506f0f19;hb=8e0ffafc0c98fba592aa4d6dd713372d2e6246b9;hp=36e676064383590474d8a3a8259c5a01b5fea325;hpb=14a427fb91b1f43f7260f6d274e57c67f6c5b3c6;p=kdenlive diff --git a/src/clipdurationdialog.cpp b/src/clipdurationdialog.cpp index 36e67606..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,21 +58,24 @@ 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) { +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() { +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); @@ -71,31 +87,48 @@ void ClipDurationDialog::slotCheckStart() { } } -void ClipDurationDialog::slotCheckDuration() { +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); - if (start + duration > m_max) { - m_view.clip_duration->setText(m_tc.getTimecode(m_max - start, 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; @@ -103,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; @@ -118,29 +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) { +void ClipDurationDialog::wheelEvent(QWheelEvent * event) +{ if (m_view.clip_position->underMouse()) { if (event->delta() > 0) slotPosUp();