qv4l2: added right click menu to capturewin
authorAnton Arbring <aarbring@cisco.com>
Fri, 18 Jul 2014 12:45:30 +0000 (14:45 +0200)
committerHans Verkuil <hans.verkuil@cisco.com>
Fri, 18 Jul 2014 14:58:08 +0000 (16:58 +0200)
Making it possible to do certain actions in
and out of fullscreen mode

Signed-off-by: Anton Arbring <aarbring@cisco.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
utils/qv4l2/capture-win-gl.cpp
utils/qv4l2/capture-win-gl.h
utils/qv4l2/capture-win-qt.cpp
utils/qv4l2/capture-win-qt.h
utils/qv4l2/capture-win.cpp
utils/qv4l2/capture-win.h
utils/qv4l2/fullscreen.png [new file with mode: 0644]
utils/qv4l2/fullscreenexit.png [new file with mode: 0644]
utils/qv4l2/qv4l2.cpp
utils/qv4l2/qv4l2.h
utils/qv4l2/qv4l2.qrc

index b785658..29cd1e2 100644 (file)
@@ -24,7 +24,8 @@
 
 #include <stdio.h>
 
-CaptureWinGL::CaptureWinGL()
+CaptureWinGL::CaptureWinGL(ApplicationWindow *aw) :
+       CaptureWin(aw)
 {
 #ifdef HAVE_QTGL
        CaptureWin::buildWindow(&m_videoSurface);
index 38884bd..bd7d6d6 100644 (file)
@@ -106,7 +106,7 @@ private:
 class CaptureWinGL : public CaptureWin
 {
 public:
-       CaptureWinGL();
+       CaptureWinGL(ApplicationWindow *aw);
        ~CaptureWinGL();
 
        void stop();
index 7aafabc..41266de 100644 (file)
@@ -19,7 +19,8 @@
 
 #include "capture-win-qt.h"
 
-CaptureWinQt::CaptureWinQt() :
+CaptureWinQt::CaptureWinQt(ApplicationWindow *aw) :
+       CaptureWin(aw),
        m_image(new QImage(0, 0, QImage::Format_Invalid)),
        m_data(NULL),
        m_supportedFormat(false),
index 5076e48..a4b80f3 100644 (file)
@@ -30,7 +30,7 @@
 class CaptureWinQt : public CaptureWin
 {
 public:
-       CaptureWinQt();
+       CaptureWinQt(ApplicationWindow *aw);
        ~CaptureWinQt();
 
        void stop();
index 864b05d..afca6bd 100644 (file)
@@ -33,7 +33,8 @@ bool CaptureWin::m_enableScaling = true;
 double CaptureWin::m_pixelAspectRatio = 1.0;
 CropMethod CaptureWin::m_cropMethod = QV4L2_CROP_NONE;
 
-CaptureWin::CaptureWin()
+CaptureWin::CaptureWin(ApplicationWindow *aw) :
+       appWin(aw)
 {
        setWindowTitle("V4L2 Capture");
        m_hotkeyClose = new QShortcut(Qt::CTRL+Qt::Key_W, this);
@@ -44,6 +45,12 @@ CaptureWin::CaptureWin()
        connect(m_hotkeyExitFullscreen, SIGNAL(activated()), this, SLOT(escape()));
        m_hotkeyToggleFullscreen = new QShortcut(Qt::Key_F, this);
        connect(m_hotkeyToggleFullscreen, SIGNAL(activated()), this, SLOT(fullScreen()));
+       m_exitFullScreen = new QAction(QIcon(":/fullscreenexit.png"), "Exit Fullscreen", this);
+       m_exitFullScreen->setShortcut(Qt::Key_Escape);
+       connect(m_exitFullScreen, SIGNAL(triggered()), this, SLOT(escape()));
+       m_enterFullScreen = new QAction(QIcon(":/fullscreen.png"), "Show Fullscreen", this);
+       m_enterFullScreen->setShortcut(Qt::Key_F);
+       connect(m_enterFullScreen, SIGNAL(triggered()), this, SLOT(fullScreen()));
        m_frame.format = 0;
        m_frame.size.setWidth(0);
        m_frame.size.setHeight(0);
@@ -114,6 +121,9 @@ void CaptureWin::buildWindow(QWidget *videoSurface)
        vbox->addWidget(bottom, 0, Qt::AlignBottom);
        vbox->getContentsMargins(&l, &t, &r, &b);
        vbox->setSpacing(t+b);
+       
+       setContextMenuPolicy(Qt::CustomContextMenu);
+       connect(this, SIGNAL(customContextMenuRequested(QPoint)), SLOT(customMenuRequested(QPoint)));
 }
 
 void CaptureWin::resetSize()
@@ -348,6 +358,25 @@ void CaptureWin::toggleFullScreen()
        }
 }
 
+void CaptureWin::customMenuRequested(QPoint pos)
+{
+       QMenu *menu=new QMenu(this);
+       
+       if (isFullScreen()) {
+               menu->addAction(m_exitFullScreen);
+               menu->setStyleSheet("background-color:none;");
+       } else {
+               menu->addAction(m_enterFullScreen);
+       }
+       
+       menu->addAction(appWin->m_resetScalingAct);
+       menu->addAction(appWin->m_useBlendingAct);
+       menu->addAction(appWin->m_snapshotAct);
+       menu->addAction(appWin->m_showFramesAct);
+       
+       menu->popup(mapToGlobal(pos));
+}
+
 void CaptureWin::closeEvent(QCloseEvent *event)
 {
        QWidget::closeEvent(event);
index 54bb800..8f49ebd 100644 (file)
@@ -26,6 +26,7 @@
 #include <QShortcut>
 #include <QLabel>
 #include <QPushButton>
+#include <QMenu>
 
 enum CropMethod {
        // Crop Height
@@ -54,13 +55,14 @@ struct crop {              // cropInfo
        bool updated;
 };
 
+class ApplicationWindow;
 
 class CaptureWin : public QWidget
 {
        Q_OBJECT
 
 public:
-       CaptureWin();
+       CaptureWin(ApplicationWindow *aw);
        ~CaptureWin();
 
        void setWindowSize(QSize size);
@@ -72,6 +74,8 @@ public:
        virtual void setBlending(bool enable) = 0;
        void setCropMethod(CropMethod crop);
        void toggleFullScreen();
+       QAction *m_exitFullScreen;
+       QAction *m_enterFullScreen;
 
        /**
         * @brief Set a frame into the capture window.
@@ -148,6 +152,7 @@ public:
 
 public slots:
        void resetSize();
+       void customMenuRequested(QPoint pos);
 
 private slots:
        void fullScreen();
@@ -216,6 +221,7 @@ signals:
        void close();
 
 private:
+       ApplicationWindow *appWin;
        static double m_pixelAspectRatio;
        static CropMethod m_cropMethod;
        QShortcut *m_hotkeyClose;
diff --git a/utils/qv4l2/fullscreen.png b/utils/qv4l2/fullscreen.png
new file mode 100644 (file)
index 0000000..3e58932
Binary files /dev/null and b/utils/qv4l2/fullscreen.png differ
diff --git a/utils/qv4l2/fullscreenexit.png b/utils/qv4l2/fullscreenexit.png
new file mode 100644 (file)
index 0000000..f2a1359
Binary files /dev/null and b/utils/qv4l2/fullscreenexit.png differ
index 2f9b000..7772597 100644 (file)
@@ -392,10 +392,10 @@ void ApplicationWindow::newCaptureWin()
 
        switch (m_renderMethod) {
        case QV4L2_RENDER_GL:
-               m_capture = new CaptureWinGL;
+               m_capture = new CaptureWinGL(this);
                break;
        default:
-               m_capture = new CaptureWinQt;
+               m_capture = new CaptureWinQt(this);
                break;
        }
 
index a73ee51..b8c2f5f 100644 (file)
@@ -141,7 +141,6 @@ private slots:
        void updateColorspace();
        void updateDisplayColorspace();
        void clearBuffers();
-
        void about();
 
 public:
@@ -152,6 +151,10 @@ public:
        void errorCtrl(unsigned id, int err, const QString &v);
        void info(const QString &info);
        virtual void closeEvent(QCloseEvent *event);
+       QAction *m_resetScalingAct;
+       QAction *m_useBlendingAct;
+       QAction *m_snapshotAct;
+       QAction *m_showFramesAct;
 
 private:
        void addWidget(QGridLayout *grid, QWidget *w, Qt::Alignment align = Qt::AlignLeft);
@@ -197,15 +200,11 @@ private:
        GeneralTab *m_genTab;
        VbiTab *m_vbiTab;
        QAction *m_capStartAct;
-       QAction *m_snapshotAct;
        QAction *m_saveRawAct;
-       QAction *m_showFramesAct;
        QAction *m_useGLAct;
-       QAction *m_useBlendingAct;
        QAction *m_showAllAudioAct;
        QAction *m_audioBufferAct;
        QAction *m_scalingAct;
-       QAction *m_resetScalingAct;
        QString m_filename;
        QSignalMapper *m_sigMapper;
        QTabWidget *m_tabs;
index 469423b..3a91a0c 100644 (file)
@@ -9,5 +9,7 @@
        <file>video-television.png</file>
        <file>qv4l2.png</file>
        <file>enterbutt.png</file>
+       <file>fullscreen.png</file>
+       <file>fullscreenexit.png</file>
     </qresource>
 </RCC>