]> git.sesse.net Git - kdenlive/commitdiff
monitor context menu, add extract frame
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 29 Mar 2008 14:23:07 +0000 (14:23 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 29 Mar 2008 14:23:07 +0000 (14:23 +0000)
svn path=/branches/KDE4/; revision=2141

src/monitor.cpp
src/monitor.h
src/projectlist.cpp
src/renderer.cpp
src/renderer.h

index cd4172dd6e3f8066fdf710ccff9f822aab582538..72affc58d660f2766ce7ef9fc2aa6dc49424db53 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <KDebug>
 #include <KLocale>
+#include <KFileDialog>
 
 #include "gentime.h"
 #include "monitor.h"
@@ -54,7 +55,7 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent)
     connect(m_rew1Action, SIGNAL(triggered()), this, SLOT(slotRewindOneFrame()));
 
     QToolButton *playButton = new QToolButton(toolbar);
-    QMenu *playMenu = new QMenu(this);
+    QMenu *playMenu = new QMenu(i18n("Play..."), this);
     playButton->setMenu(playMenu);
     playButton->setPopupMode(QToolButton::MenuButtonPopup);
     toolbar->addWidget(playButton);
@@ -87,7 +88,7 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent)
     QVBoxLayout *rendererBox = new QVBoxLayout(ui.video_frame);
     m_monitorRefresh = new MonitorRefresh(ui.video_frame);
     rendererBox->addWidget(m_monitorRefresh);
-    m_monitorRefresh->setAttribute(Qt::WA_PaintOnScreen);
+    //m_monitorRefresh->setAttribute(Qt::WA_PaintOnScreen);
     render = new Render(m_name, (int) m_monitorRefresh->winId(), -1, this);
     m_monitorRefresh->setRenderer(render);
 
@@ -104,6 +105,11 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent)
     m_ruler->setMaximum(width);
     m_length = 0;
 
+    m_contextMenu = new QMenu(this);
+    m_contextMenu->addMenu(playMenu);
+    QAction *extractFrame = m_contextMenu->addAction(KIcon("document-new"), i18n("Extract frame"));
+    connect(extractFrame, SIGNAL(triggered()), this, SLOT(slotExtractCurrentFrame()));
+
     kDebug() << "/////// BUILDING MONITOR, ID: " << ui.video_frame->winId();
 }
 
@@ -113,7 +119,8 @@ QString Monitor::name() const {
 
 // virtual
 void Monitor::mousePressEvent(QMouseEvent * event) {
-    slotPlay();
+    if (event->button() != Qt::RightButton) slotPlay();
+    else m_contextMenu->popup(event->globalPos());
 }
 
 // virtual
@@ -122,6 +129,12 @@ void Monitor::wheelEvent(QWheelEvent * event) {
     else slotRewindOneFrame();
 }
 
+void Monitor::slotExtractCurrentFrame() {
+    QPixmap frame = render->extractFrame(m_position);
+    QString outputFile = KFileDialog::getSaveFileName(KUrl(), "image/png");
+    if (!outputFile.isEmpty()) frame.save(outputFile);
+}
+
 void Monitor::activateMonitor() {
     if (!m_isActive) m_monitorManager->activateMonitor(m_name);
 }
index cae7ad8007d34c86da78a7525f210cef90f15237..9e66b71d3764c712d68f4087cb3f84a0dce06149 100644 (file)
@@ -72,12 +72,13 @@ private:
     bool m_isActive;
     KRestrictedLine *m_timePos;
     QAction *m_playAction;
+    QMenu *m_contextMenu;
 
 private slots:
     void adjustRulerSize(int length);
     void seekCursor(int pos);
     void rendererStopped(int pos);
-
+    void slotExtractCurrentFrame();
 
 public slots:
     void slotOpenFile(const QString &);
index db1528d7aaa4344e5fb1923dcc221f8e6c3a7214..93f4cca161e331bdc95cc71c31a466befbed4ed1 100644 (file)
@@ -381,7 +381,7 @@ void ProjectList::slotAddClip(QUrl givenUrl, QString group) {
 
 void ProjectList::slotAddColorClip() {
     if (!m_commandStack) kDebug() << "!!!!!!!!!!!!!!!!  NO CMD STK";
-    QDialog *dia = new QDialog;
+    QDialog *dia = new QDialog(this);
     Ui::ColorClip_UI *dia_ui = new Ui::ColorClip_UI();
     dia_ui->setupUi(dia);
     dia_ui->clip_name->setText(i18n("Color Clip"));
index fdb1f5bb801f7981dea3d8b17955a2f0467214cc..f74af46af79dd57a414d3ae4b927bc78f02cf531 100644 (file)
@@ -201,6 +201,10 @@ char *Render::decodedString(QString str) {
 */
 
 QPixmap Render::extractFrame(int frame_position, int width, int height) {
+    if (width == -1) {
+        width = m_mltProfile->width();
+        height = m_mltProfile->height();
+    }
     QPixmap pix(width, height);
     if (!m_mltProducer) {
         pix.fill(Qt::black);
index c243ff9b1105a742cf1f34a7e88ea4cf38163b5e..78d6a4477bd9dab3978a979c452c5f4c463e0360 100644 (file)
@@ -105,7 +105,7 @@ Q_OBJECT public:
     void stop(const GenTime & startTime);
     void setVolume(double volume);
 
-    QPixmap extractFrame(int frame_position, int width, int height);
+    QPixmap extractFrame(int frame_position, int width = -1, int height = -1);
     /** Wraps the VEML command of the same name. Tells the renderer to
     play the current scene at the speed specified, relative to normal
     playback. e.g. 1.0 is normal speed, 0.0 is paused, -1.0 means play