]> git.sesse.net Git - kdenlive/commitdiff
transitions use now same xmlfile than effects (dynamic build for internal transitions...
authorMarco Gittler <marco@gitma.de>
Mon, 24 Mar 2008 00:09:36 +0000 (00:09 +0000)
committerMarco Gittler <marco@gitma.de>
Mon, 24 Mar 2008 00:09:36 +0000 (00:09 +0000)
svn path=/branches/KDE4/; revision=2108

src/customtrackview.cpp
src/initeffects.cpp
src/transition.cpp
src/transition.h
src/transitionsettings.cpp

index 03196b171a7d60aec4769293043c41d556b9ecaa..ac3513c5181346afe7a02a710e36a18055adcdcf 100644 (file)
@@ -555,18 +555,24 @@ void CustomTrackView::slotAddTransition(ClipItem* clip , QDomElement transition,
 
 void CustomTrackView::addTransition(int startTrack, GenTime startPos , QDomElement e) {
     QMap < QString, QString> map;
+    QString s;
+    QTextStream tx(&s);
+    e.save(tx, 2);
+    kDebug() << "in" << s;
 
-    QDomNamedNodeMap attribs = e.attributes();
+    QDomNodeList attribs = e.elementsByTagName("parameter");
     for (int i = 0;i < attribs.count();i++) {
-        if (attribs.item(i).nodeName() != "type" &&
-                attribs.item(i).nodeName() != "start" &&
-                attribs.item(i).nodeName() != "end"
-           )
-            map[attribs.item(i).nodeName()] = attribs.item(i).nodeValue();
+        QDomNamedNodeMap atts = attribs.item(i).attributes();
+        if (!atts.namedItem("value").nodeValue().isEmpty()) {
+            map[atts.namedItem("name").nodeValue()] = atts.namedItem("value").nodeValue();
+        } else {
+            map[atts.namedItem("name").nodeValue()] = atts.namedItem("default").nodeValue();
+        }
+
     }
     //map["resource"] = "%luma12.pgm";
-    kDebug() << "---- ADDING transition " << e.attribute("type") << ", on tracks " << m_tracksList.count() - e.attribute("transition_track").toInt() << " / " << getPreviousVideoTrack(e.attribute("transition_track").toInt());
-    m_document->renderer()->mltAddTransition(e.attribute("type"), getPreviousVideoTrack(e.attribute("transition_track").toInt()), m_tracksList.count() - e.attribute("transition_track").toInt() ,
+    kDebug() << "---- ADDING transition " << e.attribute("tag") << ", on tracks " << m_tracksList.count() - e.attribute("transition_track").toInt() << " / " << getPreviousVideoTrack(e.attribute("transition_track").toInt());
+    m_document->renderer()->mltAddTransition(e.attribute("tag"), getPreviousVideoTrack(e.attribute("transition_track").toInt()), m_tracksList.count() - e.attribute("transition_track").toInt() ,
             GenTime(e.attribute("start").toInt(), m_document->renderer()->fps()),
             GenTime(e.attribute("end").toInt(), m_document->renderer()->fps()),
             map);
@@ -577,7 +583,7 @@ void CustomTrackView::addTransition(int startTrack, GenTime startPos , QDomEleme
 void CustomTrackView::deleteTransition(int, GenTime, QDomElement e) {
     QMap < QString, QString> map;
     QDomNamedNodeMap attribs = e.attributes();
-    m_document->renderer()->mltDeleteTransition(e.attribute("type"), getPreviousVideoTrack(e.attribute("transition_track").toInt()), m_tracksList.count() - e.attribute("transition_track").toInt() ,
+    m_document->renderer()->mltDeleteTransition(e.attribute("tag"), getPreviousVideoTrack(e.attribute("transition_track").toInt()), m_tracksList.count() - e.attribute("transition_track").toInt() ,
             GenTime(e.attribute("start").toInt(), m_document->renderer()->fps()),
             GenTime(e.attribute("end").toInt(), m_document->renderer()->fps()),
             map);
@@ -596,15 +602,18 @@ void CustomTrackView::updateTransition(int track, GenTime pos, QDomElement oldTr
     transition.save(tx, 2);
     kDebug() << "in" << s;
     QMap < QString, QString> map;
-    QDomNamedNodeMap attribs = transition.attributes();
+
+    QDomNodeList attribs = transition.elementsByTagName("parameter");
     for (int i = 0;i < attribs.count();i++) {
-        if (attribs.item(i).nodeName() != "type" &&
-                attribs.item(i).nodeName() != "start" &&
-                attribs.item(i).nodeName() != "end"
-           )
-            map[attribs.item(i).nodeName()] = attribs.item(i).nodeValue();
+        QDomNamedNodeMap atts = attribs.item(i).attributes();
+        if (!atts.namedItem("value").nodeValue().isEmpty()) {
+            map[atts.namedItem("name").nodeValue()] = atts.namedItem("value").nodeValue();
+        } else {
+            map[atts.namedItem("name").nodeValue()] = atts.namedItem("default").nodeValue();
+        }
+
     }
-    m_document->renderer()->mltUpdateTransition(oldTransition.attribute("type"), transition.attribute("type"), m_tracksList.count() - 1  - transition.attribute("transition_track").toInt(), m_tracksList.count() - transition.attribute("transition_track").toInt() ,
+    m_document->renderer()->mltUpdateTransition(oldTransition.attribute("tag"), transition.attribute("tag"), m_tracksList.count() - 1  - transition.attribute("transition_track").toInt(), m_tracksList.count() - transition.attribute("transition_track").toInt() ,
             GenTime(transition.attribute("start").toInt(), m_document->renderer()->fps()),
             GenTime(transition.attribute("end").toInt(), m_document->renderer()->fps()),
             map);
index e574dc9b14948d257735ae8052486b187d958ede..d1faac02e9d437274018b5571d1ea2a77ad85b18 100644 (file)
@@ -423,25 +423,14 @@ void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList*
             transitions->append(ret.documentElement());
             //kDebug() << ret.toString();
         } else {
-
+            QDomDocument ret;
+            QDomElement ktrans = ret.createElement("ktransition");
+            ret.appendChild(ktrans);
+            ktrans.setAttribute("tag", name);
+            QDomElement tname = ret.createElement("name");
             if (name == "luma") {
 
-                QDomDocument ret;
-                QDomElement ktrans = ret.createElement("ktransition");
-                ret.appendChild(ktrans);
-                ktrans.setAttribute("tag", name);
-                QDomElement tname = ret.createElement("name");
                 tname.appendChild(ret.createTextNode("Luma"));
-                ktrans.appendChild(tname);
-                transitions->append(ret.documentElement());
-
-                QDomDocument ret1;
-                QDomElement ktrans1 = ret1.createElement("ktransition");
-                ret1.appendChild(ktrans1);
-                ktrans1.setAttribute("tag", name);
-                QDomElement tname1 = ret.createElement("name");
-                tname1.appendChild(ret1.createTextNode("Lumafile"));
-                ktrans1.appendChild(tname1);
 
                 QString path(mlt_environment("MLT_DATA"));
                 path.append("/lumas/").append(mlt_environment("MLT_NORMALISATION"));
@@ -452,18 +441,9 @@ void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList*
                     kDebug() << "luma:" << entries.get(i);
                 }
 
-
-
-                transitions->append(ret1.documentElement());
             } else if (name == "composite") {
-                QDomDocument ret;
-                QDomElement ktrans = ret.createElement("ktransition");
-                ret.appendChild(ktrans);
-                ktrans.setAttribute("tag", name);
-                QDomElement tname = ret.createElement("name");
+
                 tname.appendChild(ret.createTextNode("Composite"));
-                ktrans.appendChild(tname);
-                transitions->append(ret.documentElement());
 
                 QDomDocument ret1;
                 QDomElement ktrans1 = ret1.createElement("ktransition");
@@ -471,36 +451,26 @@ void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList*
                 ktrans1.setAttribute("tag", name);
                 QDomElement tname1 = ret.createElement("name");
                 tname1.appendChild(ret1.createTextNode("PIP"));
-                ktrans1.appendChild(tname1);
-                transitions->append(ret1.documentElement());
+
             } else if (name == "mix") {
-                QDomDocument ret;
-                QDomElement ktrans = ret.createElement("ktransition");
-                ret.appendChild(ktrans);
-                ktrans.setAttribute("tag", name);
-                QDomElement tname = ret.createElement("name");
                 tname.appendChild(ret.createTextNode("Mix"));
-                ktrans.appendChild(tname);
-                transitions->append(ret.documentElement());
             } else if (name == "affine") {
-                QDomDocument ret;
-                QDomElement ktrans = ret.createElement("ktransition");
-                ret.appendChild(ktrans);
-                ktrans.setAttribute("tag", name);
-                QDomElement tname = ret.createElement("name");
                 tname.appendChild(ret.createTextNode("Affine"));
-                ktrans.appendChild(tname);
-                transitions->append(ret.documentElement());
             } else if (name == "region") {
-                QDomDocument ret;
-                QDomElement ktrans = ret.createElement("ktransition");
-                ret.appendChild(ktrans);
-                ktrans.setAttribute("tag", name);
-                QDomElement tname = ret.createElement("name");
                 tname.appendChild(ret.createTextNode("Region"));
-                ktrans.appendChild(tname);
-                transitions->append(ret.documentElement());
             }
+            QDomElement parameter = ret.createElement("parameter");
+            parameter.setAttribute("tag", "reverse");
+            parameter.setAttribute("default", "0");
+            parameter.setAttribute("type", "bool");
+            parameter.setAttribute("name", "reverse");
+            QDomElement pname = ret.createElement("name");
+            pname.appendChild(ret.createTextNode("Reverse Transition"));
+            parameter.appendChild(pname);
+
+            ktrans.appendChild(tname);
+            ktrans.appendChild(parameter);
+            transitions->append(ret.documentElement());
         }
         /*
 
index 05a3a09bcbe9b046e4e62a3168a9993252f3822c..29309d20abfd2ce86c2c563fd227eade7f416d18 100644 (file)
@@ -57,6 +57,18 @@ Transition::Transition(const QRectF& rect , ClipItem * clipa, const QString & ty
     m_secondClip = 0;
     setFlags(QGraphicsItem::ItemClipsToShape | QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
     setZValue(2);
+
+    QDomDocument doc;
+    doc.setContent(QString("<ktransition tag=\"luma\">\n\
+                           <name>Luma</name>\n\
+                           <description>Luma Transitions</description>\n\
+                           <properties id=\"luma\" tag=\"luma\" />\n\
+                           <parameter type=\"bool\" name=\"reverse\" max=\"1\" min=\"0\" default=\"1\" factor=\"1\">\n\
+                           <name>Reverse</name>\n\
+                           </parameter>\n\
+                           </ktransition>"));
+    m_transitionParameters = doc.documentElement();
+
     m_referenceClip->addTransition(this);
 }
 
@@ -82,7 +94,7 @@ Transition::Transition(const QRectF& rect , ClipItem * clip, QDomElement transit
         params[paramElement.tagName()] = paramElement.attribute("value", QString::null);
     }
     if (m_invertTransition) params["reverse"] = "1";
-    if (!params.isEmpty()) setTransitionParameters(params);
+    //if (!params.isEmpty()) setTransitionParameters(params);
 
     // Check if transition is valid (not outside of clip)
     if (m_transitionStart > clip->duration())
@@ -97,12 +109,8 @@ QString Transition::transitionName() const {
     return m_transitionName;
 }
 
-void Transition::setTransitionParameters(const QMap < QString, QString > parameters) {
-    m_transitionParameters = parameters;
-}
-
-const QMap < QString, QString > Transition::transitionParameters() const {
-    return m_transitionParameters;
+void Transition::setTransitionParameters(const QDomElement & elem) {
+    m_transitionParameters = elem;
 }
 
 bool Transition::invertTransition() const {
@@ -279,27 +287,25 @@ const ClipItem *Transition::referencedClip() const {
 }
 
 QDomElement Transition::toXML() {
-    QDomDocument doc;
-    QDomElement effect = doc.createElement("ktransition");
-    effect.setAttribute("type", m_transitionName);
-    effect.setAttribute("inverted", invertTransition());
-    effect.setAttribute("transition_track", m_transitionTrack);
-    effect.setAttribute("start", transitionStartTime().frames(m_referenceClip->fps()));
-    effect.setAttribute("end", transitionEndTime().frames(m_referenceClip->fps()));
+    m_transitionParameters.setAttribute("type", m_transitionName);
+    //m_transitionParameters.setAttribute("inverted", invertTransition());
+    m_transitionParameters.setAttribute("transition_track", m_transitionTrack);
+    m_transitionParameters.setAttribute("start", transitionStartTime().frames(m_referenceClip->fps()));
+    m_transitionParameters.setAttribute("end", transitionEndTime().frames(m_referenceClip->fps()));
 
     if (m_secondClip) {
-        effect.setAttribute("clipb_starttime", m_secondClip->startPos().frames(m_referenceClip->fps()));
-        effect.setAttribute("clipb_track", transitionEndTrack());
+        m_transitionParameters.setAttribute("clipb_starttime", m_secondClip->startPos().frames(m_referenceClip->fps()));
+        m_transitionParameters.setAttribute("clipb_track", transitionEndTrack());
     }
 
 
-    QMap<QString, QString>::Iterator it;
-    for (it = m_transitionParameters.begin(); it != m_transitionParameters.end(); ++it) {
-        QDomElement param = doc.createElement(it.key());
-        param.setAttribute("value", it.value());
-        effect.appendChild(param);
-    }
+    /* QMap<QString, QString>::Iterator it;
+     for (it = m_transitionParameters.begin(); it != m_transitionParameters.end(); ++it) {
+         QDomElement param = doc.createElement(it.key());
+         param.setAttribute("value", it.value());
+         effect.appendChild(param);
+     }*/
 
-    return effect;
+    return m_transitionParameters;
 }
 
index 92b418e106c9696a8c54797d4b36274998f13805..8cb37193a7b12ad8b9ac6fda8bf22668ce011004 100644 (file)
@@ -63,8 +63,8 @@ public:
     QString transitionName() const;
     OPERATIONTYPE operationMode(QPointF pos, double scale);
     void setTransitionType(QString newType);
-    const QMap < QString, QString > transitionParameters() const;
-    void setTransitionParameters(const QMap < QString, QString > parameters);
+    //const QMap < QString, QString > transitionParameters() const;
+    void setTransitionParameters(const QDomElement&);
     void setTransitionDirection(bool inv);
     int transitionTrack() const;
     void setTransitionTrack(int track);
@@ -78,7 +78,7 @@ private:
 
     GenTime m_transitionStart;
     GenTime m_transitionDuration;
-    QMap < QString, QString > m_transitionParameters;
+    QDomElement m_transitionParameters;
 
     /** The name of the transition to be displayed to user */
     QString m_transitionName;
index 7bcac223435ea1a2c2bc47014bada4eebf1c4f6b..dc0748336f596f4840c54df39c87f9a81bd453f1 100644 (file)
@@ -36,23 +36,22 @@ TransitionSettings::TransitionSettings(EffectsList *transitions, QWidget* parent
 
 void TransitionSettings::slotTransitionChanged() {
     QDomElement e = m_usedTransition->toXML();
-    QDomElement newElement = e.cloneNode().toElement();
 
+    //set old values from e in <ktransition> to desc (like reverse and so )
     QDomElement desc = m_transitions->getEffectByName(ui.listWidget->currentItem()->text());
-
-    newElement.setAttribute("type", desc.attribute("tag"));
-    newElement.setAttribute("invert", "1");
-
-    emit transitionUpdated(e, newElement);
+    if (m_usedTransition)
+        m_usedTransition->setTransitionParameters(desc);
+    emit transitionUpdated(e, desc);
     emit transferParamDesc(desc, 0, 0);
 }
 
 void TransitionSettings::slotTransitionItemSelected(Transition* t) {
     setEnabled(t != NULL);
     m_usedTransition = t;
+
 }
 
 void TransitionSettings::slotUpdateEffectParams(const QDomElement& oldparam, const QDomElement& param) {
 
-    //emit transitionUpdated(oldparam, param);
-}
\ No newline at end of file
+    emit transitionUpdated(oldparam, param);
+}