X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmonitormanager.cpp;h=35ad43d85aa1c8456dab93df94e410649fb6ea33;hb=c3302003093710ee247ad84c0fe2ef3c579d417f;hp=af5a14cd39e2f539e98d6afc8b132c1890d6e19b;hpb=ac5f5c9f6d4bdffeb76f3f2098b80f27bc532606;p=kdenlive diff --git a/src/monitormanager.cpp b/src/monitormanager.cpp index af5a14cd..35ad43d8 100644 --- a/src/monitormanager.cpp +++ b/src/monitormanager.cpp @@ -21,35 +21,46 @@ #include "monitormanager.h" #include "renderer.h" #include "kdenlivesettings.h" +#include "kdenlivedoc.h" #include #include #include +#include MonitorManager::MonitorManager(QWidget *parent) : QObject(parent), + m_document(NULL), m_clipMonitor(NULL), m_projectMonitor(NULL), - m_activeMonitor(NULL), - m_blocked(false) + m_activeMonitor(NULL) { } -Timecode MonitorManager::timecode() +Timecode MonitorManager::timecode() const { return m_timecode; } +void MonitorManager::setDocument(KdenliveDoc *doc) +{ + m_document = doc; +} + void MonitorManager::initMonitors(Monitor *clipMonitor, Monitor *projectMonitor, RecMonitor *recMonitor) { m_clipMonitor = clipMonitor; m_projectMonitor = projectMonitor; + + connect(m_clipMonitor->render, SIGNAL(activateMonitor(Kdenlive::MONITORID)), this, SLOT(activateMonitor(Kdenlive::MONITORID))); + connect(m_projectMonitor->render, SIGNAL(activateMonitor(Kdenlive::MONITORID)), this, SLOT(activateMonitor(Kdenlive::MONITORID))); m_monitorsList.append(clipMonitor); m_monitorsList.append(projectMonitor); - m_monitorsList.append(recMonitor); + if (recMonitor) + m_monitorsList.append(recMonitor); } void MonitorManager::appendMonitor(AbstractMonitor *monitor) @@ -62,50 +73,71 @@ void MonitorManager::removeMonitor(AbstractMonitor *monitor) m_monitorsList.removeAll(monitor); } -void MonitorManager::activateMonitor(QString name) +AbstractMonitor* MonitorManager::monitor(Kdenlive::MONITORID monitorName) +{ + AbstractMonitor *monitor = NULL; + for (int i = 0; i < m_monitorsList.size(); ++i) { + if (m_monitorsList[i]->id() == monitorName) { + monitor = m_monitorsList.at(i); + } + } + return monitor; +} + +void MonitorManager::setConsumerProperty(const QString &name, const QString &value) { - kDebug()<<"//ACTIVATING MON: "<name() == name) - return; + if (m_clipMonitor) m_clipMonitor->render->setConsumerProperty(name, value); + if (m_projectMonitor) m_projectMonitor->render->setConsumerProperty(name, value); +} + +bool MonitorManager::activateMonitor(Kdenlive::MONITORID name, bool forceRefresh) +{ + if (m_clipMonitor == NULL || m_projectMonitor == NULL) + return false; + if (m_activeMonitor && m_activeMonitor->id() == name) { + if (forceRefresh) m_activeMonitor->start(); + return false; + } m_activeMonitor = NULL; - for (int i = 0; i < m_monitorsList.count(); i++) { - kDebug()<<"PARSING: "<name(); - if (m_monitorsList.at(i)->name() == name) { + for (int i = 0; i < m_monitorsList.count(); ++i) { + if (m_monitorsList.at(i)->id() == name) { m_activeMonitor = m_monitorsList.at(i); - emit raiseMonitor(m_activeMonitor); } else m_monitorsList.at(i)->stop(); } - if (m_activeMonitor) m_activeMonitor->start(); + if (m_activeMonitor) { + m_activeMonitor->blockSignals(true); + m_activeMonitor->parentWidget()->raise(); + m_activeMonitor->blockSignals(false); + m_activeMonitor->start(); + + } emit checkColorScopes(); + return (m_activeMonitor != NULL); } -bool MonitorManager::isActive(const QString name) const +bool MonitorManager::isActive(Kdenlive::MONITORID id) const { - return m_activeMonitor ? m_activeMonitor->name() == name: false; + return m_activeMonitor ? m_activeMonitor->id() == id: false; } void MonitorManager::slotSwitchMonitors(bool activateClip) { if (activateClip) - activateMonitor("clip"); + activateMonitor(Kdenlive::clipMonitor); else - activateMonitor("project"); + activateMonitor(Kdenlive::projectMonitor); } void MonitorManager::stopActiveMonitor() { - if (m_blocked) return; if (m_activeMonitor == m_clipMonitor) m_clipMonitor->pause(); - else m_projectMonitor->pause(); + else if (m_activeMonitor == m_projectMonitor) m_projectMonitor->pause(); } void MonitorManager::slotPlay() { - if (m_activeMonitor == m_clipMonitor) m_clipMonitor->slotPlay(); - else m_projectMonitor->slotPlay(); + if (m_activeMonitor) m_activeMonitor->slotPlay(); } void MonitorManager::slotPause() @@ -116,7 +148,7 @@ void MonitorManager::slotPause() void MonitorManager::slotPlayZone() { if (m_activeMonitor == m_clipMonitor) m_clipMonitor->slotPlayZone(); - else m_projectMonitor->slotPlayZone(); + else if (m_activeMonitor == m_projectMonitor) m_projectMonitor->slotPlayZone(); } void MonitorManager::slotLoopZone() @@ -128,54 +160,53 @@ void MonitorManager::slotLoopZone() void MonitorManager::slotRewind(double speed) { if (m_activeMonitor == m_clipMonitor) m_clipMonitor->slotRewind(speed); - else m_projectMonitor->slotRewind(speed); + else if (m_activeMonitor == m_projectMonitor) m_projectMonitor->slotRewind(speed); } void MonitorManager::slotForward(double speed) { if (m_activeMonitor == m_clipMonitor) m_clipMonitor->slotForward(speed); - else m_projectMonitor->slotForward(speed); + else if (m_activeMonitor == m_projectMonitor) m_projectMonitor->slotForward(speed); } void MonitorManager::slotRewindOneFrame() { if (m_activeMonitor == m_clipMonitor) m_clipMonitor->slotRewindOneFrame(); - else m_projectMonitor->slotRewindOneFrame(); + else if (m_activeMonitor == m_projectMonitor) m_projectMonitor->slotRewindOneFrame(); } void MonitorManager::slotForwardOneFrame() { if (m_activeMonitor == m_clipMonitor) m_clipMonitor->slotForwardOneFrame(); - else m_projectMonitor->slotForwardOneFrame(); + else if (m_activeMonitor == m_projectMonitor) m_projectMonitor->slotForwardOneFrame(); } void MonitorManager::slotRewindOneSecond() { if (m_activeMonitor == m_clipMonitor) m_clipMonitor->slotRewindOneFrame(m_timecode.fps()); - else m_projectMonitor->slotRewindOneFrame(m_timecode.fps()); + else if (m_activeMonitor == m_projectMonitor) m_projectMonitor->slotRewindOneFrame(m_timecode.fps()); } void MonitorManager::slotForwardOneSecond() { if (m_activeMonitor == m_clipMonitor) m_clipMonitor->slotForwardOneFrame(m_timecode.fps()); - else m_projectMonitor->slotForwardOneFrame(m_timecode.fps()); + else if (m_activeMonitor == m_projectMonitor) m_projectMonitor->slotForwardOneFrame(m_timecode.fps()); } void MonitorManager::slotStart() { if (m_activeMonitor == m_clipMonitor) m_clipMonitor->slotStart(); - else m_projectMonitor->slotStart(); + else if (m_activeMonitor == m_projectMonitor) m_projectMonitor->slotStart(); } void MonitorManager::slotEnd() { if (m_activeMonitor == m_clipMonitor) m_clipMonitor->slotEnd(); - else m_projectMonitor->slotEnd(); + else if (m_activeMonitor == m_projectMonitor) m_projectMonitor->slotEnd(); } -void MonitorManager::resetProfiles(Timecode tc) +void MonitorManager::resetProfiles(const Timecode &tc) { - if (m_blocked) return; m_timecode = tc; slotResetProfiles(); //QTimer::singleShot(300, this, SLOT(slotResetProfiles())); @@ -183,21 +214,23 @@ void MonitorManager::resetProfiles(Timecode tc) void MonitorManager::slotResetProfiles() { - if (m_blocked) return; - if (m_projectMonitor == NULL || m_clipMonitor == NULL) return; - QString active = m_activeMonitor ? m_activeMonitor->name() : QString(); - activateMonitor("clip"); + if (m_projectMonitor == NULL || m_clipMonitor == NULL) { + return; + } + blockSignals(true); + Kdenlive::MONITORID active = m_activeMonitor ? m_activeMonitor->id() : Kdenlive::noMonitor; m_clipMonitor->resetProfile(KdenliveSettings::current_profile()); - m_clipMonitor->updateTimecodeFormat(); - activateMonitor("project"); m_projectMonitor->resetProfile(KdenliveSettings::current_profile()); - m_projectMonitor->updateTimecodeFormat(); - //m_projectMonitor->refreshMonitor(true); - if (!active.isEmpty()) activateMonitor(active); + if (active != Kdenlive::noMonitor) activateMonitor(active); + blockSignals(false); + if (m_activeMonitor) m_activeMonitor->parentWidget()->raise(); + emit checkColorScopes(); } -void MonitorManager::slotRefreshCurrentMonitor() +void MonitorManager::slotRefreshCurrentMonitor(const QString &id) { + // Clip producer was modified, check if clip is currently displayed in clip monitor + m_clipMonitor->reloadProducer(id); if (m_activeMonitor == m_clipMonitor) m_clipMonitor->refreshMonitor(); else m_projectMonitor->refreshMonitor(); } @@ -205,14 +238,22 @@ void MonitorManager::slotRefreshCurrentMonitor() void MonitorManager::slotUpdateAudioMonitoring() { // if(...) added since they are 0x0 when the config wizard is running! --Granjow - if (m_clipMonitor) { + /*if (m_clipMonitor) { m_clipMonitor->render->analyseAudio = KdenliveSettings::monitor_audio(); } if (m_projectMonitor) { m_projectMonitor->render->analyseAudio = KdenliveSettings::monitor_audio(); + }*/ + for (int i = 0; i < m_monitorsList.count(); ++i) { + if (m_monitorsList.at(i)->abstractRender()) m_monitorsList.at(i)->abstractRender()->analyseAudio = KdenliveSettings::monitor_audio(); } } +void MonitorManager::clearScopeSource() +{ + emit clearScopes(); +} + void MonitorManager::updateScopeSource() { emit checkColorScopes(); @@ -220,8 +261,25 @@ void MonitorManager::updateScopeSource() AbstractRender *MonitorManager::activeRenderer() { - if (m_activeMonitor) return m_activeMonitor->abstractRender(); + if (m_activeMonitor) { + return m_activeMonitor->abstractRender(); + } return NULL; } +void MonitorManager::slotSwitchFullscreen() +{ + if (m_activeMonitor) m_activeMonitor->slotSwitchFullScreen(); +} + +QString MonitorManager::getProjectFolder() const +{ + if (m_document == NULL) { + kDebug()<<" + + +NULL DOC!!"; + return QString(); + } + return m_document->projectFolder().path(KUrl::AddTrailingSlash); +} + + #include "monitormanager.moc"