Monitor::Monitor(Kdenlive::MONITORID id, MonitorManager *manager, QString profile, QWidget *parent) :
- AbstractMonitor(id, parent),
+ AbstractMonitor(id, manager, parent),
render(NULL),
- m_monitorManager(manager),
m_currentClip(NULL),
m_ruler(new SmallRuler(m_monitorManager)),
m_overlay(NULL),
// Video widget holder
m_videoBox = new VideoContainer(this);
- m_videoBox->setContentsMargins(0, 0, 0, 0);
- m_videoBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
layout->addWidget(m_videoBox, 10);
layout->addStretch();
if (m_dragStarted && event->button() != Qt::RightButton) {
if (m_videoBox->geometry().contains(event->pos()) && (!m_effectWidget || !m_effectWidget->isVisible())) {
if (isActive()) slotPlay();
- else activateMonitor();
+ else slotActivateMonitor();
} //else event->ignore(); //QWidget::mouseReleaseEvent(event);
m_dragStarted = false;
}
}
}
-bool Monitor::isActive() const
-{
- return m_monitorManager->isActive(m_id);
-}
-
-bool Monitor::activateMonitor()
-{
- return m_monitorManager->activateMonitor(m_id);
-}
-
void Monitor::setTimePos(const QString &pos)
{
m_timePos->setValue(pos);
void Monitor::slotSeek(int pos)
{
if (render == NULL) return;
- activateMonitor();
+ slotActivateMonitor();
render->seekToFrame(pos);
}
void Monitor::slotStart()
{
- activateMonitor();
+ slotActivateMonitor();
render->play(0);
render->seekToFrame(0);
}
void Monitor::slotEnd()
{
- activateMonitor();
+ slotActivateMonitor();
render->play(0);
render->seekToFrame(render->getLength());
}
void Monitor::slotZoneStart()
{
- activateMonitor();
+ slotActivateMonitor();
render->play(0);
render->seekToFrame(m_ruler->zone().x());
}
void Monitor::slotZoneEnd()
{
- activateMonitor();
+ slotActivateMonitor();
render->play(0);
render->seekToFrame(m_ruler->zone().y());
}
void Monitor::slotRewind(double speed)
{
- activateMonitor();
+ slotActivateMonitor();
if (speed == 0) {
double currentspeed = render->playSpeed();
if (currentspeed >= 0) render->play(-2);
void Monitor::slotForward(double speed)
{
- activateMonitor();
+ slotActivateMonitor();
if (speed == 0) {
double currentspeed = render->playSpeed();
if (currentspeed <= 1) render->play(2);
void Monitor::slotRewindOneFrame(int diff)
{
- activateMonitor();
+ slotActivateMonitor();
render->play(0);
render->seekToFrameDiff(-diff);
}
void Monitor::slotForwardOneFrame(int diff)
{
- activateMonitor();
+ slotActivateMonitor();
render->play(0);
render->seekToFrameDiff(diff);
}
void Monitor::seekCursor(int pos)
{
- //activateMonitor();
+ //slotActivateMonitor();
if (m_ruler->slotNewValue(pos)) {
checkOverlay();
m_timePos->setValue(pos);
void Monitor::refreshMonitor(bool visible)
{
if (visible && render) {
- if (!activateMonitor()) {
+ if (!slotActivateMonitor()) {
// the monitor was already active, simply refreshClipThumbnail
render->doRefresh();
}
void Monitor::pause()
{
if (render == NULL) return;
- activateMonitor();
+ slotActivateMonitor();
render->pause();
//m_playAction->setChecked(true);
m_playAction->setIcon(m_playIcon);
}
+void Monitor::unpause()
+{
+}
+
void Monitor::slotPlay()
{
if (render == NULL) return;
- activateMonitor();
+ slotActivateMonitor();
if (render->playSpeed() == 0.0) {
m_playAction->setIcon(m_pauseIcon);
render->switchPlay(true);
void Monitor::slotPlayZone()
{
if (render == NULL) return;
- activateMonitor();
+ slotActivateMonitor();
QPoint p = m_ruler->zone();
render->playZone(GenTime(p.x(), m_monitorManager->timecode().fps()), GenTime(p.y(), m_monitorManager->timecode().fps()));
//m_playAction->setChecked(true);
void Monitor::slotLoopZone()
{
if (render == NULL) return;
- activateMonitor();
+ slotActivateMonitor();
QPoint p = m_ruler->zone();
render->loopZone(GenTime(p.x(), m_monitorManager->timecode().fps()), GenTime(p.y(), m_monitorManager->timecode().fps()));
//m_playAction->setChecked(true);
{
if (render == NULL || m_selectedClip == NULL)
return;
- activateMonitor();
+ slotActivateMonitor();
render->loopZone(m_selectedClip->startPos(), m_selectedClip->endPos());
//m_playAction->setChecked(true);
m_playAction->setIcon(m_pauseIcon);
if (clip != m_currentClip || forceUpdate) {
m_currentClip = clip;
- if (m_currentClip) activateMonitor();
+ if (m_currentClip) slotActivateMonitor();
updateMarkers(clip);
Mlt::Producer *prod = NULL;
if (clip) prod = clip->getCloneProducer();
}
} else {
if (m_currentClip) {
- activateMonitor();
+ slotActivateMonitor();
if (position == -1) position = render->seekFramePosition();
render->seek(position);
}
void Monitor::slotOpenFile(const QString &file)
{
if (render == NULL) return;
- activateMonitor();
+ slotActivateMonitor();
QDomDocument doc;
QDomElement mlt = doc.createElement("mlt");
doc.appendChild(mlt);
m_timePos->updateTimeCode(m_monitorManager->timecode());
if (render == NULL) return;
if (!render->hasProfile(profile)) {
- activateMonitor();
+ slotActivateMonitor();
render->resetProfile(profile);
}
if (m_effectWidget)
update();
}
-VideoContainer::VideoContainer(Monitor* parent) :
- QFrame()
- , m_monitor(parent)
-{
- setFrameShape(QFrame::NoFrame);
- setFocusPolicy(Qt::ClickFocus);
- setEnabled(false);
- setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
-}
-
-// virtual
-void VideoContainer::mouseReleaseEvent(QMouseEvent * event)
-{
- if (event->button() != Qt::RightButton) {
- if (m_monitor->isActive()) {
- m_monitor->slotPlay();
- }
- }
-}
-
-
-// virtual
-void VideoContainer::keyPressEvent(QKeyEvent *event)
-{
- // Exit fullscreen with Esc key
- if (event->key() == Qt::Key_Escape && isFullScreen()) {
- switchFullScreen();
- event->setAccepted(true);
- } else event->setAccepted(false);
-}
-
-// virtual
-void VideoContainer::wheelEvent(QWheelEvent * event)
-{
- m_monitor->slotMouseSeek(event->delta(), event->modifiers() == Qt::ControlModifier);
- event->accept();
-}
-
-void VideoContainer::mouseDoubleClickEvent(QMouseEvent * event)
-{
- if (!KdenliveSettings::openglmonitors())
- switchFullScreen();
- event->accept();
-}
-
-void VideoContainer::switchFullScreen()
-{
- // TODO: disable screensaver?
- Qt::WindowFlags flags = windowFlags();
- if (!isFullScreen()) {
- // Check if we ahave a multiple monitor setup
- setUpdatesEnabled(false);
-#if QT_VERSION >= 0x040600
- int monitors = QApplication::desktop()->screenCount();
-#else
- int monitors = QApplication::desktop()->numScreens();
-#endif
- if (monitors > 1) {
- QRect screenres;
- // Move monitor widget to the second screen (one screen for Kdenlive, the other one for the Monitor widget
- int currentScreen = QApplication::desktop()->screenNumber(this);
- if (currentScreen < monitors - 1)
- screenres = QApplication::desktop()->screenGeometry(currentScreen + 1);
- else
- screenres = QApplication::desktop()->screenGeometry(currentScreen - 1);
- move(QPoint(screenres.x(), screenres.y()));
- resize(screenres.width(), screenres.height());
- }
-
- m_baseFlags = flags & (Qt::Window | Qt::SubWindow);
- flags |= Qt::Window;
- flags ^= Qt::SubWindow;
- setWindowFlags(flags);
-#ifdef Q_WS_X11
- // This works around a bug with Compiz
- // as the window must be visible before we can set the state
- show();
- raise();
- setWindowState(windowState() | Qt::WindowFullScreen); // set
-#else
- setWindowState(windowState() | Qt::WindowFullScreen); // set
- setUpdatesEnabled(true);
- show();
-#endif
- setEnabled(true);
- } else {
- setUpdatesEnabled(false);
- flags ^= (Qt::Window | Qt::SubWindow); //clear the flags...
- flags |= m_baseFlags; //then we reset the flags (window and subwindow)
- setWindowFlags(flags);
- setWindowState(windowState() ^ Qt::WindowFullScreen); // reset
- setUpdatesEnabled(true);
- setEnabled(false);
- show();
- }
- m_monitor->pause();
-}
-
#include "monitor.moc"