From: Jean-Baptiste Mardelle Date: Tue, 9 Dec 2008 10:02:27 +0000 (+0000) Subject: New: Change track type (audio / video) X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=64bfc766fdc06622b5a6fae7ed2512de7736bdf8;p=kdenlive New: Change track type (audio / video) svn path=/branches/KDE4/; revision=2770 --- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 205d5f51..dfc8bf2f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -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 index 00000000..6abef1f3 --- /dev/null +++ b/src/changetrackcommand.cpp @@ -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 + +#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 index 00000000..7b714d58 --- /dev/null +++ b/src/changetrackcommand.h @@ -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 +#include +#include + +#include +#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 + diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index a79d9282..a9938cb9 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -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 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" diff --git a/src/customtrackview.h b/src/customtrackview.h index 422b02a6..c56cf2ac 100644 --- a/src/customtrackview.h +++ b/src/customtrackview.h @@ -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); diff --git a/src/headertrack.cpp b/src/headertrack.cpp index bf2186b2..e901fdb7 100644 --- a/src/headertrack.cpp +++ b/src/headertrack.cpp @@ -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()); diff --git a/src/headertrack.h b/src/headertrack.h index 93d70548..4264b073 100644 --- a/src/headertrack.h +++ b/src/headertrack.h @@ -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 diff --git a/src/kdenlivedoc.cpp b/src/kdenlivedoc.cpp index b36247c4..d7f59113 100644 --- a/src/kdenlivedoc.cpp +++ b/src/kdenlivedoc.cpp @@ -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 KdenliveDoc::tracksList() const { return m_tracksList; } diff --git a/src/kdenlivedoc.h b/src/kdenlivedoc.h index b034578a..774838a9 100644 --- a/src/kdenlivedoc.h +++ b/src/kdenlivedoc.h @@ -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 tracksList() const; QPoint getTracksCount() const; QString getTracksInfo() const; diff --git a/src/kdenliveui.rc b/src/kdenliveui.rc index a1440a16..a1e2bf00 100644 --- a/src/kdenliveui.rc +++ b/src/kdenliveui.rc @@ -1,6 +1,6 @@ - + Extra Toolbar @@ -50,6 +50,7 @@ Tracks + Add Video Effect diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index a8b412d0..3cb14ff8 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -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(); diff --git a/src/mainwindow.h b/src/mainwindow.h index 34ab13b0..ca7d7a81 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -268,6 +268,7 @@ private slots: void configureNotifications(); void slotInsertTrack(int ix = 0); void slotDeleteTrack(int ix = 0); + void slotChangeTrack(int ix = 0); }; diff --git a/src/trackview.cpp b/src/trackview.cpp index a2036add..d87a0d7b 100644 --- a/src/trackview.cpp +++ b/src/trackview.cpp @@ -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(); diff --git a/src/trackview.h b/src/trackview.h index 1e537714..ab61a690 100644 --- a/src/trackview.h +++ b/src/trackview.h @@ -99,6 +99,7 @@ signals: void zoneMoved(int, int); void insertTrack(int); void deleteTrack(int); + void changeTrack(int); }; #endif