]> git.sesse.net Git - kdenlive/commitdiff
SOme work on transitions, including a new wipe transition (to be improved)
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 3 Jun 2008 16:02:41 +0000 (16:02 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 3 Jun 2008 16:02:41 +0000 (16:02 +0000)
svn path=/branches/KDE4/; revision=2225

14 files changed:
src/CMakeLists.txt
src/customtrackview.cpp
src/effectstackedit.cpp
src/effectstackedit.h
src/initeffects.cpp
src/initeffects.h
src/kdenlivedoc.cpp
src/kdenlivedoc.h
src/mainwindow.cpp
src/renderer.cpp
src/trackview.cpp
src/transition.cpp
src/transition.h
src/transitionsettings.cpp

index 81370b87c70e6f192452765bb01129c5e1908a1d..28a537ea4d4b1c5d8dd5dd82a00d21ac7782c7e2 100644 (file)
@@ -37,6 +37,7 @@ kde4_add_ui_files(kdenlive_UI
   widgets/keyframewidget_ui.ui
   widgets/constval_ui.ui
   widgets/listval_ui.ui
+  widgets/wipeval_ui.ui
   widgets/boolval_ui.ui
   widgets/colorval_ui.ui
   widgets/titlewidget_ui.ui
index 0d16c84dc970b739d6ebf0a02680b83a05b14f34..6e2ded962a0fb4ac3f3dc6ea8e43c4662c0558d8 100644 (file)
@@ -528,13 +528,13 @@ void CustomTrackView::deleteEffect(int track, GenTime pos, QDomElement effect) {
 
 void CustomTrackView::slotAddEffect(QDomElement effect, GenTime pos, int track) {
     QList<QGraphicsItem *> itemList;
-       if (track == -1) itemList = scene()->selectedItems();
+    if (track == -1) itemList = scene()->selectedItems();
     if (itemList.isEmpty()) {
         ClipItem *clip = getClipItemAt((int)pos.frames(m_document->fps()) + 1, track);
         if (clip) itemList.append(clip);
         else kDebug() << "------   wrning, clip eff not found";
     }
-    kDebug() << "// REQUESTING EFFECT ON CLIP: " << pos.frames(25) << ", TRK: " << track << "SELECTED ITEMS: "<<itemList.count();
+    kDebug() << "// REQUESTING EFFECT ON CLIP: " << pos.frames(25) << ", TRK: " << track << "SELECTED ITEMS: " << itemList.count();
     for (int i = 0; i < itemList.count(); i++) {
         if (itemList.at(i)->type() == AVWIDGET) {
             ClipItem *item = (ClipItem *)itemList.at(i);
@@ -638,7 +638,7 @@ void CustomTrackView::deleteTransition(ItemInfo transitionInfo, int endTrack, QD
     Transition *item = getTransitionItemAt((int)transitionInfo.startPos.frames(m_document->fps()) + 1, transitionInfo.track);
     m_document->renderer()->mltDeleteTransition(item->transitionTag(), endTrack, m_tracksList.count() - transitionInfo.track, transitionInfo.startPos, transitionInfo.endPos, item->toXML());
     delete item;
-       emit transitionItemSelected(NULL);
+    emit transitionItemSelected(NULL);
     m_document->setModified(true);
 }
 
@@ -815,9 +815,9 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) {
     QGraphicsView::mouseReleaseEvent(event);
     setDragMode(QGraphicsView::NoDrag);
     if (m_dragItem == NULL) {
-               emit transitionItemSelected(NULL);
-               return;
-       }
+        emit transitionItemSelected(NULL);
+        return;
+    }
     ItemInfo info;
     info.startPos = m_dragItem->startPos();
     info.endPos = m_dragItem->endPos();
@@ -972,7 +972,7 @@ ClipItem *CustomTrackView::getClipItemAt(GenTime pos, int track) {
 }
 
 Transition *CustomTrackView::getTransitionItemAt(int pos, int track) {
-    QList<QGraphicsItem *> list = scene()->items(QPointF(pos * m_scale, ( track + 1 ) * m_tracksHeight));
+    QList<QGraphicsItem *> list = scene()->items(QPointF(pos * m_scale, (track + 1) * m_tracksHeight));
     Transition *clip = NULL;
     for (int i = 0; i < list.size(); ++i) {
         if (list.at(i)->type() == TRANSITIONWIDGET) {
index 39eb7d088808d12876bf3a12c696e65fbc50008f..2a7b64c06d302f32e882536b5a79fe50152d97bc 100644 (file)
@@ -28,6 +28,7 @@
 #include "ui_listval_ui.h"
 #include "ui_boolval_ui.h"
 #include "ui_colorval_ui.h"
+#include "ui_wipeval_ui.h"
 #include "complexparameter.h"
 
 QMap<QString, QImage> EffectStackEdit::iconCache;
@@ -102,14 +103,18 @@ void EffectStackEdit::transferParamDesc(const QDomElement& d, int , int) {
             delete toFillin;
             toFillin = NULL;
         } else if (type == "list") {
-
             Ui::Listval_UI *lsval = new Ui::Listval_UI;
             lsval->setupUi(toFillin);
             QStringList listitems = pa.attribute("paramlist").split(",");
-            lsval->list->addItems(listitems);
+            QStringList listitemsdisplay = pa.attribute("paramlistdisplay").split(",");
+            if (listitemsdisplay.count() != listitems.count()) listitemsdisplay = listitems;
+            //lsval->list->addItems(listitems);
+            for (int i = 0;i < listitems.count();i++) {
+                lsval->list->addItem(listitemsdisplay.at(i), listitems.at(i));
+            }
             lsval->list->setCurrentIndex(listitems.indexOf(value));
             for (int i = 0;i < lsval->list->count();i++) {
-                QString entry = lsval->list->itemText(i);
+                QString entry = lsval->list->itemData(i).toString();
                 if (!entry.isEmpty() && (entry.endsWith(".png") || entry.endsWith(".pgm"))) {
                     if (!EffectStackEdit::iconCache.contains(entry)) {
                         QImage pix(entry);
@@ -163,6 +168,59 @@ void EffectStackEdit::transferParamDesc(const QDomElement& d, int , int) {
             cval->label->setText(na.toElement().text());
             valueItems[paramName] = cval;
             uiItems.append(cval);
+        } else if (type == "wipe") {
+            Ui::Wipeval_UI *wpval = new Ui::Wipeval_UI;
+            wpval->setupUi(toFillin);
+            wipeInfo w = getWipeInfo(value);
+            switch (w.start) {
+            case UP:
+                wpval->start_up->setChecked(true);
+                break;
+            case DOWN:
+                wpval->start_down->setChecked(true);
+                break;
+            case RIGHT:
+                wpval->start_right->setChecked(true);
+                break;
+            case LEFT:
+                wpval->start_left->setChecked(true);
+                break;
+            default:
+                wpval->start_center->setChecked(true);
+                break;
+            }
+            switch (w.end) {
+            case UP:
+                wpval->end_up->setChecked(true);
+                break;
+            case DOWN:
+                wpval->end_down->setChecked(true);
+                break;
+            case RIGHT:
+                wpval->end_right->setChecked(true);
+                break;
+            case LEFT:
+                wpval->end_left->setChecked(true);
+                break;
+            default:
+                wpval->end_center->setChecked(true);
+                break;
+            }
+
+            connect(wpval->end_up, SIGNAL(clicked()), this, SLOT(collectAllParameters()));
+            connect(wpval->end_down, SIGNAL(clicked()), this, SLOT(collectAllParameters()));
+            connect(wpval->end_left, SIGNAL(clicked()), this, SLOT(collectAllParameters()));
+            connect(wpval->end_right, SIGNAL(clicked()), this, SLOT(collectAllParameters()));
+            connect(wpval->end_center, SIGNAL(clicked()), this, SLOT(collectAllParameters()));
+            connect(wpval->start_up, SIGNAL(clicked()), this, SLOT(collectAllParameters()));
+            connect(wpval->start_down, SIGNAL(clicked()), this, SLOT(collectAllParameters()));
+            connect(wpval->start_left, SIGNAL(clicked()), this, SLOT(collectAllParameters()));
+            connect(wpval->start_right, SIGNAL(clicked()), this, SLOT(collectAllParameters()));
+            connect(wpval->start_center, SIGNAL(clicked()), this, SLOT(collectAllParameters()));
+
+            //wpval->title->setTitle(na.toElement().text());
+            valueItems[paramName] = wpval;
+            uiItems.append(wpval);
         } else {
             delete toFillin;
             toFillin = NULL;
@@ -174,6 +232,67 @@ void EffectStackEdit::transferParamDesc(const QDomElement& d, int , int) {
         }
     }
 }
+
+wipeInfo EffectStackEdit::getWipeInfo(QString value) {
+    wipeInfo info;
+    QString start = value.section(";", 0, 0);
+    QString end = value.section(";", 1, 1).section("=", 1, 1);
+    if (start.startsWith("-100%,0")) info.start = LEFT;
+    else if (start.startsWith("100%,0")) info.start = RIGHT;
+    else if (start.startsWith("0%,100%")) info.start = DOWN;
+    else if (start.startsWith("0%,-100%")) info.start = UP;
+    else if (start.startsWith("0%,0%")) info.start = CENTER;
+
+    if (end.startsWith("-100%,0")) info.end = LEFT;
+    else if (end.startsWith("100%,0")) info.end = RIGHT;
+    else if (end.startsWith("0%,100%")) info.end = DOWN;
+    else if (end.startsWith("0%,-100%")) info.end = UP;
+    else if (end.startsWith("0%,0%")) info.end = CENTER;
+
+    return info;
+}
+
+QString EffectStackEdit::getWipeString(wipeInfo info) {
+
+    QString start;
+    QString end;
+    switch (info.start) {
+    case LEFT:
+        start = "-100%,0%:100%x100%";
+        break;
+    case RIGHT:
+        start = "100%,0%:100%x100%";
+        break;
+    case DOWN:
+        start = "0%,100%:100%x100%";
+        break;
+    case UP:
+        start = "0%,-100%:100%x100%";
+        break;
+    default:
+        start = "0%,0%:100%x100%";
+        break;
+    }
+    switch (info.end) {
+    case LEFT:
+        end = "-100%,0%:100%x100%";
+        break;
+    case RIGHT:
+        end = "100%,0%:100%x100%";
+        break;
+    case DOWN:
+        end = "0%,100%:100%x100%";
+        break;
+    case UP:
+        end = "0%,-100%:100%x100%";
+        break;
+    default:
+        end = "0%,0%:100%x100%";
+        break;
+    }
+    return QString(start + ";-1=" + end);
+}
+
 void EffectStackEdit::collectAllParameters() {
     QDomElement oldparam = params.cloneNode().toElement();
     QDomNodeList namenode = params.elementsByTagName("parameter");
@@ -186,23 +305,36 @@ void EffectStackEdit::collectAllParameters() {
         if (type == "double" || type == "constant") {
             QSlider* slider = ((Ui::Constval_UI*)valueItems[na.toElement().text()])->horizontalSlider;
             setValue = QString::number(slider->value());
-        } else
-            if (type == "list") {
-                KComboBox *box = ((Ui::Listval_UI*)valueItems[na.toElement().text()])->list;
-                setValue = box->currentText();
-            } else
-                if (type == "bool") {
-                    QCheckBox *box = ((Ui::Boolval_UI*)valueItems[na.toElement().text()])->checkBox;
-                    setValue = box->checkState() == Qt::Checked ? "1" : "0" ;
-                } else
-                    if (type == "color") {
-                        KColorButton *color = ((Ui::Colorval_UI*)valueItems[na.toElement().text()])->kcolorbutton;
-                        setValue.sprintf("0x%08x", color->color().rgba());
-                    } else
-                        if (type == "complex" || type == "geometry") {
-                            ComplexParameter *complex = ((ComplexParameter*)valueItems[na.toElement().text()+"complex"]);
-                            namenode.item(i) = complex->getParamDesc();
-                        }
+        } else if (type == "list") {
+            KComboBox *box = ((Ui::Listval_UI*)valueItems[na.toElement().text()])->list;
+            setValue = box->itemData(box->currentIndex()).toString();
+        } else if (type == "bool") {
+            QCheckBox *box = ((Ui::Boolval_UI*)valueItems[na.toElement().text()])->checkBox;
+            setValue = box->checkState() == Qt::Checked ? "1" : "0" ;
+        } else if (type == "color") {
+            KColorButton *color = ((Ui::Colorval_UI*)valueItems[na.toElement().text()])->kcolorbutton;
+            setValue.sprintf("0x%08x", color->color().rgba());
+        } else if (type == "complex" || type == "geometry") {
+            ComplexParameter *complex = ((ComplexParameter*)valueItems[na.toElement().text()+"complex"]);
+            namenode.item(i) = complex->getParamDesc();
+        } else if (type == "wipe") {
+            Ui::Wipeval_UI *wp = (Ui::Wipeval_UI*)valueItems[na.toElement().text()];
+            wipeInfo info;
+            if (wp->start_left->isChecked()) info.start = LEFT;
+            else if (wp->start_right->isChecked()) info.start = RIGHT;
+            else if (wp->start_up->isChecked()) info.start = UP;
+            else if (wp->start_down->isChecked()) info.start = DOWN;
+            else if (wp->start_center->isChecked()) info.start = CENTER;
+
+            if (wp->end_left->isChecked()) info.end = LEFT;
+            else if (wp->end_right->isChecked()) info.end = RIGHT;
+            else if (wp->end_up->isChecked()) info.end = UP;
+            else if (wp->end_down->isChecked()) info.end = DOWN;
+            else if (wp->end_center->isChecked()) info.end = CENTER;
+
+            setValue = getWipeString(info);
+        }
+
         if (!setValue.isNull()) {
             pa.attributes().namedItem("value").setNodeValue(setValue);
         }
index c7dc1605530727547008275e83538fc1e46851a4..159b85b271bf899f67fcf54f3c87c1bb94d1c2e0 100644 (file)
 #include <QList>
 #include <QMap>
 
+enum WIPE_DIRECTON { UP = 0, DOWN = 1, LEFT = 2, RIGHT = 3, CENTER = 4 };
+
+struct wipeInfo {
+    WIPE_DIRECTON start;
+    WIPE_DIRECTON end;
+    int startTransparency;
+    int endTransparency;
+};
+
 class QFrame;
 
 class EffectStackEdit : public QObject {
@@ -32,6 +41,7 @@ public:
     EffectStackEdit(QFrame* frame, QWidget *parent);
     ~EffectStackEdit();
     static QMap<QString, QImage> iconCache;
+
 private:
     void clearAllItems();
     QVBoxLayout *vbox;
@@ -40,10 +50,14 @@ private:
     QDomElement params;
     QMap<QString, void*> valueItems;
     void createSliderItem(const QString& name, int val , int min, int max);
+    wipeInfo getWipeInfo(QString value);
+    QString getWipeString(wipeInfo info);
+
 public slots:
     void transferParamDesc(const QDomElement&, int , int);
     void slotSliderMoved(int);
     void collectAllParameters();
+
 signals:
     void parameterChanged(const QDomElement&, const QDomElement&);
 };
index ffb9be64fbd49d1e12ccc108a97538bcd09c33d8..e2ba6872dad1a9b4bcd3e17290443fce17ab0d87 100644 (file)
@@ -495,8 +495,6 @@ void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList*
 
             //kDebug() << ret.toString();
         } else {
-
-
             if (name == "luma") {
 
                 tname.appendChild(ret.createTextNode("Luma"));
@@ -507,16 +505,19 @@ void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList*
                 mlt_properties_dir_list(entries.get_properties(), path.toAscii().data(), "*.*", 1);
                 kDebug() << path << entries.count();
                 QString imagefiles;
-                QStringList imagelist;
+                //QStringList imagelist;
+                QString imagenamelist;
                 for (int i = 0;i < entries.count();i++) {
                     //if (!imagefiles.isEmpty()) // add empty entry too
                     imagefiles.append(",");
                     imagefiles.append(entries.get(i));
-                    imagelist << entries.get(i);
+                    //imagelist << entries.get(i);
+                    imagenamelist.append(",");
+                    imagenamelist.append(KUrl(entries.get(i)).fileName());
                 }
-                paramList.append(quickParameterFill(ret, "Softness", "softness", "double", "0", "0", "100", "", "100"));
+                paramList.append(quickParameterFill(ret, "Softness", "softness", "double", "0", "0", "100", "", "", "100"));
                 paramList.append(quickParameterFill(ret, "Invert", "invert", "bool", "0", "0", "1"));
-                paramList.append(quickParameterFill(ret, "ImageFile", "resource", "list", "", "", "", imagefiles));
+                paramList.append(quickParameterFill(ret, "ImageFile", "resource", "list", "", "", "", imagefiles, imagenamelist));
                 //thumbnailer.prepareThumbnailsCall(imagelist);
 
             } else if (name == "composite") {
@@ -556,7 +557,7 @@ void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList*
 
 
         }
-        paramList.append(quickParameterFill(ret, "Reverse Transition", "reverse", "bool", "1", "0", "1"));
+        paramList.append(quickParameterFill(ret, "Reverse Transition", "reverse", "bool", "0", "0", "1"));
         ktrans.appendChild(tname);
 
         foreach(const QDomElement &e, paramList) {
@@ -565,13 +566,20 @@ void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList*
 
 
         transitions->append(ret.documentElement());
+        kDebug() << "//// ////  TRANSITON XML";
+        kDebug() << ret.toString();
         /*
 
          <transition fill="1" in="11" a_track="1" out="73" mlt_service="luma" b_track="2" softness="0" resource="/home/marco/Projekte/kdenlive/install_cmake/share/apps/kdenlive/pgm/PAL/square2.pgm" />
         */
     }
+
+    QString wipetrans = "<ktransition tag=\"composite\" ><name>Wipe</name> <parameter tag=\"geometry\" type=\"wipe\" default=\"-100%,0%:100%x100%;-1=0%,0%:100%x100%\" name=\"geometry\"><name>Direction</name>                                               </parameter><parameter tag=\"reverse\" default=\"0\" type=\"bool\" min=\"0\" name=\"reverse\" max=\"1\" ><name>Reverse Transition</name></parameter></ktransition>";
+    QDomDocument ret;
+    ret.setContent(wipetrans);
+    transitions->append(ret.documentElement());
 }
-QDomElement initEffects::quickParameterFill(QDomDocument & doc, QString name, QString tag, QString type, QString def, QString min, QString max, QString list, QString factor, QString namedesc, QString format) {
+QDomElement initEffects::quickParameterFill(QDomDocument & doc, QString name, QString tag, QString type, QString def, QString min, QString max, QString list, QString listdisplaynames, QString factor, QString namedesc, QString format) {
     QDomElement parameter = doc.createElement("parameter");
     parameter.setAttribute("tag", tag);
     parameter.setAttribute("default", def);
@@ -581,6 +589,8 @@ QDomElement initEffects::quickParameterFill(QDomDocument & doc, QString name, QS
     parameter.setAttribute("min", min);
     if (!list.isEmpty())
         parameter.setAttribute("paramlist", list);
+    if (!listdisplaynames.isEmpty())
+        parameter.setAttribute("paramlistdisplay", listdisplaynames);
     if (!factor.isEmpty())
         parameter.setAttribute("factor", factor);
     if (!namedesc.isEmpty())
index 7bd45ca5a25a0d28ccc6025963c9493952ed4dfa..026765f36818036089c2fb083f96886eff9a21a9 100644 (file)
@@ -50,7 +50,7 @@ public:
     static Mlt::Repository *parseEffectFiles();
     static QDomDocument createDescriptionFromMlt(Mlt::Repository* repository, const QString& type, const QString& name);
     static void fillTransitionsList(Mlt::Repository *, EffectsList* transitions, QStringList names);
-    static QDomElement quickParameterFill(QDomDocument & doc, QString name, QString tag, QString type, QString def = QString(), QString min = QString(), QString max = QString(), QString list = QString(), QString factor = QString(), QString namedesc = QString(), QString format = QString());
+    static QDomElement quickParameterFill(QDomDocument & doc, QString name, QString tag, QString type, QString def = QString(), QString min = QString(), QString max = QString(), QString list = QString(), QString listdisplaynames = QString(), QString factor = QString(), QString namedesc = QString(), QString format = QString());
     static void parseEffectFile(EffectsList *audioEffectList, EffectsList *videoEffectList, QString name, QStringList filtersList, QStringList producersList);
     static char* ladspaEffectString(int ladspaId, QStringList params);
     static void ladspaEffectFile(const QString & fname, int ladspaId, QStringList params);
index 457d13a14205de0660c9c8188f8aa080681dea4a..ad5ab426351ebd1c407eab14dcf32afc1d9e72b2 100644 (file)
@@ -49,6 +49,7 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, MltVideoPro
             if (!infoXmlNode.isNull()) {
                 QDomElement infoXml = infoXmlNode.toElement();
                 QString profilePath = infoXml.attribute("profile");
+                m_startPos = infoXml.attribute("position").toInt();
                 if (!profilePath.isEmpty()) setProfilePath(profilePath);
                 double version = infoXml.attribute("version").toDouble();
                 if (version < 0.7) convertDocument(version);
@@ -318,6 +319,7 @@ QDomElement KdenliveDoc::documentInfoXml() {
     QDomElement markers = doc.createElement("markers");
     addedXml.setAttribute("version", "0.7");
     addedXml.setAttribute("profile", profilePath());
+    addedXml.setAttribute("position", m_render->seekPosition().frames(m_fps));
     QList <DocClipBase*> list = m_clipManager->documentClipList();
     for (int i = 0; i < list.count(); i++) {
         e = list.at(i)->toXML();
@@ -384,7 +386,7 @@ void KdenliveDoc::setRenderer(Render *render) {
     m_render = render;
     emit progressInfo(i18n("Loading playlist..."), 0);
     qApp->processEvents();
-    if (m_render) m_render->setSceneList(m_scenelist);
+    if (m_render) m_render->setSceneList(m_scenelist, m_startPos);
     emit progressInfo(QString(), -1);
 }
 
index 0a612440b72524a5149e562f1b2601c0ce073917..e6e972fa24c0f4a70cc65107fb33a5d3c6000d2c 100644 (file)
@@ -100,6 +100,8 @@ private:
     QDomDocument m_document;
     QString m_projectName;
     double m_fps;
+    /** Cursor position at document opening */
+    int m_startPos;
     int m_width;
     int m_height;
     Timecode m_timecode;
index 9b0b87273e1bb9fa9348f4bf2981f3d91c25c411..c032f136fd14ce2b46c77c1169a0b79df17f8407 100644 (file)
@@ -621,7 +621,7 @@ void MainWindow::saveFileAs(const QString &outputFileName) {
 }
 
 void MainWindow::saveFileAs() {
-    QString outputFile = KFileDialog::getSaveFileName();
+    QString outputFile = KFileDialog::getSaveFileName(KUrl(), "*.kdenlive|Kdenlive project files (*.kdenlive)");
     if (QFile::exists(outputFile)) {
         if (KMessageBox::questionYesNo(this, i18n("File already exists.\nDo you want to overwrite it ?")) == KMessageBox::No) return;
     }
index 04f30cf01cc904d1a1d55e5f99515e038d23484f..ee68fea650aa8af404dba82f9cec19ba0db92743 100644 (file)
@@ -566,7 +566,6 @@ void Render::setSceneList(QString playlist, int position) {
     delete[] tmp;
     if (!m_mltProducer || !m_mltProducer->is_valid()) kDebug() << " WARNING - - - - -INVALID PLAYLIST: " << tmp;
     //m_mltProducer->optimise();
-    if (position != 0) m_mltProducer->seek(position);
 
     /*if (KdenliveSettings::osdtimecode()) {
     // Attach filter for on screen display of timecode
@@ -595,6 +594,10 @@ void Render::setSceneList(QString playlist, int position) {
     emit durationChanged(m_mltProducer->get_playtime());
     //m_connectTimer->start( 1000 );
     connectPlaylist();
+    if (position != 0) {
+        m_mltProducer->seek(position);
+        emit rendererPosition((int) position);
+    }
     m_generateScenelist = false;
 
 }
@@ -987,7 +990,7 @@ void Render::mltCheckLength(bool reload) {
         QDomElement black = doc.createElement("producer");
         black.setAttribute("mlt_service", "colour");
         black.setAttribute("colour", "black");
-        //black.setAttribute("id", "black");
+        black.setAttribute("id", "black");
         black.setAttribute("in", "0");
         black.setAttribute("out", "13999");
         while (dur > 14000) {
index bef1e9f1e533e87424a7ff2f50248123044a0761..9f0a8b73ab3ded87f247acaf7228522a2273de59 100644 (file)
@@ -182,7 +182,7 @@ void TrackView::parseDocument(QDomDocument doc) {
         for (int k = 0; k < transitionparams.count(); k++) {
             p = transitionparams.item(k).toElement();
             if (!p.isNull()) {
-                               QString paramName = p.attribute("name");
+                QString paramName = p.attribute("name");
                 // do not add audio mixing transitions
                 if (paramName == "internal_added" && p.text() == "237") {
                     transitionAdd = false;
@@ -196,36 +196,36 @@ void TrackView::parseDocument(QDomDocument doc) {
         if (transitionAdd) {
             // Transition should be added to the scene
             ItemInfo transitionInfo;
-                       QDomElement base = MainWindow::transitions.getEffectByTag(mlt_service);
-
-                       for (int k = 0; k < transitionparams.count(); k++) {
-                               p = transitionparams.item(k).toElement();
-                               if (!p.isNull()) {
-                                       QString paramName = p.attribute("name");
-                                       QString paramValue = p.text();
-
-                                       QDomNodeList params = base.elementsByTagName("parameter");
-                                       for (int i = 0; i < params.count(); i++) {
-                                               QDomElement e = params.item(i).toElement();
-                                               if (!e.isNull() && e.attribute("tag") == paramName) {
-                                                       if (e.attribute("type") == "double") {
-                                                               QString factor = e.attribute("factor");
-                                                               if (!factor.isEmpty()) {
-                                                                       double val = paramValue.toDouble() * factor.toDouble();
-                                                                       paramValue = QString::number(val);
-                                                               }
-                                                       }
-                                                       e.setAttribute("value", paramValue);
-                                                       break;
-                                               }
-                                       }
-                               }
-                       }
-
-                       /*QDomDocument doc;
-                       doc.appendChild(doc.importNode(base, true));
-                       kDebug() << "///////  TRANSITION XML: "<< doc.toString();*/
-                       
+            QDomElement base = MainWindow::transitions.getEffectByTag(mlt_service);
+
+            for (int k = 0; k < transitionparams.count(); k++) {
+                p = transitionparams.item(k).toElement();
+                if (!p.isNull()) {
+                    QString paramName = p.attribute("name");
+                    QString paramValue = p.text();
+
+                    QDomNodeList params = base.elementsByTagName("parameter");
+                    if (paramName != "a_track" && paramName != "b_track") for (int i = 0; i < params.count(); i++) {
+                            QDomElement e = params.item(i).toElement();
+                            if (!e.isNull() && e.attribute("tag") == paramName) {
+                                if (e.attribute("type") == "double") {
+                                    QString factor = e.attribute("factor");
+                                    if (!factor.isEmpty()) {
+                                        double val = paramValue.toDouble() * factor.toDouble();
+                                        paramValue = QString::number(val);
+                                    }
+                                }
+                                e.setAttribute("value", paramValue);
+                                break;
+                            }
+                        }
+                }
+            }
+
+            /*QDomDocument doc;
+            doc.appendChild(doc.importNode(base, true));
+            kDebug() << "///////  TRANSITION XML: "<< doc.toString();*/
+
             transitionInfo.startPos = GenTime(e.attribute("in").toInt(), m_doc->fps());
             transitionInfo.endPos = GenTime(e.attribute("out").toInt(), m_doc->fps());
             transitionInfo.track = b_track;
index d6dcbdda5201fcc4101d4e1e76ec020328fbb6d6..4def181804a3cfdd68806c6b2fdd1d494650add0 100644 (file)
@@ -127,16 +127,16 @@ void Transition::paint(QPainter *painter,
     radialGrad.setColorAt(1, QColor(100, 100, 0, 100));
     painter->fillRect(br.intersected(rectInView), QBrush(radialGrad)/*,Qt::Dense4Pattern*/);
 #else
-       m_gradient.setStart(0, br.y());
-       m_gradient.setFinalStop(0, br.bottom());
+    m_gradient.setStart(0, br.y());
+    m_gradient.setFinalStop(0, br.bottom());
     painter->fillRect(br.intersected(rectInView), m_gradient);
 #endif
     painter->setClipRect(option->exposedRect);
-       int top = (int)(br.y() + br.height() / 2 - 7);
+    int top = (int)(br.y() + br.height() / 2 - 7);
     painter->drawPixmap((int)(br.x() + 10), top, transitionPixmap());
     painter->drawPath(resultClipPath.intersected(clippath));
     painter->setPen(QColor(0, 0, 0, 180));
-       top += painter->fontInfo().pixelSize();
+    top += painter->fontInfo().pixelSize();
     painter->drawText((int)br.x() + 31, top + 1, transitionName());
     painter->setPen(QColor(255, 255, 255, 180));
     painter->drawText((int)br.x() + 30, top, transitionName());
index 50541cc14f9f746a4f184fcfeed486e8835e7ab5..1be1086ca772dbc3aa4f0a624b8565b57d18237e 100644 (file)
@@ -70,7 +70,7 @@ public:
 
 private:
     bool m_singleClip;
-       QLinearGradient m_gradient;
+    QLinearGradient m_gradient;
     QString m_name;
     /** contains the transition parameters */
     QDomElement m_parameters;
index dd4ff9652bd4ae93ef9b3ab752b65788e65e2124..70c8ed511133a36a5d0068dac645c2f1600280db 100644 (file)
@@ -39,22 +39,21 @@ TransitionSettings::TransitionSettings(QWidget* parent): QWidget(parent) {
 
 void TransitionSettings::slotTransitionChanged(bool reinit) {
     QDomElement e = m_usedTransition->toXML().cloneNode().toElement();
-       if (reinit) {
-               QDomElement newTransition = MainWindow::transitions.getEffectByName(ui.listWidget->currentItem()->text());
-               slotUpdateEffectParams(e, newTransition);
-               emit transferParamDesc(newTransition, 0, 0);
-       }
-       else {
-               //slotUpdateEffectParams(e, e);
-               emit transferParamDesc(e, 0, 0);
-       }
+    if (reinit) {
+        QDomElement newTransition = MainWindow::transitions.getEffectByName(ui.listWidget->currentItem()->text());
+        slotUpdateEffectParams(e, newTransition);
+        emit transferParamDesc(newTransition, 0, 0);
+    } else {
+        //slotUpdateEffectParams(e, e);
+        emit transferParamDesc(e, 0, 0);
+    }
 }
 
 void TransitionSettings::slotTransitionItemSelected(Transition* t) {
     setEnabled(t != NULL);
     if (t == m_usedTransition) {
-               return;
-       }
+        return;
+    }
     m_usedTransition = t;
     if (m_usedTransition) {
         QList<QListWidgetItem*> list = ui.listWidget->findItems(m_usedTransition->transitionName(), Qt::MatchExactly);