X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Ftransitionsettings.cpp;h=d35798dfd5087af344caa26ef9a5233833f80292;hb=5fb0a5d3b0ed9357047d5b620617df5b2038ed40;hp=5d6af62ff7178e44ffab30dcd9cbdaab6680869d;hpb=2ff4712fe3d190972379a5d4648430d7a3542d4c;p=kdenlive diff --git a/src/transitionsettings.cpp b/src/transitionsettings.cpp index 5d6af62f..d35798df 100644 --- a/src/transitionsettings.cpp +++ b/src/transitionsettings.cpp @@ -15,46 +15,119 @@ * * ***************************************************************************/ + +#include + #include "transitionsettings.h" #include "transition.h" -#include #include "effectslist.h" #include "effectstackedit.h" +#include "kdenlivesettings.h" +#include "mainwindow.h" -TransitionSettings::TransitionSettings(EffectsList *transitions, QWidget* parent): QWidget(parent) { +TransitionSettings::TransitionSettings(QWidget* parent): QWidget(parent), m_tracksCount(0) { ui.setupUi(this); - effectEdit = new EffectStackEdit(ui.frame, this); + effectEdit = new EffectStackEdit(ui.frame); + connect(effectEdit, SIGNAL(seekTimeline(int)), this, SIGNAL(seekTimeline(int))); setEnabled(false); - m_transitions = transitions; - ui.listWidget->addItems(transitions->effectNames()); - kDebug() << transitions->effectNames().size() << " -" << transitions->size(); - connect(ui.listWidget, SIGNAL(currentRowChanged(int)), this, SLOT(slotTransitionChanged())); + 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&))); } +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() { - QDomElement e = m_usedTransition->toXML(); - //set old values from e in to desc (like reverse and so ) - QDomElement desc = m_transitions->getEffectByName(ui.listWidget->currentItem()->text()); - if (m_usedTransition) { - m_usedTransition->setTransitionParameters(desc); - m_usedTransition->update(); +void TransitionSettings::slotTransitionChanged(bool reinit) { + QDomElement e = m_usedTransition->toXML().cloneNode().toElement(); + if (reinit) { + QDomElement newTransition = MainWindow::transitions.getEffectByName(ui.transitionList->currentText()); + slotUpdateEffectParams(e, newTransition); + emit transferParamDesc(newTransition, m_usedTransition->startPos().frames(KdenliveSettings::project_fps()), m_usedTransition->endPos().frames(KdenliveSettings::project_fps())); + } else { + //slotUpdateEffectParams(e, e); + effectEdit->transferParamDesc(e, m_usedTransition->startPos().frames(KdenliveSettings::project_fps()), m_usedTransition->endPos().frames(KdenliveSettings::project_fps())); } - emit transitionUpdated(e, m_usedTransition->toXML()); - emit transferParamDesc(desc, 0, 0); +} +void TransitionSettings::slotTransitionTrackChanged() { + emit transitionTrackUpdated(m_usedTransition, ui.transitionTrack->currentIndex()); } -void TransitionSettings::slotTransitionItemSelected(Transition* t) { +void TransitionSettings::slotTransitionItemSelected(Transition* t, bool update) { setEnabled(t != NULL); + if (t == m_usedTransition) { + 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); + } + return; + } else if (update) return; m_usedTransition = t; + if (m_usedTransition) { + m_transitionDuration = t->duration(); + m_transitionStart = t->startPos(); + 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(m_usedTransition->transitionName(), Qt::MatchExactly); + if (ix != -1) { + ui.transitionList->blockSignals(true); + ui.transitionList->setCurrentIndex(ix); + slotTransitionChanged(false); + ui.transitionList->blockSignals(false); + } + } } void TransitionSettings::slotUpdateEffectParams(const QDomElement& oldparam, const QDomElement& param) { + 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); +} + +void TransitionSettings::raiseWindow(QWidget* dock) { + if (dock && m_usedTransition) + dock->raise(); - emit transitionUpdated(oldparam, param); } +