]> git.sesse.net Git - kdenlive/commitdiff
Active track selectable by keyboard
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 18 Oct 2009 22:39:33 +0000 (22:39 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 18 Oct 2009 22:39:33 +0000 (22:39 +0000)
svn path=/trunk/kdenlive/; revision=4046

src/customtrackview.cpp
src/customtrackview.h
src/headertrack.cpp
src/headertrack.h
src/mainwindow.cpp
src/mainwindow.h
src/trackview.cpp
src/trackview.h
src/transitionsettings.cpp

index 541dddd375596fe3d542300bab752ee094cd9ee8..d5055df13b3e399a143eb6be30397bb9adb812ae 100644 (file)
@@ -114,7 +114,8 @@ CustomTrackView::CustomTrackView(KdenliveDoc *doc, CustomTrackScene* projectscen
         m_copiedItems(),
         m_menuPosition(),
         m_blockRefresh(false),
-        m_selectionGroup(NULL)
+        m_selectionGroup(NULL),
+        m_selectedTrack(0)
 {
     if (doc) m_commandStack = doc->commandStack();
     else m_commandStack = NULL;
@@ -4201,15 +4202,16 @@ void CustomTrackView::drawBackground(QPainter * painter, const QRectF &rect)
     double min = rect.left();
     double max = rect.right();
     painter->drawLine(QPointF(min, 0), QPointF(max, 0));
-    uint maxTrack = m_document->tracksCount();
+    int maxTrack = m_document->tracksCount();
     QColor lockedColor = scheme.background(KColorScheme::NegativeBackground).color();
     QColor audioColor = palette().alternateBase().color();
     QColor base = scheme.background(KColorScheme::NormalBackground).color();
-    for (uint i = 0; i < maxTrack; i++) {
+    for (int i = 0; i < maxTrack; i++) {
         TrackInfo info = m_document->trackInfoAt(maxTrack - i - 1);
-        if (info.isLocked || info.type == AUDIOTRACK) {
+        if (info.isLocked || info.type == AUDIOTRACK || i == m_selectedTrack) {
             const QRectF track(min, m_tracksHeight * i + 1, max - min, m_tracksHeight - 1);
-            painter->fillRect(track, info.isLocked ? lockedColor : audioColor);
+            if (i == m_selectedTrack) painter->fillRect(track, scheme.background(KColorScheme::ActiveBackground).color());
+            else painter->fillRect(track, info.isLocked ? lockedColor : audioColor);
         }
         painter->drawLine(QPointF(min, m_tracksHeight *(i + 1)), QPointF(max, m_tracksHeight *(i + 1)));
     }
@@ -5205,3 +5207,25 @@ void CustomTrackView::updateProjectFps()
     }
     viewport()->update();
 }
+
+void CustomTrackView::slotTrackDown()
+{
+    if (m_selectedTrack > m_document->tracksCount() - 2) m_selectedTrack = 0;
+    else m_selectedTrack++;
+    emit updateTrackHeaders();
+    viewport()->update();
+}
+
+void CustomTrackView::slotTrackUp()
+{
+    if (m_selectedTrack > 0) m_selectedTrack--;
+    else m_selectedTrack = m_document->tracksCount() - 1;
+    emit updateTrackHeaders();
+    viewport()->update();
+}
+
+int CustomTrackView::selectedTrack() const
+{
+    return m_selectedTrack;
+}
+
index 298b5a6c762fcacb4f8028eaa7f26f85ee2eecc8..5efd6bb7a39d000478f20c9d1205ba5dbbce1ea8 100644 (file)
@@ -124,6 +124,7 @@ public:
     void reloadTransitionLumas();
     void updateProjectFps();
     double fps() const;
+    int selectedTrack() const;
 
 public slots:
     void setCursorPos(int pos, bool seek = true);
@@ -159,6 +160,8 @@ public slots:
     void slotDeleteTrack(int ix);
     void slotChangeTrack(int ix);
     void clipNameChanged(const QString id, const QString name);
+    void slotTrackUp();
+    void slotTrackDown();
 
 protected:
     virtual void drawBackground(QPainter * painter, const QRectF & rect);
@@ -232,6 +235,7 @@ private:
     bool m_blockRefresh;
     AbstractGroupItem *m_selectionGroup;
     QList <ClipItem *> m_waitingThumbs;
+    int m_selectedTrack;
 
     /** Get the index of the video track that is just below current track */
     int getPreviousVideoTrack(int track);
@@ -277,6 +281,7 @@ signals:
     void showClipFrame(DocClipBase *, const int);
     void doTrackLock(int, bool);
     void updateClipMarkers(DocClipBase *);
+    void updateTrackHeaders();
 };
 
 #endif
index bd245b3eeee8b0542c06a3a96638229bcc10ee4d..de53684d41a30c85d31506d1f00b6ec45a6caee2 100644 (file)
@@ -23,6 +23,7 @@
 #include <KIcon>
 #include <KLocale>
 #include <KDebug>
+#include <KColorScheme>
 
 #include <QMouseEvent>
 #include <QWidget>
@@ -46,6 +47,11 @@ HeaderTrack::HeaderTrack(int index, TrackInfo info, int height, QWidget *parent)
     buttonLock->setChecked(info.isLocked);
     buttonLock->setToolTip(i18n("Lock track"));
 
+    QPalette p = palette();
+    KColorScheme scheme(p.currentColorGroup(), KColorScheme::Window);
+    p.setColor(QPalette::Button, scheme.background(KColorScheme::ActiveBackground).color().darker(120));
+    setPalette(p);
+
     if (m_type == VIDEOTRACK) {
         setBackgroundRole(QPalette::AlternateBase);
         setAutoFillBackground(true);
@@ -95,6 +101,16 @@ HeaderTrack::HeaderTrack(int index, TrackInfo info, int height, QWidget *parent)
 {
 }*/
 
+void HeaderTrack::setSelectedIndex(int ix)
+{
+    if (m_index == ix) {
+        setBackgroundRole(QPalette::Button);
+        setAutoFillBackground(true);
+    } else if (m_type != VIDEOTRACK) setAutoFillBackground(false);
+    else setBackgroundRole(QPalette::AlternateBase);
+    update();
+}
+
 void HeaderTrack::adjustSize(int height)
 {
     // Don't show track buttons if size is too small
index a3eaf9d90816266bb4b20db5c52c52e194b0f0f2..a789ddcdd8e11aa90f4a39e2c22a4d14d9fb79ca 100644 (file)
@@ -35,6 +35,7 @@ public:
     //virtual ~HeaderTrack();
     void setLock(bool lock);
     void adjustSize(int height);
+    void setSelectedIndex(int ix);
 
 private:
     int m_index;
index 0a2a80f44b5875f527270a155a4545b244b99428..55e7ad11ad0bdab3c444a38cede0dbaaaa10fe63 100644 (file)
@@ -951,6 +951,16 @@ void MainWindow::setupActions()
     collection->addAction("monitor_seek_backward", monitorSeekBackward);
     connect(monitorSeekBackward, SIGNAL(triggered(bool)), m_monitorManager, SLOT(slotRewind()));
 
+    KAction* trackUp = new KAction(KIcon(), i18n("Previous Track"), this);
+    trackUp->setShortcut(Qt::Key_Up);
+    collection->addAction("track_up", trackUp);
+    connect(trackUp, SIGNAL(triggered(bool)), this, SLOT(slotTrackUp()));
+
+    KAction* trackDown = new KAction(KIcon(), i18n("Next Track"), this);
+    trackDown->setShortcut(Qt::Key_Down);
+    collection->addAction("track_down", trackDown);
+    connect(trackDown, SIGNAL(triggered(bool)), this, SLOT(slotTrackDown()));
+
     KAction* monitorSeekBackwardOneFrame = new KAction(KIcon("media-skip-backward"), i18n("Rewind 1 Frame"), this);
     monitorSeekBackwardOneFrame->setShortcut(Qt::Key_Left);
     collection->addAction("monitor_seek_backward-one-frame", monitorSeekBackwardOneFrame);
@@ -3045,5 +3055,15 @@ QPixmap MainWindow::createSchemePreviewIcon(const KSharedConfigPtr &config)
     return pixmap;
 }
 
+void MainWindow::slotTrackUp()
+{
+    if (m_activeTimeline) m_activeTimeline->projectView()->slotTrackUp();
+}
+
+void MainWindow::slotTrackDown()
+{
+    if (m_activeTimeline) m_activeTimeline->projectView()->slotTrackDown();
+}
+
 #include "mainwindow.moc"
 
index e259a491a8d80c5fa0013661db16196b98c81a6f..ad19752289eb7e40d5f88da9d4a6b0bd8deb2738 100644 (file)
@@ -324,6 +324,8 @@ private slots:
     void slotUpdateTrackInfo();
     /** \brief Change color scheme */
     void slotChangePalette(QAction *action, const QString &themename = QString());
+    void slotTrackUp();
+    void slotTrackDown();
 
 signals:
     Q_SCRIPTABLE void abortRenderJob(const QString &url);
index cb997d90d60895327f7f9714440fbbdeea0283ae..854bc09f38398fca26b6b9153034e729a23834da 100644 (file)
@@ -103,6 +103,7 @@ TrackView::TrackView(KdenliveDoc *doc, bool *ok, QWidget *parent) :
     connect(m_trackview->verticalScrollBar(), SIGNAL(valueChanged(int)), headers_area->verticalScrollBar(), SLOT(setValue(int)));
     connect(m_trackview, SIGNAL(trackHeightChanged()), this, SLOT(slotRebuildTrackHeaders()));
     connect(m_trackview, SIGNAL(tracksChanged()), this, SLOT(slotReloadTracks()));
+    connect(m_trackview, SIGNAL(updateTrackHeaders()), this, SLOT(slotRepaintTracks()));
 
     parseDocument(m_doc->toXml());
     int error = m_doc->setSceneList();
@@ -272,24 +273,22 @@ void TrackView::parseDocument(QDomDocument doc)
                     //kDebug() << "//  TRANSITRION " << i << " IS NOT VALID (INTERN ADDED)";
                     //break;
                 } else if (paramName == "a_track") {
-                   a_track = qMax(0, p.text().toInt());
-                   a_track = qMin(m_projectTracks - 1, a_track);
-                   if (a_track != p.text().toInt()) {
-                       // the transition track was out of bounds
-                       m_documentErrors.append(i18n("Transition %1 had an invalid track: %2 > %3", e.attribute("id"), p.text().toInt(), a_track) + '\n');
-                       EffectsList::setProperty(e, "a_track", QString::number(a_track));
-                   }
-               }
-                else if (paramName == "b_track") {
-                   b_track = qMax(0, p.text().toInt());
-                   b_track = qMin(m_projectTracks - 1, b_track);
-                   if (b_track != p.text().toInt()) {
-                       // the transition track was out of bounds
-                       m_documentErrors.append(i18n("Transition %1 had an invalid track: %2 > %3", e.attribute("id"), p.text().toInt(), b_track) + '\n');
-                       EffectsList::setProperty(e, "b_track", QString::number(b_track));
-                   }
-               }
-                else if (paramName == "mlt_service") mlt_service = p.text();
+                    a_track = qMax(0, p.text().toInt());
+                    a_track = qMin(m_projectTracks - 1, a_track);
+                    if (a_track != p.text().toInt()) {
+                        // the transition track was out of bounds
+                        m_documentErrors.append(i18n("Transition %1 had an invalid track: %2 > %3", e.attribute("id"), p.text().toInt(), a_track) + '\n');
+                        EffectsList::setProperty(e, "a_track", QString::number(a_track));
+                    }
+                } else if (paramName == "b_track") {
+                    b_track = qMax(0, p.text().toInt());
+                    b_track = qMin(m_projectTracks - 1, b_track);
+                    if (b_track != p.text().toInt()) {
+                        // the transition track was out of bounds
+                        m_documentErrors.append(i18n("Transition %1 had an invalid track: %2 > %3", e.attribute("id"), p.text().toInt(), b_track) + '\n');
+                        EffectsList::setProperty(e, "b_track", QString::number(b_track));
+                    }
+                } else if (paramName == "mlt_service") mlt_service = p.text();
                 else if (paramName == "kdenlive_id") transitionId = p.text();
                 else if (paramName == "geometry") mlt_geometry = p.text();
                 else if (paramName == "automatic" && p.text() == "1") isAutomatic = true;
@@ -469,6 +468,18 @@ void TrackView::refresh()
     m_trackview->viewport()->update();
 }
 
+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());
+        }
+    }
+}
+
 void TrackView::slotReloadTracks()
 {
     slotRebuildTrackHeaders();
@@ -497,6 +508,7 @@ void TrackView::slotRebuildTrackHeaders()
         headers_container->layout()->addWidget(frame);
         TrackInfo info = list.at(max - i - 1);
         header = new HeaderTrack(i, info, height, headers_container);
+        header->setSelectedIndex(m_trackview->selectedTrack());
         connect(header, SIGNAL(switchTrackVideo(int)), m_trackview, SLOT(slotSwitchTrackVideo(int)));
         connect(header, SIGNAL(switchTrackAudio(int)), m_trackview, SLOT(slotSwitchTrackAudio(int)));
         connect(header, SIGNAL(switchTrackLock(int)), m_trackview, SLOT(slotSwitchTrackLock(int)));
index 3d9b0e65b6bb99f7ed50f5047bf83945404ddc65..359d7b22803d61061e82c58246eb9c14bece8d66 100644 (file)
@@ -93,6 +93,7 @@ private slots:
     void slotVerticalZoomDown();
     void slotVerticalZoomUp();
     void slotRenameTrack(int ix);
+    void slotRepaintTracks();
 
 signals:
     void mousePosition(int);
index f1c0beebaefccfeca35d498e229ccf826bb5fad0..0fbe0f7a4da38fcb1e44aa0c20ad8ea09026d7ea 100644 (file)
@@ -74,7 +74,7 @@ void TransitionSettings::updateProjectFormat(MltVideoProfile profile, Timecode t
     transitionTrack->blockSignals(true);
     transitionTrack->clear();
     transitionTrack->addItem(i18n("Auto"), -1);
-    for (uint i = 0; i < m_tracksCount; i++) {
+    for (int i = 0; i < m_tracksCount; i++) {
         if (!info.at(i).trackName.isEmpty())
             transitionTrack->addItem(info.at(i).trackName + '(' + QString::number(i) + ')', i);
         else transitionTrack->addItem(QString::number(i));