]> git.sur5r.net Git - minitube/blobdiff - src/videoareawidget.cpp
New upstream version 2.9
[minitube] / src / videoareawidget.cpp
index 62106148c4560d16a6a88065b1138b007c577b06..19973fa7485c487eea7f3aae4470642662135a63 100644 (file)
@@ -19,20 +19,55 @@ along with Minitube.  If not, see <http://www.gnu.org/licenses/>.
 $END_LICENSE */
 
 #include "videoareawidget.h"
-#include "video.h"
 #include "loadingwidget.h"
+#include "mainwindow.h"
 #include "playlistmodel.h"
+#include "video.h"
 #include "videomimedata.h"
-#include "mainwindow.h"
 #ifdef Q_OS_MAC
 #include "macutils.h"
 #endif
 #include "snapshotpreview.h"
+#include "fontutils.h"
+
+namespace {
+
+class MessageWidget : public QWidget {
+public:
+    MessageWidget(QWidget *parent = nullptr) : QWidget(parent) {
+        QPalette p = palette();
+        p.setColor(QPalette::Window, Qt::black);
+        p.setColor(QPalette::WindowText, Qt::darkGray);
+        p.setColor(QPalette::Base, Qt::black);
+        p.setColor(QPalette::Text, Qt::darkGray);
+        setPalette(p);
+        setAutoFillBackground(true);
+
+        QBoxLayout *l = new QHBoxLayout(this);
+        l->setMargin(32);
+        l->setSpacing(32);
+        l->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
+
+        QLabel *arrowLabel = new QLabel("←");
+        arrowLabel->setFont(FontUtils::light(64));
+        arrowLabel->setPalette(p);
+        l->addWidget(arrowLabel);
+
+        QLabel *msgLabel = new QLabel(tr("Pick a video"));
+        msgLabel->setFont(FontUtils::light(32));
+        msgLabel->setPalette(p);
+        l->addWidget(msgLabel);
+    }
+};
+}
+
+VideoAreaWidget::VideoAreaWidget(QWidget *parent)
+    : QWidget(parent), videoWidget(0), messageWidget(0) {
+    setAttribute(Qt::WA_OpaquePaintEvent);
 
-VideoAreaWidget::VideoAreaWidget(QWidget *parent) : QWidget(parent), videoWidget(0) {
-    QBoxLayout *vLayout = new QVBoxLayout(this);
-    vLayout->setMargin(0);
-    vLayout->setSpacing(0);
+    QBoxLayout *layout = new QVBoxLayout(this);
+    layout->setMargin(0);
+    layout->setSpacing(0);
 
     // hidden message widget
     messageLabel = new QLabel(this);
@@ -43,10 +78,10 @@ VideoAreaWidget::VideoAreaWidget(QWidget *parent) : QWidget(parent), videoWidget
     messageLabel->setAutoFillBackground(true);
     messageLabel->setWordWrap(true);
     messageLabel->hide();
-    vLayout->addWidget(messageLabel);
+    layout->addWidget(messageLabel);
 
     stackedLayout = new QStackedLayout();
-    vLayout->addLayout(stackedLayout);
+    layout->addLayout(stackedLayout);
 
 #ifdef APP_SNAPSHOT
     snapshotPreview = new SnapshotPreview();
@@ -54,13 +89,15 @@ VideoAreaWidget::VideoAreaWidget(QWidget *parent) : QWidget(parent), videoWidget
 #endif
 
     setAcceptDrops(true);
-    setMouseTracking(true);
     setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+
+    setContextMenuPolicy(Qt::CustomContextMenu);
+    connect(this, SIGNAL(customContextMenuRequested(const QPoint &)),
+            SLOT(showContextMenu(const QPoint &)));
 }
 
 void VideoAreaWidget::setVideoWidget(QWidget *videoWidget) {
     this->videoWidget = videoWidget;
-    videoWidget->setMouseTracking(true);
     stackedLayout->addWidget(videoWidget);
 }
 
@@ -71,18 +108,24 @@ void VideoAreaWidget::setLoadingWidget(LoadingWidget *loadingWidget) {
 }
 
 void VideoAreaWidget::showVideo() {
-    if (videoWidget)
-        stackedLayout->setCurrentWidget(videoWidget);
+    if (videoWidget) stackedLayout->setCurrentWidget(videoWidget);
     loadingWidget->clear();
 }
 
 void VideoAreaWidget::showError(const QString &message) {
-    // loadingWidget->setError(message);
     messageLabel->setText(message);
     messageLabel->show();
     stackedLayout->setCurrentWidget(loadingWidget);
 }
 
+void VideoAreaWidget::showPickMessage() {
+    if (!messageWidget) {
+        messageWidget = new MessageWidget();
+        stackedLayout->addWidget(messageWidget);
+    }
+    stackedLayout->setCurrentWidget(messageWidget);
+}
+
 void VideoAreaWidget::showLoading(Video *video) {
     messageLabel->hide();
     messageLabel->clear();
@@ -99,9 +142,7 @@ void VideoAreaWidget::showSnapshotPreview(const QPixmap &pixmap) {
     snapshotPreview->start(videoWidget, pixmap, soundOnly);
 }
 
-void VideoAreaWidget::hideSnapshotPreview() {
-
-}
+void VideoAreaWidget::hideSnapshotPreview() {}
 #endif
 
 void VideoAreaWidget::clear() {
@@ -112,38 +153,7 @@ void VideoAreaWidget::clear() {
 }
 
 void VideoAreaWidget::mouseDoubleClickEvent(QMouseEvent *event) {
-    if (event->button() == Qt::LeftButton)
-        emit doubleClicked();
-}
-
-void VideoAreaWidget::mousePressEvent(QMouseEvent *event) {
-    QWidget::mousePressEvent(event);
-
-    if(event->button() == Qt::RightButton)
-        emit rightClicked();
-
-    else if (event->button() == Qt::LeftButton) {
-        bool isNormalWindow = !window()->isMaximized() &&
-                !MainWindow::instance()->isReallyFullScreen();
-        if (isNormalWindow) {
-            dragPosition = event->globalPos() - window()->frameGeometry().topLeft();
-            event->accept();
-        }
-    }
-}
-
-void VideoAreaWidget::mouseMoveEvent(QMouseEvent *event) {
-    bool isNormalWindow = !window()->isMaximized() &&
-            !MainWindow::instance()->isReallyFullScreen();
-    if (event->buttons() & Qt::LeftButton && isNormalWindow) {
-        QPoint p = event->globalPos() - dragPosition;
-#ifdef Q_OS_MAC
-        // FIXME mac::moveWindowTo(window()->winId(), p.x(), p.y());
-#else
-        window()->move(p);
-#endif
-        event->accept();
-    }
+    if (event->button() == Qt::LeftButton) emit doubleClicked();
 }
 
 void VideoAreaWidget::dragEnterEvent(QDragEnterEvent *event) {
@@ -154,16 +164,18 @@ void VideoAreaWidget::dragEnterEvent(QDragEnterEvent *event) {
 }
 
 void VideoAreaWidget::dropEvent(QDropEvent *event) {
-    
-    const VideoMimeData* videoMimeData = qobject_cast<const VideoMimeData*>( event->mimeData() );
-    if(!videoMimeData ) return;
-    
-    QList<Video*> droppedVideos = videoMimeData->videos();
-    if (droppedVideos.isEmpty())
-        return;
-    Video *video = droppedVideos.first();
+    const VideoMimeData *videoMimeData = qobject_cast<const VideoMimeData *>(event->mimeData());
+    if (!videoMimeData) return;
+
+    QVector<Video *> droppedVideos = videoMimeData->getVideos();
+    if (droppedVideos.isEmpty()) return;
+    Video *video = droppedVideos.at(0);
     int row = listModel->rowForVideo(video);
-    if (row != -1)
-        listModel->setActiveRow(row);
+    if (row != -1) listModel->setActiveRow(row);
     event->acceptProposedAction();
 }
+
+void VideoAreaWidget::showContextMenu(const QPoint &point) {
+    QMenu *menu = MainWindow::instance()->getMenu("video");
+    menu->exec(mapToGlobal(point));
+}