From 6d3a2cd5fd6ef933159f0d79d7361c6d7434c2e9 Mon Sep 17 00:00:00 2001 From: Laxmikant Rashinkar Date: Thu, 27 Jun 2013 17:48:52 -0700 Subject: [PATCH] vrplayer: pause video during window move and resize --- vrplayer/mainwindow.cpp | 99 ++++++++++++++++++++++++++++++++++++----- vrplayer/mainwindow.h | 5 +++ 2 files changed, 94 insertions(+), 10 deletions(-) diff --git a/vrplayer/mainwindow.cpp b/vrplayer/mainwindow.cpp index b97da148..ec2d338a 100644 --- a/vrplayer/mainwindow.cpp +++ b/vrplayer/mainwindow.cpp @@ -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; + if (vcrFlag != VCR_PLAY) + { + QRect rect; - getVdoGeometry(&rect); - interface->sendGeometry(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 *) { - QRect rect; + if (vcrFlag != VCR_PLAY) + { + QRect rect; - getVdoGeometry(&rect); - interface->sendGeometry(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(); - 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; +} diff --git a/vrplayer/mainwindow.h b/vrplayer/mainwindow.h index 802fd10d..56f94edb 100644 --- a/vrplayer/mainwindow.h +++ b/vrplayer/mainwindow.h @@ -25,6 +25,8 @@ #include #include #include +#include +#include #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();