]> git.sur5r.net Git - minitube/blob - src/videoareawidget.cpp
bf2ae03312302b58f33557e840aa6249196bbea0
[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     stackedLayout->setCurrentWidget(loadingWidget);
60     this->loadingWidget->setVideo(video);
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 #ifdef Q_WS_X11
110     QWidget* mainWindow = window();
111     if (!mainWindow->isFullScreen()) return;
112
113     // qDebug() << "VideoAreaWidget::mouseMoveEvent" << event->pos();
114
115     const int x = event->pos().x();
116     const int y = event->pos().y();
117
118     bool visible = y <= 10;
119     bool ret = QMetaObject::invokeMethod(mainWindow, "showFullscreenToolbar", Qt::DirectConnection, Q_ARG(bool, visible));
120     if (!ret) qDebug() << "showFullscreenToolbar invokeMethod failed";
121
122     visible = x <= 10;
123     ret = QMetaObject::invokeMethod(mainWindow, "showFullscreenPlaylist", Qt::DirectConnection, Q_ARG(bool, visible));
124     if (!ret) qDebug() << "showFullscreenPlaylist invokeMethod failed";
125 #endif
126 }
127
128 void VideoAreaWidget::leaveEvent(QMouseEvent *event) {
129     QWidget::leaveEvent(event);
130
131 #ifdef Q_WS_X11
132     QWidget* mainWindow = window();
133     if (!mainWindow->isFullScreen()) return;
134
135     bool visible = false;
136     bool ret = QMetaObject::invokeMethod(mainWindow, "showFullscreenToolbar", Qt::DirectConnection, Q_ARG(bool, visible));
137     if (!ret) qDebug() << "showFullscreenToolbar invokeMethod failed";
138
139     ret = QMetaObject::invokeMethod(mainWindow, "showFullscreenPlaylist", Qt::DirectConnection, Q_ARG(bool, visible));
140     if (!ret) qDebug() << "showFullscreenPlaylist invokeMethod failed";
141 #endif
142 }