]> git.sesse.net Git - kdenlive/blobdiff - src/monitor.cpp
Improved Dvd Wizard (new chapters dialog)
[kdenlive] / src / monitor.cpp
index 7edc2a5922a1f62f604dda5b884bc42d076248f3..571fb884d75abb273fd23653c0f36e93785b6ddc 100644 (file)
 #include <QLabel>
 
 
-Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent)
-        : QWidget(parent), render(NULL), m_monitorManager(manager), m_name(name), m_isActive(false), m_currentClip(NULL), m_dragStarted(false), m_overlay(NULL)
-{
-    ui.setupUi(this);
+Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) :
+        QWidget(parent),
+        render(NULL),
+        m_monitorManager(manager),
+        m_name(name),
+        m_isActive(false),
+        m_currentClip(NULL),
+        m_dragStarted(false),
+        m_overlay(NULL)
+{
+    m_ui.setupUi(this);
     m_scale = 1;
     m_ruler = new SmallRuler();
     QVBoxLayout *layout = new QVBoxLayout;
     layout->setContentsMargins(0, 0, 0, 0);
     layout->addWidget(m_ruler);
-    ui.ruler_frame->setLayout(layout);
+    m_ui.ruler_frame->setLayout(layout);
     setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
     setMinimumHeight(200);
     QToolBar *toolbar = new QToolBar(name, this);
@@ -98,15 +105,15 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent)
     connect(m_timePos, SIGNAL(editingFinished()), this, SLOT(slotSeek()));
 
     layout2->addWidget(toolbar);
-    ui.button_frame->setLayout(layout2);
+    m_ui.button_frame->setLayout(layout2);
     const int toolHeight = toolbar->height();
-    ui.button_frame->setMinimumHeight(toolHeight);
+    m_ui.button_frame->setMinimumHeight(toolHeight);
 
     //m_ruler->setPixelPerMark(3);
 
-    QVBoxLayout *rendererBox = new QVBoxLayout(ui.video_frame);
+    QVBoxLayout *rendererBox = new QVBoxLayout(m_ui.video_frame);
     rendererBox->setContentsMargins(0, 0, 0, 0);
-    m_monitorRefresh = new MonitorRefresh(ui.video_frame);
+    m_monitorRefresh = new MonitorRefresh(m_ui.video_frame);
     rendererBox->addWidget(m_monitorRefresh);
     render = new Render(m_name, (int) m_monitorRefresh->winId(), -1, this);
     m_monitorRefresh->setRenderer(render);
@@ -119,7 +126,7 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent)
     m_configMenu->addSeparator();
     m_configMenu->addAction(KIcon("transform-scale"), i18n("Resize (100%)"), this, SLOT(slotSetSizeOneToOne()));
     m_configMenu->addAction(KIcon("transform-scale"), i18n("Resize (50%)"), this, SLOT(slotSetSizeOneToTwo()));
-    //render->createVideoXWindow(ui.video_frame->winId(), -1);
+    //render->createVideoXWindow(m_ui.video_frame->winId(), -1);
     m_length = 0;
 
     if (name != "clip") {
@@ -130,14 +137,14 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent)
         connect(m_ruler, SIGNAL(zoneChanged(QPoint)), this, SLOT(setClipZone(QPoint)));
     }
     m_monitorRefresh->show();
-    kDebug() << "/////// BUILDING MONITOR, ID: " << ui.video_frame->winId();
+    kDebug() << "/////// BUILDING MONITOR, ID: " << m_ui.video_frame->winId();
 }
 
 Monitor::~Monitor()
 {
     delete m_ruler;
     delete m_timePos;
-    if (m_overlay) delete m_overlay;
+    delete m_overlay;
     delete m_monitorRefresh;
 }
 
@@ -150,7 +157,7 @@ void Monitor::setupMenu(QMenu *goMenu, QAction *playZone, QAction *loopZone, QMe
 {
     m_contextMenu = new QMenu(this);
     m_contextMenu->addMenu(m_playMenu);
-    m_contextMenu->addMenu(goMenu);
+    if (goMenu) m_contextMenu->addMenu(goMenu);
     if (markerMenu) m_contextMenu->addMenu(markerMenu);
 
     m_playMenu->addAction(playZone);
@@ -192,10 +199,10 @@ void Monitor::slotSetSizeOneToOne()
         height = height * 0.8;
     }
     kDebug() << "// MONITOR; set SIZE: " << width << ", " << height;
-    ui.video_frame->setFixedSize(width, height);
+    m_ui.video_frame->setFixedSize(width, height);
     updateGeometry();
     adjustSize();
-    //ui.video_frame->setMinimumSize(0, 0);
+    //m_ui.video_frame->setMinimumSize(0, 0);
     emit adjustMonitorSize();
 }
 
@@ -212,16 +219,16 @@ void Monitor::slotSetSizeOneToTwo()
         height = height * 0.8;
     }
     kDebug() << "// MONITOR; set SIZE: " << width << ", " << height;
-    ui.video_frame->setFixedSize(width, height);
+    m_ui.video_frame->setFixedSize(width, height);
     updateGeometry();
     adjustSize();
-    //ui.video_frame->setMinimumSize(0, 0);
+    //m_ui.video_frame->setMinimumSize(0, 0);
     emit adjustMonitorSize();
 }
 
 void Monitor::resetSize()
 {
-    ui.video_frame->setMinimumSize(0, 0);
+    m_ui.video_frame->setMinimumSize(0, 0);
 }
 
 DocClipBase *Monitor::activeClip()
@@ -300,7 +307,7 @@ void Monitor::slotSetZoneEnd()
 void Monitor::mousePressEvent(QMouseEvent * event)
 {
     if (event->button() != Qt::RightButton) {
-        if (ui.video_frame->underMouse()) {
+        if (m_ui.video_frame->underMouse()) {
             m_dragStarted = true;
             m_DragStartPosition = event->pos();
         }
@@ -311,7 +318,7 @@ void Monitor::mousePressEvent(QMouseEvent * event)
 void Monitor::mouseReleaseEvent(QMouseEvent * event)
 {
     if (m_dragStarted) {
-        if (ui.video_frame->underMouse()) {
+        if (m_ui.video_frame->underMouse()) {
             slotPlay();
         } else QWidget::mouseReleaseEvent(event);
         m_dragStarted = false;
@@ -414,7 +421,7 @@ void Monitor::slotExtractCurrentFrame()
     QPixmap frame = render->extractFrame(m_position);
     QString outputFile = KFileDialog::getSaveFileName(KUrl(), "image/png");
     if (!outputFile.isEmpty()) {
-        if (QFile::exists(outputFile) && KMessageBox::questionYesNo(this, i18n("File already exists.\nDo you want to overwrite it ?")) == KMessageBox::No) return;
+        if (QFile::exists(outputFile) && KMessageBox::questionYesNo(this, i18n("File already exists.\nDo you want to overwrite it?")) == KMessageBox::No) return;
         frame.save(outputFile);
     }
 }
@@ -429,6 +436,12 @@ void Monitor::activateMonitor()
     if (!m_isActive) m_monitorManager->switchMonitors(); //m_monitorManager->activateMonitor(m_name);
 }
 
+void Monitor::setTimePos(const QString &pos)
+{
+    m_timePos->setText(pos);
+    slotSeek();
+}
+
 void Monitor::slotSeek()
 {
     const int frames = m_monitorManager->timecode().getFrameCount(m_timePos->text(), m_monitorManager->timecode().fps());
@@ -530,8 +543,12 @@ void Monitor::slotRewindOneFrame(int diff)
     activateMonitor();
     render->play(0);
     if (m_position < 1) return;
-    m_position -= diff;
-    m_position = qMax(m_position, 0);
+    /*
+     * freebsd needs this hack to upgrade m_position value:
+     * http://www.kdenlive.org/mantis/view.php?id=491
+     */
+    int position = m_position - diff;
+    m_position = qMax(position, 0);
     render->seekToFrame(m_position);
     emit renderPosition(m_position);
     m_timePos->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position));
@@ -573,7 +590,7 @@ void Monitor::rendererStopped(int pos)
 
 void Monitor::initMonitor()
 {
-    kDebug() << "/////// INITING MONITOR, ID: " << ui.video_frame->winId();
+    kDebug() << "/////// INITING MONITOR, ID: " << m_ui.video_frame->winId();
 }
 
 // virtual
@@ -731,13 +748,15 @@ void Monitor::slotSwitchMonitorInfo(bool show)
         m_overlay = new Overlay(m_monitorRefresh);
         m_overlay->raise();
         m_overlay->setHidden(true);
-    } else if (m_overlay) {
+    } else {
         delete m_overlay;
         m_overlay = NULL;
     }
 }
 
-MonitorRefresh::MonitorRefresh(QWidget* parent): QWidget(parent), m_renderer(NULL)
+MonitorRefresh::MonitorRefresh(QWidget* parent) : \
+        QWidget(parent),
+        m_renderer(NULL)
 {
     setAttribute(Qt::WA_PaintOnScreen);
     setAttribute(Qt::WA_OpaquePaintEvent); //setAttribute(Qt::WA_NoSystemBackground);
@@ -754,7 +773,8 @@ void MonitorRefresh::paintEvent(QPaintEvent * /*event*/)
 }
 
 
-Overlay::Overlay(QWidget* parent): QLabel(parent)
+Overlay::Overlay(QWidget* parent) :
+        QLabel(parent)
 {
     setAttribute(Qt::WA_TransparentForMouseEvents);
     setAttribute(Qt::WA_OpaquePaintEvent);