summaryrefslogtreecommitdiffstats
path: root/vrplayer/mainwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'vrplayer/mainwindow.cpp')
-rw-r--r--vrplayer/mainwindow.cpp211
1 files changed, 144 insertions, 67 deletions
diff --git a/vrplayer/mainwindow.cpp b/vrplayer/mainwindow.cpp
index 7f41eee9..f43d44b3 100644
--- a/vrplayer/mainwindow.cpp
+++ b/vrplayer/mainwindow.cpp
@@ -10,70 +10,56 @@ MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
+ /* connect to remote client */
+ interface = new OurInterface();
+ if (interface->oneTimeInit())
+ {
+ oneTimeInitSuccess = false;
+
+ /* connection to remote client failed; error msg has */
+ /* already been displayed so it's ok to close app now */
+ QTimer::singleShot(1000, qApp, SLOT(quit()));
+ }
+
+ oneTimeInitSuccess = true;
+ remoteClientInited = false;
ui->setupUi(this);
acceptSliderMove = false;
- decoderThread = new DecoderThread();
setupUI();
+ vcrFlag = 0;
-/* LK_TODO */
-#if 0
- decoder = new Decoder(this);
- connect(this, SIGNAL(onGeometryChanged(int, int, int, int)),
- decoder, SLOT(onGeometryChanged(int, int, int, int)));
-#endif
-
- /* register for signals/slots with decoderThread */
- connect(this, SIGNAL(on_geometryChanged(int,int,int,int)),
- decoderThread, SLOT(on_geometryChanged(int,int,int,int)));
-
- connect(decoderThread, SIGNAL(on_elapsedtime(int)),
- this, SLOT(on_elapsedTime(int)));
+ connect(this, SIGNAL(onGeometryChanged(int,int,int,int)),
+ interface, SLOT(onGeometryChanged(int,int,int,int)));
- connect(decoderThread, SIGNAL(on_decoderErrorMsg(QString, QString)),
- this, SLOT(on_decoderError(QString, QString)));
-
- connect(decoderThread, SIGNAL(on_mediaDurationInSeconds(int)),
- this, SLOT(on_mediaDurationInSeconds(int)));
-
- connect(this, SIGNAL(on_mediaSeek(int)), decoderThread, SLOT(on_mediaSeek(int)));
+ connect(interface, SIGNAL(onMediaDurationInSeconds(int)),
+ this, SLOT(onMediaDurationInSeconds(int)));
}
MainWindow::~MainWindow()
{
- delete ui;
+ if (oneTimeInitSuccess)
+ delete ui;
}
void MainWindow::closeEvent(QCloseEvent *event)
{
- int rv;
-
- rv = QMessageBox::question(this, "Closing application",
- "Do you really want to close vrplayer?",
- QMessageBox::Yes | QMessageBox::No);
-
- if (rv == QMessageBox::No)
- {
- event->ignore();
- return;
- }
- decoderThread->exit(0);
event->accept();
}
-void MainWindow::resizeEvent(QResizeEvent *e)
+void MainWindow::resizeEvent(QResizeEvent *)
{
QRect rect;
getVdoGeometry(&rect);
- emit on_geometryChanged(rect.x(), rect.y(), rect.width(), rect.height());
+ interface->sendGeometry(rect);
}
-void MainWindow::moveEvent(QMoveEvent *e)
+void MainWindow::moveEvent(QMoveEvent *)
{
QRect rect;
getVdoGeometry(&rect);
- emit on_geometryChanged(rect.x(), rect.y(), rect.width(), rect.height());
+ interface->sendGeometry(rect);
}
void MainWindow::setupUI()
@@ -100,8 +86,8 @@ void MainWindow::setupUI()
slider->setOrientation(Qt::Horizontal);
slider->setMinimumHeight(20);
slider->setMaximumHeight(20);
- connect(slider, SIGNAL(actionTriggered(int)), this, SLOT(on_sliderActionTriggered(int)));
- connect(slider, SIGNAL(valueChanged(int)), this, SLOT(on_sliderValueChanged(int)));
+ connect(slider, SIGNAL(actionTriggered(int)), this, SLOT(onSliderActionTriggered(int)));
+ connect(slider, SIGNAL(valueChanged(int)), this, SLOT(onSliderValueChanged(int)));
/* setup label to display media duration */
lblDuration = new QLabel("00:00:00");
@@ -115,19 +101,23 @@ void MainWindow::setupUI()
hboxLayoutMiddle->addWidget(lblDuration);
/* setup play button */
- btnPlay = new QPushButton("P");
+ btnPlay = new QPushButton("Play");
btnPlay->setMinimumHeight(40);
btnPlay->setMaximumHeight(40);
btnPlay->setMinimumWidth(40);
btnPlay->setMaximumWidth(40);
- connect(btnPlay, SIGNAL(clicked(bool)), this, SLOT(on_btnPlayClicked(bool)));
+ btnPlay->setCheckable(true);
+ connect(btnPlay, SIGNAL(clicked(bool)),
+ this, SLOT(onBtnPlayClicked(bool)));
/* setup stop button */
- btnStop = new QPushButton("S");
+ btnStop = new QPushButton("Stop");
btnStop->setMinimumHeight(40);
btnStop->setMaximumHeight(40);
btnStop->setMinimumWidth(40);
btnStop->setMaximumWidth(40);
+ connect(btnStop, SIGNAL(clicked(bool)),
+ this, SLOT(onBtnStopClicked(bool)));
/* setup rewind button */
btnRewind = new QPushButton("R");
@@ -135,12 +125,14 @@ void MainWindow::setupUI()
btnRewind->setMaximumHeight(40);
btnRewind->setMinimumWidth(40);
btnRewind->setMaximumWidth(40);
+ connect(btnRewind, SIGNAL(clicked(bool)),
+ this, SLOT(onBtnRewindClicked(bool)));
/* add buttons to bottom panel */
hboxLayoutBottom = new QHBoxLayout;
hboxLayoutBottom->addWidget(btnPlay);
hboxLayoutBottom->addWidget(btnStop);
- hboxLayoutBottom->addWidget(btnRewind);
+ //hboxLayoutBottom->addWidget(btnRewind);
hboxLayoutBottom->addStretch();
/* add all three layouts to one vertical layout */
@@ -171,7 +163,7 @@ void MainWindow::openMediaFile()
filename = QFileDialog::getOpenFileName(this, "Select Media File",
filename);
}
- decoderThread->setFilename(filename);
+ interface->setFilename(filename);
}
void MainWindow::getVdoGeometry(QRect *rect)
@@ -187,48 +179,120 @@ void MainWindow::getVdoGeometry(QRect *rect)
rect->setHeight(lblVideo->geometry().height());
}
+void MainWindow::clearDisplay()
+{
+ QPixmap pixmap(100,100);
+ pixmap.fill(QColor(0x00, 0x00, 0x00));
+ QPainter painter(&pixmap);
+ painter.setBrush(QBrush(Qt::black));
+ lblVideo->setPixmap(pixmap);
+}
+
/*******************************************************************************
* actions and slots go here *
******************************************************************************/
void MainWindow::on_actionOpen_Media_File_triggered()
{
+ if (vcrFlag != 0)
+ onBtnStopClicked(false);
+
openMediaFile();
+ if (filename.length() == 0)
+ {
+ /* cancel btn was clicked */
+ return;
+ }
+
+ if (remoteClientInited)
+ {
+ remoteClientInited = false;
+ interface->deInitRemoteClient();
+ interface->initRemoteClient();
+ }
+ else
+ {
+ interface->initRemoteClient();
+ }
+
+ playVideo = interface->getPlayVideoInstance();
+ if (playVideo)
+ {
+ connect(playVideo, SIGNAL(onElapsedtime(int)),
+ this, SLOT(onElapsedTime(int)));
+ }
+
+ remoteClientInited = true;
+ interface->playMedia();
+
+ if (vcrFlag != 0)
+ {
+ interface->setVcrOp(VCR_PLAY);
+ btnPlay->setText("Pause");
+ vcrFlag = VCR_PLAY;
+ }
}
void MainWindow::on_actionExit_triggered()
{
- /* TODO: confirm app exit */
+ clearDisplay();
this->close();
}
-void MainWindow::on_actionPlay_Media_triggered()
+void MainWindow::onBtnPlayClicked(bool)
{
- // LK_TODO do we need this? if yes, should be same as on_btnPlayClicked()
-#if 1
- decoderThread->start();
-#else
- if (!decoder)
- return;
+ if (vcrFlag == 0)
+ {
+ /* first time play button has been clicked */
+ on_actionOpen_Media_File_triggered();
+ btnPlay->setText("Pause");
+ vcrFlag = VCR_PLAY;
+ }
+ else if (vcrFlag == VCR_PLAY)
+ {
+ /* btn clicked while in play mode - enter pause mode */
+ btnPlay->setText("Play");
+ interface->setVcrOp(VCR_PAUSE);
+ vcrFlag = VCR_PAUSE;
+ }
+ else if (vcrFlag == VCR_PAUSE)
+ {
+ /* btn clicked while in pause mode - enter play mode */
+ btnPlay->setText("Pause");
+ interface->setVcrOp(VCR_PLAY);
+ vcrFlag = VCR_PLAY;
+ }
- decoder->init(filename);
-#endif
+ else if (vcrFlag == VCR_STOP)
+ {
+ /* btn clicked while stopped - enter play mode */
+ btnPlay->setText("Play");
+ interface->setVcrOp(VCR_PLAY);
+ vcrFlag = VCR_PLAY;
+ }
}
-void MainWindow::on_decoderError(QString title, QString msg)
+void MainWindow::onBtnRewindClicked(bool)
{
- QMessageBox::information(this, title, msg);
+ if (playVideo)
+ playVideo->onMediaSeek(0);
}
-void MainWindow::on_btnPlayClicked(bool flag)
+void MainWindow::onBtnStopClicked(bool)
{
- if (filename.length() == 0)
- openMediaFile();
+ vcrFlag = VCR_STOP;
+ btnPlay->setText("Play");
+ interface->setVcrOp(VCR_STOP);
+
+ /* reset slider */
+ slider->setSliderPosition(0);
+ lblCurrentPos->setText("00:00:00");
- decoderThread->start();
+ /* clear screen by filling it with black */
+ clearDisplay();
}
-void MainWindow::on_mediaDurationInSeconds(int duration)
+void MainWindow::onMediaDurationInSeconds(int duration)
{
int hours = 0;
int minutes = 0;
@@ -239,6 +303,9 @@ void MainWindow::on_mediaDurationInSeconds(int duration)
slider->setMinimum(0);
slider->setMaximum(duration * 100); /* in hundredth of a sec */
slider->setValue(0);
+ slider->setSliderPosition(0);
+ lblCurrentPos->setText("00:00:00");
+ qDebug() << "media_duration=" << duration << " in hundredth of a sec:" << duration * 100;
/* convert from seconds to hours:minutes:seconds */
hours = duration / 3600;
@@ -258,7 +325,7 @@ void MainWindow::on_mediaDurationInSeconds(int duration)
/**
* time elapsed in 1/100th sec units since play started
******************************************************************************/
-void MainWindow::on_elapsedTime(int val)
+void MainWindow::onElapsedTime(int val)
{
int hours = 0;
int minutes = 0;
@@ -266,9 +333,18 @@ void MainWindow::on_elapsedTime(int val)
int duration = val / 100;
char buf[20];
+ if (vcrFlag == VCR_STOP)
+ {
+ qDebug() << "onElapsedTime: not updating slider coz of VCR_STOP";
+ return;
+ }
+
/* if slider bar is down, do not update */
if (slider->isSliderDown())
+ {
+ qDebug() << "onElapsedTime: not updating slider coz slider is down";
return;
+ }
/* update progress bar */
slider->setSliderPosition(val);
@@ -289,16 +365,17 @@ void MainWindow::on_elapsedTime(int val)
lblCurrentPos->setText(QString(buf));
}
-void MainWindow::on_sliderValueChanged(int value)
+void MainWindow::onSliderValueChanged(int value)
{
if (acceptSliderMove)
{
acceptSliderMove = false;
- emit on_mediaSeek(value / 100);
+ if (playVideo)
+ playVideo->onMediaSeek(value / 100);
}
}
-void MainWindow::on_sliderActionTriggered(int action)
+void MainWindow::onSliderActionTriggered(int action)
{
switch (action)
{
@@ -319,7 +396,7 @@ void MainWindow::on_sliderActionTriggered(int action)
#if 1
// LK_TODO delete this
-void MainWindow::mouseMoveEvent(QMouseEvent *e)
+void MainWindow::mouseMoveEvent(QMouseEvent *)
{
//qDebug() << "mouseMoveEvent: x=" << e->globalX() << "y=" << e->globalY();
}