vrplayer: pause video during window move and resize

This commit is contained in:
Laxmikant Rashinkar 2013-06-27 17:48:52 -07:00
parent 74f3388a61
commit 6d3a2cd5fd
2 changed files with 94 additions and 10 deletions

View File

@ -4,12 +4,18 @@
/*
* TODO
* o should we use tick marks in QSlider?
* o check for memory leaks
* o double click should make it full screen
* o when opening files, pause video
*/
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
gotMediaOnCmdline = false;
moveResizeTimer = NULL;
/* connect to remote client */
interface = new OurInterface();
if (interface->oneTimeInit())
@ -35,16 +41,42 @@ MainWindow::MainWindow(QWidget *parent) :
connect(interface, SIGNAL(onMediaDurationInSeconds(int)),
this, SLOT(onMediaDurationInSeconds(int)));
/* if media file is specified on cmd line, use it */
QStringList args = QApplication::arguments();
if (args.count() > 1)
{
if (QFile::exists(args.at(1)))
{
interface->setFilename(args.at(1));
filename = args.at(1);
gotMediaOnCmdline = true;
on_actionOpen_Media_File_triggered();
}
else
{
QMessageBox::warning(this, "Invalid media file specified",
"\nThe media file\n\n" + args.at(1) +
"\n\ndoes not exist");
}
}
}
MainWindow::~MainWindow()
{
delete ui;
if (moveResizeTimer)
delete moveResizeTimer;
}
void MainWindow::closeEvent(QCloseEvent *event)
{
if (!oneTimeInitSuccess)
if (oneTimeInitSuccess)
{
interface->deInitRemoteClient();
}
else
{
QMessageBox::warning(this, "Closing application",
"This is not an xrdp session with xrdpvr");
@ -54,18 +86,50 @@ void MainWindow::closeEvent(QCloseEvent *event)
void MainWindow::resizeEvent(QResizeEvent *)
{
QRect rect;
getVdoGeometry(&rect);
interface->sendGeometry(rect);
}
void MainWindow::moveEvent(QMoveEvent *)
if (vcrFlag != VCR_PLAY)
{
QRect rect;
getVdoGeometry(&rect);
interface->sendGeometry(rect);
return;
}
interface->setVcrOp(VCR_PAUSE);
vcrFlag = VCR_PAUSE;
if (!moveResizeTimer)
{
moveResizeTimer = new QTimer;
connect(moveResizeTimer, SIGNAL(timeout()),
this, SLOT(onMoveCompleted()));
}
lblVideo->setStyleSheet("QLabel { background-color : black; color : blue; }");
moveResizeTimer->start(1000);
}
void MainWindow::moveEvent(QMoveEvent *)
{
if (vcrFlag != VCR_PLAY)
{
QRect rect;
getVdoGeometry(&rect);
interface->sendGeometry(rect);
return;
}
interface->setVcrOp(VCR_PAUSE);
vcrFlag = VCR_PAUSE;
if (!moveResizeTimer)
{
moveResizeTimer = new QTimer;
connect(moveResizeTimer, SIGNAL(timeout()),
this, SLOT(onMoveCompleted()));
}
lblVideo->setStyleSheet("QLabel { background-color : black; color : blue; }");
moveResizeTimer->start(1000);
}
void MainWindow::setupUI()
@ -208,9 +272,14 @@ void MainWindow::clearDisplay()
void MainWindow::on_actionOpen_Media_File_triggered()
{
if (vcrFlag != 0)
onBtnStopClicked(false);
onBtnStopClicked(true);
/* if media was specified on cmd line, use it just once */
if (gotMediaOnCmdline)
gotMediaOnCmdline = false;
else
openMediaFile();
if (filename.length() == 0)
{
/* cancel btn was clicked */
@ -238,7 +307,7 @@ void MainWindow::on_actionOpen_Media_File_triggered()
remoteClientInited = true;
interface->playMedia();
if (vcrFlag != 0)
//if (vcrFlag != 0)
{
interface->setVcrOp(VCR_PLAY);
btnPlay->setText("Pause");
@ -404,3 +473,13 @@ void MainWindow::onSliderActionTriggered(int action)
}
}
void MainWindow::onMoveCompleted()
{
QRect rect;
getVdoGeometry(&rect);
interface->sendGeometry(rect);
interface->setVcrOp(VCR_PLAY);
vcrFlag = VCR_PLAY;
}

View File

@ -25,6 +25,8 @@
#include <QTimer>
#include <QPixmap>
#include <QPainter>
#include <QFile>
#include <QTimer>
#include "xrdpapi.h"
#include "xrdpvr.h"
@ -75,6 +77,7 @@ private slots:
void onMediaDurationInSeconds(int duration);
void onElapsedTime(int secs);
void onSliderActionTriggered(int value);
void onMoveCompleted();
protected:
void resizeEvent(QResizeEvent *e);
@ -98,6 +101,7 @@ private:
QSlider *slider;
QWidget *window;
bool acceptSliderMove;
QTimer *moveResizeTimer;
/* private stuff */
OurInterface *interface;
@ -109,6 +113,7 @@ private:
int stream_id;
int64_t elapsedTime; /* elapsed time in usecs since play started */
int vcrFlag;
bool gotMediaOnCmdline;
/* private methods */
void setupUI();