#include "clipdurationdialog.h"
#include "clipitem.h"
-#include "kdenlivesettings.h"
#include <KDebug>
+#include <KMessageBox>
+#include <KGlobalSettings>
#include <QWheelEvent>
-ClipDurationDialog::ClipDurationDialog(AbstractClipItem *clip, Timecode tc, QWidget * parent):
+ClipDurationDialog::ClipDurationDialog(AbstractClipItem *clip, Timecode tc, GenTime min, GenTime max, QWidget * parent):
QDialog(parent),
- m_tc(tc),
- m_clip(clip)
+ m_clip(clip),
+ 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) {
ClipItem *item = static_cast <ClipItem *>(clip);
int t = item->clipType();
- if (t == COLOR || t == IMAGE || t == TEXT) allowCrop = false;
+ 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();
+ 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(editingFinished()), this, SLOT(slotCheckStart()));
+ connect(m_dur, SIGNAL(editingFinished()), this, SLOT(slotCheckDuration()));
+ connect(m_cropStart, SIGNAL(editingFinished()), this, SLOT(slotCheckCrop()));
+ connect(m_cropEnd, SIGNAL(editingFinished()), 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 (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));
- }
+ 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 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));
- }
-}
+ GenTime start = m_pos->gentime();
+ GenTime duration = m_dur->gentime();
+ GenTime cropStart = m_cropStart->gentime();
+ GenTime maxDuration;
-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));
+ 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_dur->blockSignals(true);
+ m_dur->setValue(maxDuration - start);
+ m_dur->blockSignals(false);
}
-}
-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));
+ m_cropEnd->blockSignals(true);
+ m_cropEnd->setValue(m_clip->maxDuration() - m_dur->gentime() - cropStart);
+ m_cropEnd->blockSignals(false);
}
-void ClipDurationDialog::slotPosDown()
+void ClipDurationDialog::slotCheckCrop()
{
- 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));
-}
+ GenTime duration = m_dur->gentime();
+ GenTime cropStart = m_cropStart->gentime();
+ GenTime maxDuration = m_clip->maxDuration();
-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;
- 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 (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"