]> git.sur5r.net Git - minitube/blobdiff - src/videoareawidget.cpp
Nicer selection style on Mac & Win
[minitube] / src / videoareawidget.cpp
index 645fc65cde405f77e6bc6ac4930714d2c55f0d71..f4b48e6ecae75303d638cf5dafd44646abfe2a98 100644 (file)
@@ -1,12 +1,34 @@
 #include "videoareawidget.h"
+#include "videomimedata.h"
 
 VideoAreaWidget::VideoAreaWidget(QWidget *parent) : QWidget(parent) {
-    stackedLayout = new QStackedLayout(this);
-    setLayout(stackedLayout);
+    QBoxLayout *vLayout = new QVBoxLayout(this);
+    vLayout->setMargin(0);
+    vLayout->setSpacing(0);
+    
+    // hidden message widget
+    messageLabel = new QLabel(this);
+    messageLabel->setOpenExternalLinks(true);
+    messageLabel->setMargin(7);
+    messageLabel->setBackgroundRole(QPalette::ToolTipBase);
+    messageLabel->setForegroundRole(QPalette::ToolTipText);
+    messageLabel->setAutoFillBackground(true);
+    messageLabel->setWordWrap(true);
+    messageLabel->hide();
+    vLayout->addWidget(messageLabel);
+    
+    stackedLayout = new QStackedLayout();
+    vLayout->addLayout(stackedLayout);
+    
+    setLayout(vLayout);
+    setAcceptDrops(true);
+    
+    setMouseTracking(true);
 }
 
 void VideoAreaWidget::setVideoWidget(QWidget *videoWidget) {
     this->videoWidget = videoWidget;
+    videoWidget->setMouseTracking(true);
     stackedLayout->addWidget(videoWidget);
 }
 
@@ -19,9 +41,25 @@ void VideoAreaWidget::showVideo() {
     stackedLayout->setCurrentWidget(videoWidget);
 }
 
+void VideoAreaWidget::showError(QString message) {
+    // loadingWidget->setError(message);
+    messageLabel->setText(message);
+    messageLabel->show();
+    stackedLayout->setCurrentWidget(loadingWidget);
+}
+
 void VideoAreaWidget::showLoading(Video *video) {
     this->loadingWidget->setVideo(video);
     stackedLayout->setCurrentWidget(loadingWidget);
+    messageLabel->hide();
+    messageLabel->clear();
+}
+
+void VideoAreaWidget::clear() {
+    stackedLayout->setCurrentWidget(loadingWidget);
+    loadingWidget->clear();
+    messageLabel->hide();
+    messageLabel->clear();
 }
 
 void VideoAreaWidget::mouseDoubleClickEvent(QMouseEvent *event) {
@@ -30,6 +68,50 @@ void VideoAreaWidget::mouseDoubleClickEvent(QMouseEvent *event) {
 }
 
 void VideoAreaWidget::mousePressEvent(QMouseEvent *event) {
-    switch(event->button() == Qt::RightButton)
-            emit rightClicked();
+    QWidget::mousePressEvent(event);
+
+    if(event->button() == Qt::RightButton)
+        emit rightClicked();
+}
+
+void VideoAreaWidget::dragEnterEvent(QDragEnterEvent *event) {
+    // qDebug() << event->mimeData()->formats();
+    if (event->mimeData()->hasFormat("application/x-minitube-video")) {
+        event->acceptProposedAction();
+    }
+}
+
+void VideoAreaWidget::dropEvent(QDropEvent *event) {
+    
+    const VideoMimeData* videoMimeData = dynamic_cast<const VideoMimeData*>( event->mimeData() );
+    if(!videoMimeData ) return;
+    
+    QList<Video*> droppedVideos = videoMimeData->videos();
+    if (droppedVideos.isEmpty())
+        return;
+    Video *video = droppedVideos.first();
+    int row = listModel->rowForVideo(video);
+    if (row != -1)
+        listModel->setActiveRow(row);
+    event->acceptProposedAction();
+}
+
+void VideoAreaWidget::mouseMoveEvent(QMouseEvent *event) {
+    QWidget::mouseMoveEvent(event);
+
+    QWidget* mainWindow = window();
+    if (!mainWindow->isFullScreen()) return;
+
+    // qDebug() << "VideoAreaWidget::mouseMoveEvent" << event->pos();
+
+    const int x = event->pos().x();
+    const int y = event->pos().y();
+
+    bool visible = y <= 0;
+    bool ret = QMetaObject::invokeMethod(mainWindow, "showFullscreenToolbar", Qt::DirectConnection, Q_ARG(bool, visible));
+    if (!ret) qDebug() << "showFullscreenToolbar invokeMethod failed";
+
+    visible = x <= 0;
+    ret = QMetaObject::invokeMethod(mainWindow, "showFullscreenPlaylist", Qt::DirectConnection, Q_ARG(bool, visible));
+    if (!ret) qDebug() << "showFullscreenPlaylist invokeMethod failed";
 }