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