X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fclipdurationdialog.cpp;h=24d5cb7b74da4d4d325a5a1923f2f1bec76af411;hb=56aee6aedeeed3efd10ada8fe3c229eddc01ef05;hp=b1a06c65240ebee54837ba02f193965b232b048c;hpb=4ac2b0261ed6a97d66afd1b902030d596019f01e;p=kdenlive diff --git a/src/clipdurationdialog.cpp b/src/clipdurationdialog.cpp index b1a06c65..24d5cb7b 100644 --- a/src/clipdurationdialog.cpp +++ b/src/clipdurationdialog.cpp @@ -20,186 +20,156 @@ #include "clipdurationdialog.h" #include "clipitem.h" -#include "kdenlivesettings.h" #include #include +#include #include -ClipDurationDialog::ClipDurationDialog(AbstractClipItem *clip, Timecode tc, QWidget * parent): +ClipDurationDialog::ClipDurationDialog(AbstractClipItem *clip, const Timecode &tc, const GenTime &min, const GenTime &max, QWidget * parent): QDialog(parent), m_clip(clip), - m_tc(tc) + m_min(min), + m_max(max) { setFont(KGlobalSettings::toolBarFont()); - m_fps = m_tc.fps(); - m_view.setupUi(this); + setupUi(this); + + m_pos = new TimecodeDisplay(tc); + m_cropStart = new TimecodeDisplay(tc); + m_dur = new TimecodeDisplay(tc); + m_cropEnd = new TimecodeDisplay(tc); + + clip_position_box->addWidget(m_pos); + crop_start_box->addWidget(m_cropStart); + clip_duration_box->addWidget(m_dur); + crop_end_box->addWidget(m_cropEnd); bool allowCrop = true; - if (clip->type() == AVWIDGET) { + if (clip->type() == AVWidget) { ClipItem *item = static_cast (clip); - int t = item->clipType(); - if (t == COLOR || t == IMAGE || t == TEXT) allowCrop = false; + const 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(); - m_view.crop_label->hide(); + if (!allowCrop || clip->type() == TransitionWidget) { + m_cropStart->setHidden(true); + crop_label->hide(); + m_cropEnd->setHidden(true), + end_label->hide(); } - m_view.clip_position->setText(tc.getTimecode(m_clip->startPos(), m_fps)); - m_view.crop_position->setText(tc.getTimecode(m_clip->cropStart(), m_fps)); - m_view.clip_duration->setText(tc.getTimecode(m_clip->duration(), m_fps)); - connect(m_view.position_up, SIGNAL(clicked()), this, SLOT(slotPosUp())); - connect(m_view.position_down, SIGNAL(clicked()), this, SLOT(slotPosDown())); - connect(m_view.crop_up, SIGNAL(clicked()), this, SLOT(slotCropUp())); - 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())); + m_crop = m_clip->cropStart(); + + m_pos->setValue(m_clip->startPos()); + m_dur->setValue(m_clip->cropDuration()); + m_cropStart->setValue(m_clip->cropStart()); + m_cropEnd->setValue(m_clip->maxDuration() - m_clip->cropDuration() - m_clip->cropStart()); + + connect(m_pos, SIGNAL(timeCodeEditingFinished()), this, SLOT(slotCheckStart())); + connect(m_dur, SIGNAL(timeCodeEditingFinished()), this, SLOT(slotCheckDuration())); + connect(m_cropStart, SIGNAL(timeCodeEditingFinished()), this, SLOT(slotCheckCrop())); + connect(m_cropEnd, SIGNAL(timeCodeEditingFinished()), this, SLOT(slotCheckEnd())); + adjustSize(); } 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())); + delete m_pos; + delete m_dur; + delete m_cropStart; + delete m_cropEnd; } 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 (m_min != GenTime() && start < m_min) { - m_view.clip_position->setText(m_tc.getTimecode(m_min, m_fps)); - } else if (m_max != GenTime() && start + duration > m_max) { - m_view.clip_position->setText(m_tc.getTimecode(m_max - duration, m_fps)); - } + GenTime start = m_pos->gentime(); + GenTime duration = m_dur->gentime(); + if (m_min != GenTime() && start < m_min) + m_pos->setValue(m_min); + else if (m_max != GenTime() && start + duration > m_max) + m_pos->setValue(m_max - duration); } 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 start = m_pos->gentime(); + GenTime duration = m_dur->gentime(); + GenTime cropStart = m_cropStart->gentime(); GenTime maxDuration; - if (m_clip->maxDuration() == GenTime()) maxDuration = m_max; - else maxDuration = m_max == GenTime() ? start + m_clip->maxDuration() : qMin(m_max, start + m_clip->maxDuration()); + + if (m_clip->maxDuration() == GenTime()) + maxDuration = m_max; + else + maxDuration = m_max == GenTime() ? start + m_clip->maxDuration() - cropStart : qMin(m_max, start + m_clip->maxDuration() - cropStart); + if (maxDuration != GenTime() && start + duration > maxDuration) { - m_view.clip_duration->setText(m_tc.getTimecode(maxDuration - start, m_fps)); + m_dur->blockSignals(true); + m_dur->setValue(maxDuration - start); + m_dur->blockSignals(false); } + + m_cropEnd->blockSignals(true); + m_cropEnd->setValue(m_clip->maxDuration() - m_dur->gentime() - cropStart); + m_cropEnd->blockSignals(false); } 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 duration = m_dur->gentime(); + GenTime cropStart = m_cropStart->gentime(); GenTime maxDuration = m_clip->maxDuration(); - if (maxDuration != GenTime() && cropStart + duration > maxDuration) { - m_view.crop_position->setText(m_tc.getTimecode(maxDuration - duration, m_fps)); - } -} - -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() -{ - 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() -{ - 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 (m_clip->maxDuration() != GenTime() && duration + crop > m_clip->maxDuration().frames(m_fps)) return; - duration ++; - m_view.clip_duration->setText(m_tc.getTimecode(GenTime(duration, m_fps), m_fps)); -} + GenTime diff = cropStart - m_crop; + if ((diff > GenTime() && diff < duration) || diff < GenTime()) { + duration -= diff; + } else { + m_cropStart->setValue(m_crop); + return; + } -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)); + if (maxDuration != GenTime() && cropStart + duration > maxDuration) { + m_cropStart->setValue(m_crop); + } else { + m_crop = cropStart; + m_dur->blockSignals(true); + m_dur->setValue(duration); + m_dur->blockSignals(false); + } } -void ClipDurationDialog::slotCropUp() +void ClipDurationDialog::slotCheckEnd() { - 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 (m_clip->maxDuration() != GenTime() && duration + crop > m_clip->maxDuration().frames(m_fps)) return; - crop ++; - m_view.crop_position->setText(m_tc.getTimecode(GenTime(crop, m_fps), m_fps)); -} + GenTime cropStart = m_cropStart->gentime(); + GenTime cropEnd = m_cropEnd->gentime(); + GenTime duration = m_clip->maxDuration() - cropEnd - cropStart; -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)); + if (duration >= GenTime()) { + m_dur->setValue(duration); + slotCheckDuration(); + } else { + m_cropEnd->blockSignals(true); + m_cropEnd->setValue(m_clip->maxDuration() - m_dur->gentime() - cropStart); + m_cropEnd->blockSignals(false); + } } GenTime ClipDurationDialog::startPos() const { - int pos = m_tc.getFrameCount(m_view.clip_position->text(), m_fps); - return GenTime(pos, m_fps); + return m_pos->gentime(); } GenTime ClipDurationDialog::cropStart() const { - int pos = m_tc.getFrameCount(m_view.crop_position->text(), m_fps); - return GenTime(pos, m_fps); + return m_cropStart->gentime(); } 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) -{ - if (m_view.clip_position->underMouse()) { - if (event->delta() > 0) - slotPosUp(); - else - slotPosDown(); - } else if (m_view.clip_duration->underMouse()) { - if (event->delta() > 0) - slotDurUp(); - else - slotDurDown(); - } else if (m_view.crop_position->underMouse()) { - if (event->delta() > 0) - slotCropUp(); - else - slotCropDown(); - } + return m_dur->gentime(); } #include "clipdurationdialog.moc"