#include "docclipbase.h"
#include "abstractclipitem.h"
#include "monitorscene.h"
-#include "monitoreditwidget.h"
+#include "widgets/monitoreditwidget.h"
#include "kdenlivesettings.h"
#include <KDebug>
-#include <KLocale>
+#include <KLocalizedString>
#include <KFileDialog>
#include <KApplication>
#include <KMessageBox>
#define SEEK_INACTIVE (-1)
-Monitor::Monitor(Kdenlive::MONITORID id, MonitorManager *manager, QString profile, QWidget *parent) :
+Monitor::Monitor(Kdenlive::MonitorId id, MonitorManager *manager, QString profile, QWidget *parent) :
AbstractMonitor(id, manager, parent)
, render(NULL)
, m_currentClip(NULL)
, m_effectWidget(NULL)
, m_selectedClip(NULL)
, m_loopClipTransition(true)
-#ifdef USE_OPENGL
, m_glWidget(NULL)
-#endif
, m_editMarker(NULL)
{
QVBoxLayout *layout = new QVBoxLayout;
m_pauseIcon = KIcon("media-playback-pause");
- if (id != Kdenlive::dvdMonitor) {
+ if (id != Kdenlive::DvdMonitor) {
m_toolbar->addAction(KIcon("kdenlive-zone-start"), i18n("Set zone start"), this, SLOT(slotSetZoneStart()));
m_toolbar->addAction(KIcon("kdenlive-zone-end"), i18n("Set zone end"), this, SLOT(slotSetZoneEnd()));
}
playButton->setDefaultAction(m_playAction);
- if (id != Kdenlive::dvdMonitor) {
+ if (id != Kdenlive::DvdMonitor) {
QToolButton *configButton = new QToolButton(m_toolbar);
m_configMenu = new QMenu(i18n("Misc..."), this);
configButton->setIcon(KIcon("system-run"));
configButton->setPopupMode(QToolButton::QToolButton::InstantPopup);
m_toolbar->addWidget(configButton);
- if (id == Kdenlive::clipMonitor) {
+ if (id == Kdenlive::ClipMonitor) {
m_markerMenu = new QMenu(i18n("Go to marker..."), this);
m_markerMenu->setEnabled(false);
m_configMenu->addMenu(m_markerMenu);
if (profile.isEmpty())
profile = KdenliveSettings::current_profile();
- bool monitorCreated = false;
-#ifdef Q_WS_MAC
createOpenGlWidget(videoBox, profile);
- monitorCreated = true;
- //m_glWidget->setFixedSize(width, height);
-#elif defined(USE_OPENGL)
- if (KdenliveSettings::openglmonitors()) {
- monitorCreated = createOpenGlWidget(videoBox, profile);
- }
-#endif
- if (!monitorCreated) {
- createVideoSurface();
- render = new Render(m_id, (int) videoSurface->winId(), profile, this);
- connect(videoSurface, SIGNAL(refreshMonitor()), render, SLOT(doRefresh()));
- }
-#ifdef USE_OPENGL
- else if (m_glWidget) {
- QVBoxLayout *lay = new QVBoxLayout;
- lay->setContentsMargins(0, 0, 0, 0);
- lay->addWidget(m_glWidget);
- videoBox->setLayout(lay);
- }
-#endif
+ QVBoxLayout *lay = new QVBoxLayout;
+ lay->setContentsMargins(0, 0, 0, 0);
+ lay->addWidget(m_glWidget);
+ videoBox->setLayout(lay);
// Monitor ruler
m_ruler = new SmallRuler(this, render);
- if (id == Kdenlive::dvdMonitor) m_ruler->setZone(-3, -2);
+ if (id == Kdenlive::DvdMonitor) m_ruler->setZone(-3, -2);
layout->addWidget(m_ruler);
connect(m_audioSlider, SIGNAL(valueChanged(int)), this, SLOT(slotSetVolume(int)));
connect(render, SIGNAL(rendererStopped(int)), this, SLOT(rendererStopped(int)));
connect(render, SIGNAL(rendererPosition(int)), this, SLOT(seekCursor(int)));
- if (id != Kdenlive::clipMonitor) {
+ if (id != Kdenlive::ClipMonitor) {
connect(render, SIGNAL(rendererPosition(int)), this, SIGNAL(renderPosition(int)));
connect(render, SIGNAL(durationChanged(int)), this, SIGNAL(durationChanged(int)));
connect(m_ruler, SIGNAL(zoneChanged(QPoint)), this, SIGNAL(zoneUpdated(QPoint)));
connect(m_ruler, SIGNAL(zoneChanged(QPoint)), this, SLOT(setClipZone(QPoint)));
}
- if (videoSurface) videoSurface->show();
-
- if (id == Kdenlive::projectMonitor) {
+ if (id == Kdenlive::ProjectMonitor) {
m_effectWidget = new MonitorEditWidget(render, videoBox);
connect(m_effectWidget, SIGNAL(showEdit(bool,bool)), this, SLOT(slotShowEffectScene(bool,bool)));
m_toolbar->addAction(m_effectWidget->getVisibilityAction());
return videoBox;
}
-#ifdef USE_OPENGL
-bool Monitor::createOpenGlWidget(QWidget *parent, const QString &profile)
+void Monitor::createOpenGlWidget(QWidget *parent, const QString &profile)
{
render = new Render(id(), 0, profile, this);
m_glWidget = new VideoGLWidget(parent);
if (m_glWidget == NULL) {
// Creation failed, we are in trouble...
- return false;
+ QMessageBox::critical(this, i18n("Missing OpenGL support"),
+ i18n("You need working OpenGL support to run Kdenlive. Exiting."));
+ qApp->quit();
}
m_glWidget->setImageAspectRatio(render->dar());
m_glWidget->setBackgroundColor(KdenliveSettings::window_background());
connect(render, SIGNAL(showImageSignal(QImage)), m_glWidget, SLOT(showImage(QImage)));
- return true;
}
-#endif
void Monitor::setupMenu(QMenu *goMenu, QAction *playZone, QAction *loopZone, QMenu *markerMenu, QAction *loopClip)
{
}
//TODO: add save zone to timeline monitor when fixed
- if (m_id == Kdenlive::clipMonitor) {
+ if (m_id == Kdenlive::ClipMonitor) {
m_contextMenu->addMenu(m_markerMenu);
m_contextMenu->addAction(KIcon("document-save"), i18n("Save zone"), this, SLOT(slotSaveZone()));
QAction *extractZone = m_configMenu->addAction(KIcon("document-new"), i18n("Extract Zone"), this, SLOT(slotExtractCurrentZone()));
QAction *extractFrame = m_configMenu->addAction(KIcon("document-new"), i18n("Extract frame"), this, SLOT(slotExtractCurrentFrame()));
m_contextMenu->addAction(extractFrame);
- if (m_id != Kdenlive::clipMonitor) {
+ if (m_id != Kdenlive::ClipMonitor) {
QAction *splitView = m_contextMenu->addAction(KIcon("view-split-left-right"), i18n("Split view"), render, SLOT(slotSplitView(bool)));
splitView->setCheckable(true);
m_configMenu->addAction(splitView);
void Monitor::resizeEvent(QResizeEvent *event)
{
- Q_UNUSED(event);
+ Q_UNUSED(event)
if (render && isVisible() && isActive()) render->doRefresh();
}
event->accept();
}
-void Monitor::mouseDoubleClickEvent(QMouseEvent * event)
-{
- if (!KdenliveSettings::openglmonitors()) {
- videoBox->switchFullScreen();
- event->accept();
- }
-}
-
void Monitor::slotMouseSeek(int eventDelta, bool fast)
{
if (fast) {
void Monitor::start()
{
if (!isVisible() || !isActive()) return;
-#ifdef USE_OPENGL
if (m_glWidget) m_glWidget->activateMonitor();
-#endif
if (render) render->startConsumer();
}
//render->setSceneList(doc, 0);
}
-void Monitor::setCustomProfile(const QString &profile, Timecode tc)
+void Monitor::setCustomProfile(const QString &profile, const Timecode &tc)
{
m_timePos->updateTimeCode(tc);
if (render == NULL) return;
if (!render->hasProfile(profile)) {
slotActivateMonitor();
render->resetProfile(profile);
-#ifdef USE_OPENGL
if (m_glWidget) m_glWidget->setImageAspectRatio(render->dar());
-#endif
}
}
if (!render->hasProfile(profile)) {
slotActivateMonitor();
render->resetProfile(profile);
-#ifdef USE_OPENGL
if (m_glWidget) m_glWidget->setImageAspectRatio(render->dar());
-#endif
}
if (m_effectWidget)
m_effectWidget->resetProfile(render);
KdenliveSettings::setDisplayMonitorInfo(show);
if (show) {
if (m_overlay) return;
- if (videoSurface == NULL) {
- // Using OpenGL display
-#ifdef USE_OPENGL
- if (m_glWidget->layout()) delete m_glWidget->layout();
- m_overlay = new Overlay();
- connect(m_overlay, SIGNAL(editMarker()), this, SLOT(slotEditMarker()));
- QVBoxLayout *layout = new QVBoxLayout;
- layout->addStretch(10);
- layout->addWidget(m_overlay);
- m_glWidget->setLayout(layout);
-#endif
- } else {
- if (videoSurface->layout()) delete videoSurface->layout();
- m_overlay = new Overlay();
- connect(m_overlay, SIGNAL(editMarker()), this, SLOT(slotEditMarker()));
- QVBoxLayout *layout = new QVBoxLayout;
- layout->addStretch(10);
- layout->addWidget(m_overlay);
- videoSurface->setLayout(layout);
- m_overlay->raise();
- m_overlay->setHidden(true);
- }
+ if (m_glWidget->layout()) delete m_glWidget->layout();
+ m_overlay = new Overlay();
+ connect(m_overlay, SIGNAL(editMarker()), this, SLOT(slotEditMarker()));
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->addStretch(10);
+ layout->addWidget(m_overlay);
+ m_glWidget->setLayout(layout);
checkOverlay();
} else {
delete m_overlay;
void Monitor::slotShowEffectScene(bool show, bool manuallyTriggered)
{
- if (m_id == Kdenlive::projectMonitor) {
+ if (m_id == Kdenlive::ProjectMonitor) {
if (!m_effectWidget->getVisibilityAction()->isChecked())
show = false;
if (m_effectWidget->isVisible() == show)
return;
setUpdatesEnabled(false);
if (show) {
- if (videoSurface) {
- videoSurface->setVisible(false);
- // Preview is handeled internally through the Render::showFrame method
- render->disablePreview(true);
-#ifdef USE_OPENGL
- } else {
- m_glWidget->setVisible(false);
-#endif
- }
+ m_glWidget->setVisible(false);
m_effectWidget->setVisible(true);
m_effectWidget->getScene()->slotZoomFit();
emit requestFrameForAnalysis(true);
} else {
m_effectWidget->setVisible(false);
emit requestFrameForAnalysis(false);
- if (videoSurface) {
- videoSurface->setVisible(true);
- // Preview is handeled internally through the Render::showFrame method
- render->disablePreview(false);
-
-#ifdef USE_OPENGL
- } else {
- m_glWidget->setVisible(true);
-#endif
- }
+ m_glWidget->setVisible(true);
}
if (!manuallyTriggered)
m_effectWidget->showVisibilityButton(show);