insertspacecommand.cpp
spacerdialog.cpp
addtrackcommand.cpp
+ changetrackcommand.cpp
)
if(NO_JOGSHUTTLE)
--- /dev/null
+/***************************************************************************
+ * 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;
+}
+
--- /dev/null
+/***************************************************************************
+ * 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
+
#include "insertspacecommand.h"
#include "spacerdialog.h"
#include "addtrackcommand.h"
+#include "changetrackcommand.h"
#include "ui_addtrack_ui.h"
//TODO:
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;
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;
} else {
info.type = AUDIOTRACK;
info.isMute = false;
- info.isBlind = false;
+ info.isBlind = true;
}
addTimelineTrack(ix, info);
m_document->setModified(true);
}
}
+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) {
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"
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);
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);
void slotCheckPositionScrolling();
void slotInsertTrack(int ix);
void slotDeleteTrack(int ix);
+ void slotChangeTrack(int ix);
protected:
virtual void drawBackground(QPainter * painter, const QRectF & rect);
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() {
emit insertTrack(m_index);
}
+void HeaderTrack::slotChangeTrack() {
+ emit changeTrack(m_index);
+}
+
// virtual
void HeaderTrack::contextMenuEvent(QContextMenuEvent * event) {
m_contextMenu->popup(event->globalPos());
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
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;
}
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;
<?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" />
<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>
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()));
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)));
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)));
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();
void configureNotifications();
void slotInsertTrack(int ix = 0);
void slotDeleteTrack(int ix = 0);
+ void slotChangeTrack(int ix = 0);
};
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();
void zoneMoved(int, int);
void insertTrack(int);
void deleteTrack(int);
+ void changeTrack(int);
};
#endif