/* * toolbar.cpp * * Created on: 21.01.2013 * Author: sr */ #include "toolbar.h" #include "../../shared/settings.h" #include "../net/serverconnection.h" #include "../vnc/vncwindow.h" #include "../vnc/vncserver.h" Toolbar::Toolbar(QWidget *parent) : QWidget(parent), _location(POSITION_TOP_CENTER), _hideTimer(0), _connection(NULL) { setupUi(this); setWindowFlags(Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint | Qt::FramelessWindowHint); setAttribute(Qt::WA_AlwaysShowToolTips); setAttribute(Qt::WA_QuitOnClose); setVisible(true); // VNC Window _vnc = new VncWindow(NULL); // Connect window _connectWindow = new ConnectWindow(NULL); connect(_connectWindow, SIGNAL(disconnect()), this, SLOT(onDoDisconnect())); connect(_connectWindow, SIGNAL(connected(ServerConnection*)), this, SLOT(onConnected(ServerConnection*))); // setupMenu(); setLocation(); hideBar(); } void Toolbar::setupMenu() { _menu = new QMenu(this); // setup actions _acnDisconnect = new QAction(tr("Set &session ID"), this); //_acnDisconnect->setEnabled(false); _acnQuit = new QAction(tr("&Quit"), this); // setup menu _menu->addAction(_acnDisconnect); _menu->addSeparator(); _menu->addAction(_acnQuit); cmdMenu->setMenu(_menu); connect(_acnQuit, SIGNAL(triggered()), this, SLOT(onQuit())); connect(_acnDisconnect, SIGNAL(triggered()), _connectWindow, SLOT(show())); } Toolbar::~Toolbar() { VncServer::instance()->stop(); _vnc->deleteLater(); _connectWindow->deleteLater(); } //###########\\/\/ void Toolbar::setLocation() { const QDesktopWidget desktop; const QRect primaryScreen = desktop.screenGeometry(); switch (_location) { case POSITION_TOP_LEFT: move(primaryScreen.left(), primaryScreen.top()); break; case POSITION_TOP_CENTER: move((primaryScreen.width() - this->width()) / 2 + primaryScreen.left(), primaryScreen.top()); break; case POSITION_TOP_RIGHT: move(primaryScreen.right() - width(), primaryScreen.top()); break; case POSITION_BOTTOM_LEFT: move(primaryScreen.left(), primaryScreen.bottom() - height()); break; case POSITION_BOTTOM_CENTER: move((primaryScreen.width() - this->width()) / 2 + primaryScreen.left(), primaryScreen.bottom() - height()); break; case POSITION_BOTTOM_RIGHT: move(primaryScreen.right() - width(), primaryScreen.bottom() - height()); break; default: break; } } void Toolbar::setBarVisible(bool shown) { const QDesktopWidget desktop; const QRect primaryScreen = desktop.screenGeometry(); if (!shown) { if (_location <= POSITION_TOP_RIGHT) move(x(), primaryScreen.top() + 2 - height()); else move(x(), primaryScreen.bottom() - 2); } else { if (_location <= POSITION_TOP_RIGHT) move(x(), primaryScreen.top()); else move(x(), primaryScreen.bottom() - height()); } } bool Toolbar::hideBar() { if (_menu->isVisible()) // Don't hide window if any menu is open return false; setBarVisible(false); return true; } /* * Override */ void Toolbar::leaveEvent(QEvent* e) { if (_hideTimer == 0) _hideTimer = startTimer(100); _hideDelay = 6; QWidget::leaveEvent(e); } void Toolbar::enterEvent(QEvent* e) { if (_hideTimer != 0) { killTimer(_hideTimer); _hideTimer = 0; } setBarVisible(true); QWidget::enterEvent(e); } void Toolbar::timerEvent(QTimerEvent* event) { if (event->timerId() == _hideTimer) { if (--_hideDelay <= 0) { if (hideBar()) { killTimer(_hideTimer); _hideTimer = 0; } } } } /* * Slots */ void Toolbar::onDisconnected() { _connectWindow->setConnected(false); if (_connection != NULL) _connection->blockSignals(true); _connection = NULL; lblStatus->setStyleSheet("color:red"); lblStatus->setText(tr("Offline")); } void Toolbar::onConnected(ServerConnection* connection) { lblStatus->setStyleSheet("color:green"); 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::onQuit() { QApplication::exit(0); }