]> git.sesse.net Git - kdenlive/commitdiff
Track height can now be changed from settings dialog
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 19 Mar 2008 22:55:09 +0000 (22:55 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 19 Mar 2008 22:55:09 +0000 (22:55 +0000)
svn path=/branches/KDE4/; revision=2081

16 files changed:
src/clipitem.cpp
src/clipitem.h
src/customtrackview.cpp
src/customtrackview.h
src/definitions.h
src/docclipbase.cpp
src/headertrack.cpp
src/headertrack.h
src/kdenlivesettings.kcfg
src/kthumb.cpp
src/kthumb.h
src/mainwindow.cpp
src/trackview.cpp
src/trackview.h
src/transition.cpp
src/widgets/configdisplay_ui.ui

index 55c5f747aaad2642890da884392621f7b1eaae85..745f50b55c2d8a5439812d29086aacfd3cc13eca 100644 (file)
@@ -102,6 +102,11 @@ ClipItem::~ClipItem() {
     if (endThumbTimer) delete endThumbTimer;
 }
 
+void ClipItem::resetThumbs() {
+    slotFetchThumbs();
+    audioThumbCachePic.clear();
+}
+
 void ClipItem::slotFetchThumbs() {
     m_thumbsRequested += 2;
     emit getThumb((int)m_cropStart.frames(m_fps), (int)(m_cropStart + m_cropDuration).frames(m_fps));
index e3d182012401080b949ba7141feb340927ab9316..a61cecee406cd8f7782c1c30cfa0bb2d0c4f3951 100644 (file)
@@ -73,6 +73,8 @@ public:
     void setEffectAt(int ix, QDomElement effect);
     void flashClip();
     void addTransition(Transition*);
+    /** regenerate audio and video thumbnails */
+    void resetThumbs();
 
 protected:
     virtual void mouseMoveEvent(QGraphicsSceneMouseEvent * event);
index 22b82c4c2edd71f2065b51a517026990746f2a49..da85f1fe6fbdf58f7cf1bfc7e92e98d1ac0f298b 100644 (file)
@@ -49,7 +49,7 @@
 // const int duration = animate ? 1500 : 1;
 
 CustomTrackView::CustomTrackView(KdenliveDoc *doc, QGraphicsScene * projectscene, QWidget *parent)
-        : QGraphicsView(projectscene, parent), m_tracksCount(0), m_cursorPos(0), m_dropItem(NULL), m_cursorLine(NULL), m_operationMode(NONE), m_startPos(QPointF()), m_dragItem(NULL), m_visualTip(NULL), m_moveOpMode(NONE), m_animation(NULL), m_projectDuration(0), m_scale(1.0), m_clickPoint(QPoint()), m_document(doc), m_autoScroll(KdenliveSettings::autoscroll()) {
+        : QGraphicsView(projectscene, parent), m_cursorPos(0), m_dropItem(NULL), m_cursorLine(NULL), m_operationMode(NONE), m_startPos(QPointF()), m_dragItem(NULL), m_visualTip(NULL), m_moveOpMode(NONE), m_animation(NULL), m_projectDuration(0), m_scale(1.0), m_clickPoint(QPoint()), m_document(doc), m_autoScroll(KdenliveSettings::autoscroll()), m_tracksHeight(KdenliveSettings::trackheight()) {
     if (doc) m_commandStack = doc->commandStack();
     else m_commandStack == NULL;
     setMouseTracking(true);
@@ -64,7 +64,7 @@ CustomTrackView::CustomTrackView(KdenliveDoc *doc, QGraphicsScene * projectscene
     m_tipPen.setWidth(3);
     setContentsMargins(0, 0, 0, 0);
     if (projectscene) {
-        m_cursorLine = projectscene->addLine(0, 0, 0, 50);
+        m_cursorLine = projectscene->addLine(0, 0, 0, m_tracksHeight);
         m_cursorLine->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIgnoresTransformations);
         m_cursorLine->setZValue(1000);
     }
@@ -80,6 +80,33 @@ void CustomTrackView::checkAutoScroll() {
     m_autoScroll = KdenliveSettings::autoscroll();
 }
 
+QList <TRACKTYPE> CustomTrackView::tracksList() const {
+    return m_tracksList;
+}
+
+void CustomTrackView::checkTrackHeight() {
+    if (m_tracksHeight == KdenliveSettings::trackheight()) return;
+    m_tracksHeight = KdenliveSettings::trackheight();
+    emit trackHeightChanged();
+    QList<QGraphicsItem *> itemList = items();
+    ClipItem *item;
+    Transition *transitionitem;
+    for (int i = 0; i < itemList.count(); i++) {
+        if (itemList.at(i)->type() == AVWIDGET) {
+            item = (ClipItem*) itemList.at(i);
+            item->setRect(item->rect().x(), item->track() * m_tracksHeight, item->rect().width(), m_tracksHeight - 1);
+            item->resetThumbs();
+        } else if (itemList.at(i)->type() == TRANSITIONWIDGET) {
+            transitionitem = (Transition*) itemList.at(i);
+            transitionitem->setRect(transitionitem->rect().x(), transitionitem->track() * m_tracksHeight + m_tracksHeight / 2, transitionitem->rect().width(), m_tracksHeight - 1);
+        }
+    }
+    m_cursorLine->setLine(m_cursorLine->line().x1(), 0, m_cursorLine->line().x1(), m_tracksHeight * m_tracksList.count());
+    setSceneRect(0, 0, sceneRect().width(), m_tracksHeight * m_tracksList.count());
+    verticalScrollBar()->setMaximum(m_tracksHeight * m_tracksList.count());
+    update();
+}
+
 // virtual
 void CustomTrackView::resizeEvent(QResizeEvent * event) {
     QGraphicsView::resizeEvent(event);
@@ -113,14 +140,14 @@ void CustomTrackView::mouseMoveEvent(QMouseEvent * event) {
             if (m_operationMode == MOVE) {
                 double snappedPos = getSnapPointForPos(mapToScene(event->pos()).x() - m_clickPoint.x());
                 //kDebug() << "///////  MOVE CLIP, EVENT Y: "<<m_clickPoint.y();//<<event->scenePos().y()<<", SCENE HEIGHT: "<<scene()->sceneRect().height();
-                int moveTrack = (int)  mapToScene(event->pos() + QPoint(0, (m_dragItem->type() == TRANSITIONWIDGET ? 50 - m_clickPoint.y() : 0))).y() / 50;
+                int moveTrack = (int)  mapToScene(event->pos() + QPoint(0, (m_dragItem->type() == TRANSITIONWIDGET ? m_tracksHeight - m_clickPoint.y() : 0))).y() / m_tracksHeight;
                 int currentTrack = m_dragItem->track();
 
-                if (moveTrack > m_tracksCount - 1) moveTrack = m_tracksCount - 1;
+                if (moveTrack > m_tracksList.count() - 1) moveTrack = m_tracksList.count() - 1;
                 else if (moveTrack < 0) moveTrack = 0;
 
                 int offset = moveTrack - currentTrack;
-                if (offset != 0) offset = 50 * offset;
+                if (offset != 0) offset = m_tracksHeight * offset;
                 m_dragItem->moveTo(snappedPos / m_scale, m_scale, offset, moveTrack);
             } else if (m_operationMode == RESIZESTART) {
                 double snappedPos = getSnapPointForPos(mapToScene(event->pos()).x());
@@ -343,9 +370,7 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event) {
             if (item->type() == AVWIDGET || item->type() == TRANSITIONWIDGET) {
                 // select item
                 if (!item->isSelected()) {
-                    QList<QGraphicsItem *> itemList = items();
-                    for (int i = 0; i < itemList.count(); i++)
-                        itemList.at(i)->setSelected(false);
+
                     item->setSelected(true);
                     update();
                 }
@@ -425,7 +450,7 @@ void CustomTrackView::dragEnterEvent(QDragEnterEvent * event) {
 }
 
 void CustomTrackView::slotRefreshEffects(ClipItem *clip) {
-    int track = m_tracksCount - clip->track();
+    int track = m_tracksList.count() - clip->track();
     GenTime pos = clip->startPos();
     m_document->renderer()->mltRemoveEffect(track, pos, "-1", false);
     for (int i = 0; i < clip->effectsCount(); i++) {
@@ -435,7 +460,7 @@ void CustomTrackView::slotRefreshEffects(ClipItem *clip) {
 }
 
 void CustomTrackView::addEffect(int track, GenTime pos, QDomElement effect) {
-    ClipItem *clip = getClipItemAt(pos.frames(m_document->fps()) + 1, m_tracksCount - track);
+    ClipItem *clip = getClipItemAt(pos.frames(m_document->fps()) + 1, m_tracksList.count() - track);
     if (clip) {
         QMap <QString, QString> effectParams = clip->addEffect(effect);
         m_document->renderer()->mltAddEffect(track, pos, effectParams);
@@ -446,7 +471,7 @@ void CustomTrackView::addEffect(int track, GenTime pos, QDomElement effect) {
 void CustomTrackView::deleteEffect(int track, GenTime pos, QDomElement effect) {
     QString index = effect.attribute("kdenlive_ix");
     m_document->renderer()->mltRemoveEffect(track, pos, index);
-    ClipItem *clip = getClipItemAt(pos.frames(m_document->fps()) + 1, m_tracksCount - track);
+    ClipItem *clip = getClipItemAt(pos.frames(m_document->fps()) + 1, m_tracksList.count() - track);
     if (clip) {
         clip->deleteEffect(index);
         emit clipItemSelected(clip);
@@ -470,7 +495,7 @@ void CustomTrackView::slotAddEffect(QDomElement effect, GenTime pos, int track)
             // not be changed
             if (effect.attribute("kdenlive_ix").toInt() == 0)
                 effect.setAttribute("kdenlive_ix", QString::number(item->effectsCounter()));
-            AddEffectCommand *command = new AddEffectCommand(this, m_tracksCount - item->track(), item->startPos(), effect, true);
+            AddEffectCommand *command = new AddEffectCommand(this, m_tracksList.count() - item->track(), item->startPos(), effect, true);
             m_commandStack->push(command);
         }
     }
@@ -478,19 +503,19 @@ void CustomTrackView::slotAddEffect(QDomElement effect, GenTime pos, int track)
 }
 
 void CustomTrackView::slotDeleteEffect(ClipItem *clip, QDomElement effect) {
-    AddEffectCommand *command = new AddEffectCommand(this, m_tracksCount - clip->track(), clip->startPos(), effect, false);
+    AddEffectCommand *command = new AddEffectCommand(this, m_tracksList.count() - clip->track(), clip->startPos(), effect, false);
     m_commandStack->push(command);
     m_document->setModified(true);
 }
 
 void CustomTrackView::updateEffect(int track, GenTime pos, QDomElement effect) {
-    ClipItem *clip = getClipItemAt(pos.frames(m_document->fps()) + 1, m_tracksCount - track);
+    ClipItem *clip = getClipItemAt(pos.frames(m_document->fps()) + 1, m_tracksList.count() - track);
     if (clip) {
         QMap <QString, QString> effectParams = clip->getEffectArgs(effect);
         if (effectParams["disabled"] == "1") {
             QString index = effectParams["kdenlive_ix"];
             m_document->renderer()->mltRemoveEffect(track, pos, index);
-        } else m_document->renderer()->mltEditEffect(m_tracksCount - clip->track(), clip->startPos(), effectParams);
+        } else m_document->renderer()->mltEditEffect(m_tracksList.count() - clip->track(), clip->startPos(), effectParams);
     }
     m_document->setModified(true);
 }
@@ -498,13 +523,13 @@ void CustomTrackView::updateEffect(int track, GenTime pos, QDomElement effect) {
 void CustomTrackView::slotChangeEffectState(ClipItem *clip, QDomElement effect, bool disable) {
     QDomElement oldEffect = effect.cloneNode().toElement();
     effect.setAttribute("disabled", disable);
-    EditEffectCommand *command = new EditEffectCommand(this, m_tracksCount - clip->track(), clip->startPos(), oldEffect, effect, true);
+    EditEffectCommand *command = new EditEffectCommand(this, m_tracksList.count() - clip->track(), clip->startPos(), oldEffect, effect, true);
     m_commandStack->push(command);
     m_document->setModified(true);
 }
 
 void CustomTrackView::slotUpdateClipEffect(ClipItem *clip, QDomElement oldeffect, QDomElement effect) {
-    EditEffectCommand *command = new EditEffectCommand(this, m_tracksCount - clip->track(), clip->startPos(), oldeffect, effect, true);
+    EditEffectCommand *command = new EditEffectCommand(this, m_tracksList.count() - clip->track(), clip->startPos(), oldeffect, effect, true);
     m_commandStack->push(command);
 }
 
@@ -524,7 +549,9 @@ void CustomTrackView::addTransition(int startTrack, GenTime startPos , QDomEleme
            )
             map[attribs.item(i).nodeName()] = attribs.item(i).nodeValue();
     }
-    m_document->renderer()->mltAddTransition(e.attribute("type"), 4 - e.attribute("transition_track").toInt(), 5 - e.attribute("transition_track").toInt() ,
+
+    kDebug() << "---- ADDING transition " << e.attribute("type") << ", on tracks " << m_tracksList.count() - e.attribute("transition_track").toInt();
+    m_document->renderer()->mltAddTransition(e.attribute("type"), m_tracksList.count() - e.attribute("transition_track").toInt() - 1, 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);
@@ -535,7 +562,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"), 4 - e.attribute("transition_track").toInt(), 5 - e.attribute("transition_track").toInt() ,
+    m_document->renderer()->mltDeleteTransition(e.attribute("type"), m_tracksList.count() - 1  - 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);
@@ -546,8 +573,8 @@ void CustomTrackView::addItem(DocClipBase *clip, QPoint pos) {
     int in = 0;
     GenTime out = clip->duration();
     //kdDebug()<<"- - - -CREATING CLIP, duration = "<<out<<", URL: "<<clip->fileURL();
-    int trackTop = ((int) mapToScene(pos).y() / 50) * 50 + 1;
-    m_dropItem = new ClipItem(clip, ((int) mapToScene(pos).y() / 50), GenTime(), QRectF(mapToScene(pos).x() * m_scale, trackTop, out.frames(m_document->fps()) * m_scale, 49), out, m_document->fps());
+    int trackTop = ((int) mapToScene(pos).y() / m_tracksHeight) * m_tracksHeight + 1;
+    m_dropItem = new ClipItem(clip, ((int) mapToScene(pos).y() / m_tracksHeight), GenTime(), QRectF(mapToScene(pos).x() * m_scale, trackTop, out.frames(m_document->fps()) * m_scale, m_tracksHeight - 1), out, m_document->fps());
     scene()->addItem(m_dropItem);
 }
 
@@ -556,8 +583,8 @@ void CustomTrackView::dragMoveEvent(QDragMoveEvent * event) {
     event->setDropAction(Qt::IgnoreAction);
     //kDebug()<<"+++++++++++++   DRAG MOVE, : "<<mapToScene(event->pos()).x()<<", SCAL: "<<m_scale;
     if (m_dropItem) {
-        int track = (int) mapToScene(event->pos()).y() / 50; //) * (m_scale * 50) + m_scale;
-        m_dropItem->moveTo(mapToScene(event->pos()).x() / m_scale, m_scale, (track - m_dropItem->track()) * 50, track);
+        int track = (int) mapToScene(event->pos()).y() / m_tracksHeight; //) * (m_scale * 50) + m_scale;
+        m_dropItem->moveTo(mapToScene(event->pos()).x() / m_scale, m_scale, (track - m_dropItem->track()) * m_tracksHeight, track);
         event->setDropAction(Qt::MoveAction);
         if (event->mimeData()->hasFormat("kdenlive/producerslist")) {
             event->acceptProposedAction();
@@ -580,8 +607,8 @@ void CustomTrackView::dropEvent(QDropEvent * event) {
         m_commandStack->push(command);
         m_dropItem->baseClip()->addReference();
         m_document->updateClip(m_dropItem->baseClip()->getId());
-        // kDebug()<<"IIIIIIIIIIIIIIIIIIIIIIII TRAX CNT: "<<m_tracksCount<<", DROP: "<<m_dropItem->track();
-        m_document->renderer()->mltInsertClip(m_tracksCount - m_dropItem->track(), m_dropItem->startPos(), m_dropItem->xml());
+        // kDebug()<<"IIIIIIIIIIIIIIIIIIIIIIII TRAX CNT: "<<m_tracksList.count()<<", DROP: "<<m_dropItem->track();
+        m_document->renderer()->mltInsertClip(m_tracksList.count() - m_dropItem->track(), m_dropItem->startPos(), m_dropItem->xml());
         m_document->setModified(true);
     } else QGraphicsView::dropEvent(event);
     m_dropItem = NULL;
@@ -602,7 +629,7 @@ Qt::DropActions CustomTrackView::supportedDropActions() const {
 }
 
 void CustomTrackView::setDuration(int duration) {
-    kDebug() << "/////////////  PRO DUR: " << duration << ", height: " << 50 * m_tracksCount;
+    //kDebug() << "/////////////  PRO DUR: " << duration << ", height: " << 50 * m_tracksList.count();
     m_projectDuration = duration;
     scene()->setSceneRect(0, 0, (m_projectDuration + 500) * m_scale, scene()->sceneRect().height()); //50 * m_tracksCount);
 }
@@ -611,17 +638,18 @@ int CustomTrackView::duration() const {
     return m_projectDuration;
 }
 
-void CustomTrackView::addTrack() {
-    m_tracksCount++;
-    m_cursorLine->setLine(m_cursorLine->line().x1(), 0, m_cursorLine->line().x1(), 50 * m_tracksCount);
-    //setSceneRect(0, 0, sceneRect().width(), 50 * m_tracksCount);
-    //verticalScrollBar()->setMaximum(50 * m_tracksCount);
+void CustomTrackView::addTrack(TRACKTYPE type) {
+    m_tracksList << type;
+    m_cursorLine->setLine(m_cursorLine->line().x1(), 0, m_cursorLine->line().x1(), m_tracksHeight * m_tracksList.count());
+    setSceneRect(0, 0, sceneRect().width(), m_tracksHeight * m_tracksList.count());
+    verticalScrollBar()->setMaximum(m_tracksHeight * m_tracksList.count());
     //setFixedHeight(50 * m_tracksCount);
 }
 
 void CustomTrackView::removeTrack() {
-    m_tracksCount--;
-    m_cursorLine->setLine(m_cursorLine->line().x1(), 0, m_cursorLine->line().x1(), 50 * m_tracksCount);
+    // TODO: implement track deletion
+    //m_tracksCount--;
+    m_cursorLine->setLine(m_cursorLine->line().x1(), 0, m_cursorLine->line().x1(), m_tracksHeight * m_tracksList.count());
 }
 
 void CustomTrackView::deleteClip(int clipId) {
@@ -671,19 +699,19 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) {
         // move clip
         MoveClipCommand *command = new MoveClipCommand(this, m_startPos, QPointF(m_dragItem->startPos().frames(m_document->fps()), m_dragItem->track()), false);
         m_commandStack->push(command);
-        if (m_dragItem->type() == AVWIDGET) m_document->renderer()->mltMoveClip(m_tracksCount - m_startPos.y(), m_tracksCount - m_dragItem->track(), m_startPos.x(), m_dragItem->startPos().frames(m_document->fps()));
+        if (m_dragItem->type() == AVWIDGET) m_document->renderer()->mltMoveClip(m_tracksList.count() - m_startPos.y(), m_tracksList.count() - m_dragItem->track(), m_startPos.x(), m_dragItem->startPos().frames(m_document->fps()));
     } else if (m_operationMode == RESIZESTART) {
         // resize start
         ResizeClipCommand *command = new ResizeClipCommand(this, m_startPos, QPointF(m_dragItem->startPos().frames(m_document->fps()), m_dragItem->track()), true, false);
 
-        if (m_dragItem->type() == AVWIDGET) m_document->renderer()->mltResizeClipStart(m_tracksCount - m_dragItem->track(), m_dragItem->endPos(), m_dragItem->startPos(), GenTime(m_startPos.x(), m_document->fps()), m_dragItem->cropStart(), m_dragItem->cropStart() + m_dragItem->endPos() - m_dragItem->startPos());
+        if (m_dragItem->type() == AVWIDGET) m_document->renderer()->mltResizeClipStart(m_tracksList.count() - m_dragItem->track(), m_dragItem->endPos(), m_dragItem->startPos(), GenTime(m_startPos.x(), m_document->fps()), m_dragItem->cropStart(), m_dragItem->cropStart() + m_dragItem->endPos() - m_dragItem->startPos());
         m_commandStack->push(command);
         m_document->renderer()->doRefresh();
     } else if (m_operationMode == RESIZEEND) {
         // resize end
         ResizeClipCommand *command = new ResizeClipCommand(this, m_startPos, QPointF(m_dragItem->endPos().frames(m_document->fps()), m_dragItem->track()), false, false);
 
-        if (m_dragItem->type() == AVWIDGET) m_document->renderer()->mltResizeClipEnd(m_tracksCount - m_dragItem->track(), m_dragItem->startPos(), m_dragItem->cropStart(), m_dragItem->cropStart() + m_dragItem->endPos() - m_dragItem->startPos());
+        if (m_dragItem->type() == AVWIDGET) m_document->renderer()->mltResizeClipEnd(m_tracksList.count() - m_dragItem->track(), m_dragItem->startPos(), m_dragItem->cropStart(), m_dragItem->cropStart() + m_dragItem->endPos() - m_dragItem->startPos());
         m_commandStack->push(command);
         m_document->renderer()->doRefresh();
     }
@@ -701,7 +729,7 @@ void CustomTrackView::deleteClip(int track, GenTime startpos, const QRectF &rect
     item->baseClip()->removeReference();
     m_document->updateClip(item->baseClip()->getId());
     delete item;
-    m_document->renderer()->mltRemoveClip(m_tracksCount - track, startpos);
+    m_document->renderer()->mltRemoveClip(m_tracksList.count() - track, startpos);
     m_document->renderer()->doRefresh();
 }
 
@@ -717,33 +745,33 @@ void CustomTrackView::deleteSelectedClips() {
 }
 
 void CustomTrackView::addClip(QDomElement xml, int clipId, int track, GenTime startpos, const QRectF &rect, GenTime duration) {
-    QRect r(startpos.frames(m_document->fps()) * m_scale, 50 * track, duration.frames(m_document->fps()) * m_scale, 49);
+    QRect r(startpos.frames(m_document->fps()) * m_scale, m_tracksHeight * track, duration.frames(m_document->fps()) * m_scale, m_tracksHeight - 1);
     DocClipBase *baseclip = m_document->clipManager()->getClipById(clipId);
     ClipItem *item = new ClipItem(baseclip, track, startpos, r, duration, m_document->fps());
     scene()->addItem(item);
     baseclip->addReference();
     m_document->updateClip(baseclip->getId());
-    m_document->renderer()->mltInsertClip(m_tracksCount - track, startpos, xml);
+    m_document->renderer()->mltInsertClip(m_tracksList.count() - track, startpos, xml);
     m_document->renderer()->doRefresh();
 }
 
 ClipItem *CustomTrackView::getClipItemAt(int pos, int track) {
-    return (ClipItem *) scene()->itemAt(pos * m_scale, track * 50 + 25);
+    return (ClipItem *) scene()->itemAt(pos * m_scale, track * m_tracksHeight + m_tracksHeight / 2);
 }
 
 ClipItem *CustomTrackView::getClipItemAt(GenTime pos, int track) {
-    return (ClipItem *) scene()->itemAt(pos.frames(m_document->fps()) * m_scale, track * 50 + 25);
+    return (ClipItem *) scene()->itemAt(pos.frames(m_document->fps()) * m_scale, track * m_tracksHeight + m_tracksHeight / 2);
 }
 
 void CustomTrackView::moveClip(const QPointF &startPos, const QPointF &endPos) {
     ClipItem *item = getClipItemAt(startPos.x() + 1, startPos.y());
     if (!item) {
-        kDebug() << "----------------  ERROR, CANNOT find clip to move at: " << startPos.x() * m_scale * FRAME_SIZE + 1 << ", " << startPos.y() * 50 + 25;
+        kDebug() << "----------------  ERROR, CANNOT find clip to move at: " << startPos.x() * m_scale * FRAME_SIZE + 1 << ", " << startPos.y() * m_tracksHeight + m_tracksHeight / 2;
         return;
     }
     kDebug() << "----------------  Move CLIP FROM: " << startPos.x() << ", END:" << endPos.x();
-    item->moveTo(endPos.x(), m_scale, (endPos.y() - startPos.y()) * 50, endPos.y());
-    m_document->renderer()->mltMoveClip(m_tracksCount - startPos.y(), m_tracksCount - endPos.y(), startPos.x(), endPos.x());
+    item->moveTo(endPos.x(), m_scale, (endPos.y() - startPos.y()) * m_tracksHeight, endPos.y());
+    m_document->renderer()->mltMoveClip(m_tracksList.count() - startPos.y(), m_tracksList.count() - endPos.y(), startPos.x(), endPos.x());
 }
 
 void CustomTrackView::resizeClip(const QPointF &startPos, const QPointF &endPos, bool resizeClipStart) {
@@ -757,10 +785,10 @@ void CustomTrackView::resizeClip(const QPointF &startPos, const QPointF &endPos,
     }
     qreal diff = endPos.x() - startPos.x();
     if (resizeClipStart) {
-        m_document->renderer()->mltResizeClipStart(m_tracksCount - item->track(), item->endPos(), GenTime(endPos.x(), m_document->fps()), item->startPos(), item->cropStart() + GenTime(diff, m_document->fps()), item->cropStart() + GenTime(diff, m_document->fps()) + item->endPos() - GenTime(endPos.x(), m_document->fps()));
+        m_document->renderer()->mltResizeClipStart(m_tracksList.count() - item->track(), item->endPos(), GenTime(endPos.x(), m_document->fps()), item->startPos(), item->cropStart() + GenTime(diff, m_document->fps()), item->cropStart() + GenTime(diff, m_document->fps()) + item->endPos() - GenTime(endPos.x(), m_document->fps()));
         item->resizeStart(endPos.x(), m_scale);
     } else {
-        m_document->renderer()->mltResizeClipEnd(m_tracksCount - item->track(), item->startPos(), item->cropStart(), item->cropStart() + GenTime(endPos.x(), m_document->fps()) - item->startPos());
+        m_document->renderer()->mltResizeClipEnd(m_tracksList.count() - item->track(), item->startPos(), item->cropStart(), item->cropStart() + GenTime(endPos.x(), m_document->fps()) - item->startPos());
         item->resizeEnd(endPos.x(), m_scale);
     }
     m_document->renderer()->doRefresh();
@@ -815,7 +843,7 @@ void CustomTrackView::setScale(double scaleFactor) {
         }
     }
     updateCursorPos();
-    centerOn(QPointF(cursorPos(), 50));
+    centerOn(QPointF(cursorPos(), m_tracksHeight));
     scene()->setSceneRect(0, 0, (m_projectDuration + 500) * m_scale, scene()->sceneRect().height());
 }
 
@@ -826,11 +854,13 @@ void CustomTrackView::drawBackground(QPainter * painter, const QRectF & rect) {
     QColor base = palette().button().color();
     painter->setClipRect(rect);
     painter->drawLine(rectInView.left(), 0, rectInView.right(), 0);
-    for (uint i = 0; i < m_tracksCount;i++) {
-        painter->drawLine(rectInView.left(), 50 * (i + 1), rectInView.right(), 50 * (i + 1));
+    uint max = m_tracksList.count();
+    for (uint i = 0; i < max;i++) {
+        if (m_tracksList.at(max - i - 1) == AUDIOTRACK) painter->fillRect(rectInView.left(), m_tracksHeight * i + 1, rectInView.right() - rectInView.left() + 1, m_tracksHeight - 1, QBrush(QColor(240, 240, 255)));
+        painter->drawLine(rectInView.left(), m_tracksHeight * (i + 1), rectInView.right(), m_tracksHeight * (i + 1));
         //painter->drawText(QRectF(10, 50 * i, 100, 50 * i + 49), Qt::AlignLeft, i18n(" Track ") + QString::number(i + 1));
     }
-    int lowerLimit = 50 * m_tracksCount + 1;
+    int lowerLimit = m_tracksHeight * m_tracksList.count() + 1;
     if (height() > lowerLimit)
         painter->fillRect(QRectF(rectInView.left(), lowerLimit, rectInView.width(), height() - lowerLimit), QBrush(base));
 }
index fa77a67ceb5f7111d3b54d8695e5a9087ad0e9a8..faa5f753860fd2ad1468fc36089e95cb653e3c3c 100644 (file)
@@ -31,6 +31,8 @@
 #include "kdenlivedoc.h"
 #include "clipitem.h"
 
+
+
 class CustomTrackView : public QGraphicsView {
     Q_OBJECT
 
@@ -39,7 +41,7 @@ public:
     virtual void mousePressEvent(QMouseEvent * event);
     virtual void mouseReleaseEvent(QMouseEvent * event);
     virtual void mouseMoveEvent(QMouseEvent * event);
-    void addTrack();
+    void addTrack(TRACKTYPE type);
     void removeTrack();
     int cursorPos();
     void checkAutoScroll();
@@ -59,6 +61,8 @@ public:
     int duration() const;
     void deleteSelectedClips();
     void setContextMenu(QMenu *timeline, QMenu *clip, QMenu *transition);
+    void checkTrackHeight();
+    QList <TRACKTYPE> tracksList() const;
 
 public slots:
     void setCursorPos(int pos, bool seek = true);
@@ -83,7 +87,7 @@ protected:
     virtual void resizeEvent(QResizeEvent * event);
 
 private:
-    int m_tracksCount;
+    uint m_tracksHeight;
     int m_projectDuration;
     int m_cursorPos;
     ClipItem *m_dropItem;
@@ -114,6 +118,8 @@ private:
     QMenu *m_timelineContextMenu;
     QMenu *m_timelineContextClipMenu;
     QMenu *m_timelineContextTransitionMenu;
+    QList <TRACKTYPE> m_tracksList;
+
 
 signals:
     void cursorMoved(int, int);
@@ -123,6 +129,7 @@ signals:
     void clipItemSelected(ClipItem*);
     void transitionItemSelected(Transition*);
     void activateDocumentMonitor();
+    void trackHeightChanged();
 };
 
 #endif
index 91df1feb17e5d1daa2d35fc4c8019a8b66e88ae5..857ba6856a8b38575bc350bc0718b82c2457b8ce 100644 (file)
@@ -37,6 +37,8 @@ enum TRANSITIONTYPE {
     MIX_TRANSITION = 200
 };
 
+enum TRACKTYPE { AUDIOTRACK = 0, VIDEOTRACK = 1 };
+
 struct MltVideoProfile {
     QString path;
     QString description;
index dc4ab3090a13700e0d68705af6bc8d5d4738c6c1..8befddb227a5dd22d39e431affe4d0134a1bf8b7 100644 (file)
@@ -31,7 +31,7 @@ DocClipBase::DocClipBase(ClipManager *clipManager, QDomElement xml, uint id):
     if (out != 0) setDuration(GenTime(out, 25));
     if (m_name.isEmpty()) m_name = url.fileName();
     if (!url.isEmpty()) {
-        m_thumbProd = new KThumb(clipManager, url, KdenliveSettings::track_height() * KdenliveSettings::project_display_ratio(), KdenliveSettings::track_height());
+        m_thumbProd = new KThumb(clipManager, url);
         connect(m_thumbProd, SIGNAL(audioThumbReady(QMap <int, QMap <int, QByteArray> >)), this , SLOT(updateAudioThumbnail(QMap <int, QMap <int, QByteArray> >)));
         connect(this, SIGNAL(getAudioThumbs()), this , SLOT(slotGetAudioThumbs()));
 
index ec4a30393a9e858924c2bb908c2b289b0b1a8494..c7af74ccae887ca94496933ae65642d3ec5e807a 100644 (file)
@@ -7,11 +7,13 @@
 
 #include <KLocale>
 #include <KDebug>
+
+#include "kdenlivesettings.h"
 #include "headertrack.h"
 
-HeaderTrack::HeaderTrack(int index, QWidget *parent)
-        : QWidget(parent), m_index(index) {
-    setFixedHeight(50);
+HeaderTrack::HeaderTrack(int index, TRACKTYPE type, QWidget *parent)
+        : QWidget(parent), m_index(index), m_type(type) {
+    setFixedHeight(KdenliveSettings::trackheight());
     //setFixedWidth(30);
     m_label = QString::number(m_index);
 }
@@ -22,7 +24,8 @@ void HeaderTrack::paintEvent(QPaintEvent *e) {
     region.setTopLeft(QPoint(region.left() + 1, region.top() + 1));
     region.setBottomRight(QPoint(region.right() - 1, region.bottom() - 1));
     QPainter painter(this);
-    painter.fillRect(region, QBrush(QColor(255, 255, 255)));
+    if (m_type == AUDIOTRACK) painter.fillRect(region, QBrush(QColor(240, 240, 255)));
+    else painter.fillRect(region, QBrush(QColor(255, 255, 255)));
     painter.drawText(region, Qt::AlignCenter, m_label);
 }
 
index f933dc6e514ca92379a310a9c7de61e2a4964386..9f58b1faab446640c41664e11f6e5d0641e12f55 100644 (file)
@@ -1,13 +1,13 @@
 #ifndef HEADERTRACK_H
 #define HEADERTRACK_H
 
-
+#include "definitions.h"
 
 class HeaderTrack : public QWidget {
     Q_OBJECT
 
 public:
-    HeaderTrack(int index, QWidget *parent = 0);
+    HeaderTrack(int index, TRACKTYPE type, QWidget *parent = 0);
 
 protected:
     virtual void paintEvent(QPaintEvent * /*e*/);
@@ -15,6 +15,7 @@ protected:
 private:
     int m_index;
     QString m_label;
+    TRACKTYPE m_type;
 
 public slots:
 
index 144478af405077bb06a5d844b74227efc30a2e63..bd1064b18d7ed6a7cb4db65e4a607a1defdd44b5 100644 (file)
       <label>Auto scroll timeline while playing.</label>
       <default>true</default>
     </entry>
+
+    <entry name="trackheight" type="Int">
+      <label>Tracks height in pixel.</label>
+      <default>50</default>
+    </entry>
   </group>
 
   <group name="env">
       <label>Current project display ratio.</label>
       <default>1.7777778</default>
     </entry>
-    <entry name="track_height" type="Int">
-      <label>Timeline track size.</label>
-      <default>50</default>
-    </entry>
     <entry name="default_profile" type="String">
       <label>Default project format.</label>
       <default>hdv_1080_50i</default>
index 12b8403202b5a6c1f0d5c6eb6abf71d5c7d1bd66..54fb42798a72ec12d4db01e26041add108cab205 100644 (file)
@@ -20,8 +20,6 @@
  *                                                                         *
  ***************************************************************************/
 
-#include <qapplication.h>
-
 #include <kio/netaccess.h>
 #include <kdebug.h>
 #include <klocale.h>
@@ -136,7 +134,7 @@ void MyThread::run() {
 #define _G(y,u,v) (0x2568*(y) - 0x0c92*(v) - 0x1a1e*(u)) /0x2000
 #define _B(y,u,v) (0x2568*(y) + 0x40cf*(v))                                          /0x2000
 
-KThumb::KThumb(ClipManager *clipManager, KUrl url, int width, int height, QObject * parent, const char *name): QObject(parent), m_clipManager(clipManager), m_url(url), m_width(width), m_height(height) {
+KThumb::KThumb(ClipManager *clipManager, KUrl url, QObject * parent, const char *name): QObject(parent), m_clipManager(clipManager), m_url(url) {
 
     m_profile = new Mlt::Profile((char*) KdenliveSettings::current_profile().data());
     QCryptographicHash context(QCryptographicHash::Sha1);
@@ -191,19 +189,18 @@ void KThumb::extractImage(int frame, int frame2) {
     Mlt::Producer m_producer(*m_profile, tmp);
     delete[] tmp;
 
-    QPixmap pix(m_width, m_height);
     if (m_producer.is_blank()) {
-        QPixmap pix(m_width, m_height);
+        QPixmap pix(KdenliveSettings::trackheight() * KdenliveSettings::project_display_ratio(), KdenliveSettings::trackheight());
         pix.fill(Qt::black);
         emit thumbReady(frame, pix);
         return;
     }
     if (frame != -1) {
-        QPixmap pix = getFrame(&m_producer, frame, m_width, m_height);
+        QPixmap pix = getFrame(&m_producer, frame, KdenliveSettings::trackheight() * KdenliveSettings::project_display_ratio(), KdenliveSettings::trackheight());
         emit thumbReady(frame, pix);
     }
     if (frame2 != -1) {
-        QPixmap pix = getFrame(&m_producer, frame2, m_width, m_height);
+        QPixmap pix = getFrame(&m_producer, frame2, KdenliveSettings::trackheight() * KdenliveSettings::project_display_ratio(), KdenliveSettings::trackheight());
         emit thumbReady(frame2, pix);
     }
 
index a8637e90145bceaf03cf5d43936bf0d7df6b7663..a5914f38be77b96d564b456ae3d5795049ed2def 100644 (file)
@@ -72,7 +72,7 @@ class KThumb: public QObject {
 Q_OBJECT public:
 
 
-    KThumb(ClipManager *clipManager, KUrl url, int width, int height, QObject * parent = 0, const char *name = 0);
+    KThumb(ClipManager *clipManager, KUrl url, QObject * parent = 0, const char *name = 0);
     ~KThumb();
 
 public slots:
@@ -92,8 +92,6 @@ private:
     MyThread thumbProducer;
     KUrl m_url;
     QString m_thumbFile;
-    int m_width;
-    int m_height;
     Mlt::Profile *m_profile;
     ClipManager *m_clipManager;
 
index 5cc3c582b06b64ba51cb68a3a318c39f2a8db8a0..820f88b7207013926c72aa905be6dc53c4427eb4 100644 (file)
@@ -777,11 +777,13 @@ void MainWindow::updateConfiguration() {
     if (currentTab) {
         currentTab->refresh();
         currentTab->projectView()->checkAutoScroll();
+        currentTab->projectView()->checkTrackHeight();
         if (m_activeDocument) m_activeDocument->clipManager()->checkAudioThumbs();
     }
     timeline_buttons_ui.buttonAudio->setDown(KdenliveSettings::audiothumbnails());
     timeline_buttons_ui.buttonVideo->setDown(KdenliveSettings::videothumbnails());
     activateShuttleDevice();
+
 }
 
 void MainWindow::slotSwitchVideoThumbs() {
index 54ded5af2b34525dc59f1158e15c093dcd425013..39010e027c451092d55aa0b937629a7a955fd765 100644 (file)
@@ -28,6 +28,7 @@
 #include "headertrack.h"
 #include "trackview.h"
 #include "clipitem.h"
+#include "kdenlivesettings.h"
 
 TrackView::TrackView(KdenliveDoc *doc, QWidget *parent)
         : QWidget(parent), m_doc(doc), m_scale(1.0), m_projectTracks(0), m_currentZoom(4) {
@@ -67,6 +68,7 @@ TrackView::TrackView(KdenliveDoc *doc, QWidget *parent)
     tracksLayout->addWidget(m_trackview);
 
     connect(m_trackview->verticalScrollBar(), SIGNAL(valueChanged(int)), view->headers_area->verticalScrollBar(), SLOT(setValue(int)));
+    connect(m_trackview, SIGNAL(trackHeightChanged()), this, SLOT(slotRebuildTrackHeaders()));
 
     parseDocument(doc->toXml());
 
@@ -133,6 +135,7 @@ void TrackView::parseDocument(QDomDocument doc) {
         if (trackduration > duration) duration = trackduration;
     }
     m_trackview->setDuration(duration);
+    slotRebuildTrackHeaders();
     //m_trackview->setCursorPos(cursorPos);
     //m_scrollBox->setGeometry(0, 0, 300 * zoomFactor(), m_scrollArea->height());
 }
@@ -181,23 +184,31 @@ void TrackView::refresh() {
     m_trackview->viewport()->update();
 }
 
+void TrackView::slotRebuildTrackHeaders() {
+    QList <TRACKTYPE> list = m_trackview->tracksList();
+    QList<HeaderTrack *> widgets = this->findChildren<HeaderTrack *>();
+    for (int i = 0; i < widgets.count(); i++)
+        delete widgets.at(i);
+    int max = list.count();
+    for (int i = 0; i < max; i++) {
+        HeaderTrack *header = new HeaderTrack(i, list.at(max - i - 1), this);
+        m_headersLayout->addWidget(header);
+    }
+    view->headers_container->adjustSize();
+}
+
 int TrackView::slotAddAudioTrack(int ix, QDomElement xml) {
     kDebug() << "*************  ADD AUDIO TRACK " << ix;
-    m_trackview->addTrack();
-    HeaderTrack *header = new HeaderTrack(ix);
-    //m_tracksAreaLayout->addWidget(track); //, ix, Qt::AlignTop);
-    m_headersLayout->addWidget(header); //, ix, Qt::AlignTop);
-    view->headers_container->adjustSize();
+    m_trackview->addTrack(AUDIOTRACK);
     //documentTracks.insert(ix, track);
     return 0;
     //track->show();
 }
 
 int TrackView::slotAddVideoTrack(int ix, QDomElement xml) {
-    m_trackview->addTrack();
-    HeaderTrack *header = new HeaderTrack(ix);
-    int trackTop = 50 * ix;
-    int trackBottom = trackTop + 50;
+    m_trackview->addTrack(VIDEOTRACK);
+
+    int trackTop = KdenliveSettings::trackheight() * ix;
     // parse track
     int position = 0;
     for (QDomNode n = xml.firstChild(); !n.isNull(); n = n.nextSibling()) {
@@ -210,7 +221,7 @@ int TrackView::slotAddVideoTrack(int ix, QDomElement xml) {
             DocClipBase *clip = m_doc->clipManager()->getClipById(id);
             int out = elem.attribute("out", 0).toInt() - in;
             //kDebug()<<"++++++++++++++\n\n / / /ADDING CLIP: "<<clip.cropTime<<", out: "<<clip.duration<<", Producer: "<<clip.producer<<"\n\n++++++++++++++++++++";
-            ClipItem *item = new ClipItem(clip, ix, GenTime(position, m_doc->fps()), QRectF(position * m_scale, trackTop + 1, out * m_scale, 49), GenTime(out, m_doc->fps()), m_doc->fps());
+            ClipItem *item = new ClipItem(clip, ix, GenTime(position, m_doc->fps()), QRectF(position * m_scale, trackTop + 1, out * m_scale, KdenliveSettings::trackheight() - 1), GenTime(out, m_doc->fps()), m_doc->fps());
             m_scene->addItem(item);
             position += out;
 
@@ -219,9 +230,7 @@ int TrackView::slotAddVideoTrack(int ix, QDomElement xml) {
     }
     //m_trackDuration = position;
 
-    //m_tracksAreaLayout->addWidget(track); //, ix, Qt::AlignTop);
-    m_headersLayout->addWidget(header); //, ix, Qt::AlignTop);
-    view->headers_container->adjustSize();
+
     //documentTracks.insert(ix, track);
     kDebug() << "*************  ADD VIDEO TRACK " << ix << ", DURATION: " << position;
     return position;
index d2f114d5561cdfc7f660f7e96257d71adae9b6ae..0c5cdd24809b72ca747d0a5f8a5fa5e9863d8a29 100644 (file)
@@ -88,6 +88,7 @@ private slots:
     void moveCursorPos(int pos);
     void slotClipItemSelected(ClipItem*);
     void slotTransitionItemSelected(Transition*);
+    void slotRebuildTrackHeaders();
 
 signals:
     void mousePosition(int);
index 97c834dbd4d8a2988821c71f083092deac8bb7b7..004ea19f245e17c4592510086485e6736160b1a6 100644 (file)
@@ -35,7 +35,7 @@
 Transition::Transition(const QRectF& rect , ClipItem * clipa, const QString & type, const GenTime &startTime, const GenTime &endTime, double fps, bool inverted) : AbstractClipItem(rect) {
     m_invertTransition = inverted;
     m_singleClip = true;
-    m_transitionTrack = 0;
+    m_transitionTrack = clipa->track();
     m_secondClip = NULL;
     m_transitionName = type;
     m_fps = fps;
index 1f0645aae19d8ef2f838a92c46004d113b02d880..d88cb360b21c4cbce4aee96878e4563980b2d90a 100644 (file)
@@ -5,12 +5,12 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>348</width>
-    <height>187</height>
+    <width>335</width>
+    <height>188</height>
    </rect>
   </property>
   <layout class="QGridLayout" name="gridLayout_2" >
-   <item row="0" column="0" >
+   <item row="0" column="0" colspan="3" >
     <widget class="QGroupBox" name="groupBox" >
      <property name="title" >
       <string>Thumbnails</string>
@@ -53,7 +53,7 @@
      </layout>
     </widget>
    </item>
-   <item row="1" column="0" >
+   <item row="1" column="0" colspan="3" >
     <widget class="QCheckBox" name="kcfg_autoscroll" >
      <property name="text" >
       <string>Autoscroll while playing</string>
     </widget>
    </item>
    <item row="2" column="0" >
+    <widget class="QLabel" name="label" >
+     <property name="text" >
+      <string>Track height</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1" >
+    <widget class="QSpinBox" name="kcfg_trackheight" />
+   </item>
+   <item row="2" column="2" >
+    <spacer name="horizontalSpacer_2" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" stdset="0" >
+      <size>
+       <width>166</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="3" column="1" >
     <spacer name="verticalSpacer" >
      <property name="orientation" >
       <enum>Qt::Vertical</enum>