]> git.sesse.net Git - kdenlive/commitdiff
New: Change track type (audio / video)
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 9 Dec 2008 10:02:27 +0000 (10:02 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 9 Dec 2008 10:02:27 +0000 (10:02 +0000)
svn path=/branches/KDE4/; revision=2770

14 files changed:
src/CMakeLists.txt
src/changetrackcommand.cpp [new file with mode: 0644]
src/changetrackcommand.h [new file with mode: 0644]
src/customtrackview.cpp
src/customtrackview.h
src/headertrack.cpp
src/headertrack.h
src/kdenlivedoc.cpp
src/kdenlivedoc.h
src/kdenliveui.rc
src/mainwindow.cpp
src/mainwindow.h
src/trackview.cpp
src/trackview.h

index 205d5f51096ec0a4a275d083bbb29c41ad939491..dfc8bf2fe42463f8101dac4207fb0975497885bf 100644 (file)
@@ -137,6 +137,7 @@ set(kdenlive_SRCS
   insertspacecommand.cpp
   spacerdialog.cpp
   addtrackcommand.cpp
+  changetrackcommand.cpp
 )
 
 if(NO_JOGSHUTTLE)
diff --git a/src/changetrackcommand.cpp b/src/changetrackcommand.cpp
new file mode 100644 (file)
index 0000000..6abef1f
--- /dev/null
@@ -0,0 +1,41 @@
+/***************************************************************************
+ *   Copyright (C) 2007 by Jean-Baptiste Mardelle (jb@kdenlive.org)        *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, write to the                         *
+ *   Free Software Foundation, Inc.,                                       *
+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
+ ***************************************************************************/
+
+#include <KLocale>
+
+#include "changetrackcommand.h"
+#include "customtrackview.h"
+
+ChangeTrackCommand::ChangeTrackCommand(CustomTrackView *view, int ix, TrackInfo oldInfo, TrackInfo newInfo, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_ix(ix), m_oldinfo(oldInfo), m_newinfo(newInfo), m_doIt(doIt) {
+    setText(i18n("Change track type"));
+}
+
+
+// virtual
+void ChangeTrackCommand::undo() {
+// kDebug()<<"----  undoing action";
+    m_doIt = true;
+    m_view->changeTrack(m_ix, m_oldinfo);
+}
+// virtual
+void ChangeTrackCommand::redo() {
+    if (m_doIt) m_view->changeTrack(m_ix, m_newinfo);
+    m_doIt = true;
+}
+
diff --git a/src/changetrackcommand.h b/src/changetrackcommand.h
new file mode 100644 (file)
index 0000000..7b714d5
--- /dev/null
@@ -0,0 +1,48 @@
+/***************************************************************************
+ *   Copyright (C) 2007 by Jean-Baptiste Mardelle (jb@kdenlive.org)        *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, write to the                         *
+ *   Free Software Foundation, Inc.,                                       *
+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
+ ***************************************************************************/
+
+
+#ifndef CHANGETRACKCOMMAND_H
+#define CHANGETRACKCOMMAND_H
+
+#include <QUndoCommand>
+#include <QGraphicsView>
+#include <QPointF>
+
+#include <KDebug>
+#include "definitions.h"
+
+class CustomTrackView;
+
+class ChangeTrackCommand : public QUndoCommand {
+public:
+    ChangeTrackCommand(CustomTrackView *view, int ix, TrackInfo oldInfo, TrackInfo newInfo, bool doIt, QUndoCommand * parent = 0);
+    virtual void undo();
+    virtual void redo();
+
+private:
+    CustomTrackView *m_view;
+    int m_ix;
+    bool m_doIt;
+    TrackInfo m_oldinfo;
+    TrackInfo m_newinfo;
+};
+
+#endif
+
index a79d9282bd00d9c5fe1d8dbd9db82d438ce0491f..a9938cb9642b108cda3daab079921433600881be 100644 (file)
@@ -64,6 +64,7 @@
 #include "insertspacecommand.h"
 #include "spacerdialog.h"
 #include "addtrackcommand.h"
+#include "changetrackcommand.h"
 #include "ui_addtrack_ui.h"
 
 //TODO:
@@ -1426,10 +1427,18 @@ void CustomTrackView::removeTrack(int ix) {
     QTimer::singleShot(300, this, SIGNAL(trackHeightChanged()));
 }
 
+void CustomTrackView::changeTrack(int ix, TrackInfo type) {
+    int tracknumber = m_document->tracksCount() - ix;
+    m_document->setTrackType(tracknumber - 1, type);
+    m_document->renderer()->mltChangeTrackState(tracknumber, m_document->trackInfoAt(tracknumber - 1).isMute, m_document->trackInfoAt(tracknumber - 1).isBlind);
+    QTimer::singleShot(300, this, SIGNAL(trackHeightChanged()));
+    viewport()->update();
+}
+
 
 void CustomTrackView::slotSwitchTrackAudio(int ix) {
-    for (int i = 0; i < m_document->tracksCount(); i++)
-        kDebug() << "TRK " << i << " STATE: " << m_document->trackInfoAt(i).isMute << m_document->trackInfoAt(i).isBlind;
+    /*for (int i = 0; i < m_document->tracksCount(); i++)
+        kDebug() << "TRK " << i << " STATE: " << m_document->trackInfoAt(i).isMute << m_document->trackInfoAt(i).isBlind;*/
 
     int tracknumber = m_document->tracksCount() - ix;
 
@@ -2710,10 +2719,10 @@ void CustomTrackView::slotInsertTrack(int ix) {
     view.setupUi(&d);
     view.track_nb->setMaximum(m_document->tracksCount() - 1);
     view.track_nb->setValue(ix);
+    d.setWindowTitle(i18n("Insert Track"));
 
     if (d.exec() == QDialog::Accepted) {
         if (view.before_select->currentIndex() == 1) {
-            kDebug() << "// AFTER";
             ix++;
         }
         TrackInfo info;
@@ -2724,7 +2733,7 @@ void CustomTrackView::slotInsertTrack(int ix) {
         } else {
             info.type = AUDIOTRACK;
             info.isMute = false;
-            info.isBlind = false;
+            info.isBlind = true;
         }
         addTimelineTrack(ix, info);
         m_document->setModified(true);
@@ -2745,18 +2754,39 @@ void CustomTrackView::slotDeleteTrack(int ix) {
     }
 }
 
+void CustomTrackView::slotChangeTrack(int ix) {
+    QDialog d(parentWidget());
+    Ui::AddTrack_UI view;
+    view.setupUi(&d);
+    view.label->setText(i18n("Change track"));
+    view.before_select->setHidden(true);
+    view.track_nb->setMaximum(m_document->tracksCount() - 1);
+    view.track_nb->setValue(ix);
+    d.setWindowTitle(i18n("Change Track Type"));
+
+    if (d.exec() == QDialog::Accepted) {
+        TrackInfo info;
+        if (view.video_track->isChecked()) {
+            info.type = VIDEOTRACK;
+            info.isMute = false;
+            info.isBlind = false;
+        } else {
+            info.type = AUDIOTRACK;
+            info.isMute = false;
+            info.isBlind = true;
+        }
+        changeTimelineTrack(ix, info);
+        m_document->setModified(true);
+    }
+}
+
 void CustomTrackView::addTimelineTrack(int ix, TrackInfo trackinfo) {
     double startY = ix * m_tracksHeight + 1 + m_tracksHeight / 2;
     QRectF r(0, startY, sceneRect().width(), sceneRect().height() - startY);
     QList<QGraphicsItem *> selection = m_scene->items(r);
     kDebug() << "// TRK RECT: " << r << ", ITEMS: " << selection.count();
-    QUndoCommand *addTrack = new QUndoCommand();
-    addTrack->setText("Add track");
-    new AddTrackCommand(this, ix, trackinfo, true, true, addTrack);
-
+    AddTrackCommand *addTrack = new AddTrackCommand(this, ix, trackinfo, true, true, addTrack);
     m_commandStack->push(addTrack);
-    kDebug() << "// ADD TRCKL DONE...";
-    update();
 }
 
 void CustomTrackView::deleteTimelineTrack(int ix, TrackInfo trackinfo) {
@@ -2785,9 +2815,12 @@ void CustomTrackView::deleteTimelineTrack(int ix, TrackInfo trackinfo) {
 
     new AddTrackCommand(this, ix, trackinfo, false, true, deleteTrack);
     m_commandStack->push(deleteTrack);
-    //removeTrack(ix, trackinfo);
-    kDebug() << "// REM TRK DONE...";
-    update();
+}
+
+void CustomTrackView::changeTimelineTrack(int ix, TrackInfo trackinfo) {
+    TrackInfo oldinfo = m_document->trackInfoAt(m_document->tracksCount() - ix);
+    ChangeTrackCommand *changeTrack = new ChangeTrackCommand(this, ix, oldinfo, trackinfo, true);
+    m_commandStack->push(changeTrack);
 }
 
 #include "customtrackview.moc"
index 422b02a68cd74b2396206b3a0dd7167cb6903e14..c56cf2acbafaf0082da22947b1d893e8cf1f26aa 100644 (file)
@@ -50,6 +50,7 @@ public:
     virtual void mouseDoubleClickEvent(QMouseEvent *event);
     void addTrack(TrackInfo type, int ix = -1);
     void removeTrack(int ix);
+    void changeTrack(int ix, TrackInfo type);
     int cursorPos();
     void checkAutoScroll();
     void moveClip(const ItemInfo start, const ItemInfo end);
@@ -102,6 +103,7 @@ public:
     ClipItem *getActiveClipUnderCursor(bool allowOutsideCursor = false) const;
     void addTimelineTrack(int ix, TrackInfo trackinfo);
     void deleteTimelineTrack(int ix, TrackInfo trackinfo);
+    void changeTimelineTrack(int ix, TrackInfo trackinfo);
 
 public slots:
     void setCursorPos(int pos, bool seek = true);
@@ -135,6 +137,7 @@ public slots:
     void slotCheckPositionScrolling();
     void slotInsertTrack(int ix);
     void slotDeleteTrack(int ix);
+    void slotChangeTrack(int ix);
 
 protected:
     virtual void drawBackground(QPainter * painter, const QRectF & rect);
index bf2186b2a86eb44ec9a7ce50f9db6bd6764d7648..e901fdb724147a7b0332eb792670dacbd3e1ce13 100644 (file)
@@ -53,13 +53,17 @@ HeaderTrack::HeaderTrack(int index, TrackInfo info, QWidget *parent)
 
     m_contextMenu = new QMenu(this);
 
-    QAction *insertAction = new QAction(i18n("Insert track"), this);
+    QAction *insertAction = new QAction(i18n("Insert Track"), this);
     m_contextMenu->addAction(insertAction);
     connect(insertAction, SIGNAL(triggered()), this, SLOT(slotAddTrack()));
 
-    QAction *removeAction = new QAction(KIcon("edit-delete"), i18n("Delete track"), this);
+    QAction *removeAction = new QAction(KIcon("edit-delete"), i18n("Delete Track"), this);
     m_contextMenu->addAction(removeAction);
     connect(removeAction, SIGNAL(triggered()), this, SLOT(slotDeleteTrack()));
+
+    QAction *changeAction = new QAction(i18n("Change Track Type"), this);
+    m_contextMenu->addAction(changeAction);
+    connect(changeAction, SIGNAL(triggered()), this, SLOT(slotChangeTrack()));
 }
 
 void HeaderTrack::switchVideo() {
@@ -88,6 +92,10 @@ void HeaderTrack::slotAddTrack() {
     emit insertTrack(m_index);
 }
 
+void HeaderTrack::slotChangeTrack() {
+    emit changeTrack(m_index);
+}
+
 // virtual
 void HeaderTrack::contextMenuEvent(QContextMenuEvent * event) {
     m_contextMenu->popup(event->globalPos());
index 93d70548d55bbf739961b83b1d13e0fffb5fd6fe..4264b0737ec083a662d6e427b334e95929025bbb 100644 (file)
@@ -47,12 +47,14 @@ private slots:
     void switchVideo();
     void slotDeleteTrack();
     void slotAddTrack();
+    void slotChangeTrack();
 
 signals:
     void switchTrackAudio(int);
     void switchTrackVideo(int);
     void insertTrack(int);
     void deleteTrack(int);
+    void changeTrack(int);
 };
 
 #endif
index b36247c41a505672b8c780009389a10e491fb659..d7f59113e6c2ab55cab3fb255c261b7716d432cc 100644 (file)
@@ -1309,6 +1309,12 @@ void KdenliveDoc::deleteTrack(int ix) {
     m_tracksList.removeAt(ix);
 }
 
+void KdenliveDoc::setTrackType(int ix, TrackInfo type) {
+    m_tracksList[ix].type = type.type;
+    m_tracksList[ix].isMute = type.isMute;
+    m_tracksList[ix].isBlind = type.isBlind;
+}
+
 const QList <TrackInfo> KdenliveDoc::tracksList() const {
     return m_tracksList;
 }
index b034578a91258099ab2ba0ba3d84cbddb9c78ae1..774838a9dbf30b58de6362ba8ab45075b4088f06 100644 (file)
@@ -109,6 +109,7 @@ Q_OBJECT public:
     TrackInfo trackInfoAt(int ix) const;
     void insertTrack(int ix, TrackInfo type);
     void deleteTrack(int ix);
+    void setTrackType(int ix, TrackInfo type);
     const QList <TrackInfo> tracksList() const;
     QPoint getTracksCount() const;
     QString getTracksInfo() const;
index a1440a16c0204f1d3568b61cc5ce4d76d7bde0c0..a1e2bf004c4a941c3f50184772b0d2eb2008f67f 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
-<gui name="kdenlive" version="24">
+<gui name="kdenlive" version="25">
   <ToolBar name="extraToolBar" >
     <text>Extra Toolbar</text>
        <Action name="project_render" />
@@ -50,6 +50,7 @@
       <Menu name="track_menu" ><text>Tracks</text>
        <Action name="insert_track" />
        <Action name="delete_track" />
+       <Action name="change_track" />
       </Menu>
       <Separator />
       <Menu name="video_effects_menu" ><text>Add Video Effect</text>
index a8b412d06c2b251b6c82eb5d2da33ab011a3027a..3cb14ff8b2c7ad07ed23f6438e73cdd49654097c 100644 (file)
@@ -813,6 +813,10 @@ void MainWindow::setupActions() {
     collection->addAction("delete_track", deleteTrack);
     connect(deleteTrack, SIGNAL(triggered()), this, SLOT(slotDeleteTrack()));
 
+    KAction *changeTrack = new KAction(KIcon(), i18n("Change Track"), this);
+    collection->addAction("change_track", changeTrack);
+    connect(changeTrack, SIGNAL(triggered()), this, SLOT(slotChangeTrack()));
+
     KAction *addGuide = new KAction(KIcon("document-new"), i18n("Add Guide"), this);
     collection->addAction("add_guide", addGuide);
     connect(addGuide, SIGNAL(triggered()), this, SLOT(slotAddGuide()));
@@ -1317,6 +1321,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) { //cha
             disconnect(m_activeTimeline, SIGNAL(cursorMoved()), m_projectMonitor, SLOT(activateMonitor()));
             disconnect(m_activeTimeline, SIGNAL(insertTrack(int)), this, SLOT(slotInsertTrack(int)));
             disconnect(m_activeTimeline, SIGNAL(deleteTrack(int)), this, SLOT(slotDeleteTrack(int)));
+            disconnect(m_activeTimeline, SIGNAL(changeTrack(int)), this, SLOT(slotChangeTrack(int)));
             disconnect(m_activeDocument, SIGNAL(docModified(bool)), this, SLOT(slotUpdateDocumentState(bool)));
             disconnect(effectStack, SIGNAL(updateClipEffect(ClipItem*, QDomElement, QDomElement, int)), m_activeTimeline->projectView(), SLOT(slotUpdateClipEffect(ClipItem*, QDomElement, QDomElement, int)));
             disconnect(effectStack, SIGNAL(removeEffect(ClipItem*, QDomElement)), m_activeTimeline->projectView(), SLOT(slotDeleteEffect(ClipItem*, QDomElement)));
@@ -1347,6 +1352,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) { //cha
     connect(trackView, SIGNAL(cursorMoved()), m_projectMonitor, SLOT(activateMonitor()));
     connect(trackView, SIGNAL(insertTrack(int)), this, SLOT(slotInsertTrack(int)));
     connect(trackView, SIGNAL(deleteTrack(int)), this, SLOT(slotDeleteTrack(int)));
+    connect(trackView, SIGNAL(changeTrack(int)), this, SLOT(slotChangeTrack(int)));
     connect(trackView, SIGNAL(mousePosition(int)), this, SLOT(slotUpdateMousePosition(int)));
     connect(m_projectMonitor, SIGNAL(renderPosition(int)), trackView, SLOT(moveCursorPos(int)));
     connect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), trackView, SLOT(slotSetZone(QPoint)));
@@ -1637,6 +1643,12 @@ void MainWindow::slotDeleteTrack(int ix) {
         m_activeTimeline->projectView()->slotDeleteTrack(ix);
 }
 
+void MainWindow::slotChangeTrack(int ix) {
+    m_projectMonitor->activateMonitor();
+    if (m_activeTimeline)
+        m_activeTimeline->projectView()->slotChangeTrack(ix);
+}
+
 void MainWindow::slotEditGuide() {
     if (m_activeTimeline)
         m_activeTimeline->projectView()->slotEditGuide();
index 34ab13b08436cea6e7f21ea1c0c2e1520a6e2c42..ca7d7a81d0e48994443ed71aa420a338d70ec815 100644 (file)
@@ -268,6 +268,7 @@ private slots:
     void configureNotifications();
     void slotInsertTrack(int ix = 0);
     void slotDeleteTrack(int ix = 0);
+    void slotChangeTrack(int ix = 0);
 };
 
 
index a2036add0b865a9f645d629aaae57879d2c8a0e2..d87a0d7b7a7a9914420a46f1e1545689dbdf3def 100644 (file)
@@ -345,9 +345,9 @@ void TrackView::slotRebuildTrackHeaders() {
         connect(header, SIGNAL(switchTrackVideo(int)), m_trackview, SLOT(slotSwitchTrackVideo(int)));
         connect(header, SIGNAL(switchTrackAudio(int)), m_trackview, SLOT(slotSwitchTrackAudio(int)));
 
-        //TODO: re-enable when add / remove track is implemented
         connect(header, SIGNAL(deleteTrack(int)), this, SIGNAL(deleteTrack(int)));
         connect(header, SIGNAL(insertTrack(int)), this, SIGNAL(insertTrack(int)));
+        connect(header, SIGNAL(changeTrack(int)), this, SIGNAL(changeTrack(int)));
         m_headersLayout->addWidget(header);
     }
     view->headers_container->adjustSize();
index 1e537714e9ba93cc7da4ec39d8876b25c9d15c71..ab61a690f65e7dd58af26b0f8d99d30fc35140e9 100644 (file)
@@ -99,6 +99,7 @@ signals:
     void zoneMoved(int, int);
     void insertTrack(int);
     void deleteTrack(int);
+    void changeTrack(int);
 };
 
 #endif