-FILE(GLOB files "${CMAKE_CURRENT_SOURCE_DIR}/*.svg*")
-install( FILES ${files} DESTINATION ${ICON_INSTALL_DIR} )
\ No newline at end of file
+#FILE(GLOB files "${CMAKE_CURRENT_SOURCE_DIR}/*.svg*")
+kde4_install_icons( ${DATA_INSTALL_DIR}/kdenlive/icons)
+#install( FILES ${files} DESTINATION ${ICON_INSTALL_DIR} )
\ No newline at end of file
labelitem.cpp
moveclipcommand.cpp
resizeclipcommand.cpp
+ razorclipcommand.cpp
addtimelineclipcommand.cpp
kthumb.cpp
clipmanager.cpp
return m_cropStart;
}
+void AbstractClipItem::setCropStart(GenTime pos) {
+ m_cropStart = pos;
+}
+
void AbstractClipItem::resizeStart(int posx, double scale) {
GenTime durationDiff = GenTime(posx, m_fps) - m_startPos;
if (durationDiff == GenTime()) return;
virtual int fadeIn() const;
virtual int fadeOut() const;
virtual GenTime maxDuration() const;
+ virtual void setCropStart(GenTime pos);
protected:
int m_track;
GenTime m_cropStart;
#include <KDebug>
#include <KLocale>
#include <KUrl>
+#include <KIcon>
#include <KCursor>
#include "customtrackview.h"
#include "editeffectcommand.h"
#include "addtransitioncommand.h"
#include "edittransitioncommand.h"
+#include "razorclipcommand.h"
#include "kdenlivesettings.h"
#include "transition.h"
#include "clipitem.h"
// const int duration = animate ? 1500 : 1;
CustomTrackView::CustomTrackView(KdenliveDoc *doc, QGraphicsScene * projectscene, QWidget *parent)
- : QGraphicsView(projectscene, parent), m_cursorPos(0), m_dropItem(NULL), m_cursorLine(NULL), m_operationMode(NONE), 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()) {
+ : QGraphicsView(projectscene, parent), m_cursorPos(0), m_dropItem(NULL), m_cursorLine(NULL), m_operationMode(NONE), 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()), m_tool(SELECTTOOL) {
if (doc) m_commandStack = doc->commandStack();
else m_commandStack == NULL;
setMouseTracking(true);
m_cursorLine->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIgnoresTransformations);
m_cursorLine->setZValue(1000);
}
+
+ KIcon razorIcon("edit-cut");
+ m_razorCursor = QCursor(razorIcon.pixmap(22, 22));
}
void CustomTrackView::setContextMenu(QMenu *timeline, QMenu *clip, QMenu *transition) {
setDragMode(QGraphicsView::RubberBandDrag);
else*/
{
-
- if (m_dragItem) { //event->button() == Qt::LeftButton) {
+ if (m_dragItem && m_tool == SELECTTOOL) { //event->button() == Qt::LeftButton) {
// a button was pressed, delete visual tips
if (m_operationMode == MOVE && (event->pos() - m_clickEvent).manhattanLength() >= QApplication::startDragDistance()) {
double snappedPos = getSnapPointForPos(mapToScene(event->pos()).x() - m_clickPoint.x());
break;
}
}
+ if (m_tool == RAZORTOOL) {
+ setCursor(m_razorCursor);
+ QGraphicsView::mouseMoveEvent(event);
+ return;
+ }
+
if (item && event->buttons() == Qt::NoButton) {
AbstractClipItem *clip = (AbstractClipItem*) item;
OPERATIONTYPE opMode = opMode = clip->operationMode(mapToScene(event->pos()), m_scale);
for (int i = 0; i < collisionList.size(); ++i) {
QGraphicsItem *item = collisionList.at(i);
if (item->type() == AVWIDGET || item->type() == TRANSITIONWIDGET) {
+ if (m_tool == RAZORTOOL) {
+ if (item->type() == TRANSITIONWIDGET) return;
+ AbstractClipItem *clip = (AbstractClipItem *) item;
+ ItemInfo info;
+ info.startPos = clip->startPos();
+ info.endPos = clip->endPos();
+ info.track = clip->track();
+ RazorClipCommand* command = new RazorClipCommand(this, info, GenTime((int)(mapToScene(event->pos()).x() / m_scale), m_document->fps()), true);
+ m_commandStack->push(command);
+ m_document->setModified(true);
+ return;
+ }
// select item
if (!item->isSelected()) {
QList<QGraphicsItem *> itemList = items();
m_commandStack->push(command);
}
+void CustomTrackView::cutClip(ItemInfo info, GenTime cutTime, bool cut) {
+ if (cut) {
+ // cut clip
+ ClipItem *item = getClipItemAt((int) info.startPos.frames(m_document->fps()), info.track);
+ int cutPos = (int) cutTime.frames(m_document->fps());
+ ItemInfo newPos;
+ newPos.startPos = cutTime;
+ newPos.endPos = info.endPos;
+ newPos.track = info.track;
+ ClipItem *dup = new ClipItem(item->baseClip(), newPos, m_scale, m_document->fps());
+ dup->setCropStart(dup->cropStart() + (cutTime - info.startPos));
+ item->resizeEnd(cutPos - 1, m_scale);
+ scene()->addItem(dup);
+ m_document->renderer()->mltCutClip(m_tracksList.count() - info.track, cutTime);
+ } else {
+ // uncut clip
+ ClipItem *item = getClipItemAt((int) info.startPos.frames(m_document->fps()), info.track);
+ ClipItem *dup = getClipItemAt((int) cutTime.frames(m_document->fps()), info.track);
+ delete dup;
+ item->resizeEnd((int) info.endPos.frames(m_document->fps()), m_scale);
+ m_document->renderer()->mltRemoveClip(m_tracksList.count() - info.track, cutTime);
+ m_document->renderer()->mltResizeClipEnd(m_tracksList.count() - info.track, info.startPos, item->cropStart(), item->cropStart() + info.endPos - info.startPos);
+ }
+}
+
void CustomTrackView::slotAddTransition(ClipItem* clip, ItemInfo transitionInfo, int endTrack, QDomElement transition) {
AddTransitionCommand* command = new AddTransitionCommand(this, transitionInfo, endTrack, transition, true);
m_commandStack->push(command);
}
}
+void CustomTrackView::cutSelectedClips() {
+ QList<QGraphicsItem *> itemList = items();
+ GenTime currentPos = GenTime(m_cursorPos, m_document->fps());
+ for (int i = 0; i < itemList.count(); i++) {
+ if (itemList.at(i)->type() == AVWIDGET && itemList.at(i)->isSelected()) {
+ ClipItem *item = (ClipItem *) itemList.at(i);
+ ItemInfo info;
+ info.startPos = item->startPos();
+ info.endPos = item->endPos();
+ if (currentPos > info.startPos && currentPos < info.endPos) {
+ info.track = item->track();
+ RazorClipCommand *command = new RazorClipCommand(this, info, currentPos, true);
+ m_commandStack->push(command);
+ }
+ }
+ }
+}
+
void CustomTrackView::addClip(QDomElement xml, int clipId, ItemInfo info) {
DocClipBase *baseclip = m_document->clipManager()->getClipById(clipId);
ClipItem *item = new ClipItem(baseclip, info, m_scale, m_document->fps());
// kDebug() << "SNAP POINT: " << m_snapPoints.at(i).frames(25);
}
+void CustomTrackView::setTool(PROJECTTOOL tool) {
+ m_tool = tool;
+}
void CustomTrackView::setScale(double scaleFactor) {
//scale(scaleFactor, scaleFactor);
void activateMonitor();
int duration() const;
void deleteSelectedClips();
+ void cutSelectedClips();
void setContextMenu(QMenu *timeline, QMenu *clip, QMenu *transition);
void checkTrackHeight();
QList <TrackInfo> tracksList() const;
+ void setTool(PROJECTTOOL tool);
+ void cutClip(ItemInfo info, GenTime cutTime, bool cut);
public slots:
void setCursorPos(int pos, bool seek = true);
QMenu *m_timelineContextClipMenu;
QMenu *m_timelineContextTransitionMenu;
QList <TrackInfo> m_tracksList;
+ PROJECTTOOL m_tool;
+ QCursor m_razorCursor;
/** Get the index of the video track that is just below current track */
int getPreviousVideoTrack(int track);
enum CLIPTYPE { UNKNOWN = 0, AUDIO = 1, VIDEO = 2, AV = 3, COLOR = 4, IMAGE = 5, TEXT = 6, SLIDESHOW = 7, VIRTUAL = 8, PLAYLIST = 9, FOLDER = 10};
enum GRAPHICSRECTITEM { AVWIDGET = 70000 , LABELWIDGET , TRANSITIONWIDGET };
+enum PROJECTTOOL { SELECTTOOL = 0 , RAZORTOOL = 1 };
+
enum TRANSITIONTYPE {
/** TRANSITIONTYPE: between 0-99: video trans, 100-199: video+audio trans, 200-299: audio trans */
LUMA_TRANSITION = 0,
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
-<gui name="kdenlive" version="13">
+<gui name="kdenlive" version="15">
<ToolBar name="extraToolBar" >
<text>Extra Toolbar</text>
<Action name="clear" />
<Action name="project_settings" />
</Menu>
+ <Menu name="tool" ><text>Tool</text>
+ <Action name="select_tool" />
+ <Action name="razor_tool" />
+ </Menu>
+
<Menu name="timeline" ><text>Timeline</text>
+ <Action name="cut_timeline_clip" />
<Action name="delete_timeline_clip" />
<Menu name="video_effects_menu" ><text>Add Video Effect</text>
</Menu>
tabifyDockWidget(clipMonitorDock, projectMonitorDock);
setCentralWidget(m_timelineArea);
- m_timecodeFormat = new KComboBox(this);
- m_timecodeFormat->addItem(i18n("hh:mm:ss::ff"));
- m_timecodeFormat->addItem(i18n("Frames"));
-
- statusProgressBar = new QProgressBar(this);
- statusProgressBar->setMinimum(0);
- statusProgressBar->setMaximum(100);
- statusProgressBar->setMaximumWidth(150);
- statusProgressBar->setVisible(false);
- statusLabel = new QLabel(this);
-
- QWidget *w = new QWidget;
- timeline_buttons_ui.setupUi(w);
- timeline_buttons_ui.buttonVideo->setDown(KdenliveSettings::videothumbnails());
- timeline_buttons_ui.buttonAudio->setDown(KdenliveSettings::audiothumbnails());
- connect(timeline_buttons_ui.buttonVideo, SIGNAL(clicked()), this, SLOT(slotSwitchVideoThumbs()));
- connect(timeline_buttons_ui.buttonAudio, SIGNAL(clicked()), this, SLOT(slotSwitchAudioThumbs()));
- connect(timeline_buttons_ui.buttonFitZoom, SIGNAL(clicked()), this, SLOT(slotFitZoom()));
-
- statusBar()->insertPermanentWidget(0, statusProgressBar, 1);
- statusBar()->insertPermanentWidget(1, statusLabel, 1);
- statusBar()->insertPermanentWidget(ID_TIMELINE_BUTTONS, w);
- statusBar()->insertPermanentFixedItem("00:00:00:00", ID_TIMELINE_POS);
- statusBar()->insertPermanentWidget(ID_TIMELINE_FORMAT, m_timecodeFormat);
- statusBar()->setMaximumHeight(statusBar()->font().pointSize() * 4);
-
- timeline_buttons_ui.buttonVideo->setIcon(KIcon("video-mpeg"));
- timeline_buttons_ui.buttonVideo->setToolTip(i18n("Show video thumbnails"));
- timeline_buttons_ui.buttonAudio->setIcon(KIcon("audio-mpeg"));
- timeline_buttons_ui.buttonAudio->setToolTip(i18n("Show audio thumbnails"));
- timeline_buttons_ui.buttonFitZoom->setIcon(KIcon("zoom-fit-best"));
- timeline_buttons_ui.buttonFitZoom->setToolTip(i18n("Fit zoom to project"));
-
setupGUI(Default, NULL /*"kdenliveui.rc"*/);
kDebug() << factory() << " " << factory()->container("video_effects_menu", this);
}
void MainWindow::setupActions() {
+
+ m_timecodeFormat = new KComboBox(this);
+ m_timecodeFormat->addItem(i18n("hh:mm:ss::ff"));
+ m_timecodeFormat->addItem(i18n("Frames"));
+
+ statusProgressBar = new QProgressBar(this);
+ statusProgressBar->setMinimum(0);
+ statusProgressBar->setMaximum(100);
+ statusProgressBar->setMaximumWidth(150);
+ statusProgressBar->setVisible(false);
+ statusLabel = new QLabel(this);
+
+ QWidget *w = new QWidget;
+
+ QHBoxLayout *layout = new QHBoxLayout;
+ w->setLayout(layout);
+ layout->setContentsMargins(5, 0, 5, 0);
+ QToolBar *toolbar = new QToolBar("statusToolBar", this);
+ w->setMinimumHeight(34);
+
+ m_toolGroup = new QActionGroup(this);
+
+ m_buttonSelectTool = toolbar->addAction(KIcon("kdenlive-select-tool"), i18n("Selection tool"));
+ m_buttonSelectTool->setCheckable(true);
+ m_buttonSelectTool->setChecked(true);
+
+ m_buttonRazorTool = toolbar->addAction(KIcon("edit-cut"), i18n("Razor tool"));
+ m_buttonRazorTool->setCheckable(true);
+ m_buttonRazorTool->setChecked(false);
+
+ m_toolGroup->addAction(m_buttonSelectTool);
+ m_toolGroup->addAction(m_buttonRazorTool);
+ m_toolGroup->setExclusive(true);
+ connect(m_toolGroup, SIGNAL(triggered(QAction *)), this, SLOT(slotChangeTool(QAction *)));
+
+ toolbar->addSeparator();
+ m_buttonFitZoom = toolbar->addAction(KIcon("zoom-fit-best"), i18n("Fit zoom to project"));
+ m_buttonFitZoom->setCheckable(false);
+ connect(m_buttonFitZoom, SIGNAL(triggered()), this, SLOT(slotFitZoom()));
+
+ m_zoomSlider = new QSlider(Qt::Horizontal, this);
+ m_zoomSlider->setMaximum(13);
+ m_zoomSlider->setMaximumHeight(34);
+ m_zoomSlider->setMaximumWidth(150);
+ m_zoomSlider->setMinimumWidth(100);
+ toolbar->addWidget(m_zoomSlider);
+
+ m_buttonVideoThumbs = toolbar->addAction(KIcon("video-mpeg"), i18n("Show videoo thumbnails"));
+ m_buttonVideoThumbs->setCheckable(true);
+ m_buttonVideoThumbs->setChecked(KdenliveSettings::audiothumbnails());
+ connect(m_buttonVideoThumbs, SIGNAL(triggered()), this, SLOT(slotSwitchVideoThumbs()));
+
+ m_buttonAudioThumbs = toolbar->addAction(KIcon("audio-mpeg"), i18n("Show audio thumbnails"));
+ m_buttonAudioThumbs->setCheckable(true);
+ m_buttonAudioThumbs->setChecked(KdenliveSettings::videothumbnails());
+ connect(m_buttonAudioThumbs, SIGNAL(triggered()), this, SLOT(slotSwitchAudioThumbs()));
+ layout->addWidget(toolbar);
+
+ statusBar()->insertPermanentWidget(0, statusProgressBar, 1);
+ statusBar()->insertPermanentWidget(1, statusLabel, 1);
+ statusBar()->insertPermanentWidget(ID_TIMELINE_BUTTONS, w);
+ statusBar()->insertPermanentFixedItem("00:00:00:00", ID_TIMELINE_POS);
+ statusBar()->insertPermanentWidget(ID_TIMELINE_FORMAT, m_timecodeFormat);
+ statusBar()->setMaximumHeight(statusBar()->font().pointSize() * 4);
+
+ actionCollection()->addAction("select_tool", m_buttonSelectTool);
+ actionCollection()->addAction("razor_tool", m_buttonRazorTool);
+
KAction* clearAction = new KAction(this);
clearAction->setText(i18n("Clear"));
clearAction->setIcon(KIcon("document-new"));
actionCollection()->addAction("monitor_seek_forward-one-frame", monitorSeekForwardOneFrame);
connect(monitorSeekForwardOneFrame, SIGNAL(triggered(bool)), m_monitorManager, SLOT(slotForwardOneFrame()));
- KAction* deleteTimelineClip = new KAction(this);
- deleteTimelineClip->setText(i18n("Delete Clip"));
+ KAction* deleteTimelineClip = new KAction(KIcon("edit-delete"), i18n("Delete Clip"), this);
deleteTimelineClip->setShortcut(Qt::Key_Delete);
- deleteTimelineClip->setIcon(KIcon("edit-delete"));
actionCollection()->addAction("delete_timeline_clip", deleteTimelineClip);
connect(deleteTimelineClip, SIGNAL(triggered(bool)), this, SLOT(slotDeleteTimelineClip()));
+ KAction* cutTimelineClip = new KAction(KIcon("edit-cut"), i18n("Cut Clip"), this);
+ cutTimelineClip->setShortcut(Qt::SHIFT + Qt::Key_R);
+ actionCollection()->addAction("cut_timeline_clip", cutTimelineClip);
+ connect(cutTimelineClip, SIGNAL(triggered(bool)), this, SLOT(slotCutTimelineClip()));
+
KStandardAction::quit(this, SLOT(queryQuit()),
actionCollection());
disconnect(trackView, SIGNAL(clipItemSelected(ClipItem*)), this, SLOT(slotActivateEffectStackView()));
disconnect(m_activeTimeline, SIGNAL(transitionItemSelected(Transition*)), transitionConfig, SLOT(slotTransitionItemSelected(Transition*)));
disconnect(trackView, SIGNAL(transitionItemSelected(Transition*)), this, SLOT(slotActivateTransitionView()));
- disconnect(timeline_buttons_ui.zoom_slider, SIGNAL(valueChanged(int)), m_activeTimeline, SLOT(slotChangeZoom(int)));
+ disconnect(m_zoomSlider, SIGNAL(valueChanged(int)), m_activeTimeline, SLOT(slotChangeZoom(int)));
disconnect(m_activeDocument, SIGNAL(docModified(bool)), this, SLOT(slotUpdateDocumentState(bool)));
disconnect(effectStack, SIGNAL(updateClipEffect(ClipItem*, QDomElement, QDomElement)), m_activeTimeline->projectView(), SLOT(slotUpdateClipEffect(ClipItem*, QDomElement, QDomElement)));
disconnect(effectStack, SIGNAL(removeEffect(ClipItem*, QDomElement)), m_activeTimeline->projectView(), SLOT(slotDeleteEffect(ClipItem*, QDomElement)));
connect(trackView, SIGNAL(clipItemSelected(ClipItem*)), this, SLOT(slotActivateEffectStackView()));
connect(trackView, SIGNAL(transitionItemSelected(Transition*)), transitionConfig, SLOT(slotTransitionItemSelected(Transition*)));
connect(trackView, SIGNAL(transitionItemSelected(Transition*)), this, SLOT(slotActivateTransitionView()));
- timeline_buttons_ui.zoom_slider->setValue(trackView->currentZoom());
- connect(timeline_buttons_ui.zoom_slider, SIGNAL(valueChanged(int)), trackView, SLOT(slotChangeZoom(int)));
+ m_zoomSlider->setValue(trackView->currentZoom());
+ connect(m_zoomSlider, SIGNAL(valueChanged(int)), trackView, SLOT(slotChangeZoom(int)));
connect(trackView->projectView(), SIGNAL(zoomIn()), this, SLOT(slotZoomIn()));
connect(trackView->projectView(), SIGNAL(zoomOut()), this, SLOT(slotZoomOut()));
connect(effectStack, SIGNAL(updateClipEffect(ClipItem*, QDomElement, QDomElement)), trackView->projectView(), SLOT(slotUpdateClipEffect(ClipItem*, QDomElement, QDomElement)));
currentTab->projectView()->checkTrackHeight();
if (m_activeDocument) m_activeDocument->clipManager()->checkAudioThumbs();
}
- timeline_buttons_ui.buttonAudio->setDown(KdenliveSettings::audiothumbnails());
- timeline_buttons_ui.buttonVideo->setDown(KdenliveSettings::videothumbnails());
+ m_buttonAudioThumbs->setChecked(KdenliveSettings::audiothumbnails());
+ m_buttonVideoThumbs->setChecked(KdenliveSettings::videothumbnails());
activateShuttleDevice();
}
if (currentTab) {
currentTab->refresh();
}
- timeline_buttons_ui.buttonVideo->setDown(KdenliveSettings::videothumbnails());
+ m_buttonVideoThumbs->setChecked(KdenliveSettings::videothumbnails());
}
void MainWindow::slotSwitchAudioThumbs() {
currentTab->projectView()->checkAutoScroll();
if (m_activeDocument) m_activeDocument->clipManager()->checkAudioThumbs();
}
- timeline_buttons_ui.buttonAudio->setDown(KdenliveSettings::audiothumbnails());
+ m_buttonAudioThumbs->setChecked(KdenliveSettings::audiothumbnails());
}
void MainWindow::slotDeleteTimelineClip() {
}
}
+void MainWindow::slotCutTimelineClip() {
+ TrackView *currentTab = (TrackView *) m_timelineArea->currentWidget();
+ if (currentTab) {
+ currentTab->projectView()->cutSelectedClips();
+ }
+}
+
void MainWindow::slotAddProjectClip(KUrl url) {
if (m_activeDocument)
m_activeDocument->slotAddClipFile(url, QString());
}
void MainWindow::slotZoomIn() {
- timeline_buttons_ui.zoom_slider->setValue(timeline_buttons_ui.zoom_slider->value() - 1);
+ m_zoomSlider->setValue(m_zoomSlider->value() - 1);
}
void MainWindow::slotZoomOut() {
- timeline_buttons_ui.zoom_slider->setValue(timeline_buttons_ui.zoom_slider->value() + 1);
+ m_zoomSlider->setValue(m_zoomSlider->value() + 1);
}
void MainWindow::slotFitZoom() {
TrackView *currentTab = (TrackView *) m_timelineArea->currentWidget();
if (currentTab) {
- timeline_buttons_ui.zoom_slider->setValue(currentTab->fitZoom());
+ m_zoomSlider->setValue(currentTab->fitZoom());
}
}
void MainWindow::slotActivateTransitionView() {
transitionConfig->raiseWindow(transitionConfigDock);
}
+
+void MainWindow::slotChangeTool(QAction * action) {
+ if (action == m_buttonSelectTool) slotSetTool(SELECTTOOL);
+ else if (action == m_buttonRazorTool) slotSetTool(RAZORTOOL);
+}
+
+void MainWindow::slotSetTool(PROJECTTOOL tool) {
+ if (m_activeDocument) {
+ //m_activeDocument->setTool(tool);
+ TrackView *currentTab = (TrackView *) m_timelineArea->currentWidget();
+ currentTab->projectView()->setTool(tool);
+ }
+}
+
#include "mainwindow.moc"
#include <KRecentFilesAction>
#include <KComboBox>
-#include "ui_timelinebuttons_ui.h"
#include "effectslist.h"
#include "gentime.h"
+#include "definitions.h"
+
class KdenliveDoc;
class TrackView;
class MonitorManager;
QMenu *m_timelineContextTransitionMenu;
RenderWidget *m_renderWidget;
- Ui::TimelineButtons_UI timeline_buttons_ui;
JogShuttle *m_jogProcess;
KRecentFilesAction *m_fileOpenRecent;
+
+ QAction *m_buttonAudioThumbs;
+ QAction *m_buttonVideoThumbs;
+ QAction *m_buttonFitZoom;
+ QAction *m_buttonSelectTool;
+ QAction *m_buttonRazorTool;
+ QActionGroup *m_toolGroup;
+ QSlider *m_zoomSlider;
+
void readOptions();
void saveOptions();
void activateShuttleDevice();
void slotFitZoom();
void slotRemoveTab();
void slotDeleteTimelineClip();
+ void slotCutTimelineClip();
void slotAddVideoEffect(QAction *result);
void slotAddAudioEffect(QAction *result);
void slotAddCustomEffect(QAction *result);
void slotShowClipProperties(DocClipBase *clip);
void slotActivateEffectStackView();
void slotActivateTransitionView();
+ void slotChangeTool(QAction * action);
+ void slotSetTool(PROJECTTOOL tool);
};
#endif
--- /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 "razorclipcommand.h"
+#include "customtrackview.h"
+
+RazorClipCommand::RazorClipCommand(CustomTrackView *view, const ItemInfo info, const GenTime cutTime, bool doIt) : m_view(view), m_info(info), m_cutTime(cutTime), m_doIt(doIt) {
+ setText(i18n("Razor clip"));
+}
+
+
+// virtual
+void RazorClipCommand::undo() {
+// kDebug()<<"---- undoing action";
+ m_doIt = true;
+ m_view->cutClip(m_info, m_cutTime, false);
+}
+// virtual
+void RazorClipCommand::redo() {
+ kDebug() << "---- redoing action cut: " << m_cutTime.frames(25);
+ if (m_doIt)
+ m_view->cutClip(m_info, m_cutTime, true);
+ 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 RAZORCLIPCOMMAND_H
+#define RAZORCLIPCOMMAND_H
+
+#include <QUndoCommand>
+#include <QGraphicsView>
+#include <QPointF>
+
+#include <KDebug>
+#include "definitions.h"
+
+class CustomTrackView;
+
+class RazorClipCommand : public QUndoCommand {
+public:
+ RazorClipCommand(CustomTrackView *view, const ItemInfo info, const GenTime cutTime, bool doIt);
+ virtual void undo();
+ virtual void redo();
+
+private:
+ CustomTrackView *m_view;
+ ItemInfo m_info;
+ GenTime m_cutTime;
+ bool m_doIt;
+};
+
+#endif
+