]> git.sesse.net Git - kdenlive/commitdiff
Start of timeline context menu
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 15 Mar 2008 12:07:03 +0000 (12:07 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 15 Mar 2008 12:07:03 +0000 (12:07 +0000)
svn path=/branches/KDE4/; revision=2058

src/customtrackview.cpp
src/customtrackview.h
src/kdenliveui.rc
src/mainwindow.cpp
src/mainwindow.h
src/trackview.cpp

index 961c509345e2159412d71d8f4001ffbcaeb4f377..ae0625a97d3e47776e9f4256aaf9be413f55b04b 100644 (file)
@@ -27,6 +27,8 @@
 #include <KLocale>
 #include <KUrl>
 #include <KCursor>
+#include <KXmlGuiWindow>
+#include <KActionCollection>
 
 #include "customtrackview.h"
 #include "clipitem.h"
@@ -67,6 +69,9 @@ CustomTrackView::CustomTrackView(KdenliveDoc *doc, QGraphicsScene * projectscene
         m_cursorLine->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIgnoresTransformations);
         m_cursorLine->setZValue(1000);
     }
+    m_timelineContextClipMenu = new QMenu(this);
+    QAction *delClip = static_cast<KXmlGuiWindow*>(parent)->actionCollection()->action("delete_timeline_clip");
+    if (delClip) m_timelineContextClipMenu->addAction(delClip);
 }
 
 void CustomTrackView::checkAutoScroll() {
@@ -138,7 +143,6 @@ void CustomTrackView::mouseMoveEvent(QMouseEvent * event) {
         }
 
         QList<QGraphicsItem *> itemList = items(event->pos());
-        int i = 0;
         QGraphicsRectItem *item = NULL;
         for (int i = 0; i < itemList.count(); i++) {
             if (itemList.at(i)->type() == AVWIDGET || itemList.at(i)->type() == TRANSITIONWIDGET) {
@@ -364,7 +368,7 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event) {
                     scene()->addItem(tr);
                     //m_dragItem->addTransition(tra);
                 }
-
+                updateSnapPoints(m_dragItem);
                 kDebug() << "//////// ITEM CLICKED: " << m_startPos;
                 collision = true;
                 break;
@@ -378,14 +382,23 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event) {
             for (int i = 0; i < itemList.count(); i++)
                 itemList.at(i)->setSelected(false);
             emit clipItemSelected(NULL);
-            setCursorPos((int) mapToScene(event->x(), 0).x() / m_scale);
+            if (event->button() == Qt::RightButton) {
+                displayContextMenu(event->globalPos());
+            } else setCursorPos((int) mapToScene(event->x(), 0).x() / m_scale);
+        } else if (event->button() == Qt::RightButton) {
+            m_operationMode = NONE;
+            displayContextMenu(event->globalPos(), (ClipItem *) m_dragItem);
+            m_dragItem = NULL;
         }
     }
-    updateSnapPoints(m_dragItem);
     //kDebug()<<pos;
     //QGraphicsView::mousePressEvent(event);
 }
 
+void CustomTrackView::displayContextMenu(QPoint pos, ClipItem *clip) {
+    m_timelineContextClipMenu->popup(pos);
+}
+
 void CustomTrackView::activateMonitor() {
     emit activateDocumentMonitor();
 }
@@ -652,6 +665,17 @@ void CustomTrackView::deleteClip(int track, GenTime startpos, const QRectF &rect
     m_document->renderer()->doRefresh();
 }
 
+void CustomTrackView::deleteSelectedClips() {
+    QList<QGraphicsItem *> itemList = items();
+    for (int i = 0; i < itemList.count(); i++) {
+        if (itemList.at(i)->type() == AVWIDGET && itemList.at(i)->isSelected()) {
+            ClipItem *item = (ClipItem *) itemList.at(i);
+            AddTimelineClipCommand *command = new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->track(), item->startPos(), item->rect(), item->duration(), true, true);
+            m_commandStack->push(command);
+        }
+    }
+}
+
 void CustomTrackView::addClip(QDomElement xml, int clipId, int track, GenTime startpos, const QRectF &rect, GenTime duration) {
     QRect r(startpos.frames(m_document->fps()) * m_scale, 50 * track, duration.frames(m_document->fps()) * m_scale, 49);
     DocClipBase *baseclip = m_document->clipManager()->getClipById(clipId);
index ca6e05ceedd1a60bbdc0d0107dd4ded232f2cbc7..f039da59965b5763bb6892634a5afd1304bbc003 100644 (file)
@@ -24,6 +24,7 @@
 #include <QGraphicsView>
 #include <QGraphicsItemAnimation>
 #include <QTimeLine>
+#include <QMenu>
 
 #include <KUndoStack>
 
@@ -54,6 +55,7 @@ public:
     void updateEffect(int track, GenTime pos, QDomElement effect);
     void activateMonitor();
     int duration() const;
+    void deleteSelectedClips();
 
 public slots:
     void setCursorPos(int pos, bool seek = true);
@@ -104,6 +106,10 @@ private:
     void checkScrolling();
     /** Should we auto scroll while playing (keep in sync with KdenliveSettings::autoscroll() */
     bool m_autoScroll;
+    void displayContextMenu(QPoint pos, ClipItem *clip = NULL);
+    QMenu *m_timelineContextMenu;
+    QMenu *m_timelineContextClipMenu;
+    QMenu *m_timelineContextTransitionMenu;
 
 signals:
     void cursorMoved(int, int);
index 49b40b3a818aabab4e699837f53c7eca3bfa906d..8a9e69b08d8777cfac9c4834708ed49b3e8c9da8 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
-<gui name="kdenlive" version="9">
+<gui name="kdenlive" version="10">
   <ToolBar name="extraToolBar" >
     <text>Extra Toolbar</text>
     <Action name="clear" />
       <Action name="project_settings" />
     </Menu>
 
+    <Menu name="timeline" ><text>Timeline</text>
+      <Action name="delete_timeline_clip" />
+    </Menu>
+
     <Menu name="monitor" ><text>Monitor</text>
       <Action name="monitor_play" />
     </Menu>
index 107e284c61b4f280d643320c88ae064941050994..1b73b4bb7432600700e2dcdb9142316feb8f00a5 100644 (file)
@@ -278,6 +278,13 @@ void MainWindow::setupActions() {
     actionCollection()->addAction("monitor_play", monitorPlay);
     connect(monitorPlay, SIGNAL(triggered(bool)), m_monitorManager, SLOT(slotPlay()));
 
+    KAction* deleteTimelineClip = new KAction(this);
+    deleteTimelineClip->setText(i18n("Delete Clip"));
+    deleteTimelineClip->setShortcut(Qt::Key_Delete);
+    deleteTimelineClip->setIcon(KIcon("edit-delete"));
+    actionCollection()->addAction("delete_timeline_clip", deleteTimelineClip);
+    connect(deleteTimelineClip, SIGNAL(triggered(bool)), this, SLOT(slotDeleteTimelineClip()));
+
     KStandardAction::quit(kapp, SLOT(quit()),
                           actionCollection());
 
@@ -350,7 +357,7 @@ void MainWindow::newFile() {
     MltVideoProfile prof = ProfilesDialog::getVideoProfile(profileName);
     if (prof.width == 0) prof = ProfilesDialog::getVideoProfile("dv_pal");
     KdenliveDoc *doc = new KdenliveDoc(KUrl(), prof, m_commandStack);
-    TrackView *trackView = new TrackView(doc);
+    TrackView *trackView = new TrackView(doc, this);
     m_timelineArea->addTab(trackView, KIcon("kdenlive"), i18n("Untitled") + " / " + prof.description);
     if (m_timelineArea->count() == 1)
         connectDocument(trackView, doc);
@@ -415,7 +422,7 @@ void MainWindow::openFile(const KUrl &url) { //new
     MltVideoProfile prof = ProfilesDialog::getVideoProfile(KdenliveSettings::default_profile());
     if (prof.width == 0) prof = ProfilesDialog::getVideoProfile("dv_pal");
     KdenliveDoc *doc = new KdenliveDoc(url, prof, m_commandStack);
-    TrackView *trackView = new TrackView(doc);
+    TrackView *trackView = new TrackView(doc, this);
     m_timelineArea->setCurrentIndex(m_timelineArea->addTab(trackView, KIcon("kdenlive"), doc->description()));
     m_timelineArea->setTabToolTip(m_timelineArea->currentIndex(), doc->url().path());
     if (m_timelineArea->count() > 1) m_timelineArea->setTabBarHidden(false);
@@ -614,6 +621,8 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) { //cha
     m_monitorManager->setTimecode(doc->timecode());
     doc->setRenderer(m_projectMonitor->render);
     m_commandStack->setActiveStack(doc->commandStack());
+    if (m_commandStack->isClean()) kDebug() << "////////////  UNDO STACK IS CLEAN";
+    else  kDebug() << "////////////  UNDO STACK IS NOT CLEAN*******************";
 
     m_overView->setScene(trackView->projectScene());
     //m_overView->scale(m_overView->width() / trackView->duration(), m_overView->height() / (50 * trackView->tracksNumber()));
@@ -669,6 +678,13 @@ void MainWindow::slotSwitchAudioThumbs() {
     timeline_buttons_ui.buttonAudio->setDown(KdenliveSettings::audiothumbnails());
 }
 
+void MainWindow::slotDeleteTimelineClip() {
+    TrackView *currentTab = (TrackView *) m_timelineArea->currentWidget();
+    if (currentTab) {
+        currentTab->projectView()->deleteSelectedClips();
+    }
+}
+
 void MainWindow::slotZoomIn() {
     timeline_buttons_ui.zoom_slider->setValue(timeline_buttons_ui.zoom_slider->value() - 1);
 }
index 7694171051a3332eb320aa0b453912890319a5a4..ceb400ca0dddcc062c35a1a0b72936a5bcf3c429 100644 (file)
@@ -139,6 +139,7 @@ private slots:
     void slotZoomOut();
     void slotFitZoom();
     void slotRemoveTab();
+    void slotDeleteTimelineClip();
 };
 
 #endif
index 3607b709912f1cb6d41bca8bd09b965b3dbc73ad..493aa544f86040848976b16e957be6372b96e915 100644 (file)
@@ -36,7 +36,7 @@ TrackView::TrackView(KdenliveDoc *doc, QWidget *parent)
     view->setupUi(this);
 
     m_scene = new QGraphicsScene();
-    m_trackview = new CustomTrackView(doc, m_scene, this);
+    m_trackview = new CustomTrackView(doc, m_scene, parent);
     m_trackview->scale(1, 1);
     m_trackview->setAlignment(Qt::AlignLeft | Qt::AlignTop);
     //m_scene->addRect(QRectF(0, 0, 100, 100), QPen(), QBrush(Qt::red));