]> git.sur5r.net Git - minitube/blob - src/videoareawidget.cpp
Added multimedia hotkeys support for stop, pause and skip actions
[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     // hidden message widget
10     messageLabel = new QLabel(this);
11     messageLabel->setOpenExternalLinks(true);
12     messageLabel->setMargin(7);
13     messageLabel->setBackgroundRole(QPalette::ToolTipBase);
14     messageLabel->setForegroundRole(QPalette::ToolTipText);
15     messageLabel->setAutoFillBackground(true);
16     messageLabel->setWordWrap(true);
17     messageLabel->hide();
18     vLayout->addWidget(messageLabel);
19     
20     stackedLayout = new QStackedLayout();
21     vLayout->addLayout(stackedLayout);
22     
23     setLayout(vLayout);
24     setAcceptDrops(true);
25     
26     // mouse autohide
27     setMouseTracking(true);
28     mouseTimer = new QTimer(this);
29     mouseTimer->setInterval(3000);
30     mouseTimer->setSingleShot(true);
31     connect(mouseTimer, SIGNAL(timeout()), SLOT(hideMouse()));
32 }
33
34 void VideoAreaWidget::setVideoWidget(QWidget *videoWidget) {
35     this->videoWidget = videoWidget;
36     stackedLayout->addWidget(videoWidget);
37 }
38
39 void VideoAreaWidget::setLoadingWidget(LoadingWidget *loadingWidget) {
40     this->loadingWidget = loadingWidget;
41     stackedLayout->addWidget(loadingWidget);
42 }
43
44 void VideoAreaWidget::showVideo() {
45     stackedLayout->setCurrentWidget(videoWidget);
46 }
47
48 void VideoAreaWidget::showError(QString message) {
49     // loadingWidget->setError(message);
50     messageLabel->setText(message);
51     messageLabel->show();
52     stackedLayout->setCurrentWidget(loadingWidget);
53 }
54
55 void VideoAreaWidget::showLoading(Video *video) {
56     this->loadingWidget->setVideo(video);
57     stackedLayout->setCurrentWidget(loadingWidget);
58     messageLabel->hide();
59     messageLabel->clear();
60 }
61
62 void VideoAreaWidget::mouseDoubleClickEvent(QMouseEvent *event) {
63     if (event->button() == Qt::LeftButton)
64         emit doubleClicked();
65 }
66
67 void VideoAreaWidget::mousePressEvent(QMouseEvent *event) {
68     switch(event->button() == Qt::RightButton)
69             emit rightClicked();
70 }
71
72 void VideoAreaWidget::mouseMoveEvent(QMouseEvent * /* event */) {
73     // show the normal cursor
74     unsetCursor();
75     // then hide it again after a few seconds
76     mouseTimer->start();
77 }
78
79 void VideoAreaWidget::hideMouse() {
80     setCursor(QCursor(Qt::BlankCursor));
81 }
82
83 void VideoAreaWidget::dragEnterEvent(QDragEnterEvent *event) {
84     qDebug() << event->mimeData()->formats();
85     if (event->mimeData()->hasFormat("application/x-minitube-video")) {
86         event->acceptProposedAction();
87     }
88 }
89
90 void VideoAreaWidget::dropEvent(QDropEvent *event) {
91     
92     const VideoMimeData* videoMimeData = dynamic_cast<const VideoMimeData*>( event->mimeData() );
93     if(!videoMimeData ) return;
94     
95     QList<Video*> droppedVideos = videoMimeData->videos();
96     foreach( Video *video, droppedVideos) {
97         int row = listModel->rowForVideo(video);
98         if (row != -1)
99             listModel->setActiveRow(row);
100     }
101     event->acceptProposedAction();
102 }