/*
* toolbar.cpp
*
* Created on: 21.01.2013
* Author: sr
*/
#include "../../shared/settings.h"
#include "../net/serverconnection.h"
#include "../vnc/vncwindow.h"
#include "../vnc/vncserver.h"
#include "toolbar.h"
#include "ui_toolbar.h"
//______________________________________________________________________________
Toolbar::Toolbar(QWidget *parent) :
QWidget(parent), _ui(new Ui::Toolbar), _hideTimer(this), _connection(NULL)
{
/* Initialize the GUI */
_ui->setupUi(this);
/* Set window properties */
setWindowFlags(Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint | Qt::FramelessWindowHint);
setAttribute(Qt::WA_AlwaysShowToolTips);
setAttribute(Qt::WA_QuitOnClose);
setVisible(true);
/* Create the VNC Window */
_vnc = new VncWindow(NULL);
/* Create the connect window */
_connectWindow = new ConnectWindow(NULL);
/* Setup menu */
_menu = new QMenu(this);
_acnDisconnect = new QAction(tr("Set &session ID"), this);
_acnQuit = new QAction(tr("&Quit"), this);
_menu->addAction(_acnDisconnect);
_menu->addSeparator();
_menu->addAction(_acnQuit);
_ui->cmdMenu->setMenu(_menu);
/* Connect the signals */
connect(_connectWindow, SIGNAL(disconnect()), this, SLOT(onDoDisconnect()));
connect(_connectWindow, SIGNAL(connected(ServerConnection*)), this, SLOT(onConnected(ServerConnection*)));
connect(VncServer::instance(), SIGNAL(started(int, QString&, QString&)), this, SLOT(onVncServerIsRunning(int, QString&, QString&)));
connect(_acnQuit, SIGNAL(triggered()), qApp, SLOT(quit()));
connect(_acnDisconnect, SIGNAL(triggered()), _connectWindow, SLOT(show()));
/* Set location */
const QDesktopWidget desktop;
const QRect primaryScreen = desktop.screenGeometry();
move(primaryScreen.left() + (primaryScreen.width() - this->width())/2 , primaryScreen.top());
qDebug() << primaryScreen.left() << primaryScreen.top() << primaryScreen.right() << primaryScreen.bottom();
/* Setup hide timer */
_hideTimer.setInterval(600);
_hideTimer.setSingleShot(true);
connect(&_hideTimer, SIGNAL(timeout()), this, SLOT(hideBar()));
_hideTimer.start(); // initially show PVS and hide later
}
//______________________________________________________________________________
Toolbar::~Toolbar()
{
VncServer::instance()->stop();
_vnc->deleteLater();
_connectWindow->deleteLater();
delete _ui;
}
//______________________________________________________________________________
/*
* Override
*/
void Toolbar::leaveEvent(QEvent* e)
{
_hideTimer.start();
QWidget::leaveEvent(e);
}
//______________________________________________________________________________
void Toolbar::enterEvent(QEvent* e)
{
_hideTimer.stop();
showBar();
QWidget::enterEvent(e);
}
//______________________________________________________________________________
/*
* Slots
*/
void Toolbar::onVncServerIsRunning(int port, QString&, QString&)
{
if (port > 0){
_ui->lblStatus->setStyleSheet("color:red");
_ui->lblStatus->setText(tr("Recording"));
showBar();
} else {
_ui->lblStatus->setStyleSheet("color:green");
_ui->lblStatus->setText(tr("Online"));
hideBar();
}
}
//______________________________________________________________________________
void Toolbar::onDisconnected()
{
_connectWindow->setConnected(false);
if (_connection != NULL)
_connection->blockSignals(true);
_connection = NULL;
_ui->lblStatus->setStyleSheet("color:red");
_ui->lblStatus->setText(tr("Offline"));
}
//______________________________________________________________________________
void Toolbar::onConnected(ServerConnection* connection)
{
_ui->lblStatus->setStyleSheet("color:green");
_ui->lblStatus->setText(tr("Online"));
//
if (_connection != NULL)
{
disconnect(_connection, SIGNAL(disconnected()), this, SLOT(onDisconnected()));
_connection->blockSignals(true);
_connection->disconnectFromServer();
}
_connection = connection;
connect(_connection, SIGNAL(disconnected()), this, SLOT(onDisconnected()));
connect(_connection, SIGNAL(openVnc(const QString&, int, const QString&, bool, bool, const QString&, const int)),
_vnc, SLOT(open(const QString&, int, const QString&, bool, bool, const QString&, const int)));
connect(_connection, SIGNAL(closeVnc()), _vnc, SLOT(close()));
connect(_vnc, SIGNAL(running(const bool, const int)), _connection, SLOT(onVncViewerStartStop(const bool, const int)));
_connectWindow->setConnected(true);
}
//______________________________________________________________________________
void Toolbar::onDoDisconnect()
{
if (_connection != NULL)
_connection->disconnectFromServer();
}
//______________________________________________________________________________
void Toolbar::hideBar()
{
// // Don't hide window if any menu is open or VNC Server is running from this client.
if (_menu->isVisible() || VncServer::instance()->isVncServerRunning())
return;
const QDesktopWidget desktop;
const QRect primaryScreen = desktop.screenGeometry();
move(x(), primaryScreen.top() + 2 - height());
//move(x(), primaryScreen.bottom() - 2);
}
//______________________________________________________________________________
void Toolbar::showBar()
{
const QDesktopWidget desktop;
const QRect primaryScreen = desktop.screenGeometry();
move(x(), primaryScreen.top());
//move(x(), primaryScreen.bottom() - height());
}