]> git.sesse.net Git - kdenlive/commitdiff
Start of tools:
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 11 Apr 2008 12:40:41 +0000 (12:40 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 11 Apr 2008 12:40:41 +0000 (12:40 +0000)
select and razor working for now

svn path=/branches/KDE4/; revision=2162

13 files changed:
icons/CMakeLists.txt
icons/hisc-action-kdenlive-select-tool.svgz [new file with mode: 0644]
src/CMakeLists.txt
src/abstractclipitem.cpp
src/abstractclipitem.h
src/customtrackview.cpp
src/customtrackview.h
src/definitions.h
src/kdenliveui.rc
src/mainwindow.cpp
src/mainwindow.h
src/razorclipcommand.cpp [new file with mode: 0644]
src/razorclipcommand.h [new file with mode: 0644]

index 70326282550321727d12ae6670f79853d4f6547d..638133517b909f5235c9ceebca3663bb2c83584e 100644 (file)
@@ -1,2 +1,3 @@
-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
diff --git a/icons/hisc-action-kdenlive-select-tool.svgz b/icons/hisc-action-kdenlive-select-tool.svgz
new file mode 100644 (file)
index 0000000..15745a6
Binary files /dev/null and b/icons/hisc-action-kdenlive-select-tool.svgz differ
index a2621b2826c085abdf14921678d40ee58e54ca33..d75bebed3e665cf5ea110a219a701b9ea51edcd3 100644 (file)
@@ -71,6 +71,7 @@ set(kdenlive_SRCS
   labelitem.cpp
   moveclipcommand.cpp
   resizeclipcommand.cpp
+  razorclipcommand.cpp
   addtimelineclipcommand.cpp
   kthumb.cpp
   clipmanager.cpp
index 110200d90fc4b890edc178dc8facb3ca23a27ad6..09380314e65122f6f5bb734517f68c2c1fb81b29 100644 (file)
@@ -62,6 +62,10 @@ GenTime AbstractClipItem::cropStart() const {
     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;
index 677a049140d3db831c729b518dbcd10f0485086a..c1c9fe64ce80a7ff98b5bcbfbe3041a5ec689905 100644 (file)
@@ -25,6 +25,7 @@ public:
     virtual int fadeIn() const;
     virtual int fadeOut() const;
     virtual GenTime maxDuration() const;
+    virtual void setCropStart(GenTime pos);
 protected:
     int m_track;
     GenTime m_cropStart;
index ea47c2020da82c517624e7ddbff1053d2675abdd..73ba40418d6e2d2c9b05c490d78366f7a91f56bd 100644 (file)
@@ -27,6 +27,7 @@
 #include <KDebug>
 #include <KLocale>
 #include <KUrl>
+#include <KIcon>
 #include <KCursor>
 
 #include "customtrackview.h"
@@ -41,6 +42,7 @@
 #include "editeffectcommand.h"
 #include "addtransitioncommand.h"
 #include "edittransitioncommand.h"
+#include "razorclipcommand.h"
 #include "kdenlivesettings.h"
 #include "transition.h"
 #include "clipitem.h"
@@ -56,7 +58,7 @@
 // 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);
@@ -75,6 +77,9 @@ CustomTrackView::CustomTrackView(KdenliveDoc *doc, QGraphicsScene * projectscene
         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) {
@@ -150,8 +155,7 @@ void CustomTrackView::mouseMoveEvent(QMouseEvent * event) {
       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());
@@ -196,6 +200,12 @@ void CustomTrackView::mouseMoveEvent(QMouseEvent * event) {
                 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);
@@ -385,6 +395,18 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event) {
         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();
@@ -554,6 +576,31 @@ void CustomTrackView::slotUpdateClipEffect(ClipItem *clip, QDomElement oldeffect
     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);
@@ -820,6 +867,24 @@ void CustomTrackView::deleteSelectedClips() {
     }
 }
 
+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());
@@ -963,6 +1028,9 @@ void CustomTrackView::updateSnapPoints(AbstractClipItem *selected) {
     //    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);
index 610a7179f13f478804c5396d9ebe2ea87b0d9a19..af88a19509f65bf7b6f7b26f74a1471e322552c5 100644 (file)
@@ -65,9 +65,12 @@ public:
     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);
@@ -130,6 +133,8 @@ private:
     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);
 
index 10ca5b79548e338405d45c6cf89bd8dfac5bc3ec..5c848f124ec6c4593eb8c48214f6ee305e3672fe 100644 (file)
@@ -30,6 +30,8 @@ enum OPERATIONTYPE { NONE = 0, MOVE = 1, RESIZESTART = 2, RESIZEEND = 3, FADEIN
 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,
index dbe1a4a20051c7dbc80d3bde88705ea8889098db..629ca1a621d6d4bd563ec534d1829887d0ec2f4a 100644 (file)
@@ -1,6 +1,6 @@
 <?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>
index 5176dec8d09fa56bbd2aaddf8430f8b1fbfa3a3b..7301920cc565aa20db5fb6b7d720003b055248ea 100644 (file)
@@ -181,39 +181,6 @@ MainWindow::MainWindow(QWidget *parent)
     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);
 
@@ -373,6 +340,74 @@ void MainWindow::slotConnectMonitors() {
 }
 
 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"));
@@ -434,13 +469,16 @@ void MainWindow::setupActions() {
     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());
 
@@ -743,7 +781,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) { //cha
             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)));
@@ -779,8 +817,8 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) { //cha
     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)));
@@ -830,8 +868,8 @@ void MainWindow::updateConfiguration() {
         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();
 
 }
@@ -842,7 +880,7 @@ void MainWindow::slotSwitchVideoThumbs() {
     if (currentTab) {
         currentTab->refresh();
     }
-    timeline_buttons_ui.buttonVideo->setDown(KdenliveSettings::videothumbnails());
+    m_buttonVideoThumbs->setChecked(KdenliveSettings::videothumbnails());
 }
 
 void MainWindow::slotSwitchAudioThumbs() {
@@ -853,7 +891,7 @@ 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() {
@@ -863,6 +901,13 @@ 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());
@@ -887,17 +932,17 @@ void MainWindow::slotAddCustomEffect(QAction *result) {
 }
 
 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());
     }
 }
 
@@ -936,4 +981,18 @@ void MainWindow::slotActivateEffectStackView() {
 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"
index fdacd933370be40ae75d11bc1b6153d6262a8f11..a5faed00141c928d0ae686a9c20cf68f4c9d59de 100644 (file)
 #include <KRecentFilesAction>
 #include <KComboBox>
 
-#include "ui_timelinebuttons_ui.h"
 #include "effectslist.h"
 #include "gentime.h"
+#include "definitions.h"
+
 class KdenliveDoc;
 class TrackView;
 class MonitorManager;
@@ -112,11 +113,19 @@ private:
     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();
@@ -158,6 +167,7 @@ private slots:
     void slotFitZoom();
     void slotRemoveTab();
     void slotDeleteTimelineClip();
+    void slotCutTimelineClip();
     void slotAddVideoEffect(QAction *result);
     void slotAddAudioEffect(QAction *result);
     void slotAddCustomEffect(QAction *result);
@@ -166,6 +176,8 @@ private slots:
     void slotShowClipProperties(DocClipBase *clip);
     void slotActivateEffectStackView();
     void slotActivateTransitionView();
+    void slotChangeTool(QAction * action);
+    void slotSetTool(PROJECTTOOL tool);
 };
 
 #endif
diff --git a/src/razorclipcommand.cpp b/src/razorclipcommand.cpp
new file mode 100644 (file)
index 0000000..c7fd074
--- /dev/null
@@ -0,0 +1,43 @@
+/***************************************************************************
+ *   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;
+}
+
diff --git a/src/razorclipcommand.h b/src/razorclipcommand.h
new file mode 100644 (file)
index 0000000..09b3736
--- /dev/null
@@ -0,0 +1,47 @@
+/***************************************************************************
+ *   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
+