- for (int i = 0; i < effects.count(); i++) {
- QDomElement origin = effects.at(i)->effect();
- QDomElement changed = origin.cloneNode().toElement();
- changed.setAttribute("kdenlive_info", effects.at(i)->infoString());
- if (m_effectMetaInfo.trackMode) {
- emit updateEffect(NULL, m_trackindex, origin, changed, effects.at(i)->effectIndex());
- } else {
- emit updateEffect(m_clipref, -1, origin, changed, effects.at(i)->effectIndex());
- }
+ for (int i = 0; i < effects.count(); ++i) {
+ QDomElement origin = effects.at(i)->effect();
+ QDomElement changed = origin.cloneNode().toElement();
+ changed.setAttribute("kdenlive_info", effects.at(i)->infoString());
+ if (m_effectMetaInfo.trackMode) {
+ emit updateEffect(NULL, m_trackindex, origin, changed, effects.at(i)->effectIndex(),false);
+ } else {
+ emit updateEffect(m_clipref, -1, origin, changed, effects.at(i)->effectIndex(),false);
+ }
+ }
+}
+
+void EffectStackView2::dragEnterEvent(QDragEnterEvent *event)
+{
+ if (event->mimeData()->hasFormat("kdenlive/effectslist")) {
+ event->acceptProposedAction();
+ }
+}
+
+void EffectStackView2::processDroppedEffect(QDomElement e, QDropEvent *event)
+{
+ int ix = e.attribute("kdenlive_ix").toInt();
+ if (e.tagName() == "effectgroup") {
+ // We are dropping a group, all effects in group should be moved
+ QDomNodeList effects = e.elementsByTagName("effect");
+ if (effects.count() == 0) {
+ event->ignore();
+ return;
+ }
+ EffectInfo info;
+ info.fromString(effects.at(0).toElement().attribute("kdenlive_info"));
+ if (info.groupIndex < 0) {
+ kDebug()<<"// ADDING EFFECT!!!";
+ // Adding a new group effect to the stack
+ event->setDropAction(Qt::CopyAction);
+ event->accept();
+ slotAddEffect(e);
+ return;
+ }
+ // Moving group: delete all effects and re-add them
+ QList <int> indexes;
+ for (int i = 0; i < effects.count(); ++i) {
+ QDomElement effect = effects.at(i).cloneNode().toElement();
+ indexes << effect.attribute("kdenlive_ix").toInt();
+ }
+ kDebug()<<"// Moving: "<<indexes<<" TO "<<m_currentEffectList.count();
+ slotMoveEffect(indexes, m_currentEffectList.count(), info.groupIndex, info.groupName);
+ }
+ else if (ix == 0) {
+ // effect dropped from effects list, add it
+ e.setAttribute("kdenlive_ix", m_currentEffectList.count() + 1);
+ event->setDropAction(Qt::CopyAction);
+ event->accept();
+ slotAddEffect(e);
+ return;
+ }
+ else {
+ // User is moving an effect
+ slotMoveEffect(QList<int> () << ix, m_currentEffectList.count() + 1, -1);
+ }
+ event->setDropAction(Qt::MoveAction);
+ event->accept();
+}
+
+void EffectStackView2::dropEvent(QDropEvent *event)
+{
+ const QString effects = QString::fromUtf8(event->mimeData()->data("kdenlive/effectslist"));
+ //event->acceptProposedAction();
+ QDomDocument doc;
+ doc.setContent(effects, true);
+ processDroppedEffect(doc.documentElement(), event);
+}
+
+void EffectStackView2::setKeyframes(const QString &data, int maximum)
+{
+ for (int i = 0; i < m_effects.count(); ++i) {
+ if (m_effects.at(i)->isActive()) {
+ m_effects.at(i)->setKeyframes(data, maximum);
+ break;
+ }