X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Ftransitionsettings.cpp;h=304c6f9519ac2b4ba428c199cc2a4d39fe34a9db;hb=a63b443f9bad49c40071ff2fea1c8cb87d153a43;hp=db4f5f6ad5843569c010847c80893bb9e9e80d62;hpb=e1cc1742d09ffa31a50528b0bb0409a0e5f9393e;p=kdenlive diff --git a/src/transitionsettings.cpp b/src/transitionsettings.cpp index db4f5f6a..304c6f95 100644 --- a/src/transitionsettings.cpp +++ b/src/transitionsettings.cpp @@ -25,75 +25,119 @@ #include "kdenlivesettings.h" #include "mainwindow.h" -TransitionSettings::TransitionSettings(QWidget* parent): QWidget(parent) { +TransitionSettings::TransitionSettings(QWidget* parent): QWidget(parent), m_tracksCount(0), m_usedTransition(NULL) { ui.setupUi(this); effectEdit = new EffectStackEdit(ui.frame); connect(effectEdit, SIGNAL(seekTimeline(int)), this, SIGNAL(seekTimeline(int))); setEnabled(false); ui.transitionList->addItems(MainWindow::transitions.effectNames()); + for (int i = 0; i < ui.transitionList->count(); i++) { + ui.transitionList->setItemData(i, MainWindow::transitions.getInfoFromIndex(i), Qt::ToolTipRole); + } //kDebug() << MainWindow::transitions.effectNames().size(); //ui.listWidget->setCurrentRow(0); connect(ui.transitionList, SIGNAL(activated(int)), this, SLOT(slotTransitionChanged())); + connect(ui.transitionTrack, SIGNAL(activated(int)), this, SLOT(slotTransitionTrackChanged())); + connect(this, SIGNAL(transferParamDesc(const QDomElement&, int , int)), effectEdit , SLOT(transferParamDesc(const QDomElement&, int , int))); connect(effectEdit, SIGNAL(parameterChanged(const QDomElement&, const QDomElement&)), this , SLOT(slotUpdateEffectParams(const QDomElement&, const QDomElement&))); - ui.splitter->setStretchFactor(0, 1); - ui.splitter->setStretchFactor(1, 10); } -void TransitionSettings::updateProjectFormat(MltVideoProfile profile) { - effectEdit->updateProjectFormat(profile); +void TransitionSettings::updateProjectFormat(MltVideoProfile profile, Timecode t, const uint tracksCount) { + m_tracksCount = tracksCount; + effectEdit->updateProjectFormat(profile, t); + QStringList tracksList; + tracksList << i18n("Auto"); + for (uint i = 0; i < tracksCount; i++) { + tracksList << QString::number(i); + } + tracksList << i18n("Black"); + ui.transitionTrack->blockSignals(true); + ui.transitionTrack->clear(); + ui.transitionTrack->addItems(tracksList); + ui.transitionTrack->blockSignals(false); } -void TransitionSettings::slotTransitionChanged(bool reinit) { +void TransitionSettings::slotTransitionChanged(bool reinit, bool updateCurrent) { QDomElement e = m_usedTransition->toXML().cloneNode().toElement(); if (reinit) { - QDomElement newTransition = MainWindow::transitions.getEffectByName(ui.transitionList->currentText()); + // Reset the transition parameters to the default one + QDomElement newTransition = MainWindow::transitions.getEffectByName(ui.transitionList->currentText()).cloneNode().toElement(); slotUpdateEffectParams(e, newTransition); emit transferParamDesc(newTransition, m_usedTransition->startPos().frames(KdenliveSettings::project_fps()), m_usedTransition->endPos().frames(KdenliveSettings::project_fps())); - } else { + } else if (!updateCurrent) { + // Transition changed, update parameters dialog //slotUpdateEffectParams(e, e); - emit transferParamDesc(e, m_usedTransition->startPos().frames(KdenliveSettings::project_fps()), m_usedTransition->endPos().frames(KdenliveSettings::project_fps())); + effectEdit->transferParamDesc(e, m_usedTransition->startPos().frames(KdenliveSettings::project_fps()), m_usedTransition->endPos().frames(KdenliveSettings::project_fps())); + } else { + // Same transition, we just want to update the parameters value + slotUpdateEffectParams(e, e); } } -void TransitionSettings::slotTransitionItemSelected(Transition* t) { +void TransitionSettings::slotTransitionTrackChanged() { + if (m_usedTransition == NULL) return; + int ix = 0; + QDomElement oldxml = m_usedTransition->toXML().cloneNode().toElement(); + if (ui.transitionTrack->currentIndex() > 0) { + ix = ui.transitionTrack->count() - ui.transitionTrack->currentIndex() - 1; + m_usedTransition->setForcedTrack(true, ix); + effectEdit->updateParameter("force_track", "1"); + emit transitionUpdated(m_usedTransition, oldxml); + } else { + m_usedTransition->setForcedTrack(false, ix); + effectEdit->updateParameter("force_track", "0"); + emit transitionUpdated(m_usedTransition, oldxml); + } + effectEdit->updateParameter("transition_btrack", QString::number(ix)); +} + +void TransitionSettings::slotTransitionItemSelected(Transition* t, bool update) { setEnabled(t != NULL); if (t == m_usedTransition) { - if (t && (t->duration() != m_transitionDuration || t->startPos() != m_transitionStart)) { + if (t == NULL) return; + if (update) { + ui.transitionTrack->blockSignals(true); + if (t->forcedTrack()) ui.transitionTrack->setCurrentIndex(m_tracksCount + 1 - t->transitionEndTrack()); + else ui.transitionTrack->setCurrentIndex(0); + ui.transitionTrack->blockSignals(false); + } + if (update || t->duration() != m_transitionDuration || t->startPos() != m_transitionStart) { m_transitionDuration = t->duration(); m_transitionStart = t->startPos(); - slotTransitionChanged(false); + slotTransitionChanged(false, true); } return; - } - m_usedTransition = t; - if (m_usedTransition) { + } else if (update) return; + if (t) { m_transitionDuration = t->duration(); m_transitionStart = t->startPos(); - int ix = ui.transitionList->findText(m_usedTransition->transitionName(), Qt::MatchExactly); + ui.transitionTrack->blockSignals(true); + if (!t->forcedTrack()) ui.transitionTrack->setCurrentIndex(0); + else ui.transitionTrack->setCurrentIndex(m_tracksCount + 1 - t->transitionEndTrack()); + ui.transitionTrack->blockSignals(false); + int ix = ui.transitionList->findText(t->transitionName(), Qt::MatchExactly); + m_usedTransition = t; if (ix != -1) { ui.transitionList->blockSignals(true); ui.transitionList->setCurrentIndex(ix); - slotTransitionChanged(false); + slotTransitionChanged(false, false); ui.transitionList->blockSignals(false); } } } -void TransitionSettings::slotUpdateEffectParams(const QDomElement& oldparam, const QDomElement& param) { +void TransitionSettings::slotUpdateEffectParams(const QDomElement &oldparam, const QDomElement ¶m) { if (m_usedTransition) { m_usedTransition->setTransitionParameters(param); m_usedTransition->update(); } - /*QString test; - QTextStream str(&test); - oldparam.save(str, 2); - m_usedTransition->toXML().save(str, 2);*/ - //kDebug() << test; //oldparam must be also first given to Transition and then return the toXML() - if (oldparam != param) emit transitionUpdated(m_usedTransition, oldparam); + if (oldparam != param) { + emit transitionUpdated(m_usedTransition, oldparam); + } } void TransitionSettings::raiseWindow(QWidget* dock) {