X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmainwindow.cpp;h=5a76ffb38f6137b627d8aa703e9850fef055b48e;hb=e0a70e0428309070f6ed2716beaeaaba05edd3b5;hp=69b88a599cb08ab680f01a3a813e9d608b6eff3f;hpb=efb2133c58a7d4b2f53ca31b362c591a93c59290;p=kdenlive diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 69b88a59..5a76ffb3 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -47,7 +47,7 @@ #endif /* NO_JOGSHUTTLE */ #include "clipproperties.h" #include "wizard.h" -#include "editclipcommand.h" +#include "commands/editclipcommand.h" #include "titlewidget.h" #include "markerdialog.h" #include "clipitem.h" @@ -64,6 +64,7 @@ #include "archivewidget.h" #include "databackup/backupwidget.h" + #include #include #include @@ -91,14 +92,8 @@ #include #include #include -#if KDE_IS_VERSION(4,3,80) #include #include -#else -#include -#include -#define KNS3 KNS -#endif /* KDE_IS_VERSION(4,3,80) */ #include #include #include @@ -130,6 +125,7 @@ class Producer; Q_DECLARE_METATYPE(QVector) + EffectsList MainWindow::videoEffects; EffectsList MainWindow::audioEffects; EffectsList MainWindow::customEffects; @@ -150,6 +146,8 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & { qRegisterMetaType > (); qRegisterMetaType ("stringMap"); + qRegisterMetaType ("audioByteArray"); + // Init locale QLocale systemLocale = QLocale(); systemLocale.setNumberOptions(QLocale::OmitGroupSeparator); @@ -178,7 +176,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,7 +203,8 @@ 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(m_projectList, SIGNAL(clipSelected(DocClipBase *, QPoint)), m_clipMonitor, SLOT(slotSetClipProducer(DocClipBase *, QPoint))); + connect(m_projectList, SIGNAL(raiseClipMonitor()), m_clipMonitor, SLOT(activateMonitor())); m_projectMonitorDock = new QDockWidget(i18n("Project Monitor"), this); m_projectMonitorDock->setObjectName("project_monitor"); @@ -230,9 +229,7 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & connect(m_notesWidget, SIGNAL(seekProject(int)), m_projectMonitor->render, SLOT(seekToFrame(int))); m_notesWidget->setTabChangesFocus(true); -#if KDE_IS_VERSION(4,4,0) m_notesWidget->setClickMessage(i18n("Enter your project notes here ...")); -#endif m_notesDock->setWidget(m_notesWidget); addDockWidget(Qt::TopDockWidgetArea, m_notesDock); @@ -608,6 +605,42 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & actionCollection()->addAssociatedWidget(m_clipMonitor->container()); actionCollection()->addAssociatedWidget(m_projectMonitor->container()); + + // Populate encoding profiles + KConfig conf("encodingprofiles.rc", KConfig::FullConfig, "appdata"); + if (KdenliveSettings::proxyparams().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()) { + 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()) { + 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() @@ -836,24 +869,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)), m_projectMonitor->render, SLOT(getFileProperties(const QDomElement, const QString &, int, 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, bool)), m_projectList, SLOT(slotReplyGetFileProperties(const QString &, Mlt::Producer*, const stringMap &, const stringMap &, bool, bool))); + 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))); @@ -1770,14 +1807,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; @@ -1865,7 +1894,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); @@ -2062,7 +2092,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(); @@ -2083,8 +2113,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); } @@ -2277,7 +2305,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()); @@ -2422,7 +2450,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, const int)), m_clipMonitor, SLOT(slotSetClipProducer(DocClipBase *, QPoint, 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))); @@ -2442,7 +2470,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha 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(clipNeedsReload(const QString&)), this, SLOT(slotUpdateClip(const QString &))); disconnect(m_projectList, SIGNAL(refreshClip(const QString &)), m_activeTimeline->projectView(), SLOT(slotRefreshThumbs(const QString &))); m_effectStack->clear(); } @@ -2453,12 +2481,13 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha 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(clipNeedsReload(const QString&)),this, SLOT(slotUpdateClip(const QString &))); connect(m_projectList, SIGNAL(projectModified()), doc, SLOT(setModified())); connect(m_projectList, SIGNAL(updateProfile(const QString &)), this, SLOT(slotUpdateProjectProfile(const QString &))); @@ -2508,7 +2537,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, const int)), m_clipMonitor, SLOT(slotSetClipProducer(DocClipBase *, QPoint, const int))); connect(trackView->projectView(), SIGNAL(playMonitor()), m_projectMonitor, SLOT(slotPlay())); connect(trackView->projectView(), SIGNAL(clipItemSelected(ClipItem*, int, bool)), m_projectMonitor, SLOT(slotSetSelectedClip(ClipItem*))); @@ -2563,6 +2592,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha #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); } @@ -3637,7 +3667,6 @@ void MainWindow::slotResizeItemEnd() int MainWindow::getNewStuff(const QString &configFile) { KNS3::Entry::List entries; -#if KDE_IS_VERSION(4,3,80) KNS3::DownloadDialog dialog(configFile); dialog.exec(); entries = dialog.changedEntries(); @@ -3645,15 +3674,6 @@ int MainWindow::getNewStuff(const QString &configFile) if (entry.status() == KNS3::Entry::Installed) kDebug() << "// Installed files: " << entry.installedFiles(); } -#else - KNS::Engine engine(0); - if (engine.init(configFile)) - entries = engine.downloadDialogModal(this); - foreach(KNS::Entry * entry, entries) { - if (entry->status() == KNS::Entry::Installed) - kDebug() << "// Installed files: " << entry->installedFiles(); - } -#endif /* KDE_IS_VERSION(4,3,80) */ return entries.size(); } @@ -3929,6 +3949,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); } } } @@ -4377,12 +4398,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: "<