From: Marco Gittler Date: Wed, 19 Mar 2008 10:06:41 +0000 (+0000) Subject: function for transition delete X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=f690c28b69283c8850108b3b2a61fa5d4fbcb5ea;p=kdenlive function for transition delete svn path=/branches/KDE4/; revision=2080 --- diff --git a/src/addtransitioncommand.cpp b/src/addtransitioncommand.cpp index 3363487c..65bb145d 100644 --- a/src/addtransitioncommand.cpp +++ b/src/addtransitioncommand.cpp @@ -26,7 +26,7 @@ AddTransitionCommand::AddTransitionCommand(CustomTrackView *view, int track, QDo // virtual void AddTransitionCommand::undo() { - if (!m_doIt) m_view->deleteTransition(m_track, m_pos, m_xml); + if (m_doIt) m_view->deleteTransition(m_track, m_pos, m_xml); else m_view->addTransition(m_track , m_pos, m_xml); } // virtual diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 207e8161..22b82c4c 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -515,11 +515,7 @@ void CustomTrackView::slotAddTransition(ClipItem* clip , QDomElement transition, void CustomTrackView::addTransition(int startTrack, GenTime startPos , QDomElement e) { QMap < QString, QString> map; - /*map["start"] = "0.0"; - map["end"] = "1.0";*/ - QDomDocument d("tes"); - d.appendChild(e); - kDebug() << d.toString(); + QDomNamedNodeMap attribs = e.attributes(); for (int i = 0;i < attribs.count();i++) { if (attribs.item(i).nodeName() != "type" && @@ -536,8 +532,14 @@ void CustomTrackView::addTransition(int startTrack, GenTime startPos , QDomEleme m_document->setModified(true); } -void CustomTrackView::deleteTransition(int, GenTime, QDomElement) { - +void CustomTrackView::deleteTransition(int, GenTime, QDomElement e) { + QMap < QString, QString> map; + QDomNamedNodeMap attribs = e.attributes(); + m_document->renderer()->mltDeleteTransition(e.attribute("type"), 4 - e.attribute("transition_track").toInt(), 5 - e.attribute("transition_track").toInt() , + GenTime(e.attribute("start").toInt(), m_document->renderer()->fps()), + GenTime(e.attribute("end").toInt(), m_document->renderer()->fps()), + map); + m_document->setModified(true); } void CustomTrackView::addItem(DocClipBase *clip, QPoint pos) { diff --git a/src/renderer.cpp b/src/renderer.cpp index 50f8031e..599f9d18 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -1335,6 +1335,49 @@ void Render::mltMoveTransition(QString type, int startTrack, int trackOffset, Ge m_isBlocked = false; } +void Render::mltDeleteTransition(QString tag, int a_track, int b_track, GenTime in, GenTime out, QMap args) { + kDebug() << "ja"; + m_isBlocked = true; + m_mltConsumer->set("refresh", 0); + mlt_service serv = m_mltProducer->parent().get_service(); + + mlt_service nextservice = mlt_service_get_producer(serv); + mlt_properties properties = MLT_SERVICE_PROPERTIES(nextservice); + QString mlt_type = mlt_properties_get(properties, "mlt_type"); + QString resource = mlt_properties_get(properties, "mlt_service"); + int old_pos = (in.frames(m_fps) + out.frames(m_fps)) / 2; + int trackOffset = 0; + int new_in = in.frames(m_fps); + int new_out = out.frames(m_fps) - 1; + while (mlt_type == "transition") { + mlt_transition tr = (mlt_transition) nextservice; + int currentTrack = mlt_transition_get_b_track(tr); + int currentIn = (int) mlt_transition_get_in(tr); + int currentOut = (int) mlt_transition_get_out(tr); + kDebug() << "// FOUND EXISTING TRANS, IN: " << currentIn << ", OUT: " << currentOut << ", TRACK: " << currentTrack; + //kDebug()<<"// LOOKING FOR IN: "<= old_pos) { + kDebug() << "found transition that matches" << resource; + //mlt_transition_set_in_and_out(tr, new_in, new_out); + + mlt_properties properties = MLT_TRANSITION_PROPERTIES(tr); + mlt_events_disconnect(properties, nextservice); + mlt_events_fire(MLT_SERVICE_PROPERTIES(nextservice), "service-changed", NULL); + //mlt_properties_set_int(properties, "a_track", mlt_transition_get_a_track(tr) + trackOffset); + //mlt_properties_set_int(properties, "b_track", mlt_transition_get_b_track(tr) + trackOffset); + //} + break; + } + nextservice = mlt_service_producer(nextservice); + properties = MLT_SERVICE_PROPERTIES(nextservice); + mlt_type = mlt_properties_get(properties, "mlt_type"); + resource = mlt_properties_get(properties, "mlt_service"); + } + m_isBlocked = false; + +} + void Render::mltAddTransition(QString tag, int a_track, int b_track, GenTime in, GenTime out, QMap args) { m_isBlocked = true; Mlt::Service service(m_mltProducer->parent().get_service()); diff --git a/src/renderer.h b/src/renderer.h index 0c62d7fc..f65b3bb0 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -159,6 +159,7 @@ Q_OBJECT public: void mltChangeTrackState(int track, bool mute, bool blind); void mltMoveTransition(QString type, int startTrack, int trackOffset, GenTime oldIn, GenTime oldOut, GenTime newIn, GenTime newOut); void mltAddTransition(QString tag, int a_track, int b_track, GenTime in, GenTime out, QMap args); + void mltDeleteTransition(QString tag, int a_track, int b_track, GenTime in, GenTime out, QMap args); private: // Private attributes & methods