From: <j-...@us...> - 2008-04-11 12:40:34
|
Revision: 2162 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2162&view=rev Author: j-b-m Date: 2008-04-11 05:40:41 -0700 (Fri, 11 Apr 2008) Log Message: ----------- Start of tools: select and razor working for now Modified Paths: -------------- branches/KDE4/icons/CMakeLists.txt branches/KDE4/src/CMakeLists.txt branches/KDE4/src/abstractclipitem.cpp branches/KDE4/src/abstractclipitem.h branches/KDE4/src/customtrackview.cpp branches/KDE4/src/customtrackview.h branches/KDE4/src/definitions.h branches/KDE4/src/kdenliveui.rc branches/KDE4/src/mainwindow.cpp branches/KDE4/src/mainwindow.h Added Paths: ----------- branches/KDE4/icons/hisc-action-kdenlive-select-tool.svgz branches/KDE4/src/razorclipcommand.cpp branches/KDE4/src/razorclipcommand.h Modified: branches/KDE4/icons/CMakeLists.txt =================================================================== --- branches/KDE4/icons/CMakeLists.txt 2008-04-11 12:39:41 UTC (rev 2161) +++ branches/KDE4/icons/CMakeLists.txt 2008-04-11 12:40:41 UTC (rev 2162) @@ -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 Added: branches/KDE4/icons/hisc-action-kdenlive-select-tool.svgz =================================================================== (Binary files differ) Property changes on: branches/KDE4/icons/hisc-action-kdenlive-select-tool.svgz ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: branches/KDE4/src/CMakeLists.txt =================================================================== --- branches/KDE4/src/CMakeLists.txt 2008-04-11 12:39:41 UTC (rev 2161) +++ branches/KDE4/src/CMakeLists.txt 2008-04-11 12:40:41 UTC (rev 2162) @@ -71,6 +71,7 @@ labelitem.cpp moveclipcommand.cpp resizeclipcommand.cpp + razorclipcommand.cpp addtimelineclipcommand.cpp kthumb.cpp clipmanager.cpp Modified: branches/KDE4/src/abstractclipitem.cpp =================================================================== --- branches/KDE4/src/abstractclipitem.cpp 2008-04-11 12:39:41 UTC (rev 2161) +++ branches/KDE4/src/abstractclipitem.cpp 2008-04-11 12:40:41 UTC (rev 2162) @@ -62,6 +62,10 @@ 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; Modified: branches/KDE4/src/abstractclipitem.h =================================================================== --- branches/KDE4/src/abstractclipitem.h 2008-04-11 12:39:41 UTC (rev 2161) +++ branches/KDE4/src/abstractclipitem.h 2008-04-11 12:40:41 UTC (rev 2162) @@ -25,6 +25,7 @@ virtual int fadeIn() const; virtual int fadeOut() const; virtual GenTime maxDuration() const; + virtual void setCropStart(GenTime pos); protected: int m_track; GenTime m_cropStart; Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2008-04-11 12:39:41 UTC (rev 2161) +++ branches/KDE4/src/customtrackview.cpp 2008-04-11 12:40:41 UTC (rev 2162) @@ -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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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::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 @@ // 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); Modified: branches/KDE4/src/customtrackview.h =================================================================== --- branches/KDE4/src/customtrackview.h 2008-04-11 12:39:41 UTC (rev 2161) +++ branches/KDE4/src/customtrackview.h 2008-04-11 12:40:41 UTC (rev 2162) @@ -65,9 +65,12 @@ 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 @@ 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); Modified: branches/KDE4/src/definitions.h =================================================================== --- branches/KDE4/src/definitions.h 2008-04-11 12:39:41 UTC (rev 2161) +++ branches/KDE4/src/definitions.h 2008-04-11 12:40:41 UTC (rev 2162) @@ -30,6 +30,8 @@ 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, Modified: branches/KDE4/src/kdenliveui.rc =================================================================== --- branches/KDE4/src/kdenliveui.rc 2008-04-11 12:39:41 UTC (rev 2161) +++ branches/KDE4/src/kdenliveui.rc 2008-04-11 12:40:41 UTC (rev 2162) @@ -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" /> @@ -16,7 +16,13 @@ <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> Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-04-11 12:39:41 UTC (rev 2161) +++ branches/KDE4/src/mainwindow.cpp 2008-04-11 12:40:41 UTC (rev 2162) @@ -181,39 +181,6 @@ 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::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 @@ 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 @@ 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 @@ 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 @@ 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 @@ if (currentTab) { currentTab->refresh(); } - timeline_buttons_ui.buttonVideo->setDown(KdenliveSettings::videothumbnails()); + m_buttonVideoThumbs->setChecked(KdenliveSettings::videothumbnails()); } void MainWindow::slotSwitchAudioThumbs() { @@ -853,7 +891,7 @@ 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::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::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::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" Modified: branches/KDE4/src/mainwindow.h =================================================================== --- branches/KDE4/src/mainwindow.h 2008-04-11 12:39:41 UTC (rev 2161) +++ branches/KDE4/src/mainwindow.h 2008-04-11 12:40:41 UTC (rev 2162) @@ -35,9 +35,10 @@ #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 @@ 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 @@ void slotFitZoom(); void slotRemoveTab(); void slotDeleteTimelineClip(); + void slotCutTimelineClip(); void slotAddVideoEffect(QAction *result); void slotAddAudioEffect(QAction *result); void slotAddCustomEffect(QAction *result); @@ -166,6 +176,8 @@ void slotShowClipProperties(DocClipBase *clip); void slotActivateEffectStackView(); void slotActivateTransitionView(); + void slotChangeTool(QAction * action); + void slotSetTool(PROJECTTOOL tool); }; #endif Added: branches/KDE4/src/razorclipcommand.cpp =================================================================== --- branches/KDE4/src/razorclipcommand.cpp (rev 0) +++ branches/KDE4/src/razorclipcommand.cpp 2008-04-11 12:40:41 UTC (rev 2162) @@ -0,0 +1,43 @@ +/*************************************************************************** + * Copyright (C) 2007 by Jean-Baptiste Mardelle (jb...@kd...) * + * * + * 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; +} + Added: branches/KDE4/src/razorclipcommand.h =================================================================== --- branches/KDE4/src/razorclipcommand.h (rev 0) +++ branches/KDE4/src/razorclipcommand.h 2008-04-11 12:40:41 UTC (rev 2162) @@ -0,0 +1,47 @@ +/*************************************************************************** + * Copyright (C) 2007 by Jean-Baptiste Mardelle (jb...@kd...) * + * * + * 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 + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |