]> git.sur5r.net Git - minitube/blob - src/videoareawidget.cpp
Imported Upstream version 1.9
[minitube] / src / videoareawidget.cpp
1 #include "videoareawidget.h"
2 #include "videomimedata.h"
3 #ifndef Q_WS_X11
4 #include "extra.h"
5 #endif
6
7 VideoAreaWidget::VideoAreaWidget(QWidget *parent) : QWidget(parent) {
8     QBoxLayout *vLayout = new QVBoxLayout(this);
9     vLayout->setMargin(0);
10     vLayout->setSpacing(0);
11
12     QPalette p = palette();
13     p.setBrush(QPalette::Window, Qt::black);
14     setPalette(p);
15     setAutoFillBackground(true);
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     snapshotPreview = new QLabel(this);
32     stackedLayout->addWidget(snapshotPreview);
33     
34     setLayout(vLayout);
35     setAcceptDrops(true);
36     
37     setMouseTracking(true);
38 }
39
40 void VideoAreaWidget::setVideoWidget(QWidget *videoWidget) {
41     this->videoWidget = videoWidget;
42     videoWidget->setMouseTracking(true);
43     stackedLayout->addWidget(videoWidget);
44 }
45
46 void VideoAreaWidget::setLoadingWidget(LoadingWidget *loadingWidget) {
47     this->loadingWidget = loadingWidget;
48     stackedLayout->addWidget(loadingWidget);
49 }
50
51 void VideoAreaWidget::showVideo() {
52     stackedLayout->setCurrentWidget(videoWidget);
53 }
54
55 void VideoAreaWidget::showError(QString message) {
56     // loadingWidget->setError(message);
57     messageLabel->setText(message);
58     messageLabel->show();
59     stackedLayout->setCurrentWidget(loadingWidget);
60 }
61
62 void VideoAreaWidget::showLoading(Video *video) {
63     stackedLayout->setCurrentWidget(loadingWidget);
64     this->loadingWidget->setVideo(video);
65     messageLabel->hide();
66     messageLabel->clear();
67 }
68
69 void VideoAreaWidget::showSnapshotPreview(QPixmap pixmap) {
70     snapshotPreview->setPixmap(pixmap);
71     stackedLayout->setCurrentWidget(snapshotPreview);
72 #ifndef Q_WS_X11
73     Extra::flashInWidget(snapshotPreview);
74 #endif
75     QTimer::singleShot(1500, this, SLOT(hideSnapshotPreview()));
76 }
77
78 void VideoAreaWidget::hideSnapshotPreview() {
79     stackedLayout->setCurrentWidget(videoWidget);
80 }
81
82 void VideoAreaWidget::clear() {
83     stackedLayout->setCurrentWidget(loadingWidget);
84     loadingWidget->clear();
85     messageLabel->hide();
86     messageLabel->clear();
87     snapshotPreview->clear();
88 }
89
90 void VideoAreaWidget::mouseDoubleClickEvent(QMouseEvent *event) {
91     if (event->button() == Qt::LeftButton)
92         emit doubleClicked();
93 }
94
95 void VideoAreaWidget::mousePressEvent(QMouseEvent *event) {
96     QWidget::mousePressEvent(event);
97
98     if(event->button() == Qt::RightButton)
99         emit rightClicked();
100 }
101
102 void VideoAreaWidget::dragEnterEvent(QDragEnterEvent *event) {
103     // qDebug() << event->mimeData()->formats();
104     if (event->mimeData()->hasFormat("application/x-minitube-video")) {
105         event->acceptProposedAction();
106     }
107 }
108
109 void VideoAreaWidget::dropEvent(QDropEvent *event) {
110     
111     const VideoMimeData* videoMimeData = dynamic_cast<const VideoMimeData*>( event->mimeData() );
112     if(!videoMimeData ) return;
113     
114     QList<Video*> droppedVideos = videoMimeData->videos();
115     if (droppedVideos.isEmpty())
116         return;
117     Video *video = droppedVideos.first();
118     int row = listModel->rowForVideo(video);
119     if (row != -1)
120         listModel->setActiveRow(row);
121     event->acceptProposedAction();
122 }