X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fvideoareawidget.cpp;h=f4b48e6ecae75303d638cf5dafd44646abfe2a98;hb=acda6aee34b1aa7cec6f9aa04e73f4b0c3e1e5ee;hp=645fc65cde405f77e6bc6ac4930714d2c55f0d71;hpb=0dbdb73afb9de59463fcccd4f6f25aa6b9e0eb9d;p=minitube diff --git a/src/videoareawidget.cpp b/src/videoareawidget.cpp index 645fc65..f4b48e6 100644 --- a/src/videoareawidget.cpp +++ b/src/videoareawidget.cpp @@ -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( event->mimeData() ); + if(!videoMimeData ) return; + + QList 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"; }