summaryrefslogtreecommitdiffstats
path: root/src/client/toolbar/toolbar.cpp
diff options
context:
space:
mode:
authorsr2013-02-04 19:50:31 +0100
committersr2013-02-04 19:50:31 +0100
commit1a5709501f94014d41987b956338bb6424b9f90c (patch)
treed3b93fe8dc406bca56aff147ef5cc4cbf9ed6be0 /src/client/toolbar/toolbar.cpp
parentTest (diff)
downloadpvs2-1a5709501f94014d41987b956338bb6424b9f90c.tar.gz
pvs2-1a5709501f94014d41987b956338bb6424b9f90c.tar.xz
pvs2-1a5709501f94014d41987b956338bb6424b9f90c.zip
Initial commit
Diffstat (limited to 'src/client/toolbar/toolbar.cpp')
-rw-r--r--src/client/toolbar/toolbar.cpp200
1 files changed, 200 insertions, 0 deletions
diff --git a/src/client/toolbar/toolbar.cpp b/src/client/toolbar/toolbar.cpp
new file mode 100644
index 0000000..416a68f
--- /dev/null
+++ b/src/client/toolbar/toolbar.cpp
@@ -0,0 +1,200 @@
+/*
+ * 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("&Connect"), 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(QObject* connection)
+{
+ if (connection != _connection)
+ qDebug("onDisconnect pointer mismatch!");
+ _connectWindow->setConnected(false);
+ _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(destroyed(QObject*)), this, SLOT(onDisconnected(QObject*)));
+ _connection->blockSignals(true);
+ _connection->disconnectFromServer();
+ }
+ _connection = connection;
+ connect(_connection, SIGNAL(destroyed(QObject*)), this, SLOT(onDisconnected(QObject*)));
+ 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);
+}