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