]> git.sur5r.net Git - minitube/blob - src/videoareawidget.cpp
Imported Upstream version 1.4.3
[minitube] / src / videoareawidget.cpp
1 #include "videoareawidget.h"
2 #include "videomimedata.h"
3
4 VideoAreaWidget::VideoAreaWidget(QWidget *parent) : QWidget(parent) {
5     QBoxLayout *vLayout = new QVBoxLayout(this);
6     vLayout->setMargin(0);
7     vLayout->setSpacing(0);
8
9 #ifdef APP_WIN
10     QPalette p = palette();
11     p.setBrush(QPalette::Window, Qt::black);
12     setPalette(p);
13     setAutoFillBackground(true);
14 #endif
15
16     // hidden message widget
17     messageLabel = new QLabel(this);
18     messageLabel->setOpenExternalLinks(true);
19     messageLabel->setMargin(7);
20     messageLabel->setBackgroundRole(QPalette::ToolTipBase);
21     messageLabel->setForegroundRole(QPalette::ToolTipText);
22     messageLabel->setAutoFillBackground(true);
23     messageLabel->setWordWrap(true);
24     messageLabel->hide();
25     vLayout->addWidget(messageLabel);
26     
27     stackedLayout = new QStackedLayout();
28     vLayout->addLayout(stackedLayout);
29     
30     setLayout(vLayout);
31     setAcceptDrops(true);
32     
33     setMouseTracking(true);
34 }
35
36 void VideoAreaWidget::setVideoWidget(QWidget *videoWidget) {
37     this->videoWidget = videoWidget;
38     videoWidget->setMouseTracking(true);
39     stackedLayout->addWidget(videoWidget);
40 }
41
42 void VideoAreaWidget::setLoadingWidget(LoadingWidget *loadingWidget) {
43     this->loadingWidget = loadingWidget;
44     stackedLayout->addWidget(loadingWidget);
45 }
46
47 void VideoAreaWidget::showVideo() {
48     stackedLayout->setCurrentWidget(videoWidget);
49 }
50
51 void VideoAreaWidget::showError(QString message) {
52     // loadingWidget->setError(message);
53     messageLabel->setText(message);
54     messageLabel->show();
55     stackedLayout->setCurrentWidget(loadingWidget);
56 }
57
58 void VideoAreaWidget::showLoading(Video *video) {
59     this->loadingWidget->setVideo(video);
60     stackedLayout->setCurrentWidget(loadingWidget);
61     messageLabel->hide();
62     messageLabel->clear();
63 }
64
65 void VideoAreaWidget::clear() {
66     stackedLayout->setCurrentWidget(loadingWidget);
67     loadingWidget->clear();
68     messageLabel->hide();
69     messageLabel->clear();
70 }
71
72 void VideoAreaWidget::mouseDoubleClickEvent(QMouseEvent *event) {
73     if (event->button() == Qt::LeftButton)
74         emit doubleClicked();
75 }
76
77 void VideoAreaWidget::mousePressEvent(QMouseEvent *event) {
78     QWidget::mousePressEvent(event);
79
80     if(event->button() == Qt::RightButton)
81         emit rightClicked();
82 }
83
84 void VideoAreaWidget::dragEnterEvent(QDragEnterEvent *event) {
85     // qDebug() << event->mimeData()->formats();
86     if (event->mimeData()->hasFormat("application/x-minitube-video")) {
87         event->acceptProposedAction();
88     }
89 }
90
91 void VideoAreaWidget::dropEvent(QDropEvent *event) {
92     
93     const VideoMimeData* videoMimeData = dynamic_cast<const VideoMimeData*>( event->mimeData() );
94     if(!videoMimeData ) return;
95     
96     QList<Video*> droppedVideos = videoMimeData->videos();
97     if (droppedVideos.isEmpty())
98         return;
99     Video *video = droppedVideos.first();
100     int row = listModel->rowForVideo(video);
101     if (row != -1)
102         listModel->setActiveRow(row);
103     event->acceptProposedAction();
104 }
105
106 void VideoAreaWidget::mouseMoveEvent(QMouseEvent *event) {
107     QWidget::mouseMoveEvent(event);
108
109     QWidget* mainWindow = window();
110     if (!mainWindow->isFullScreen()) return;
111
112     // qDebug() << "VideoAreaWidget::mouseMoveEvent" << event->pos();
113
114     const int x = event->pos().x();
115     const int y = event->pos().y();
116
117     bool visible = y <= 10;
118     bool ret = QMetaObject::invokeMethod(mainWindow, "showFullscreenToolbar", Qt::DirectConnection, Q_ARG(bool, visible));
119     if (!ret) qDebug() << "showFullscreenToolbar invokeMethod failed";
120
121     visible = x <= 10;
122     ret = QMetaObject::invokeMethod(mainWindow, "showFullscreenPlaylist", Qt::DirectConnection, Q_ARG(bool, visible));
123     if (!ret) qDebug() << "showFullscreenPlaylist invokeMethod failed";
124 }
125
126 void VideoAreaWidget::leaveEvent(QMouseEvent *event) {
127     QWidget::leaveEvent(event);
128
129     QWidget* mainWindow = window();
130     if (!mainWindow->isFullScreen()) return;
131
132     bool visible = false;
133     bool ret = QMetaObject::invokeMethod(mainWindow, "showFullscreenToolbar", Qt::DirectConnection, Q_ARG(bool, visible));
134     if (!ret) qDebug() << "showFullscreenToolbar invokeMethod failed";
135
136     ret = QMetaObject::invokeMethod(mainWindow, "showFullscreenPlaylist", Qt::DirectConnection, Q_ARG(bool, visible));
137     if (!ret) qDebug() << "showFullscreenPlaylist invokeMethod failed";
138 }