From: <j-...@us...> - 2008-06-24 21:52:37
|
Revision: 2272 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2272&view=rev Author: j-b-m Date: 2008-06-24 14:52:46 -0700 (Tue, 24 Jun 2008) Log Message: ----------- new icons, snapping can now be en/disabled Modified Paths: -------------- branches/KDE4/icons/hi16-action-kdenlive-show-audio.png branches/KDE4/icons/hi16-action-kdenlive-show-video.png branches/KDE4/src/customtrackview.cpp branches/KDE4/src/kdenlivesettings.kcfg branches/KDE4/src/mainwindow.cpp branches/KDE4/src/mainwindow.h branches/KDE4/src/renderer.cpp branches/KDE4/src/renderer.h Added Paths: ----------- branches/KDE4/icons/hi16-action-kdenlive-show-audiothumb.png branches/KDE4/icons/hi16-action-kdenlive-show-markers.png branches/KDE4/icons/hi16-action-kdenlive-show-videothumb.png branches/KDE4/icons/hi16-action-kdenlive-snap.png Modified: branches/KDE4/icons/hi16-action-kdenlive-show-audio.png =================================================================== (Binary files differ) Added: branches/KDE4/icons/hi16-action-kdenlive-show-audiothumb.png =================================================================== (Binary files differ) Property changes on: branches/KDE4/icons/hi16-action-kdenlive-show-audiothumb.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: branches/KDE4/icons/hi16-action-kdenlive-show-markers.png =================================================================== (Binary files differ) Property changes on: branches/KDE4/icons/hi16-action-kdenlive-show-markers.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: branches/KDE4/icons/hi16-action-kdenlive-show-video.png =================================================================== (Binary files differ) Added: branches/KDE4/icons/hi16-action-kdenlive-show-videothumb.png =================================================================== (Binary files differ) Property changes on: branches/KDE4/icons/hi16-action-kdenlive-show-videothumb.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: branches/KDE4/icons/hi16-action-kdenlive-snap.png =================================================================== (Binary files differ) Property changes on: branches/KDE4/icons/hi16-action-kdenlive-snap.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2008-06-24 20:43:54 UTC (rev 2271) +++ branches/KDE4/src/customtrackview.cpp 2008-06-24 21:52:46 UTC (rev 2272) @@ -405,6 +405,10 @@ setCursor(Qt::PointingHandCursor); } } // no clip under mouse + else if (m_tool == RAZORTOOL) { + QGraphicsView::mouseMoveEvent(event); + return; + } else if (opMode == MOVEGUIDE) { m_moveOpMode = opMode; setCursor(Qt::SplitHCursor); @@ -959,9 +963,17 @@ setCursor(Qt::OpenHandCursor); // move clip if (m_dragItem->type() == AVWIDGET && (m_dragItemInfo.startPos != info.startPos || m_dragItemInfo.track != info.track)) { - MoveClipCommand *command = new MoveClipCommand(this, m_dragItemInfo, info, false); - m_commandStack->push(command); - m_document->renderer()->mltMoveClip((int)(m_tracksList.count() - m_dragItemInfo.track), (int)(m_tracksList.count() - m_dragItem->track()), (int) m_dragItemInfo.startPos.frames(m_document->fps()), (int)(m_dragItem->startPos().frames(m_document->fps()))); + bool success = m_document->renderer()->mltMoveClip((int)(m_tracksList.count() - m_dragItemInfo.track), (int)(m_tracksList.count() - m_dragItem->track()), (int) m_dragItemInfo.startPos.frames(m_document->fps()), (int)(m_dragItem->startPos().frames(m_document->fps()))); + if (success) { + MoveClipCommand *command = new MoveClipCommand(this, m_dragItemInfo, info, false); + m_commandStack->push(command); + } + else { + // undo last move and emit error message + MoveClipCommand *command = new MoveClipCommand(this, info, m_dragItemInfo, true); + m_commandStack->push(command); + emit displayMessage(i18n("Cannot move clip to requested position"), ErrorMessage); + } } if (m_dragItem->type() == TRANSITIONWIDGET && (m_dragItemInfo.startPos != info.startPos || m_dragItemInfo.track != info.track)) { MoveTransitionCommand *command = new MoveTransitionCommand(this, m_dragItemInfo, info, false); @@ -1183,8 +1195,15 @@ return; } //kDebug() << "---------------- Move CLIP FROM: " << startPos.x() << ", END:" << endPos.x() << ",TRACKS: " << startPos.y() << " TO " << endPos.y(); - item->moveTo((int) end.startPos.frames(m_document->fps()), m_scale, (int)((end.track - start.track) * m_tracksHeight), end.track); - m_document->renderer()->mltMoveClip((int)(m_tracksList.count() - start.track), (int)(m_tracksList.count() - end.track), (int) start.startPos.frames(m_document->fps()), (int)end.startPos.frames(m_document->fps())); + + bool success = m_document->renderer()->mltMoveClip((int)(m_tracksList.count() - start.track), (int)(m_tracksList.count() - end.track), (int) start.startPos.frames(m_document->fps()), (int)end.startPos.frames(m_document->fps())); + if (success) { + item->moveTo((int) end.startPos.frames(m_document->fps()), m_scale, (int)((end.track - start.track) * m_tracksHeight), end.track); + } + else { + // undo last move and emit error message + emit displayMessage(i18n("Cannot move clip to requested position"), ErrorMessage); + } } void CustomTrackView::moveTransition(const ItemInfo start, const ItemInfo end) { @@ -1279,6 +1298,7 @@ void CustomTrackView::updateSnapPoints(AbstractClipItem *selected) { m_snapPoints.clear(); + if (!KdenliveSettings::snaptopoints()) return; GenTime offset; if (selected) offset = selected->duration(); QList<QGraphicsItem *> itemList = items(); Modified: branches/KDE4/src/kdenlivesettings.kcfg =================================================================== --- branches/KDE4/src/kdenlivesettings.kcfg 2008-06-24 20:43:54 UTC (rev 2271) +++ branches/KDE4/src/kdenlivesettings.kcfg 2008-06-24 21:52:46 UTC (rev 2272) @@ -201,5 +201,10 @@ <default>false</default> </entry> + <entry name="snaptopoints" type="Bool"> + <label>Snap movements to clips, guides and markers.</label> + <default>true</default> + </entry> + </group> </kcfg> \ No newline at end of file Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-06-24 20:43:54 UTC (rev 2271) +++ branches/KDE4/src/mainwindow.cpp 2008-06-24 21:52:46 UTC (rev 2272) @@ -376,7 +376,7 @@ m_toolGroup = new QActionGroup(this); - QString style1 = "QToolButton { background-color: rgba(230, 230, 230, 20); border-style: inset; border:1px solid #666666;border-radius: 3px;margin: 0px 3px} QToolButton:checked { background-color: rgba(224, 0, 0, 100); border-style: inset; border:1px solid #666666;border-radius: 3px;}"; + QString style1 = "QToolButton {background-color: rgba(230, 230, 230, 220); border-style: inset; border:1px solid #999999;border-radius: 3px;margin: 0px 3px;padding: 0px;} QToolButton:checked { background-color: rgba(224, 224, 0, 100); border-style: inset; border:1px solid #cc6666;border-radius: 3px;}"; m_buttonSelectTool = toolbar->addAction(KIcon("kdenlive-select-tool"), i18n("Selection tool")); m_buttonSelectTool->setCheckable(true); @@ -389,6 +389,17 @@ m_toolGroup->addAction(m_buttonSelectTool); m_toolGroup->addAction(m_buttonRazorTool); m_toolGroup->setExclusive(true); + toolbar->setToolButtonStyle(Qt::ToolButtonIconOnly); + + QWidget * actionWidget; + actionWidget = toolbar->widgetForAction( m_buttonSelectTool ); + actionWidget->setMaximumWidth(24); + actionWidget->setMinimumHeight(18); + + actionWidget = toolbar->widgetForAction( m_buttonRazorTool ); + actionWidget->setMaximumWidth(24); + actionWidget->setMinimumHeight(18); + toolbar->setStyleSheet(style1); connect(m_toolGroup, SIGNAL(triggered(QAction *)), this, SLOT(slotChangeTool(QAction *))); @@ -415,22 +426,44 @@ toolbar->addWidget(m_zoomSlider); - m_buttonVideoThumbs = toolbar->addAction(KIcon("video-mpeg"), i18n("Show video thumbnails")); + m_buttonVideoThumbs = toolbar->addAction(KIcon("kdenlive-show-videothumb"), i18n("Show video thumbnails")); m_buttonVideoThumbs->setCheckable(true); m_buttonVideoThumbs->setChecked(KdenliveSettings::videothumbnails()); connect(m_buttonVideoThumbs, SIGNAL(triggered()), this, SLOT(slotSwitchVideoThumbs())); - m_buttonAudioThumbs = toolbar->addAction(KIcon("audio-mpeg"), i18n("Show audio thumbnails")); + m_buttonAudioThumbs = toolbar->addAction(KIcon("kdenlive-show-audiothumb"), i18n("Show audio thumbnails")); m_buttonAudioThumbs->setCheckable(true); m_buttonAudioThumbs->setChecked(KdenliveSettings::audiothumbnails()); connect(m_buttonAudioThumbs, SIGNAL(triggered()), this, SLOT(slotSwitchAudioThumbs())); - m_buttonShowMarkers = toolbar->addAction(KIcon("audio-mpeg"), i18n("Show markers comments")); + m_buttonShowMarkers = toolbar->addAction(KIcon("kdenlive-show-markers"), i18n("Show markers comments")); m_buttonShowMarkers->setCheckable(true); m_buttonShowMarkers->setChecked(KdenliveSettings::showmarkers()); connect(m_buttonShowMarkers, SIGNAL(triggered()), this, SLOT(slotSwitchMarkersComments())); + + m_buttonSnap = toolbar->addAction(KIcon("kdenlive-snap"), i18n("Snap")); + m_buttonSnap->setCheckable(true); + m_buttonSnap->setChecked(KdenliveSettings::snaptopoints()); + connect(m_buttonSnap, SIGNAL(triggered()), this, SLOT(slotSwitchSnap())); layout->addWidget(toolbar); + + actionWidget = toolbar->widgetForAction( m_buttonVideoThumbs ); + actionWidget->setMaximumWidth(24); + actionWidget->setMinimumHeight(18); + + actionWidget = toolbar->widgetForAction( m_buttonAudioThumbs ); + actionWidget->setMaximumWidth(24); + actionWidget->setMinimumHeight(18); + + actionWidget = toolbar->widgetForAction( m_buttonShowMarkers ); + actionWidget->setMaximumWidth(24); + actionWidget->setMinimumHeight(18); + + actionWidget = toolbar->widgetForAction( m_buttonSnap ); + actionWidget->setMaximumWidth(24); + actionWidget->setMinimumHeight(18); + m_messageLabel = new StatusBarMessageLabel(this); m_messageLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::MinimumExpanding); @@ -958,9 +991,12 @@ m_buttonShowMarkers->setChecked(KdenliveSettings::showmarkers()); } +void MainWindow::slotSwitchSnap() { + KdenliveSettings::setSnaptopoints(!KdenliveSettings::snaptopoints()); + m_buttonShowMarkers->setChecked(KdenliveSettings::snaptopoints()); +} - void MainWindow::slotDeleteTimelineClip() { TrackView *currentTab = (TrackView *) m_timelineArea->currentWidget(); if (currentTab) { Modified: branches/KDE4/src/mainwindow.h =================================================================== --- branches/KDE4/src/mainwindow.h 2008-06-24 20:43:54 UTC (rev 2271) +++ branches/KDE4/src/mainwindow.h 2008-06-24 21:52:46 UTC (rev 2272) @@ -124,6 +124,7 @@ QAction *m_buttonFitZoom; QAction *m_buttonSelectTool; QAction *m_buttonRazorTool; + QAction *m_buttonSnap; QActionGroup *m_toolGroup; QSlider *m_zoomSlider; StatusBarMessageLabel *m_messageLabel; @@ -162,6 +163,7 @@ void slotSwitchVideoThumbs(); void slotSwitchAudioThumbs(); void slotSwitchMarkersComments(); + void slotSwitchSnap(); void slotRenderProject(); void slotDoRender(const QString &dest, const QString &render, const QStringList &avformat_args, bool zoneOnly, bool playAfter); void slotFullScreen(); Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-06-24 20:43:54 UTC (rev 2271) +++ branches/KDE4/src/renderer.cpp 2008-06-24 21:52:46 UTC (rev 2272) @@ -808,12 +808,11 @@ if (m_mltProducer->get_speed() == 0.0) m_mltProducer->set_speed(1.0); else { m_isBlocked = true; - m_mltProducer->set_speed(0.0); - m_mltConsumer->set("refresh", 0); + m_mltProducer->set_speed(0.0); + //m_mltConsumer->set("refresh", 0); m_mltProducer->seek((int) m_framePosition); m_isBlocked = false; } - /*if (speed == 0.0) { m_mltProducer->seek((int) m_framePosition + 1); m_mltConsumer->purge(); @@ -1444,12 +1443,12 @@ m_isBlocked = false; } -void Render::mltMoveClip(int startTrack, int endTrack, GenTime moveStart, GenTime moveEnd) { - mltMoveClip(startTrack, endTrack, (int) moveStart.frames(m_fps), (int) moveEnd.frames(m_fps)); +bool Render::mltMoveClip(int startTrack, int endTrack, GenTime moveStart, GenTime moveEnd) { + return mltMoveClip(startTrack, endTrack, (int) moveStart.frames(m_fps), (int) moveEnd.frames(m_fps)); } -void Render::mltMoveClip(int startTrack, int endTrack, int moveStart, int moveEnd) { +bool Render::mltMoveClip(int startTrack, int endTrack, int moveStart, int moveEnd) { m_isBlocked = true; m_mltConsumer->set("refresh", 0); @@ -1467,27 +1466,39 @@ Mlt::Producer clipProducer(trackPlaylist.replace_with_blank(clipIndex)); trackPlaylist.consolidate_blanks(0); if (!trackPlaylist.is_blank_at(moveEnd)) { - kWarning() << "// ERROR, CLIP COLLISION----------"; - int ix = trackPlaylist.get_clip_index_at(moveEnd); - kDebug() << "BAD CLIP STARTS AT: " << trackPlaylist.clip_start(ix) << ", LENGT: " << trackPlaylist.clip_length(ix); + // error, destination is not empty + //int ix = trackPlaylist.get_clip_index_at(moveEnd); + mlt_service_unlock(m_mltConsumer->get_service()); + m_isBlocked = false; + return false; } - trackPlaylist.insert_at(moveEnd, clipProducer, 1); - trackPlaylist.consolidate_blanks(0); + else { + trackPlaylist.insert_at(moveEnd, clipProducer, 1); + trackPlaylist.consolidate_blanks(0); + } //mlt_service_unlock(service.get_service()); } else { - Mlt::Producer clipProducer(trackPlaylist.replace_with_blank(clipIndex)); - trackPlaylist.consolidate_blanks(0); - Mlt::Producer destTrackProducer(tractor.track(endTrack)); Mlt::Playlist destTrackPlaylist((mlt_playlist) destTrackProducer.get_service()); - destTrackPlaylist.consolidate_blanks(1); - destTrackPlaylist.insert_at(moveEnd, clipProducer, 1); - destTrackPlaylist.consolidate_blanks(0); + if (!destTrackPlaylist.is_blank_at(moveEnd)) { + // error, destination is not empty + mlt_service_unlock(m_mltConsumer->get_service()); + m_isBlocked = false; + return false; + } + else { + Mlt::Producer clipProducer(trackPlaylist.replace_with_blank(clipIndex)); + trackPlaylist.consolidate_blanks(0); + destTrackPlaylist.consolidate_blanks(1); + destTrackPlaylist.insert_at(moveEnd, clipProducer, 1); + destTrackPlaylist.consolidate_blanks(0); + } } mltCheckLength(); mlt_service_unlock(m_mltConsumer->get_service()); m_isBlocked = false; m_mltConsumer->set("refresh", 1); + return true; } void Render::mltMoveTransition(QString type, int startTrack, int newTrack, int newTransitionTrack, GenTime oldIn, GenTime oldOut, GenTime newIn, GenTime newOut) { @@ -1603,7 +1614,6 @@ } void Render::mltDeleteTransition(QString tag, int a_track, int b_track, GenTime in, GenTime out, QDomElement xml, bool do_refresh) { - Mlt::Service service(m_mltProducer->parent().get_service()); Mlt::Tractor tractor(service); Mlt::Field *field = tractor.field(); @@ -1627,6 +1637,7 @@ if (resource == tag && b_track == currentTrack && currentIn <= old_pos && currentOut >= old_pos) { //kDebug() << " / / / / /DELETE TRANS DOOOMNE"; mlt_field_disconnect_service(field->get_field(), nextservice); + mlt_service_close(nextservice); break; } nextservice = mlt_service_producer(nextservice); @@ -1677,7 +1688,6 @@ } void Render::mltAddTransition(QString tag, int a_track, int b_track, GenTime in, GenTime out, QDomElement xml, bool do_refresh) { - //kDebug() << "-- ADDING TRANSITION: " << tag << ", ON TRACKS: " << a_track << ", " << b_track; QMap<QString, QString> args = mltGetTransitionParamsFromXml(xml); Modified: branches/KDE4/src/renderer.h =================================================================== --- branches/KDE4/src/renderer.h 2008-06-24 20:43:54 UTC (rev 2271) +++ branches/KDE4/src/renderer.h 2008-06-24 21:52:46 UTC (rev 2272) @@ -154,8 +154,8 @@ void mltCutClip(int track, GenTime position); void mltResizeClipEnd(int track, GenTime pos, GenTime in, GenTime out); void mltResizeClipStart(int track, GenTime pos, GenTime moveEnd, GenTime moveStart, GenTime in, GenTime out); - void mltMoveClip(int startTrack, int endTrack, GenTime pos, GenTime moveStart); - void mltMoveClip(int startTrack, int endTrack, int pos, int moveStart); + bool mltMoveClip(int startTrack, int endTrack, GenTime pos, GenTime moveStart); + bool mltMoveClip(int startTrack, int endTrack, int pos, int moveStart); void mltRemoveClip(int track, GenTime position); void mltRemoveEffect(int track, GenTime position, QString index, bool doRefresh = true); void mltAddEffect(int track, GenTime position, QMap <QString, QString> args, bool doRefresh = true); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |