X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmainwindow.cpp;h=314c86f45598b0036fd0f4db74e2de4fcb37a5b2;hb=fe9316d603bb2da1f779493975ac12051f7e04b9;hp=594e1b09ae86dc6f8805026afa1b3ad9496e01d6;hpb=e71a0b9a36b5c5f1b27674b335a1316a3985e084;p=kdenlive diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 594e1b09..314c86f4 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -40,30 +40,31 @@ #include "renderwidget.h" #include "renderer.h" #include "audiosignal.h" -#ifndef NO_JOGSHUTTLE +#ifdef USE_JOGSHUTTLE #include "jogshuttle.h" #include "jogaction.h" #include "jogshuttleconfig.h" -#endif /* NO_JOGSHUTTLE */ +#endif #include "clipproperties.h" #include "wizard.h" -#include "editclipcommand.h" +#include "commands/editclipcommand.h" #include "titlewidget.h" #include "markerdialog.h" #include "clipitem.h" #include "interfaces.h" -#include "kdenlive-config.h" +#include "config-kdenlive.h" #include "cliptranscode.h" #include "ui_templateclip_ui.h" #include "colorscopes/vectorscope.h" #include "colorscopes/waveform.h" #include "colorscopes/rgbparade.h" #include "colorscopes/histogram.h" -#include "audiospectrum.h" -#include "spectrogram.h" +#include "audioscopes/audiospectrum.h" +#include "audioscopes/spectrogram.h" #include "archivewidget.h" #include "databackup/backupwidget.h" + #include #include #include @@ -98,7 +99,7 @@ #include #include #define KNS3 KNS -#endif /* KDE_IS_VERSION(4,3,80) */ +#endif #include #include #include @@ -112,6 +113,7 @@ #include #include +#include // Uncomment for deeper debugging //#define DEBUG_MAINW @@ -130,6 +132,7 @@ class Producer; Q_DECLARE_METATYPE(QVector) + EffectsList MainWindow::videoEffects; EffectsList MainWindow::audioEffects; EffectsList MainWindow::customEffects; @@ -141,17 +144,28 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & m_activeTimeline(NULL), m_recMonitor(NULL), m_renderWidget(NULL), -#ifndef NO_JOGSHUTTLE +#ifdef USE_JOGSHUTTLE m_jogProcess(NULL), m_jogShuttle(NULL), -#endif /* NO_JOGSHUTTLE */ +#endif m_findActivated(false), m_stopmotion(NULL) { qRegisterMetaType > (); + qRegisterMetaType ("stringMap"); + qRegisterMetaType ("audioByteArray"); // Init locale QLocale systemLocale = QLocale(); + setlocale(LC_NUMERIC, NULL); + char *separator = localeconv()->decimal_point; + if (separator != systemLocale.decimalPoint()) { + kDebug()<<"------\n!!! system locale is not similar to Qt's locale... be prepared for bugs!!!\n------"; + // HACK: There is a locale conflict, so set locale to at least have correct decimal point + if (strncmp(separator, ".", 1) == 0) systemLocale = QLocale::c(); + else if (strncmp(separator, ",", 1) == 0) systemLocale = QLocale("fr_FR.UTF-8"); + } + systemLocale.setNumberOptions(QLocale::OmitGroupSeparator); QLocale::setDefault(systemLocale); @@ -178,7 +192,7 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & closeTabButton->adjustSize(); closeTabButton->setToolTip(i18n("Close the current tab")); m_timelineArea->setCornerWidget(closeTabButton); - connect(m_timelineArea, SIGNAL(currentChanged(int)), this, SLOT(activateDocument())); + //connect(m_timelineArea, SIGNAL(currentChanged(int)), this, SLOT(activateDocument())); connect(&m_findTimer, SIGNAL(timeout()), this, SLOT(findTimeout())); m_findTimer.setSingleShot(true); @@ -205,8 +219,19 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & m_clipMonitorDock->setObjectName("clip_monitor"); m_clipMonitor = new Monitor("clip", m_monitorManager, QString(), m_timelineArea); m_clipMonitorDock->setWidget(m_clipMonitor); - connect(m_projectList, SIGNAL(clipSelected(DocClipBase *, QPoint)), m_clipMonitor, SLOT(slotSetXml(DocClipBase *, QPoint))); + // Connect the project list + connect(m_projectList, SIGNAL(clipSelected(DocClipBase *, QPoint, bool)), m_clipMonitor, SLOT(slotSetClipProducer(DocClipBase *, QPoint, bool))); + connect(m_projectList, SIGNAL(raiseClipMonitor()), m_clipMonitor, SLOT(activateMonitor())); + connect(m_projectList, SIGNAL(loadingIsOver()), this, SLOT(slotElapsedTime())); + connect(m_projectList, SIGNAL(displayMessage(const QString&, int)), this, SLOT(slotGotProgressInfo(const QString&, int))); + connect(m_projectList, SIGNAL(updateRenderStatus()), this, SLOT(slotCheckRenderStatus())); + connect(m_projectList, SIGNAL(clipNeedsReload(const QString&)),this, SLOT(slotUpdateClip(const QString &))); + connect(m_projectList, SIGNAL(updateProfile(const QString &)), this, SLOT(slotUpdateProjectProfile(const QString &))); + connect(m_projectList, SIGNAL(refreshClip(const QString &, bool)), m_monitorManager, SLOT(slotRefreshCurrentMonitor(const QString &))); + connect(m_projectList, SIGNAL(findInTimeline(const QString&)), this, SLOT(slotClipInTimeline(const QString&))); + connect(m_clipMonitor, SIGNAL(zoneUpdated(QPoint)), m_projectList, SLOT(slotUpdateClipCut(QPoint))); + m_projectMonitorDock = new QDockWidget(i18n("Project Monitor"), this); m_projectMonitorDock->setObjectName("project_monitor"); m_projectMonitor = new Monitor("project", m_monitorManager, QString()); @@ -218,8 +243,9 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & m_recMonitor = new RecMonitor("record", m_monitorManager); m_recMonitorDock->setWidget(m_recMonitor); connect(m_recMonitor, SIGNAL(addProjectClip(KUrl)), this, SLOT(slotAddProjectClip(KUrl))); + connect(m_recMonitor, SIGNAL(addProjectClipList(KUrl::List)), this, SLOT(slotAddProjectClipList(KUrl::List))); connect(m_recMonitor, SIGNAL(showConfigDialog(int, int)), this, SLOT(slotPreferences(int, int))); -#endif +#endif /* ! Q_WS_MAC */ m_monitorManager->initMonitors(m_clipMonitor, m_projectMonitor, m_recMonitor); m_notesDock = new QDockWidget(i18n("Project Notes"), this); @@ -459,15 +485,19 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & loadPlugins(); loadTranscoders(); + loadStabilize(); m_projectMonitor->setupMenu(static_cast(factory()->container("monitor_go", this)), m_playZone, m_loopZone, NULL, m_loopClip); m_clipMonitor->setupMenu(static_cast(factory()->container("monitor_go", this)), m_playZone, m_loopZone, static_cast(factory()->container("marker_menu", this))); QMenu *clipInTimeline = static_cast(factory()->container("clip_in_timeline", this)); clipInTimeline->setIcon(KIcon("go-jump")); - m_projectList->setupGeneratorMenu(static_cast(factory()->container("generators", this)), - static_cast(factory()->container("transcoders", this)), - clipInTimeline); + QHash menus; + menus.insert("addMenu",static_cast(factory()->container("generators", this))); + menus.insert("transcodeMenu",static_cast(factory()->container("transcoders", this))); + menus.insert("stabilizeMenu",static_cast(factory()->container("stabilize", this))); + menus.insert("inTimelineMenu",clipInTimeline); + m_projectList->setupGeneratorMenu(menus); // build themes menus QMenu *themesMenu = static_cast(factory()->container("themes_menu", this)); @@ -569,7 +599,6 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & connect(m_projectMonitorDock, SIGNAL(visibilityChanged(bool)), m_projectMonitor, SLOT(refreshMonitor(bool))); connect(m_clipMonitorDock, SIGNAL(visibilityChanged(bool)), m_clipMonitor, SLOT(refreshMonitor(bool))); - //connect(m_monitorManager, SIGNAL(connectMonitors()), this, SLOT(slotConnectMonitors())); connect(m_monitorManager, SIGNAL(checkColorScopes()), this, SLOT(slotUpdateColorScopes())); connect(m_monitorManager, SIGNAL(clearScopes()), this, SLOT(slotClearColorScopes())); connect(m_effectList, SIGNAL(addEffect(const QDomElement)), this, SLOT(slotAddEffect(const QDomElement))); @@ -600,13 +629,49 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & m_projectList->slotAddClip(urls); } -#ifndef NO_JOGSHUTTLE +#ifdef USE_JOGSHUTTLE activateShuttleDevice(); -#endif /* NO_JOGSHUTTLE */ +#endif m_projectListDock->raise(); actionCollection()->addAssociatedWidget(m_clipMonitor->container()); actionCollection()->addAssociatedWidget(m_projectMonitor->container()); + + // Populate encoding profiles + KConfig conf("encodingprofiles.rc", KConfig::FullConfig, "appdata"); + if (KdenliveSettings::proxyparams().isEmpty() || KdenliveSettings::proxyextension().isEmpty()) { + KConfigGroup group(&conf, "proxy"); + QMap< QString, QString > values = group.entryMap(); + QMapIterator i(values); + if (i.hasNext()) { + i.next(); + QString data = i.value(); + KdenliveSettings::setProxyparams(data.section(';', 0, 0)); + KdenliveSettings::setProxyextension(data.section(';', 1, 1)); + } + } + if (KdenliveSettings::v4l_parameters().isEmpty() || KdenliveSettings::v4l_extension().isEmpty()) { + KConfigGroup group(&conf, "video4linux"); + QMap< QString, QString > values = group.entryMap(); + QMapIterator i(values); + if (i.hasNext()) { + i.next(); + QString data = i.value(); + KdenliveSettings::setV4l_parameters(data.section(';', 0, 0)); + KdenliveSettings::setV4l_extension(data.section(';', 1, 1)); + } + } + if (KdenliveSettings::decklink_parameters().isEmpty() || KdenliveSettings::decklink_extension().isEmpty()) { + KConfigGroup group(&conf, "decklink"); + QMap< QString, QString > values = group.entryMap(); + QMapIterator i(values); + if (i.hasNext()) { + i.next(); + QString data = i.value(); + KdenliveSettings::setDecklink_parameters(data.section(';', 0, 0)); + KdenliveSettings::setDecklink_extension(data.section(';', 1, 1)); + } + } } MainWindow::~MainWindow() @@ -778,7 +843,7 @@ void MainWindow::slotReloadEffects() m_effectList->reloadEffectList(m_effectsMenu, m_effectActions); } -#ifndef NO_JOGSHUTTLE +#ifdef USE_JOGSHUTTLE void MainWindow::activateShuttleDevice() { delete m_jogShuttle; @@ -796,7 +861,7 @@ void MainWindow::activateShuttleDevice() connect(m_jogShuttle, SIGNAL(forward(double)), m_monitorManager, SLOT(slotForward(double))); connect(m_jogShuttle, SIGNAL(action(const QString&)), this, SLOT(slotDoAction(const QString&))); } -#endif /* NO_JOGSHUTTLE */ +#endif /* USE_JOGSHUTTLE */ void MainWindow::slotDoAction(const QString& action_name) { @@ -835,23 +900,28 @@ void MainWindow::slotAddEffect(const QDomElement effect) void MainWindow::slotUpdateClip(const QString &id) { if (!m_activeDocument) return; - m_activeTimeline->projectView()->slotUpdateClip(id); + DocClipBase *clip = m_activeDocument->clipManager()->getClipById(id); + if (!clip) return; + if (clip->numReferences() > 0) m_activeTimeline->projectView()->slotUpdateClip(id); + if (m_clipMonitor->activeClip() && m_clipMonitor->activeClip()->getId() == id) { + Mlt::Producer *monitorProducer = clip->getCloneProducer(); + m_clipMonitor->updateClipProducer(monitorProducer); + } + clip->cleanupProducers(); } void MainWindow::slotConnectMonitors() { m_projectList->setRenderer(m_projectMonitor->render); - //connect(m_projectList, SIGNAL(receivedClipDuration(const QString &)), this, SLOT(slotUpdateClip(const QString &))); connect(m_projectList, SIGNAL(deleteProjectClips(QStringList, QMap)), this, SLOT(slotDeleteProjectClips(QStringList, QMap))); connect(m_projectList, SIGNAL(showClipProperties(DocClipBase *)), this, SLOT(slotShowClipProperties(DocClipBase *))); connect(m_projectList, SIGNAL(showClipProperties(QList , QMap)), this, SLOT(slotShowClipProperties(QList , QMap))); - connect(m_projectList, SIGNAL(getFileProperties(const QDomElement, const QString &, int, bool, bool)), m_projectMonitor->render, SLOT(getFileProperties(const QDomElement, const QString &, int, bool, bool))); - connect(m_projectMonitor->render, SIGNAL(replyGetImage(const QString &, const QPixmap &)), m_projectList, SLOT(slotReplyGetImage(const QString &, const QPixmap &))); - connect(m_projectMonitor->render, SIGNAL(replyGetFileProperties(const QString &, Mlt::Producer*, const QMap < QString, QString > &, const QMap < QString, QString > &, bool, bool)), m_projectList, SLOT(slotReplyGetFileProperties(const QString &, Mlt::Producer*, const QMap < QString, QString > &, const QMap < QString, QString > &, bool, bool))); + 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 &))); + 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(m_projectMonitor->render, SIGNAL(blockClipMonitor(const QString)), this, SLOT(slotBlockClipMonitor(const QString))); connect(m_projectMonitor->render, SIGNAL(removeInvalidProxy(const QString &, bool)), m_projectList, SLOT(slotRemoveInvalidProxy(const QString &, bool))); connect(m_clipMonitor, SIGNAL(refreshClipThumbnail(const QString &, bool)), m_projectList, SLOT(slotRefreshClipThumbnail(const QString &, bool))); @@ -1768,14 +1838,6 @@ void MainWindow::newFile(bool showProjectSettings, bool force) QMap documentProperties; QPoint projectTracks(KdenliveSettings::videotracks(), KdenliveSettings::audiotracks()); if (!showProjectSettings) { - // set up default properties - documentProperties.insert("enableproxy", QString::number((int) KdenliveSettings::enableproxy())); - documentProperties.insert("generateproxy", QString::number((int) KdenliveSettings::generateproxy())); - documentProperties.insert("proxyminsize", QString::number(KdenliveSettings::proxyminsize())); - documentProperties.insert("proxyparams", KdenliveSettings::proxyparams()); - documentProperties.insert("proxyextension", KdenliveSettings::proxyextension()); - documentProperties.insert("generateimageproxy", QString::number((int) KdenliveSettings::generateimageproxy())); - documentProperties.insert("proxyimageminsize", QString::number(KdenliveSettings::proxyimageminsize())); if (!KdenliveSettings::activatetabs()) if (!closeCurrentDocument()) return; @@ -1863,7 +1925,8 @@ bool MainWindow::closeCurrentDocument(bool saveChanges) break; } } - m_clipMonitor->slotSetXml(NULL); + m_clipMonitor->slotSetClipProducer(NULL); + m_projectList->slotResetProjectList(); m_timelineArea->removeTab(m_timelineArea->indexOf(w)); if (m_timelineArea->count() == 1) { m_timelineArea->setTabBarHidden(true); @@ -2060,7 +2123,7 @@ void MainWindow::doOpenFile(const KUrl &url, KAutoSaveFile *stale) bool ok; TrackView *trackView = new TrackView(doc, &ok, this); - + connectDocument(trackView, doc); progressDialog.progressBar()->setValue(3); qApp->processEvents(); @@ -2081,8 +2144,6 @@ void MainWindow::doOpenFile(const KUrl &url, KAutoSaveFile *stale) slotGotProgressInfo(QString(), -1); m_projectMonitor->adjustRulerSize(trackView->duration()); m_projectMonitor->slotZoneMoved(trackView->inPoint(), trackView->outPoint()); - m_clipMonitor->refreshMonitor(true); - progressDialog.progressBar()->setValue(4); if (openBackup) slotOpenBackupDialog(url); } @@ -2213,7 +2274,7 @@ void MainWindow::slotEditProjectSettings() if (w->exec() == QDialog::Accepted) { QString profile = w->selectedProfile(); m_activeDocument->setProjectFolder(w->selectedFolder()); -#ifndef Q_WS_MAC +#ifndef Q_WS_MAC m_recMonitor->slotUpdateCaptureFolder(m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash)); #endif if (m_renderWidget) m_renderWidget->setDocumentPath(m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash)); @@ -2275,7 +2336,7 @@ void MainWindow::slotUpdateProjectProfile(const QString &profile) // Deselect current effect / transition m_effectStack->slotClipItemSelected(NULL, 0); m_transitionConfig->slotTransitionItemSelected(NULL, 0, QPoint(), false); - m_clipMonitor->slotSetXml(NULL); + m_clipMonitor->slotSetClipProducer(NULL); bool updateFps = m_activeDocument->setProfilePath(profile); KdenliveSettings::setCurrent_profile(profile); KdenliveSettings::setProject_fps(m_activeDocument->fps()); @@ -2304,7 +2365,9 @@ void MainWindow::slotRenderProject() { if (!m_renderWidget) { QString projectfolder = m_activeDocument ? m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash) : KdenliveSettings::defaultprojectfolder(); - m_renderWidget = new RenderWidget(projectfolder, m_projectList->useProxy(), this); + MltVideoProfile profile; + if (m_activeDocument) profile = m_activeDocument->mltProfile(); + m_renderWidget = new RenderWidget(projectfolder, m_projectList->useProxy(), profile, this); connect(m_renderWidget, SIGNAL(shutdown()), this, SLOT(slotShutdown())); connect(m_renderWidget, SIGNAL(selectedRenderProfile(QMap )), this, SLOT(slotSetDocumentRenderProfile(QMap ))); connect(m_renderWidget, SIGNAL(prepareRenderingData(bool, bool, const QString&)), this, SLOT(slotPrepareRendering(bool, bool, const QString&))); @@ -2402,7 +2465,6 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha disconnect(m_notesWidget, SIGNAL(textChanged()), m_activeDocument, SLOT(setModified())); disconnect(m_clipMonitor, SIGNAL(zoneUpdated(QPoint)), m_activeDocument, SLOT(setModified())); disconnect(m_projectList, SIGNAL(projectModified()), m_activeDocument, SLOT(setModified())); - disconnect(m_projectList, SIGNAL(updateProfile(const QString &)), this, SLOT(slotUpdateProjectProfile(const QString &))); disconnect(m_projectMonitor->render, SIGNAL(refreshDocumentProducers(bool, bool)), m_activeDocument, SLOT(checkProjectClips(bool, bool))); @@ -2420,7 +2482,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha disconnect(m_activeTimeline->projectView(), SIGNAL(transitionItemSelected(Transition*, int, QPoint, bool)), m_projectMonitor, SLOT(slotSetSelectedClip(Transition*))); disconnect(m_activeTimeline->projectView(), SIGNAL(playMonitor()), m_projectMonitor, SLOT(slotPlay())); disconnect(m_activeTimeline->projectView(), SIGNAL(displayMessage(const QString&, MessageType)), m_messageLabel, SLOT(setMessage(const QString&, MessageType))); - disconnect(m_activeTimeline->projectView(), SIGNAL(showClipFrame(DocClipBase *, QPoint, const int)), m_clipMonitor, SLOT(slotSetXml(DocClipBase *, QPoint, const int))); + disconnect(m_activeTimeline->projectView(), SIGNAL(showClipFrame(DocClipBase *, QPoint, bool, const int)), m_clipMonitor, SLOT(slotSetClipProducer(DocClipBase *, QPoint, bool, const int))); disconnect(m_activeTimeline, SIGNAL(cursorMoved()), m_projectMonitor, SLOT(activateMonitor())); disconnect(m_activeTimeline, SIGNAL(insertTrack(int)), this, SLOT(slotInsertTrack(int))); disconnect(m_activeTimeline, SIGNAL(deleteTrack(int)), this, SLOT(slotDeleteTrack(int))); @@ -2438,33 +2500,24 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha disconnect(m_activeTimeline->projectView(), SIGNAL(activateDocumentMonitor()), m_projectMonitor, SLOT(activateMonitor())); disconnect(m_activeTimeline, SIGNAL(zoneMoved(int, int)), this, SLOT(slotZoneMoved(int, int))); disconnect(m_projectList, SIGNAL(loadingIsOver()), m_activeTimeline->projectView(), SLOT(slotUpdateAllThumbs())); - disconnect(m_projectList, SIGNAL(displayMessage(const QString&, int)), this, SLOT(slotGotProgressInfo(const QString&, int))); - disconnect(m_projectList, SIGNAL(updateRenderStatus()), this, SLOT(slotCheckRenderStatus())); - disconnect(m_projectList, SIGNAL(clipNeedsReload(const QString&, bool)), m_activeTimeline->projectView(), SLOT(slotUpdateClip(const QString &, bool))); disconnect(m_projectList, SIGNAL(refreshClip(const QString &)), m_activeTimeline->projectView(), SLOT(slotRefreshThumbs(const QString &))); m_effectStack->clear(); } //m_activeDocument->setRenderer(NULL); - disconnect(m_projectList, SIGNAL(refreshClip(const QString &, bool)), m_monitorManager, SLOT(slotRefreshCurrentMonitor())); m_clipMonitor->stop(); } KdenliveSettings::setCurrent_profile(doc->profilePath()); KdenliveSettings::setProject_fps(doc->fps()); m_monitorManager->resetProfiles(doc->timecode()); + m_clipMonitorDock->raise(); m_projectList->setDocument(doc); m_transitionConfig->updateProjectFormat(doc->mltProfile(), doc->timecode(), doc->tracksList()); m_effectStack->updateProjectFormat(doc->mltProfile(), doc->timecode()); - connect(m_projectList, SIGNAL(refreshClip(const QString &, bool)), m_monitorManager, SLOT(slotRefreshCurrentMonitor())); connect(m_projectList, SIGNAL(refreshClip(const QString &, bool)), trackView->projectView(), SLOT(slotRefreshThumbs(const QString &, bool))); - connect(m_projectList, SIGNAL(clipNeedsReload(const QString&, bool)), trackView->projectView(), SLOT(slotUpdateClip(const QString &, bool))); connect(m_projectList, SIGNAL(projectModified()), doc, SLOT(setModified())); - connect(m_projectList, SIGNAL(updateProfile(const QString &)), this, SLOT(slotUpdateProjectProfile(const QString &))); connect(m_projectList, SIGNAL(clipNameChanged(const QString, const QString)), trackView->projectView(), SLOT(clipNameChanged(const QString, const QString))); - connect(m_projectList, SIGNAL(findInTimeline(const QString&)), this, SLOT(slotClipInTimeline(const QString&))); - - //connect(trackView, SIGNAL(cursorMoved()), m_projectMonitor, SLOT(activateMonitor())); connect(trackView, SIGNAL(insertTrack(int)), this, SLOT(slotInsertTrack(int))); connect(trackView, SIGNAL(deleteTrack(int)), this, SLOT(slotDeleteTrack(int))); @@ -2474,7 +2527,6 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha connect(trackView->projectView(), SIGNAL(forceClipProcessing(const QString &)), m_projectList, SLOT(slotForceProcessing(const QString &))); connect(m_projectMonitor, SIGNAL(renderPosition(int)), trackView, SLOT(moveCursorPos(int))); connect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), trackView, SLOT(slotSetZone(QPoint))); - connect(m_clipMonitor, SIGNAL(zoneUpdated(QPoint)), m_projectList, SLOT(slotUpdateClipCut(QPoint))); connect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), doc, SLOT(setModified())); connect(m_clipMonitor, SIGNAL(zoneUpdated(QPoint)), doc, SLOT(setModified())); connect(m_projectMonitor, SIGNAL(durationChanged(int)), trackView, SLOT(setDuration(int))); @@ -2506,7 +2558,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha connect(trackView, SIGNAL(setZoom(int)), this, SLOT(slotSetZoom(int))); connect(trackView->projectView(), SIGNAL(displayMessage(const QString&, MessageType)), m_messageLabel, SLOT(setMessage(const QString&, MessageType))); - connect(trackView->projectView(), SIGNAL(showClipFrame(DocClipBase *, QPoint, const int)), m_clipMonitor, SLOT(slotSetXml(DocClipBase *, QPoint, const int))); + connect(trackView->projectView(), SIGNAL(showClipFrame(DocClipBase *, QPoint, bool, const int)), m_clipMonitor, SLOT(slotSetClipProducer(DocClipBase *, QPoint, bool, const int))); connect(trackView->projectView(), SIGNAL(playMonitor()), m_projectMonitor, SLOT(slotPlay())); connect(trackView->projectView(), SIGNAL(clipItemSelected(ClipItem*, int, bool)), m_projectMonitor, SLOT(slotSetSelectedClip(ClipItem*))); @@ -2527,9 +2579,6 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha connect(trackView->projectView(), SIGNAL(activateDocumentMonitor()), m_projectMonitor, SLOT(activateMonitor())); connect(trackView, SIGNAL(zoneMoved(int, int)), this, SLOT(slotZoneMoved(int, int))); connect(m_projectList, SIGNAL(loadingIsOver()), trackView->projectView(), SLOT(slotUpdateAllThumbs())); - connect(m_projectList, SIGNAL(loadingIsOver()), this, SLOT(slotElapsedTime())); - connect(m_projectList, SIGNAL(displayMessage(const QString&, int)), this, SLOT(slotGotProgressInfo(const QString&, int))); - connect(m_projectList, SIGNAL(updateRenderStatus()), this, SLOT(slotCheckRenderStatus())); trackView->projectView()->setContextMenu(m_timelineContextMenu, m_timelineContextClipMenu, m_timelineContextTransitionMenu, m_clipTypeGroup, (QMenu*)(factory()->container("marker_menu", this))); @@ -2556,11 +2605,12 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha m_activeDocument = doc; m_activeTimeline->updateProjectFps(); m_activeDocument->checkProjectClips(); -#ifndef Q_WS_MAC +#ifndef Q_WS_MAC m_recMonitor->slotUpdateCaptureFolder(m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash)); #endif //Update the mouse position display so it will display in DF/NDF format by default based on the project setting. slotUpdateMousePosition(0); + m_monitorManager->activateMonitor("clip"); // set tool to select tool m_buttonSelectTool->setChecked(true); } @@ -2622,7 +2672,7 @@ void MainWindow::slotPreferences(int page, int option) void MainWindow::slotUpdateCaptureFolder() { -#ifndef Q_WS_MAC +#ifndef Q_WS_MAC if (m_activeDocument) m_recMonitor->slotUpdateCaptureFolder(m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash)); else m_recMonitor->slotUpdateCaptureFolder(KdenliveSettings::defaultprojectfolder()); #endif @@ -2645,9 +2695,10 @@ void MainWindow::updateConfiguration() // Update list of transcoding profiles loadTranscoders(); -#ifndef NO_JOGSHUTTLE + loadStabilize(); +#ifdef USE_JOGSHUTTLE activateShuttleDevice(); -#endif /* NO_JOGSHUTTLE */ +#endif } @@ -2996,6 +3047,12 @@ void MainWindow::slotAddProjectClip(KUrl url) m_activeDocument->slotAddClipFile(url, QString()); } +void MainWindow::slotAddProjectClipList(KUrl::List urls) +{ + if (m_activeDocument) + m_activeDocument->slotAddClipList(urls, QString()); +} + void MainWindow::slotAddTransition(QAction *result) { if (!result) return; @@ -3147,7 +3204,7 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip) else newprops.insert("templatetext", description); //newprops.insert("xmldata", m_projectList->generateTemplateXml(newtemplate, description).toString()); if (!newprops.isEmpty()) { - EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->properties(), newprops, true); + EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->currentProperties(newprops), newprops, true); m_activeDocument->commandStack()->push(command); } } @@ -3177,7 +3234,7 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip) dia_ui->saveTitle(path); } else newprops.insert("resource", QString()); } - EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->properties(), newprops, true); + EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->currentProperties(newprops), newprops, true); m_activeDocument->commandStack()->push(command); //m_activeTimeline->projectView()->slotUpdateClip(clip->getId()); m_activeDocument->setModified(true); @@ -3225,9 +3282,9 @@ void MainWindow::slotShowClipProperties(QList cliplist, QMapclipType() == IMAGE) - new EditClipCommand(m_projectList, clip->getId(), clip->properties(), newImageProps, true, command); + new EditClipCommand(m_projectList, clip->getId(), clip->currentProperties(newImageProps), newImageProps, true, command); else - new EditClipCommand(m_projectList, clip->getId(), clip->properties(), newProps, true, command); + new EditClipCommand(m_projectList, clip->getId(), clip->currentProperties(newProps), newProps, true, command); } m_activeDocument->commandStack()->push(command); for (int i = 0; i < cliplist.count(); i++) @@ -3645,7 +3702,7 @@ int MainWindow::getNewStuff(const QString &configFile) if (entry->status() == KNS::Entry::Installed) kDebug() << "// Installed files: " << entry->installedFiles(); } -#endif /* KDE_IS_VERSION(4,3,80) */ +#endif return entries.size(); } @@ -3733,6 +3790,25 @@ void MainWindow::slotMaximizeCurrent(bool) kDebug() << "CURRENT WIDGET: " << par->objectName(); } +void MainWindow::loadStabilize() +{ + QMenu* stabMenu= static_cast(factory()->container("stabilize", this)); + stabMenu->clear(); + Mlt::Profile profile; + if (Mlt::Factory::filter(profile,(char*)"videostab")){ + QAction *action=stabMenu->addAction("Videostab (vstab)"); + action->setData("videostab"); + connect(action,SIGNAL(triggered()), this, SLOT(slotStabilize())); + } + if (Mlt::Factory::filter(profile,(char*)"videostab2")){ + QAction *action=stabMenu->addAction("Videostab (transcode)"); + action->setData("videostab2"); + connect(action,SIGNAL(triggered()), this, SLOT(slotStabilize())); + } + + +} + void MainWindow::loadTranscoders() { QMenu *transMenu = static_cast(factory()->container("transcoders", this)); @@ -3754,6 +3830,18 @@ void MainWindow::loadTranscoders() } } +void MainWindow::slotStabilize(KUrl::List urls) +{ + QString condition; + if (urls.isEmpty()) { + QAction *action = qobject_cast(sender()); + if (action){ + QString filtername=action->data().toString(); + urls = m_projectList->getConditionalUrls(condition); + } + } +} + void MainWindow::slotTranscode(KUrl::List urls) { QString params; @@ -3921,6 +4009,7 @@ void MainWindow::slotPrepareRendering(bool scriptExport, bool zoneOnly, const QS // We need to delete the "aspect_ratio" property because proxy clips // sometimes have different ratio than original clips EffectsList::removeProperty(e, "aspect_ratio"); + EffectsList::removeMetaProperties(e); } } } @@ -4369,12 +4458,6 @@ void MainWindow::slotOpenBackupDialog(const KUrl url) delete dia; } -void MainWindow::slotBlockClipMonitor(const QString id) -{ - if (m_clipMonitor->activeClip() && m_clipMonitor->activeClip()->getId() == id) m_clipMonitor->slotSetXml(NULL); -} - - void MainWindow::slotElapsedTime() { kDebug()<<"-----------------------------------------\n"<<"Time elapsed: "<