]> git.sesse.net Git - kdenlive/blobdiff - src/trackview.cpp
Ask to change profile if first clip does not match project profile:
[kdenlive] / src / trackview.cpp
index fd6d6e99893b467618adb9fe167ccd210fc93128..cb255cd597aa53de893d4c7b248e27b839066820 100644 (file)
@@ -54,7 +54,6 @@ TrackView::TrackView(KdenliveDoc *doc, bool *ok, QWidget *parent) :
     m_trackview = new CustomTrackView(doc, m_scene, parent);
     m_trackview->scale(1, 1);
     m_trackview->setAlignment(Qt::AlignLeft | Qt::AlignTop);
-    //m_scene->addRect(QRectF(0, 0, 100, 100), QPen(), QBrush(Qt::red));
 
     m_ruler = new CustomRuler(doc->timecode(), m_trackview);
     connect(m_ruler, SIGNAL(zoneMoved(int, int)), this, SIGNAL(zoneMoved(int, int)));
@@ -105,6 +104,8 @@ TrackView::TrackView(KdenliveDoc *doc, bool *ok, QWidget *parent) :
     connect(m_trackview, SIGNAL(tracksChanged()), this, SLOT(slotReloadTracks()));
     connect(m_trackview, SIGNAL(updateTrackHeaders()), this, SLOT(slotRepaintTracks()));
     connect(m_trackview, SIGNAL(showTrackEffects(int, TrackInfo)), this, SIGNAL(showTrackEffects(int, TrackInfo)));
+    connect(m_trackview, SIGNAL(updateTrackEffectState(int)), this, SLOT(slotUpdateTrackEffectState(int)));
+
 
     parseDocument(m_doc->toXml());
     if (m_doc->setSceneList() == -1) *ok = false;
@@ -116,7 +117,7 @@ TrackView::TrackView(KdenliveDoc *doc, bool *ok, QWidget *parent) :
     connect(m_trackview, SIGNAL(doTrackLock(int, bool)), this, SLOT(slotChangeTrackLock(int, bool)));
 
     slotChangeZoom(m_doc->zoom().x(), m_doc->zoom().y());
-    slotSetZone(m_doc->zone());
+    slotSetZone(m_doc->zone(), false);
 }
 
 TrackView::~TrackView()
@@ -172,9 +173,10 @@ int TrackView::outPoint() const
     return m_ruler->outPoint();
 }
 
-void TrackView::slotSetZone(QPoint p)
+void TrackView::slotSetZone(QPoint p, bool updateDocumentProperties)
 {
     m_ruler->setZone(p);
+    if (updateDocumentProperties) m_doc->setZone(p.x(), p.y());
 }
 
 void TrackView::setDuration(int dur)
@@ -251,8 +253,7 @@ void TrackView::parseDocument(QDomDocument doc)
                 p = playlists.item(j).toElement();
                 if (p.attribute("id") == playlist_name) {
                     // playlist found, check track effects
-                    QDomNodeList trackEffects = p.elementsByTagName("filter");
-                    kDebug() << "<< PLAYLIST: " << playlist_name << ", effects: " << trackEffects.count() << ", TK IX: " << trackIndex;
+                    QDomNodeList trackEffects = p.childNodes();
                     slotAddProjectEffects(trackEffects, p, NULL, trackIndex++);
                     break;
                 }
@@ -517,13 +518,9 @@ void TrackView::refresh()
 
 void TrackView::slotRepaintTracks()
 {
-    QLayoutItem *child;
-    for (int i = 0; i < headers_container->layout()->count(); i++) {
-        child = headers_container->layout()->itemAt(i);
-        if (child->widget() && child->widget()->height() > 5) {
-            HeaderTrack *head = static_cast <HeaderTrack *>(child->widget());
-            if (head) head->setSelectedIndex(m_trackview->selectedTrack());
-        }
+    QList<HeaderTrack *> widgets = findChildren<HeaderTrack *>();
+    for (int i = 0; i < widgets.count(); i++) {
+        if (widgets.at(i)) widgets.at(i)->setSelectedIndex(m_trackview->selectedTrack());
     }
 }
 
@@ -548,10 +545,8 @@ void TrackView::slotRebuildTrackHeaders()
     QFrame *frame = NULL;
     for (int i = 0; i < max; i++) {
         frame = new QFrame(headers_container);
+        frame->setFrameStyle(QFrame::HLine);
         frame->setFixedHeight(1);
-        frame->setFrameStyle(QFrame::Plain);
-        frame->setFrameShape(QFrame::Box);
-        frame->setLineWidth(1);
         headers_container->layout()->addWidget(frame);
         TrackInfo info = list.at(max - i - 1);
         header = new HeaderTrack(i, info, height, headers_container);
@@ -569,10 +564,8 @@ void TrackView::slotRebuildTrackHeaders()
         headers_container->layout()->addWidget(header);
     }
     frame = new QFrame(this);
+    frame->setFrameStyle(QFrame::HLine);
     frame->setFixedHeight(1);
-    frame->setFrameStyle(QFrame::Plain);
-    frame->setFrameShape(QFrame::Box);
-    frame->setLineWidth(1);
     headers_container->layout()->addWidget(frame);
 }
 
@@ -580,10 +573,9 @@ void TrackView::slotRebuildTrackHeaders()
 void TrackView::adjustTrackHeaders()
 {
     int height = KdenliveSettings::trackheight() * m_scene->scale().y() - 1;
-    QLayoutItem *child;
-    for (int i = 0; i < headers_container->layout()->count(); i++) {
-        child = headers_container->layout()->itemAt(i);
-        if (child->widget() && child->widget()->height() > 5)(static_cast <HeaderTrack *>(child->widget()))->adjustSize(height);
+    QList<HeaderTrack *> widgets = findChildren<HeaderTrack *>();
+    for (int i = 0; i < widgets.count(); i++) {
+        if (widgets.at(i)) widgets.at(i)->adjustSize(height);
     }
 }
 
@@ -683,11 +675,12 @@ int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool locked)
     return position;
 }
 
-void TrackView::slotAddProjectEffects(QDomNodeList effects, QDomElement parent, ClipItem *clip, int trackIndex)
+void TrackView::slotAddProjectEffects(QDomNodeList effects, QDomElement parentNode, ClipItem *clip, int trackIndex)
 {
     for (int ix = 0; ix < effects.count(); ix++) {
         bool disableeffect = false;
         QDomElement effect = effects.at(ix).toElement();
+        if (effect.tagName() != "filter") continue;
 
         // add effect to clip
         QString effecttag;
@@ -727,7 +720,7 @@ void TrackView::slotAddProjectEffects(QDomNodeList effects, QDomElement parent,
         if (clipeffect.isNull()) {
             kDebug() << "///  WARNING, EFFECT: " << effecttag << ": " << effectid << " not found, removing it from project";
             m_documentErrors.append(i18n("Effect %1:%2 not found in MLT, it was removed from this project\n", effecttag, effectid));
-            parent.removeChild(effects.at(ix));
+            if (parentNode.removeChild(effects.at(ix)).isNull()) kDebug() << "///  PROBLEM REMOVING EFFECT: " << effecttag;
             ix--;
         } else {
             QDomElement currenteffect = clipeffect.cloneNode().toElement();
@@ -841,8 +834,8 @@ void TrackView::slotAddProjectEffects(QDomNodeList effects, QDomElement parent,
                             if (e.attribute("type") == "simplekeyframe") {
                                 QStringList kfrs = paramvalue.split(";");
                                 for (int l = 0; l < kfrs.count(); l++) {
-                                    QString fr = kfrs.at(l).section("=", 0, 0);
-                                    double val = kfrs.at(l).section("=", 1, 1).toDouble();
+                                    QString fr = kfrs.at(l).section('=', 0, 0);
+                                    double val = kfrs.at(l).section('=', 1, 1).toDouble();
                                     kfrs[l] = fr + ":" + QString::number((int)(val * fact));
                                 }
                                 e.setAttribute("keyframes", kfrs.join(";"));
@@ -992,7 +985,18 @@ void TrackView::updateRuler()
 
 void TrackView::slotShowTrackEffects(int ix)
 {
+    m_trackview->clearSelection();
     emit showTrackEffects(m_doc->tracksCount() - ix, m_doc->trackInfoAt(m_doc->tracksCount() - ix - 1));
 }
 
+void TrackView::slotUpdateTrackEffectState(int ix)
+{
+    QList<HeaderTrack *> widgets = findChildren<HeaderTrack *>();
+    if (ix < 0 || ix >= widgets.count()) {
+        kDebug() << "ERROR, Trying to access a non existant track: " << ix;
+        return;
+    }
+    widgets.at(m_doc->tracksCount() - ix - 1)->updateEffectLabel(m_doc->trackInfoAt(ix).effectsList.effectNames());
+}
+
 #include "trackview.moc"