m_view.clip_description->setText(m_clip->description());
QMap <QString, QString> props = m_clip->properties();
+ m_view.clip_force_out->setHidden(true);
+ m_view.clip_out->setHidden(true);
+
if (props.contains("force_aspect_ratio") && props.value("force_aspect_ratio").toDouble() > 0) {
m_view.clip_force_ar->setChecked(true);
m_view.clip_ar->setEnabled(true);
// Used for multiple clips editing
-ClipProperties::ClipProperties(QList <DocClipBase *>cliplist, QMap <QString, QString> commonproperties, QWidget * parent) :
+ClipProperties::ClipProperties(QList <DocClipBase *>cliplist, Timecode tc, QMap <QString, QString> commonproperties, QWidget * parent) :
QDialog(parent),
m_clip(NULL),
+ m_tc(tc),
m_fps(0),
m_count(0),
m_clipNeedsRefresh(false),
connect(m_view.clip_force_threads, SIGNAL(toggled(bool)), m_view.clip_threads, SLOT(setEnabled(bool)));
connect(m_view.clip_force_vindex, SIGNAL(toggled(bool)), m_view.clip_vindex, SLOT(setEnabled(bool)));
connect(m_view.clip_force_aindex, SIGNAL(toggled(bool)), m_view.clip_aindex, SLOT(setEnabled(bool)));
+ connect(m_view.clip_force_out, SIGNAL(toggled(bool)), m_view.clip_out, SLOT(setEnabled(bool)));
m_view.tabWidget->removeTab(METATAB);
m_view.tabWidget->removeTab(MARKERTAB);
m_view.clip_path->setHidden(true);
m_view.label_path->setHidden(true);
m_view.label_description->setHidden(true);
- m_view.label_duration->setHidden(true);
m_view.label_size->setHidden(true);
m_view.clip_filesize->setHidden(true);
m_view.clip_filesize->setHidden(true);
- m_view.clip_duration->setHidden(true);
m_view.clip_path->setHidden(true);
m_view.clip_description->setHidden(true);
+ m_view.clip_thumb->setHidden(true);
+ m_view.label_duration->setHidden(true);
+ m_view.clip_duration->setHidden(true);
+
+ if (commonproperties.contains("out")) {
+ if (commonproperties.value("out").toInt() > 0) {
+ m_view.clip_force_out->setChecked(true);
+ m_view.clip_out->setText(m_tc.getTimecodeFromFrames(commonproperties.value("out").toInt()));
+ } else m_view.clip_out->setText(KdenliveSettings::image_duration());
+ } else {
+ m_view.clip_force_out->setHidden(true);
+ m_view.clip_out->setHidden(true);
+ }
}
}
// If we adjust several clips, return now
- if (m_clip == NULL) return props;
+ if (m_clip == NULL) {
+ if (m_view.clip_out->isEnabled()) {
+ int duration = m_tc.getFrameCount(m_view.clip_out->text());
+ kDebug() << "// DURAT: " << duration << ", OLD: " << m_old_props.value("out").toInt();
+ if (duration != m_old_props.value("out").toInt()) {
+ props["out"] = QString::number(duration - 1);
+ }
+ }
+ return props;
+ }
if (m_old_props.value("description") != m_view.clip_description->text())
props["description"] = m_view.clip_description->text();
public:
ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidget * parent = 0);
- ClipProperties(QList <DocClipBase *>cliplist, QMap <QString, QString> commonproperties, QWidget * parent);
+ ClipProperties(QList <DocClipBase *>cliplist, Timecode tc, QMap <QString, QString> commonproperties, QWidget * parent);
QMap <QString, QString> properties();
const QString &clipId() const;
bool needsTimelineRefresh() const;
void MainWindow::slotShowClipProperties(QList <DocClipBase *> cliplist, QMap<QString, QString> commonproperties)
{
- ClipProperties dia(cliplist, commonproperties, this);
+ ClipProperties dia(cliplist, m_activeDocument->timecode(), commonproperties, this);
if (dia.exec() == QDialog::Accepted) {
QUndoCommand *command = new QUndoCommand();
command->setText(i18n("Edit clips"));
for (int i = 0; i < cliplist.count(); i++) {
DocClipBase *clip = cliplist.at(i);
- new EditClipCommand(m_projectList, clip->getId(), clip->properties(), dia.properties(), true, command);
+ new EditClipCommand(m_projectList, clip->getId(), commonproperties, dia.properties(), true, command);
}
m_activeDocument->commandStack()->push(command);
for (int i = 0; i < cliplist.count(); i++) {
commonproperties.insert("video_index", "-");
commonproperties.insert("audio_index", "-");
+ bool allowDurationChange = true;
+ int commonDuration = -1;
ProjectItem *item;
for (int i = 0; i < list.count(); i++) {
item = NULL;
// check properties
DocClipBase *clip = item->referencedClip();
if (clipList.contains(clip)) continue;
+ if (clip->clipType() != COLOR && clip->clipType() != IMAGE && clip->clipType() != TEXT) {
+ allowDurationChange = false;
+ }
+ if (allowDurationChange && commonDuration != 0) {
+ if (commonDuration == -1) {
+ commonDuration = clip->duration().frames(m_fps);
+ } else if (commonDuration != clip->duration().frames(m_fps)) {
+ commonDuration = 0;
+ }
+ }
clipList.append(clip);
QMap <QString, QString> clipprops = clip->properties();
QMapIterator<QString, QString> p(commonproperties);
}
}
}
+ if (allowDurationChange) commonproperties.insert("out", QString::number(commonDuration));
QMapIterator<QString, QString> p(commonproperties);
while (p.hasNext()) {
p.next();