if (m_stopmotion) {
delete m_stopmotion;
}
+
+#ifdef USE_JOGSHUTTLE
+ if (m_jogProcess)
+ delete m_jogProcess;
+#endif
+
m_effectStack->slotClipItemSelected(NULL);
m_transitionConfig->slotTransitionItemSelected(NULL, 0, QPoint(), false);
connect(m_projectMonitor->render, SIGNAL(replyGetImage(const QString &, const QString &, int, int)), m_projectList, SLOT(slotReplyGetImage(const QString &, const QString &, int, int)));
connect(m_projectMonitor->render, SIGNAL(replyGetImage(const QString &, const QImage &)), m_projectList, SLOT(slotReplyGetImage(const QString &, const QImage &)));
- kDebug()<<" - - - - - -\n CONNECTED REPLY";
connect(m_projectMonitor->render, SIGNAL(replyGetFileProperties(const QString &, Mlt::Producer*, const stringMap &, const stringMap &, bool)), m_projectList, SLOT(slotReplyGetFileProperties(const QString &, Mlt::Producer*, const stringMap &, const stringMap &, bool)));
connect(m_projectMonitor->render, SIGNAL(removeInvalidClip(const QString &, bool)), m_projectList, SLOT(slotRemoveInvalidClip(const QString &, bool)));
connect(projectAdjust, SIGNAL(triggered(bool)), m_projectList, SLOT(adjustProjectProfileToItem()));
KAction* monitorPlay = new KAction(KIcon("media-playback-start"), i18n("Play"), this);
- KShortcut playShortcut;
- playShortcut.setPrimary(Qt::Key_Space);
- playShortcut.setAlternate(Qt::Key_K);
- monitorPlay->setShortcut(playShortcut);
+ monitorPlay->setShortcut(Qt::Key_Space);
collection.addAction("monitor_play", monitorPlay);
connect(monitorPlay, SIGNAL(triggered(bool)), m_monitorManager, SLOT(slotPlay()));
KAction* monitorPause = new KAction(KIcon("media-playback-stop"), i18n("Pause"), this);
+ monitorPause->setShortcut(Qt::Key_K);
collection.addAction("monitor_pause", monitorPause);
connect(monitorPause, SIGNAL(triggered(bool)), m_monitorManager, SLOT(slotPause()));
KAction* splitAudio = new KAction(KIcon("document-new"), i18n("Split Audio"), this);
collection.addAction("split_audio", splitAudio);
+ // "A+V" as data means this action should only be available for clips with audio AND video
+ splitAudio->setData("A+V");
connect(splitAudio, SIGNAL(triggered(bool)), this, SLOT(slotSplitAudio()));
KAction* setAudioAlignReference = new KAction(i18n("Set Audio Reference"), this);
collection.addAction("set_audio_align_ref", setAudioAlignReference);
+ // "A" as data means this action should only be available for clips with audio
+ setAudioAlignReference->setData("A");
connect(setAudioAlignReference, SIGNAL(triggered()), this, SLOT(slotSetAudioAlignReference()));
KAction* alignAudio = new KAction(i18n("Align Audio to Reference"), this);
collection.addAction("align_audio", alignAudio);
+ // "A" as data means this action should only be available for clips with audio
+ alignAudio->setData("A");
connect(alignAudio, SIGNAL(triggered()), this, SLOT(slotAlignAudio()));
KAction* audioOnly = new KAction(KIcon("document-new"), i18n("Audio Only"), this);
void MainWindow::openLastFile()
{
- KSharedConfigPtr config = KGlobal::config();
- KUrl::List urls = m_fileOpenRecent->urls();
- //WARNING: this is buggy, we get a random url, not the last one. Bug in KRecentFileAction?
- if (urls.isEmpty()) newFile(false);
- else openFile(urls.last());
+ if (m_fileOpenRecent->selectableActionGroup()->actions().isEmpty()) {
+ // No files in history
+ newFile(false);
+ return;
+ }
+ QAction *firstUrlAction = m_fileOpenRecent->selectableActionGroup()->actions().last();
+ if (firstUrlAction) firstUrlAction->trigger();
+ else newFile(false);
}
void MainWindow::openFile(const KUrl &url)
}
m_timelineArea->setTabToolTip(m_timelineArea->currentIndex(), doc->url().path());
trackView->setDuration(trackView->duration());
- trackView->projectView()->initCursorPos(m_projectMonitor->render->seekPosition().frames(doc->fps()));
if (m_timelineArea->count() > 1) m_timelineArea->setTabBarHidden(false);
slotGotProgressInfo(QString(), -1);
connect(trackView->projectView(), SIGNAL(forceClipProcessing(const QString &)), m_projectList, SLOT(slotForceProcessing(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)));
connect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), doc, SLOT(setModified()));
void MainWindow::slotInsertTrack(int ix)
{
- m_projectMonitor->slotActivateMonitor();
+ m_monitorManager->activateMonitor(Kdenlive::projectMonitor);
if (m_activeTimeline) {
if (ix == -1) ix = m_activeTimeline->projectView()->selectedTrack();
m_activeTimeline->projectView()->slotInsertTrack(ix);
void MainWindow::slotDeleteTrack(int ix)
{
- m_projectMonitor->slotActivateMonitor();
+ m_monitorManager->activateMonitor(Kdenlive::projectMonitor);
if (m_activeTimeline) {
if (ix == -1) ix = m_activeTimeline->projectView()->selectedTrack();
m_activeTimeline->projectView()->slotDeleteTrack(ix);
void MainWindow::slotConfigTrack(int ix)
{
- m_projectMonitor->slotActivateMonitor();
+ m_monitorManager->activateMonitor(Kdenlive::projectMonitor);
if (m_activeTimeline)
m_activeTimeline->projectView()->slotConfigTracks(ix);
if (m_activeDocument)
void MainWindow::slotSelectTrack()
{
- m_projectMonitor->slotActivateMonitor();
+ m_monitorManager->activateMonitor(Kdenlive::projectMonitor);
if (m_activeTimeline) {
m_activeTimeline->projectView()->slotSelectClipsInTrack();
}
void MainWindow::slotSelectAllTracks()
{
- m_projectMonitor->slotActivateMonitor();
+ m_monitorManager->activateMonitor(Kdenlive::projectMonitor);
if (m_activeTimeline)
m_activeTimeline->projectView()->slotSelectAllClips();
}
// any type of clip but a title
ClipProperties *dia = new ClipProperties(clip, m_activeDocument->timecode(), m_activeDocument->fps(), this);
- if (clip->clipType() == AV || clip->clipType() == VIDEO || clip->clipType() == PLAYLIST) {
+ if (clip->clipType() == AV || clip->clipType() == VIDEO || clip->clipType() == PLAYLIST || clip->clipType() == SLIDESHOW) {
// request clip thumbnails
m_activeDocument->clipManager()->requestThumbs(QString('?' + clip->getId()), QList<int>() << clip->getClipThumbFrame());
connect(m_activeDocument->clipManager(), SIGNAL(gotClipPropertyThumbnail(const QString&,QImage)), dia, SLOT(slotGotThumbnail(const QString&,QImage)));
Mlt::Profile profile;
Mlt::Filter *filter = Mlt::Factory::filter(profile,(char*)"videostab");
if (filter) {
- delete filter;
- QAction *action=actionMenu->addAction(i18n("Stabilize (vstab)"));
- action->setData("videostab");
- connect(action,SIGNAL(triggered()), this, SLOT(slotStartClipAction()));
+ if (!filter->is_valid()) {
+ delete filter;
+ }
+ else {
+ delete filter;
+ QAction *action=actionMenu->addAction(i18n("Stabilize (vstab)"));
+ action->setData("videostab");
+ connect(action,SIGNAL(triggered()), this, SLOT(slotStartClipAction()));
+ }
}
filter = Mlt::Factory::filter(profile,(char*)"videostab2");
if (filter) {
- delete filter;
- QAction *action=actionMenu->addAction(i18n("Stabilize (transcode)"));
- action->setData("videostab2");
- connect(action,SIGNAL(triggered()), this, SLOT(slotStartClipAction()));
+ if (!filter->is_valid()) {
+ delete filter;
+ }
+ else {
+ delete filter;
+ QAction *action=actionMenu->addAction(i18n("Stabilize (transcode)"));
+ action->setData("videostab2");
+ connect(action,SIGNAL(triggered()), this, SLOT(slotStartClipAction()));
+ }
}
filter = Mlt::Factory::filter(profile,(char*)"motion_est");
if (filter) {
- delete filter;
- QAction *action=actionMenu->addAction(i18n("Automatic scene split"));
- action->setData("motion_est");
- connect(action,SIGNAL(triggered()), this, SLOT(slotStartClipAction()));
+ if (!filter->is_valid()) {
+ delete filter;
+ }
+ else {
+ delete filter;
+ QAction *action=actionMenu->addAction(i18n("Automatic scene split"));
+ action->setData("motion_est");
+ connect(action,SIGNAL(triggered()), this, SLOT(slotStartClipAction()));
+ }
}
}
{
if (type == AVWIDGET) {
// This data should be sent to the effect stack
+ m_effectStack->setKeyframes(data, maximum);
}
else if (type == TRANSITIONWIDGET) {
// This data should be sent to the transition stack
void MainWindow::slotAlignPlayheadToMousePos()
{
- m_activeTimeline->projectView()->slotAlignPlayheadToMousePos();
+ m_monitorManager->activateMonitor(Kdenlive::projectMonitor);
+ m_activeTimeline->projectView()->slotAlignPlayheadToMousePos();
}
#include "mainwindow.moc"