]> git.sesse.net Git - kdenlive/commitdiff
Merge branch 'master' into feature/pkey
authorEd Rogalsky <ed.rogalsky@googlemail.com>
Wed, 31 Oct 2012 06:56:55 +0000 (07:56 +0100)
committerEd Rogalsky <ed.rogalsky@googlemail.com>
Wed, 31 Oct 2012 06:56:55 +0000 (07:56 +0100)
Conflicts:
src/mainwindow.h

1  2 
src/customtrackview.cpp
src/customtrackview.h
src/mainwindow.cpp
src/mainwindow.h

diff --combined src/customtrackview.cpp
index c9c4df4a8450b326ecc797e8baf24534bdfbe968,a259b787ae6200ec905e0d7abf107a48d5937475..166990f43d1800f24ed9f65835884050cce9308b
@@@ -405,25 -405,20 +405,29 @@@ void CustomTrackView::slotCheckPosition
      }
  }
  
 +void CustomTrackView::slotAlignPlayheadToMousePos()
 +{
 +      /* get curser point ref in screen coord */
 +      QPoint ps = QCursor::pos();
 +      /* get xPos in scene coord */
 +      int mappedXPos = qMax((int)(mapToScene(mapFromGlobal(ps)).x() + 0.5), 0);
 +      /* move playhead to new xPos*/
 +      seekCursorPos(mappedXPos);
 +}
  
  // virtual
  void CustomTrackView::mouseMoveEvent(QMouseEvent * event)
  {
      int pos = event->x();
      int mappedXPos = qMax((int)(mapToScene(event->pos()).x() + 0.5), 0);
-    
      double snappedPos = getSnapPointForPos(mappedXPos);
      emit mousePosition(mappedXPos);
  
+     if (m_operationMode == SCROLLTIMELINE) {
+       QGraphicsView::mouseMoveEvent(event);
+       return;
+     }
      if (event->buttons() & Qt::MidButton) return;
      if (dragMode() == QGraphicsView::RubberBandDrag || (event->modifiers() == Qt::ControlModifier && m_tool != SPACERTOOL && m_operationMode != RESIZESTART && m_operationMode != RESIZEEND)) {
          event->setAccepted(true);
  
      if (m_tool == RAZORTOOL) {
          setCursor(m_razorCursor);
-         //QGraphicsView::mouseMoveEvent(event);
-         //return;
      } else if (m_tool == SPACERTOOL) {
          setCursor(m_spacerCursor);
-         return;
      }
  
      QList<QGraphicsItem *> itemList = items(event->pos());
  
      if (itemList.count() == 1 && itemList.at(0)->type() == GUIDEITEM) {
          opMode = MOVEGUIDE;
+       setCursor(Qt::SplitHCursor);
      } else for (int i = 0; i < itemList.count(); i++) {
-             if (itemList.at(i)->type() == AVWIDGET || itemList.at(i)->type() == TRANSITIONWIDGET) {
-                 item = (QGraphicsRectItem*) itemList.at(i);
-                 break;
-             }
-         }
+         if (itemList.at(i)->type() == AVWIDGET || itemList.at(i)->type() == TRANSITIONWIDGET) {
+             item = (QGraphicsRectItem*) itemList.at(i);
+           break;
+       }
+     }
+     if (m_tool == SPACERTOOL) {
+         event->accept();
+         return;
+     }
  
      if (item && event->buttons() == Qt::NoButton) {
          AbstractClipItem *clip = static_cast <AbstractClipItem*>(item);
          return;
      } else if (opMode == MOVEGUIDE) {
          m_moveOpMode = opMode;
-         setCursor(Qt::SplitHCursor);
      } else {
          removeTipAnimation();
          setCursor(Qt::ArrowCursor);
@@@ -779,9 -776,9 +785,9 @@@ void CustomTrackView::mousePressEvent(Q
      if (event->modifiers() == Qt::ControlModifier && m_tool != SPACERTOOL && collisionList.count() == 0) {
          // Pressing Ctrl + left mouse button in an empty area scrolls the timeline
          setDragMode(QGraphicsView::ScrollHandDrag);
-         QGraphicsView::mousePressEvent(event);
          m_blockRefresh = false;
-         m_operationMode = NONE;
+         m_operationMode = SCROLLTIMELINE;
+       QGraphicsView::mousePressEvent(event);
          return;
      }
  
      // No item under click
      if (m_dragItem == NULL || m_tool == SPACERTOOL) {
          resetSelectionGroup(false);
-         setCursor(Qt::ArrowCursor);
          m_scene->clearSelection();
          //event->accept();
          updateClipTypeActions(NULL);
              }
              m_operationMode = SPACER;
          } else {
+           setCursor(Qt::ArrowCursor);
              seekCursorPos((int)(mapToScene(event->x(), 0).x()));
          }
          QGraphicsView::mousePressEvent(event);
        if (selected == false) {
            m_dragItem = NULL;
        }
-         groupSelectedItems();
+         groupSelectedItems(QList <QGraphicsItem*>(), false, false, true);
        if (m_dragItem) { 
            ClipItem *clip = static_cast <ClipItem *>(m_dragItem);
            updateClipTypeActions(dragGroup == NULL ? clip : NULL);
@@@ -3506,8 -3503,15 +3512,15 @@@ void CustomTrackView::checkScrolling(
  void CustomTrackView::mouseReleaseEvent(QMouseEvent * event)
  {
      if (m_moveOpMode == SEEK) m_moveOpMode = NONE;
+     if (m_operationMode == SCROLLTIMELINE) {
+       m_operationMode = NONE;
+       setDragMode(QGraphicsView::NoDrag);
+       QGraphicsView::mouseReleaseEvent(event);
+       return;
+     }
      if (!m_controlModifier && m_operationMode != RUBBERSELECTION) {
        //event->accept();
+       setDragMode(QGraphicsView::NoDrag);
        if (m_clipDrag) QGraphicsView::mouseReleaseEvent(event);
      }
      m_clipDrag = false;
@@@ -4418,7 -4422,7 +4431,7 @@@ void CustomTrackView::doGroupClips(QLis
              //clip->setSelected(true);
          }
      }
-     groupSelectedItems(list, false, true);
+     groupSelectedItems(list, false, true, true);
      setDocumentModified();
  }
  
@@@ -5692,6 -5696,16 +5705,16 @@@ void CustomTrackView::slotDeleteAllGuid
  void CustomTrackView::setTool(PROJECTTOOL tool)
  {
      m_tool = tool;
+     switch (m_tool) {
+       case RAZORTOOL:
+         setCursor(m_razorCursor);
+         break;
+       case SPACERTOOL:
+         setCursor(m_spacerCursor);
+         break;
+       default:
+         unsetCursor();
+     }
  }
  
  void CustomTrackView::setScale(double scaleFactor, double verticalScale)
@@@ -7067,6 -7081,7 +7090,7 @@@ void CustomTrackView::slotSelectTrack(i
  void CustomTrackView::slotSelectClipsInTrack()
  {
      QRectF rect(0, m_selectedTrack * m_tracksHeight + m_tracksHeight / 2, sceneRect().width(), m_tracksHeight / 2 - 1);
+     resetSelectionGroup();
      QList<QGraphicsItem *> selection = m_scene->items(rect);
      m_scene->clearSelection();
      QList<QGraphicsItem *> list;
            list.append(selection.at(i));
          }
      }    
-     resetSelectionGroup();
-     groupSelectedItems(list);
+     groupSelectedItems(list, false, false, true);
  }
  
  void CustomTrackView::slotSelectAllClips()
  {
-     QList<QGraphicsItem *> selection = m_scene->items();
      m_scene->clearSelection();
      resetSelectionGroup();
-     groupSelectedItems(selection);
+     groupSelectedItems(m_scene->items(), false, false, true);
  }
  
  void CustomTrackView::selectClip(bool add, bool group, int track, int pos)
@@@ -7637,7 -7650,7 +7659,7 @@@ void CustomTrackView::slotImportClipKey
            result.append(';');
        }
      }
-     emit importKeyframes(type, result);
+     emit importKeyframes(type, result, ui.limit_keyframes->isChecked() ? ui.max_keyframes->value() : -1);
      delete d;
  }
  
diff --combined src/customtrackview.h
index 42341874912e805f8d58758e023836bbeca2cd98,344a01a25565a91df13512c9eb0a641fc19978b9..f4e729611b8fc470a3a05055a3990f7306e77977
@@@ -307,8 -307,6 +307,8 @@@ public slots
  
      /** @brief Get effect parameters ready for MLT*/
      static void adjustEffectParameters(EffectsParameterList &parameters, QDomNodeList params, MltVideoProfile profile, const QString &prefix = QString());
 +      /** @brief Move playhead to mouse curser position if defined key is pressed */
 +    void slotAlignPlayheadToMousePos();
  
  protected:
      virtual void drawBackground(QPainter * painter, const QRectF & rect);
@@@ -532,7 -530,7 +532,7 @@@ signals
      /** @brief Cursor position changed, repaint ruler.*/
      void updateRuler();
      /** @brief Send data from a clip to be imported as keyframes for effect / transition.*/
-     void importKeyframes(GRAPHICSRECTITEM type, const QString&);
+     void importKeyframes(GRAPHICSRECTITEM type, const QString&, int maximum);
  };
  
  #endif
diff --combined src/mainwindow.cpp
index 7355b8d33b3c581b3c63947bb26d5fa55393866a,82490f7f4f9ab9013011b8307f0998ff87b4f4cf..013a5e14808c14548994ebc7a6a12fb29f6d8740
@@@ -1402,11 -1402,6 +1402,11 @@@ void MainWindow::setupActions(
      collection.addAction("delete_timeline_clip", deleteItem);
      connect(deleteItem, SIGNAL(triggered(bool)), this, SLOT(slotDeleteItem()));
  
 +    KAction* alignPlayhead = new KAction(i18n("Align Playhead to Mouse Position"), this);
 +    alignPlayhead->setShortcut(Qt::Key_P);
 +    collection.addAction("align_playhead", alignPlayhead);
 +    connect(alignPlayhead, SIGNAL(triggered(bool)), this, SLOT(slotAlignPlayheadToMousePos()));
 +
      /*KAction* editTimelineClipSpeed = new KAction(i18n("Change Clip Speed"), this);
      collection.addAction("change_clip_speed", editTimelineClipSpeed);
      editTimelineClipSpeed->setData("change_speed");
@@@ -2573,7 -2568,7 +2573,7 @@@ void MainWindow::connectDocument(TrackV
      connect(trackView, SIGNAL(mousePosition(int)), this, SLOT(slotUpdateMousePosition(int)));
      connect(trackView->projectView(), SIGNAL(forceClipProcessing(const QString &)), m_projectList, SLOT(slotForceProcessing(const QString &)));
  
-     connect(trackView->projectView(), SIGNAL(importKeyframes(GRAPHICSRECTITEM, const QString&)), this, SLOT(slotProcessImportKeyframes(GRAPHICSRECTITEM, const QString&)));
+     connect(trackView->projectView(), SIGNAL(importKeyframes(GRAPHICSRECTITEM, const QString&, int)), this, SLOT(slotProcessImportKeyframes(GRAPHICSRECTITEM, const QString&, int)));
      
      connect(m_projectMonitor, SIGNAL(renderPosition(int)), trackView, SLOT(moveCursorPos(int)));
      connect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), trackView, SLOT(slotSetZone(QPoint)));
@@@ -4578,24 -4573,20 +4578,24 @@@ void MainWindow::slotSaveTimelineClip(
      }
  }
  
- void MainWindow::slotProcessImportKeyframes(GRAPHICSRECTITEM type, const QString& data)
+ void MainWindow::slotProcessImportKeyframes(GRAPHICSRECTITEM type, const QString& data, int maximum)
  {
      if (type == AVWIDGET) {
        // This data should be sent to the effect stack
      }
      else if (type == TRANSITIONWIDGET) {
        // This data should be sent to the transition stack
-       m_transitionConfig->setKeyframes(data);
+       m_transitionConfig->setKeyframes(data, maximum);
      }
      else {
        // Error
      }
  }
  
 +void MainWindow::slotAlignPlayheadToMousePos()
 +{
 +      m_activeTimeline->projectView()->slotAlignPlayheadToMousePos();
 +}
  
  #include "mainwindow.moc"
  
diff --combined src/mainwindow.h
index 67f31ea10b723663a630c9371cdcbfcd84d39e61,9efa6e4c741c8d1c26164ce2295559cec8ac8722..db1cbc2252d415b8877429a991d45720d1c7ebfc
@@@ -567,9 -567,7 +567,9 @@@ private slots
      /** @brief Save current timeline clip as mlt playlist. */
      void slotSaveTimelineClip();
      /** @brief Process keyframe data sent from a clip to effect / transition stack. */
-     void slotProcessImportKeyframes(GRAPHICSRECTITEM type, const QString& data);
+     void slotProcessImportKeyframes(GRAPHICSRECTITEM type, const QString& data, int maximum);
 +    /** @brief Move playhead to mouse curser position if defined key is pressed */
 +    void slotAlignPlayheadToMousePos();
  
  signals:
      Q_SCRIPTABLE void abortRenderJob(const QString &url);