diff options
Diffstat (limited to 'videoviewer.cpp')
-rw-r--r-- | videoviewer.cpp | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/videoviewer.cpp b/videoviewer.cpp new file mode 100644 index 0000000..b94790a --- /dev/null +++ b/videoviewer.cpp @@ -0,0 +1,81 @@ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version + 2 of the License, or (at your option) any later version. +*/ + +#include <QMediaPlayer> +#include <QMediaPlaylist> +#include <QKeyEvent> +#include <QCloseEvent> +#include <QSettings> + +#include "videoviewer.h" +#include "smglobals.h" + +VideoViewer::VideoViewer(QWidget *parent) : QVideoWidget(parent) { + mPlayer = new QMediaPlayer(this); + mPlayer->setVideoOutput(this); + QMediaPlaylist *playList = new QMediaPlaylist; + mPlayer->setPlaylist(playList); + SmGlobals::instance()->addGlobalWidget(this); + readSettings(); +} + +void VideoViewer::readSettings(){ + QSettings s; + QRect winSize = s.value("vw/size").toRect(); + setGeometry(winSize); + bool fullScreen = s.value("vw/fullscreen").toBool(); + setFullScreen(fullScreen); +} + +void VideoViewer::writeSettings(){ + QSettings s; + s.setValue("vw/size", geometry()); + s.setValue("vw/fullscreen", isFullScreen()); +} + +void VideoViewer::keyPressEvent(QKeyEvent *e){ + int keyNum = e->key(); + if(keyNum == Qt::Key_Q){ + close(); + }else if(keyNum == Qt::Key_F){ + setFullScreen(isFullScreen() ? false : true); + }else if(keyNum == Qt::Key_Right){ + mPlayer->setPosition(mPlayer->position() + 5000); + }else if(keyNum == Qt::Key_Left){ + qint64 pos = mPlayer->position(); + mPlayer->setPosition(pos - 5000 < 0 ? 0 : pos - 5000); + }else if(keyNum == Qt::Key_Up){ + mPlayer->setPosition(mPlayer->position() + 60000); + }else if(keyNum == Qt::Key_Down){ + qint64 pos = mPlayer->position(); + mPlayer->setPosition(pos - 60000 < 0 ? 0 : pos - 60000); + }else if(keyNum == Qt::Key_N){ + int mediaCount = mPlayer->playlist()->mediaCount(); + int nextIndex = mPlayer->playlist()->currentIndex() + 1; + if(nextIndex >= mediaCount){ + nextIndex = 0; + } + mPlayer->playlist()->setCurrentIndex(nextIndex); + }else if(keyNum == Qt::Key_P){ + int mediaCount = mPlayer->playlist()->mediaCount(); + int prevIndex = mPlayer->playlist()->currentIndex() - 1; + if(prevIndex < 0){ + prevIndex = mediaCount - 1; + } + mPlayer->playlist()->setCurrentIndex(prevIndex); + }else if(keyNum == Qt::Key_M){ + mPlayer->setMuted(mPlayer->isMuted() ? false : true); + } +} + +void VideoViewer::closeEvent(QCloseEvent *e){ + mPlayer->stop(); + writeSettings(); + SmGlobals::instance()->removeGlobalWidget(this); + deleteLater(); + e->accept(); +} |