diff options
Diffstat (limited to 'src/client/toolbar/toolbar.cpp')
-rw-r--r-- | src/client/toolbar/toolbar.cpp | 110 |
1 files changed, 30 insertions, 80 deletions
diff --git a/src/client/toolbar/toolbar.cpp b/src/client/toolbar/toolbar.cpp index 1640c01..bec8586 100644 --- a/src/client/toolbar/toolbar.cpp +++ b/src/client/toolbar/toolbar.cpp @@ -1,12 +1,3 @@ -/* - * toolbar.cpp - * - * Created on: 21.01.2013 - * Author: sr - */ -#include <QtAlgorithms> -#include <QNetworkInterface> -#include <QProcess> #include "../../shared/settings.h" #include "../net/serverconnection.h" #include "../vnc/vncwindow.h" @@ -14,10 +5,15 @@ #include "../util/util.h" #include "../informationdialog/informationdialog.h" #include "../clientapp/clientapp.h" +#include "../addons/addons.h" #include "toolbar.h" #include "ui_toolbar.h" +#include <QtAlgorithms> +#include <QNetworkInterface> +#include <QProcess> + /** * @brief * @@ -107,23 +103,9 @@ void Toolbar::init() connect(clientApp->connectWindow(), SIGNAL(disconnect()), this, SLOT(onDoDisconnect())); connect(clientApp->connectWindow(), SIGNAL(connected(ServerConnection*)), this, SLOT(onConnected(ServerConnection*))); connect(_ui->btnAttention, SIGNAL(toggled(bool)), this, SLOT(onBtnAttention())); - connect(_ui->btnManager, &QPushButton::toggled, [=](bool pressed) { - this->toggleDesktop(pressed ? Desktop::Manager : Desktop::Primary); - }); /* Setup menu */ - initMenu(); - - updateButtonVisibility(); - - /* setup lock desktop button*/ - bool showLock = clientApp->getSettings()->value("showLockDesktopButton").toBool(); - if (showLock) { - connect(_ui->btnLockDesktop, SIGNAL(clicked()), this, SLOT(onBtnLockDesktop())); - } else { - setFixedWidth(width() - _ui->btnLockDesktop->width()); - _ui->btnLockDesktop->setVisible(false); - } + initButtonsAndMenus(); /* hide attention button while disconnected */ _ui->btnAttention->setVisible(false); @@ -160,8 +142,18 @@ void Toolbar::init() * This function should be called once from the main init() function which in * turn should only be called by the constructor. **/ -void Toolbar::initMenu() +void Toolbar::initButtonsAndMenus() { + QList<QPushButton*> buttons; + QList<QAction*> menus; + auto settings = clientApp->getSettings(); + AddonManager::loadFromPath(settings->value("addonConfigDir", "/opt/openslx/pvs2/addons").toString(), buttons, menus); + // Buttons + for (auto i : buttons) { + _ui->buttonContainer->addWidget(i); + i->setVisible(false); + } + // Menu _menu = new QMenu(this); _acnConnect = new QAction(tr("&Connect..."), this); _acnDisconnect = new QAction(tr("&Disconnect"), this); @@ -173,6 +165,10 @@ void Toolbar::initMenu() _menu->addAction(_acnConnect); _menu->addAction(_acnDisconnect); _menu->addSeparator(); + for (auto i : menus) { + _menu->addAction(i); + i->setVisible(false); + } _menu->addAction(_acnInformation); _menu->addAction(_acnAbout); _menu->addSeparator(); @@ -181,7 +177,7 @@ void Toolbar::initMenu() /* only add a "quit"-button when the configuration allows it. */ - bool allow = clientApp->getSettings()->value("allowClientQuit").toBool(); + bool allow = settings->value("allowClientQuit").toBool(); _acnQuit->setVisible(allow); // Connect the signals @@ -191,26 +187,11 @@ void Toolbar::initMenu() connect(_acnInformation, SIGNAL(triggered()), this, SLOT(showInformationDialog())); connect(_acnAbout, SIGNAL(triggered()), this, SLOT(showAboutDialog())); connect(_acnQuit, SIGNAL(triggered()), this, SLOT(exit())); -} -void Toolbar::updateButtonVisibility() -{ - // "Toggle to manager view" (switch between desktop 1 and 2) - bool showManagerToggle = clientApp->isConfiguredAsManager() || clientApp->isConnectedToLocalManager(); - if (showManagerToggle == _ui->btnManager->isHidden()) { - // Visibility should change - if (showManagerToggle) { - _ui->btnManager->blockSignals(false); - setFixedWidth(width() + _ui->btnManager->width()); - } else { - // Hide "toggle manager" -- assume manager was closed, switch to first desktop where the VM should be running - _ui->btnManager->blockSignals(true); - _ui->btnManager->setChecked(false); - setFixedWidth(width() - _ui->btnManager->width()); - toggleDesktop(Desktop::Primary); - } - _ui->btnManager->setVisible(showManagerToggle); - } + // Delay until bar is visible + QTimer::singleShot(10, [=]() { + AddonManager::initControls(); + }); } /** @@ -382,7 +363,7 @@ void Toolbar::onDisconnected(ServerConnection* connection) _ui->btnAttention->setVisible(false); onBtnAttention(); delayedHideBar(); - QTimer::singleShot(1, this, SLOT(updateButtonVisibility())); + AddonManager::disconnectEvent(); } /** @@ -401,7 +382,7 @@ void Toolbar::onConnected(ServerConnection* connection) _ui->lblStatus->setText(tr("Online")); /* connected, show button */ _ui->btnAttention->setVisible(true); - QTimer::singleShot(1, this, SLOT(updateButtonVisibility())); + AddonManager::connectEvent(connection->isLocalConnection(), connection->getPeerAdress()); // connect(connection, SIGNAL(disconnected(ServerConnection*)), this, SLOT(onDisconnected(ServerConnection*))); connect(connection, SIGNAL(openVnc(const QString&, int, const QString&, bool, bool, const QString&, const int, const QByteArray&)), @@ -501,6 +482,8 @@ void Toolbar::showInformationDialog() InformationDialog* d = new InformationDialog(); d->exec(); d->deleteLater(); + auto b = new QPushButton("sdfadsfgadfgadfgadg"); + this->layout()->addWidget(b); } void Toolbar::onBtnAttention() @@ -515,39 +498,6 @@ void Toolbar::onBtnAttention() } } -/** call script to switch to workspace of the manager */ -void Toolbar::toggleDesktop(Desktop d) -{ - QProcess switchP; - if (d == Desktop::Manager) { - switchP.start("/bin/sh", QStringList() << "/opt/openslx/pvs2/switchToManager.sh"); - } else if (d == Desktop::Primary) { - switchP.start("/bin/sh", QStringList() << "/opt/openslx/pvs2/switchBack.sh"); - } else { - qDebug() << "Invalid toggleDesktop call"; - return; - } - switchP.waitForFinished(); -} - -void Toolbar::onBtnLockDesktop() -{ - if (this->lockDesktopP.state() == QProcess::NotRunning) { - _ui->btnLockDesktop->setEnabled(false); - this->lockDesktopP.start("/bin/sh", QStringList() << "/opt/openslx/pvs2/lockDesktop.sh"); - - QTimer::singleShot(2 * 1000, this, SLOT(enableLockBtn())); - - } else { - qDebug() << "trying to use lockDesktop-process while it is still running"; - } -} - -void Toolbar::enableLockBtn() -{ - _ui->btnLockDesktop->setEnabled(true); -} - void Toolbar::setToolbarPosition(const QRect &availableGeometry) { const QRect primaryScreen = QGuiApplication::primaryScreen()->geometry(); |