summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaxmikant Rashinkar <LK.Rashinkar@gmail.com>2013-06-27 17:48:52 -0700
committerLaxmikant Rashinkar <LK.Rashinkar@gmail.com>2013-06-27 17:48:52 -0700
commit6d3a2cd5fd6ef933159f0d79d7361c6d7434c2e9 (patch)
tree85d4a6ae48786324848a90be1e91ec957fdff0ce
parent74f3388a61f0f6b378da342dfa27d4c3191eb817 (diff)
downloadxrdp-proprietary-6d3a2cd5fd6ef933159f0d79d7361c6d7434c2e9.tar.gz
xrdp-proprietary-6d3a2cd5fd6ef933159f0d79d7361c6d7434c2e9.zip
vrplayer: pause video during window move and resize
-rw-r--r--vrplayer/mainwindow.cpp99
-rw-r--r--vrplayer/mainwindow.h5
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 <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();