]> git.sur5r.net Git - minitube/blobdiff - src/videoareawidget.cpp
Nicer selection style on Mac & Win
[minitube] / src / videoareawidget.cpp
index 9300b9ea4af7eb6b98647e4c544757c539749b0c..f4b48e6ecae75303d638cf5dafd44646abfe2a98 100644 (file)
@@ -2,13 +2,33 @@
 #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);
 }
 
@@ -22,13 +42,24 @@ void VideoAreaWidget::showVideo() {
 }
 
 void VideoAreaWidget::showError(QString message) {
-    loadingWidget->setError(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) {
@@ -37,27 +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();
+    // 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();
-    foreach( Video *video, droppedVideos) {
-        int row = listModel->rowForVideo(video);
-        if (row != -1)
-            listModel->setActiveRow(row);
-    }
+    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";
+}