summaryrefslogtreecommitdiffstats
path: root/src/gui/mainWindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/mainWindow.cpp')
-rw-r--r--src/gui/mainWindow.cpp1205
1 files changed, 1205 insertions, 0 deletions
diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp
new file mode 100644
index 0000000..eb15e82
--- /dev/null
+++ b/src/gui/mainWindow.cpp
@@ -0,0 +1,1205 @@
+/*
+ # Copyright (c) 2009 - OpenSLX Project, Computer Center University of Freiburg
+ #
+ # This program is free software distributed under the GPL version 2.
+ # See http://openslx.org/COPYING
+ #
+ # If you have any feedback please consult http://openslx.org/feedback and
+ # send your suggestions, praise, or complaints to feedback@openslx.org
+ #
+ # General information about OpenSLX can be found at http://openslx.org/
+ # -----------------------------------------------------------------------------
+ # mainWindow.cpp
+ This is the Main class for the pvsManager. The GUI is contructed here.
+ # -----------------------------------------------------------------------------
+ */
+
+#include <QtGui>
+#include <QFileDialog>
+#include <src/gui/mainWindow.h>
+using namespace std;
+
+// setting the IF-DEF Block for the touchgui and the normal gui, for later use
+
+#ifdef MAINWINDOW_USE_TOUCHGUI
+#include "ui_mainwindowtouch.h"
+#endif
+
+#ifdef MAINWINDOW_USE_NORMALGUI
+#include "ui_mainwindow.h"
+#endif
+
+#include <src/gui/connectionList.h>
+#include <src/gui/connectionWindow.h>
+#include <src/gui/profileDialog.h>
+//#include <src/gui/dialog.h>
+#include <src/core/pvsConnectionManager.h>
+#include <iostream>
+
+MainWindow::MainWindow(QWidget *parent) :
+ QMainWindow(parent), ui(new Ui::MainWindow)
+
+{
+
+ ui->setupUi(this);
+
+ ui->horizontalSlider->setValue(100);
+ ui->label_2->setText("100");
+
+ ui->separator->setVisible(false);
+
+ myself = this;
+ conWin = new ConnectionWindow(ui->widget);
+ ui->VconWinLayout->addWidget(conWin);
+ conList = new ConnectionList(ui->ClWidget);
+ ui->ClientGLayout->addWidget(conList);
+
+ bgimage = false;
+
+ _aboutDialog = new AboutDialog(this);
+
+ PVSConnectionManager::getManager();
+
+ //set the maximum width for list content
+ ui->ClWidget->setMaximumWidth(160);
+
+ ui->pvsLog->setReadOnly(true);
+ ui->pvsLog->hide();
+
+ onToggleLog(false);
+ // add ourself to the log listeners, so we can output them too
+ ConsoleLog addListener(this, &MainWindow::on_log_line);
+
+ _firstResize = 1;
+ _oldRatio = "100";
+ _isThumbnailrate = false;
+ is_closeup = false;
+ is_fullscreen = false;
+ _isLockAll = false;
+ locked = false;
+
+ /*
+ * _sessionName: The session name for this Connection
+ * _pwdCon: Password needed to connect to the session with the name _sessionName
+ */
+ _pwdCon = PVSConnectionManager::getManager()->setNeedPassword(false);
+ _sessionName = PVSConnectionManager::getManager()->getSessionName();
+
+ ui->setPassword->setCheckState(Qt::Checked);
+
+#ifdef MAINWINDOW_USE_TOUCHGUI //only used for the touchgui
+
+ // define the slots we want to use
+ connect(ui->comboBox_touch1, SIGNAL(currentIndexChanged(int)), this, SLOT(combobox1(int))); // Combobox 1 verknüpfen mit IndexChangend Signal
+ connect(ui->comboBox_touch1, SIGNAL(currentIndexChanged(int)), this, SLOT(setindexback()));
+
+
+ connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(createProfile())); // profile button
+ connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(clientlisthide())); // clienlist button
+
+ // toolbar slots
+ connect(ui->actionresetall, SIGNAL(triggered()), this, SLOT(resetall()));
+ connect(ui->actionLocksingle, SIGNAL(triggered()), this, SLOT(locksingle()));
+ connect(ui->actionUnlocksingle, SIGNAL(triggered()), this, SLOT(unlocksingle()));
+ connect(ui->actionProjection, SIGNAL(triggered()), this, SLOT(projecttoolbar()));
+ connect(ui->actionUnprojection, SIGNAL(triggered()), this, SLOT(unprojecttoolbar()));
+ connect(ui->actionDozent, SIGNAL(triggered()), this, SLOT(setdozenttoolbar()));
+
+ // Ui specific settings
+
+ ui->ClWidget->hide();
+ ui->progressBar->hide();
+ ui->pvsLog->hide();
+
+
+#endif
+
+
+ // toolbar and actions in pvsmgr
+ connect(ui->action_Exit, SIGNAL(triggered()), this, SLOT(close()));
+ ui->action_Exit->setStatusTip(tr("Exit"));
+ connect(ui->action_Disconnect, SIGNAL(triggered()), this, SLOT(disconnect()));
+ ui->action_Disconnect->setStatusTip(tr("Remove the vnc-Connection for the selected client(s)"));
+ ui->action_Disconnect->setVisible(false);//we need it only for debug
+ connect(ui->actionView, SIGNAL(triggered()), this, SLOT(closeUp()));
+ ui->actionView->setStatusTip(tr("Show the selected client in the whole window"));
+ connect(ui->actionFoto, SIGNAL(triggered()), this, SLOT(foto()));
+ connect(ui->actionLock, SIGNAL(triggered()), this, SLOT(lockalltoolbar()));
+ connect(ui->actionChat, SIGNAL(triggered()), this, SLOT(startChatDialog()));
+ ui->actionFoto->setStatusTip(tr("Make a screenshot for the selected client(s)"));
+ ui->actionLock->setStatusTip(tr("Lock or Unlock all Clients"));
+ connect(ui->actionCreate_profile, SIGNAL(triggered()), this, SLOT(createProfile()));
+
+ connect(ui->actionShow_Username, SIGNAL(triggered()), this, SLOT(showusername()));
+ connect(ui->actionShow_Hostname_IP, SIGNAL(triggered()), this, SLOT(showip()));
+ connect(ui->actionShow_Fullname, SIGNAL(triggered()), this, SLOT(showname()));
+ connect(ui->horizontalSlider, SIGNAL(valueChanged (int)), this, SLOT(changeRatio(int)));
+ connect(ui->setPassword, SIGNAL(stateChanged (int)), this, SLOT(setPasswordForConnection(int)));
+ connect(ui->vncQuality, SIGNAL(currentIndexChanged (int)), this, SLOT(setVNCQuality(int)));
+ connect(ui->thumbStatus, SIGNAL(currentIndexChanged(int)), this, SLOT(changeStatus(int)));
+ connect(ui->actionShow_Log, SIGNAL(toggled(bool)), this, SLOT(setLogConsoleDisabled(bool)));
+ connect(ui->actionShow_Network, SIGNAL(toggled(bool)), this, SLOT(onToggleLog(bool)));
+ connect(ui->actionShow_Chat, SIGNAL(toggled(bool)), this, SLOT(onToggleLog(bool)));
+ connect(ui->actionShow_Terminal, SIGNAL(toggled(bool)), this, SLOT(onToggleLog(bool)));
+ connect(ui->actionShow_Normal, SIGNAL(toggled(bool)), this, SLOT(onToggleLog(bool)));
+ connect(ui->actionShow_Error, SIGNAL(toggled(bool)), this, SLOT(onToggleLog(bool)));
+ connect(ui->actionAbout_pvs, SIGNAL(triggered()), _aboutDialog, SLOT(open()));
+
+ loadSettings(); //we load the appliocation settings
+
+ setUnifiedTitleAndToolBarOnMac(true);
+ statusBar()->showMessage(tr("The pvs manager"));
+ this->showMaximized(); // show the Mainwindow maximized
+
+ // listen on port 29481 for incoming file transfers
+ _serverSocket = new QTcpServer();
+ _serverSocket->listen(QHostAddress::Any, 29481);
+ connect(_serverSocket, SIGNAL(newConnection()), this, SLOT(incomingFile()));
+
+
+}
+
+MainWindow::~MainWindow()
+{
+ delete ui;
+}
+
+/*
+ * This signal is received when the mainwindow is going to be closed.
+ * We have to check if the the chat-dialog is open. In this case we close
+ * this dialog and accept the event, the rest will be execute from Qt.
+ * Qt will be call the destroyer ~MainWindow().
+ */
+void MainWindow::closeEvent(QCloseEvent *e)
+{
+ if (sChatDialog.isVisible())
+ sChatDialog.close();
+ e->accept();
+}
+
+MainWindow* MainWindow::getWindow() // catches the window
+{
+
+ if (myself)
+ {
+ return myself;
+ }
+ else
+ {
+ return myself = new MainWindow;
+ }
+}
+
+ConnectionWindow* MainWindow::getConnectionWindow() // catches the ConnectionWindow
+{
+ if (conWin)
+ {
+ return conWin;
+ }
+ else
+ {
+ conWin = new ConnectionWindow;
+ return conWin;
+ }
+}
+
+ConnectionList* MainWindow::getConnectionList() // catches the ConnectionList
+{
+ if (conList)
+ return conList;
+ else
+ {
+ conList = new ConnectionList;
+ return conList;
+ }
+}
+
+int MainWindow::getConnectionWindowWidth() // returns the width of the ConnectionWindow
+{
+ return ui->widget->width();
+}
+
+int MainWindow::getConnectionWindowHeight() // returns the height of the CoonectionWindow
+{
+ return ui->widget->height();
+}
+
+QStringList MainWindow::getProfilList() // loads the profile list
+{
+ QSettings settings("openslx", "pvsmgr");
+ profilList = settings.childGroups();
+ return profilList;
+}
+
+#ifdef MAINWINDOW_USE_NORMALGUI
+void MainWindow::addProfileInMenu(QString name)
+{
+ QAction* action = new QAction(name,this);
+ ui->menuLoad_profile->addAction(action);
+ connect(ui->menuLoad_profile, SIGNAL(triggered(QAction*)), this, SLOT(loadProfile(QAction*)));
+ _mapProfileToAction.insert(name, action);
+}
+
+void MainWindow::removeProfileInMenu(QString name)
+{
+ if (_mapProfileToAction.contains(name))
+ {
+ QAction* action = _mapProfileToAction.value(name);
+ ui->menuLoad_profile->removeAction(action);
+ _mapProfileToAction.take(name);
+ }
+
+}
+
+#endif
+void MainWindow::loadSettings()
+{
+ QSettings settings("openslx", "pvsmgr");
+ QString current = settings.value("current", "default").toString();
+ currentProfi = current;
+ _profilName = current;
+
+ //When no profile is available, we define a default one whith 9 dummy screens
+ if (current.compare("default") == 0)
+ {
+ setWindowTitle("PVSmgr - Default");
+ QPoint pos1 = settings.value("default/1", QPoint(0, 0)).toPoint();
+ MainWindow::getConnectionWindow()->addFrameBySettings("1", pos1);
+ QPoint pos2 =
+ settings.value("default/2", QPoint(194, 0)).toPoint();
+ MainWindow::getConnectionWindow()->addFrameBySettings("2", pos2);
+ QPoint pos3 =
+ settings.value("default/3", QPoint(388, 0)).toPoint();
+ MainWindow::getConnectionWindow()->addFrameBySettings("3", pos3);
+ QPoint pos4 =
+ settings.value("default/4", QPoint(582, 0)).toPoint();
+ MainWindow::getConnectionWindow()->addFrameBySettings("4", pos4);
+ QPoint pos5 =
+ settings.value("default/5", QPoint(0, 173)).toPoint();
+ MainWindow::getConnectionWindow()->addFrameBySettings("5", pos5);
+ QPoint pos6 =
+ settings.value("default/6", QPoint(194, 173)).toPoint();
+ MainWindow::getConnectionWindow()->addFrameBySettings("6", pos6);
+ QPoint pos7 =
+ settings.value("default/7", QPoint(388, 173)).toPoint();
+ MainWindow::getConnectionWindow()->addFrameBySettings("7", pos7);
+ QPoint pos8 =
+ settings.value("default/8", QPoint(582, 173)).toPoint();
+ MainWindow::getConnectionWindow()->addFrameBySettings("8", pos8);
+ QPoint pos9 =
+ settings.value("default/9", QPoint(293, 346)).toPoint();
+ MainWindow::getConnectionWindow()->addFrameBySettings("9", pos9);
+
+ QString title = "PVSmgr - ";
+ title.append(_profilName);
+ title.append(" ["+_sessionName + " : ");
+ title.append(_pwdCon+"]");
+ setWindowTitle(title);
+ }
+ else
+ {
+ QString title = "PVSmgr - ";
+ title.append(_profilName);
+ title.append(" ["+_sessionName + " : ");
+ title.append(_pwdCon+"]");
+ setWindowTitle(title);
+ settings.beginGroup(current);
+ QStringList keys = settings.childKeys();
+ for (int i=0; i<keys.size(); i++)
+ {
+ QString profil = current;
+ profil = profil.append("/").append(keys.at(i));
+ QPoint pos = settings.value(keys.at(i)).toPoint();
+ MainWindow::getConnectionWindow()->addFrameBySettings(keys.at(i), pos);
+ }
+ }
+
+ MainWindow::getConnectionWindow()->showFrameFromSettings();
+#ifdef MAINWINDOW_USE_NORMALGUI
+ foreach (QString profile, getProfilList())
+ addProfileInMenu(profile);
+#endif
+}
+
+void MainWindow::loadProfile(QAction* actiontriggered)
+{
+ QString profilename = actiontriggered->text();
+ loadSettings(profilename);
+}
+
+void MainWindow::loadSettings(QString profilname) // loads the current profile
+{
+ QList<ConnectionFrame*> AllFrameOnWindow =
+ MainWindow::getConnectionWindow()->getAllFrameOnWindow();
+
+ if (AllFrameOnWindow.size() > 0)
+ {
+ _profilName = profilname;
+ MainWindow::getConnectionWindow()->ClientLocationList.clear();
+ QSettings settings("openslx", "pvsmgr");
+ settings.setValue("current", _profilName);
+ ConnectionFrame* cFrame;
+ foreach (cFrame, AllFrameOnWindow)
+ {
+ if (cFrame->isDummy())
+ {
+ AllFrameOnWindow.removeOne(cFrame);
+ MainWindow::getConnectionWindow()->removeFromList(cFrame);
+ cFrame->deleteLater();
+ }
+ }
+ settings.beginGroup(_profilName);
+ QStringList keys = settings.childKeys();
+ int rest = AllFrameOnWindow.size();
+ int init = 1;
+ for (int i = 0; i < keys.size(); i++)
+ {
+ if (init <= rest)
+ {
+ ConnectionFrame* cF = AllFrameOnWindow.at(i);
+ QString profil = _profilName;
+ profil = profil.append("/").append(cF->getTaskbarTitle());
+ if (!cF->isDummy())
+ cF->move(settings.value(keys.at(i)).toPoint());
+ else
+ cF->move(settings.value(profil, QPoint(10,(10+(5*i)))).toPoint());
+
+ init += 1;
+ }
+ else
+ {
+ MainWindow::getConnectionWindow()->addFrameBySettings(
+ keys.at(i), settings.value(keys.at(i)).toPoint());
+ }
+ }
+
+ MainWindow::getConnectionWindow()->showFrameFromSettings();
+
+ QString title = "PVSmgr - ";
+ title.append(_profilName);
+ title.append(" ["+_sessionName + " : ");
+ title.append(_pwdCon+"]");
+ setWindowTitle(title);
+ }
+}
+
+void MainWindow::saveSettings(QString profilname)
+{
+ QList<ConnectionFrame*> AllFrameOnWindow =
+ MainWindow::getConnectionWindow()->getAllFrameOnWindow();
+ QSettings settings("openslx", "pvsmgr");
+ settings.setValue("current", profilname);
+ settings.setValue("size", QString("%1").arg(AllFrameOnWindow.size()));
+
+ for (int i = 0; i < AllFrameOnWindow.size(); i++)
+ {
+ ConnectionFrame* current = AllFrameOnWindow.at(i);
+ QString profil = "";
+ profil = settings.value("current").toString().append("/");
+ if (!current->isDummy())
+ profil.append(QString(current->getTaskbarTitle()));
+ else
+ profil.append(QString("%1").arg(i + 1));
+ settings.setValue(profil, current->pos());
+ }
+#ifdef MAINWINDOW_USE_NORMALGUI
+addProfileInMenu(profilname);
+#endif
+}
+
+void MainWindow::removeProfil(QString profilname)
+{
+ QSettings settings("openslx", "pvsmgr");
+ settings.remove(profilname);
+#ifdef MAINWINDOW_USE_NORMALGUI
+removeProfileInMenu(profilname);
+#endif
+}
+
+void MainWindow::addConnection(PVSClient* newCon)
+{
+ conWin->addConnection(newCon);
+ if (!_chatListClients.contains(newCon->getUserName()))
+ {
+ _chatListClients.append(newCon->getUserName());
+ sChatDialog.chat_client_add(newCon->getUserName());
+ sChatDialog.chat_nicklist_update();
+ }
+ // sChatDialog->chat_nicklist_update(newCon->getUserName());
+}
+
+void MainWindow::removeConnection(PVSClient* newCon)
+{
+ conWin->removeConnection(newCon);
+ if (_chatListClients.contains(newCon->getUserName()))
+ {
+ _chatListClients.removeOne(newCon->getUserName());
+ sChatDialog.chat_client_remove(newCon->getUserName());
+ sChatDialog.chat_nicklist_update();
+ }
+}
+
+void MainWindow::onConnectionFailed(QString host)
+{
+#ifdef never
+ // code is voided because the info-management will be overhauled sometime
+
+ if (pwDiag) // assume this thing failed after the pw-question... so a wrong password, ey?
+
+ {
+ onPasswordFailed(host);
+ return;
+ }
+
+ QString caption, secondary;
+ if (host != "")
+ {
+ caption = ("PVSConnection with hostname \"");
+ caption.append(host);
+ caption.append("\" failed.");
+ secondary = "PVSConnection attempt for this hostname failed.Maybe the host is not prepared to accept vnc connections. Please make sure hostname and (if needed) password are correct.";
+ }
+ else
+ {
+ caption = "No IP given";
+ secondary = "PVSConnection attempt for this host failed. There was either no or an errorous Hostname given.";
+ }
+ QMessageBox::information(*this, caption, secondary);
+ /* Gtk::MessageDialog dialog(*this, Glib::ustring(caption));
+ dialog.set_secondary_text(secondary);
+ dialog.run();*/
+#endif
+}
+
+void MainWindow::onConnectionTerminated(PVSClient* newConnection)
+{
+#ifdef never
+ // code is voided because the info-management will be overhauled sometime
+
+ QString host;
+ if (newConnection)
+ {
+ host = newConnection->getIp(); // copy hostname for message
+ }
+ else
+ host = "spooky unknown";
+
+ // now inform
+ QString caption, secondary;
+
+ caption = "Hostname \"";
+ caption.append(host);
+ caption.append("\" terminated connection.");
+ secondary = "The server has closed the connection to your client.";
+
+ QMessageBox::information(*this, caption, secondary);
+ /*Gtk::MessageDialog dialog(*this, Glib::ustring(caption));
+ dialog.set_secondary_text(secondary);
+ dialog.run();*/
+#endif
+}
+
+void MainWindow::onConnectionRemoved(PVSClient* newConnection)
+{
+ // TODO this would be the place to handle the rest of the fullscreen issue
+ conWin->onConnectionRemoved(newConnection);
+}
+
+void MainWindow::onPasswordFailed(QString Qhost)
+{
+#ifdef never
+ // code is voided because the info-management will be overhauled sometime
+ QString caption, secondary;
+ if (Qhost != "")
+ {
+ caption = "Hostname \"";
+ caption.append(Qhost);
+ caption.append("\" refused password.");
+ secondary = "You have entered no or a wrong password.";
+ }
+ else
+ return; // unknown connection was terminated? too spooky
+ QMessageBox::information(*this, caption, secondary);
+ /* Gtk::MessageDialog dialog(*this, Glib::ustring(caption));
+ dialog.set_secondary_text(secondary);
+ Gtk::Main::run(dialog);*/
+#endif
+}
+
+void MainWindow::sendChatMsg(PVSMsg myMsg)
+{
+ PVSConnectionManager::getManager()->onChat(myMsg);
+}
+
+void MainWindow::receiveChatMsg(QString nick_from, QString nick_to, QString msg)
+{
+ sChatDialog.chat_receive(nick_from, nick_to, msg);
+}
+
+int MainWindow::getPrevWidth() // PVSConnectionManager::getManager()->getPrevWidth()
+{
+ return prev_width;
+}
+
+void MainWindow::setPrevWidth(int newWidth)
+{
+ if (newWidth > 100)
+ prev_width = newWidth;
+ else
+ prev_width = 100;
+}
+
+int MainWindow::getPrevHeight()
+{
+ return prev_height;
+}
+
+void MainWindow::setPrevHeight(int newHeight)
+{
+ if (newHeight > 100)
+ prev_height = newHeight;
+ else
+ prev_height = 100;
+}
+
+void MainWindow::changeEvent(QEvent *e)
+{
+ QMainWindow::changeEvent(e);
+ switch (e->type())
+ {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
+
+/*
+ * The resize Event is called when the mainwindow is resized!
+ * Whe need this event to resize the Frame on the Connectionwindow.
+ * The Frames are resized proportionally to the new size of the mainwindow.
+ * But this Function is called by Qt 3 times before the whole
+ * mainwdow is constructed. We can only resize the Frame on Window and
+ * get the initial size of the Connectionwindow after this 3 times.
+ */
+void MainWindow::resizeEvent(QResizeEvent *event)
+{
+
+ if (bgimage == true){
+ repaintbackgroundpicture(); // repaint the backgroundpicture scaled to the window size
+ }
+
+ if (_firstResize == 3)
+ {
+ QSize oldSize = event->oldSize();
+ _initW = ui->widget->width();
+ _initH = ui->widget->height();
+ _firstResize++;
+ }
+ std::list<QString>* selectedClients =
+ MainWindow::getConnectionList()->getSelectedClients();
+ if (is_closeup && selectedClients->size() == 1)
+ {
+ PVSClient* pvsClient =
+ PVSConnectionManager::getManager()->getClientFromIp(
+ selectedClients->front().toStdString().c_str());
+ pvsClient->getConnectionFrame()->paintCloseUp(ui->widget->width(),
+ ui->widget->height());
+ }
+ else if (!is_closeup && _firstResize > 3)
+ {
+ int ratio_w = (ui->widget->width()*100)/_initW;
+ int ratio_h = (ui->widget->height()*100)/_initH;
+ foreach (ConnectionFrame* cf, getConnectionWindow()->getFrameList())
+ {
+ /*int margin = ui->widget->style()->pixelMetric(QStyle::PM_DefaultTopLevelMargin);
+ int x = ui->widget->width() - margin;
+ int y = ui->widget->height() - margin;
+ updatePos(cf, x, y);*/
+ int w = (cf->init_w * ratio_w) / 100;
+ int h = (cf->init_h * ratio_h) / 100;
+ cf->paintCloseUp(w,h);
+ }
+ }
+
+ if (_firstResize < 3)
+ _firstResize++;
+}
+
+void MainWindow::updatePos(ConnectionFrame* cf, int x, int y)
+{
+ int posx = (x*cf->pos().x())/_initW;
+ int posy = (y*cf->pos().y())/_initH;
+ cf->move(posx, posy);
+ /*QSize size = cf->sizeHint();
+ cf->setGeometry(x - size.rwidth(), y - size.rheight(),
+ size.rwidth(), size.rheight());*/
+}
+
+void MainWindow::on_log_line(LogEntry consoleEntry)
+{
+ ConsoleLogger::LOG_LEVEL level = consoleEntry.getLevel();
+ if (level == ConsoleLogger::LOG_ERROR && !showError)
+ return;
+ if (level == ConsoleLogger::LOG_NORMAL && !showNormal)
+ return;
+ if (level == ConsoleLogger::LOG_NETWORK && !showNetwork)
+ return;
+ if (level == ConsoleLogger::LOG_TERMINAL && !showTerminal)
+ return;
+ if (level == ConsoleLogger::LOG_CHAT && !showChat)
+ return;
+
+ ui->pvsLog->insertPlainText(consoleEntry.getLine());
+
+}
+
+void MainWindow::onToggleLog(bool showtime)
+{
+ if (showtime)
+ ;//to kill the system warning due "unused variable"
+ showError = ui->actionShow_Error->isChecked();
+ showTerminal = ui->actionShow_Terminal->isChecked();
+ showNetwork = ui->actionShow_Network->isChecked();
+ showChat = ui->actionShow_Chat->isChecked();
+ showNormal = ui->actionShow_Normal->isChecked();
+ //showAtAll = ui->logAtAllAction->get_active();
+
+
+ ConsoleLog dump2Listener(this, &MainWindow::on_log_line);
+}
+
+void MainWindow::setLogConsoleDisabled(bool visible)
+{
+ if (!visible)
+ ui->pvsLog->hide();
+ else
+ ui->pvsLog->show();
+}
+
+/*void MainWindow::close()
+{
+ //sChatDialog.close();
+ QApplication::closeAllWindows();
+}*/
+
+void MainWindow::disconnect()
+{
+ conWin->removeVNC();
+}
+
+void MainWindow::lockUnlockAll()
+{
+ if (_isLockAll)
+ {
+ //ui->actionLock set icon to unlock
+ MainWindow::getConnectionWindow()->unlockAllStations();
+ _isLockAll = false;
+ }
+ else
+ {
+ //ui->actionLock set icon to lock
+ MainWindow::getConnectionWindow()->lockAllStations();
+ _isLockAll = true; //tell the manager all the clients are locked
+ }
+}
+
+void MainWindow::closeUp()
+{
+ std::list<QString>* selectedClients =
+ MainWindow::getConnectionList()->getSelectedClients();
+ if (!is_closeup)
+ {
+ if (selectedClients->size() == 1)
+ {
+ PVSClient
+ * pvsClient =
+ PVSConnectionManager::getManager()->getClientFromIp(
+ selectedClients->front().toStdString().c_str());
+ _framePosOnCloseUp = pvsClient->getConnectionFrame()->pos();//get the actualy position before run closeup
+ if (pvsClient->getVNCConnection())
+ {
+ conWin->setCloseupFrame(pvsClient->getConnectionFrame());
+ _updatefreq = pvsClient->getConnectionFrame()->getFrame()->getVNCClientThread()->getUpdatefreq();
+ pvsClient->getConnectionFrame()->getFrame()->getVNCClientThread()->setUpdatefreq(50);
+ pvsClient->getConnectionFrame()->move(5,5);
+ pvsClient->getConnectionFrame()->setWindowFlags(Qt::WindowStaysOnTopHint);
+ pvsClient->getConnectionFrame()->raise();
+ pvsClient->getConnectionFrame()->paintCloseUp(ui->widget->width(),ui->widget->height());
+
+ is_closeup = true;
+ conWin->setCloseupFrame(pvsClient->getConnectionFrame());
+ }
+ }
+ else
+ {
+ QString
+ message =
+ QString(
+ tr(
+ "This operation can only be performed for one selected Client!"));
+ QMessageBox::information(this, "PVS", message);
+ }
+ }
+ else if (conWin->getCloseupFrame())
+ {
+ /*PVSClient* pvsClient =
+ PVSConnectionManager::getManager()->getClientFromIp(
+ selectedClients->front().toStdString().c_str());*/
+ conWin->getCloseupFrame()->setWindowFlags(Qt::Widget);
+ conWin->getCloseupFrame()->paintCloseUp(conWin->getCloseupFrame()->getPrevWidth(), conWin->getCloseupFrame()->getPrevHeight());
+ conWin->getCloseupFrame()->move(_framePosOnCloseUp);//back to the position before the closeup
+ if (conWin->getCloseupFrame()->getConnection()->getVNCConnection())
+ conWin->getCloseupFrame()->getFrame()->getVNCClientThread()->setUpdatefreq(_updatefreq);
+
+ is_closeup = false;
+ conWin->setCloseupFrame(NULL);
+ }
+}
+
+void MainWindow::foto() // makes a screenshot of the selected client
+{
+ std::list<QString>* selectedClients =
+ MainWindow::getConnectionList()->getSelectedClients();
+ if (selectedClients->size() > 0)
+ {
+ QString format = "png";
+ for (std::list<QString>::iterator tmpIt = selectedClients->begin(); tmpIt
+ != selectedClients->end(); tmpIt++)
+ {
+
+ QString path = QDir::homePath().append("/").append(*tmpIt).append(
+ ".png");
+ PVSClient
+ * pvsClient =
+ PVSConnectionManager::getManager()->getClientFromIp(
+ (*tmpIt).toUtf8().data());
+ if (pvsClient->getVNCConnection())
+ {
+ const QImage img = pvsClient->getConnectionFrame()->getFrame()->getImageForFoto();
+ if (!img.isNull())
+ img.save(path, format.toAscii());
+ }
+ else printf("Cannot save screen: Image is null.\n");
+ }
+ }
+ else
+ {
+ QString
+ message =
+ QString(
+ tr(
+ "This operation can only be performed for at least one selected Client!"));
+ QMessageBox::information(this, "PVS", message);
+ }
+}
+
+void MainWindow::createProfile()
+{
+ profileDialog proDiag;
+ proDiag.exec();
+}
+
+void MainWindow::showusername()
+{
+ MainWindow::getConnectionList()->setColumnHidden(2, false);
+ MainWindow::getConnectionList()->setColumnHidden(0, true);
+ MainWindow::getConnectionList()->setColumnHidden(1, true);
+}
+
+void MainWindow::showname()
+{
+ MainWindow::getConnectionList()->setColumnHidden(0, false);
+ MainWindow::getConnectionList()->setColumnHidden(1, true);
+ MainWindow::getConnectionList()->setColumnHidden(2, true);
+}
+
+void MainWindow::showip()
+{
+ MainWindow::getConnectionList()->setColumnHidden(1, false);
+ MainWindow::getConnectionList()->setColumnHidden(2, true);
+ MainWindow::getConnectionList()->setColumnHidden(0, true);
+}
+
+void MainWindow::incomingFile()
+{
+ QTcpSocket *socket = _serverSocket->nextPendingConnection();
+ ServerFileTransfert* sft = new ServerFileTransfert(this);
+ sft->receiveFileFromHost(socket);
+}
+
+void MainWindow::changeRatio(int ratio) // needed the change the size of the vnc-screens
+{
+
+ if (!_isThumbnailrate)
+ {
+ QString str;
+ str.append(QString("%1").arg(ratio));
+ ui->label_2->setText(str);
+
+ std::list<QString>* selClients = getConnectionList()->getSelectedClients();
+ if (selClients->size() > 0)
+ {
+ for (std::list<QString>::iterator client = selClients->begin(); client
+ != selClients->end(); client++)
+ {
+ PVSClient* pvsClient =
+ PVSConnectionManager::getManager()->getClientFromIp(
+ (*client).toUtf8().data());
+ ConnectionFrame *frame = pvsClient->getConnectionFrame();
+ int w = (frame->init_w * ratio) / 100;
+ int h = (frame->init_h * ratio) / 100;
+ frame->setPrevWidth(w);
+ frame->setPrevHeight(h);
+ frame->paintCloseUp(w, h);
+ frame->setRatio(ratio);
+ }
+ }
+ else
+ {
+ QList<ConnectionFrame *> frameList =
+ MainWindow::getConnectionWindow()->getFrameList();
+ ConnectionFrame *frame;
+ foreach(frame, frameList)
+ {
+ int w = (frame->init_w * ratio) / 100;
+ int h = (frame->init_h * ratio) / 100;
+ frame->setPrevWidth(w);
+ frame->setPrevHeight(h);
+ frame->paintCloseUp(w, h);
+ }
+ }
+ }
+ else
+ {
+ int updatefreq = (ratio*500)/100;
+ QString str;
+ str.append(QString("%1").arg(updatefreq));
+ ui->label_2->setText(str);
+ std::list<QString>* selClients = getConnectionList()->getSelectedClients();
+ if (selClients->size() > 0)
+ {
+ for (std::list<QString>::iterator client = selClients->begin(); client
+ != selClients->end(); client++)
+ {
+ PVSClient* pvsClient =
+ PVSConnectionManager::getManager()->getClientFromIp(
+ (*client).toUtf8().data());
+ if (pvsClient->getVNCConnection())
+ pvsClient->getConnectionFrame()->getFrame()->getVNCClientThread()->setUpdatefreq(updatefreq);
+ }
+ }
+ else
+ {
+ std::list<PVSClient*> clients = PVSConnectionManager::getManager()->getConnections();
+ foreach (PVSClient* client, clients)
+ {
+ if (client->getVNCConnection())
+ client->getConnectionFrame()->getFrame()->getVNCClientThread()->setUpdatefreq(updatefreq);
+ }
+ }
+
+ }
+}
+
+/*
+ * We can change the status for the action that we want to assign to the thumbnails.
+ * The actions are to be perform over the horizontalslider from QSlider only on the not dummies clients.
+ * The dummies clients aren't involved.
+ * We distingue two status:
+ * -Thumbnailratio:hier we can change the ratio of the thumbnails.
+ * -Thumbnailrate:we change the rate of the VNCClientThread of the frames. These actions are perform on the selected clients.
+ * If no clients are selected, we change the ratio of the whole clients on the clientlist *
+ */
+void MainWindow::changeStatus(int index)
+{
+ QString status = ui->thumbStatus->currentText ();
+
+ if (status == "Thumbnailratio")
+ {
+ _isThumbnailrate = false;
+ ui->label_3->setText("%");
+ std::list<QString>* selClients = getConnectionList()->getSelectedClients();
+ if (selClients->size() == 1)
+ {
+ PVSClient* pvsClient =
+ PVSConnectionManager::getManager()->getClientFromIp(
+ selClients->front().toStdString().c_str());
+ int ratio = pvsClient->getConnectionFrame()->getRatio();
+ ui->label_2->setText(QString::number(ratio));
+ ui->horizontalSlider->setValue(ratio);
+ }
+ else
+ {
+ ui->label_2->setText("100");
+ ui->horizontalSlider->setValue(100);
+ }
+
+ }
+ else if (status == "Thumbnailrate")
+ {
+ _isThumbnailrate = true;
+ ui->label_3->setText("ms");
+ std::list<QString>* selClients = getConnectionList()->getSelectedClients();
+ if (selClients->size() == 1)
+ {
+ PVSClient* pvsClient =
+ PVSConnectionManager::getManager()->getClientFromIp(
+ selClients->front().toStdString().c_str());
+ if (pvsClient->getVNCConnection())
+ {
+ int updatefreq = pvsClient->getConnectionFrame()->getFrame()->getVNCClientThread()->getUpdatefreq();
+ int showfreq = (updatefreq*100)/500;
+ ui->label_2->setText(QString::number(updatefreq));
+ ui->horizontalSlider->setValue(showfreq);
+ }
+ }
+ else
+ {
+ ui->label_2->setText("500");
+ ui->horizontalSlider->setValue(100);
+ }
+ }
+}
+
+
+/*
+ * Going to run a new vncthread with quality: quality
+ */
+void MainWindow::setVNCQuality(int quality)
+{
+ std::list<QString>* selClients = getConnectionList()->getSelectedClients();
+ if (selClients->size() > 0)
+ {
+ for (std::list<QString>::iterator client = selClients->begin(); client
+ != selClients->end(); client++)
+ {
+ PVSClient* pvsClient =
+ PVSConnectionManager::getManager()->getClientFromIp(
+ (*client).toUtf8().data());
+ pvsClient->getConnectionFrame()->resetConnectionWithQuality(quality);
+ pvsClient->getConnectionFrame()->update();
+ }
+ }
+ else
+ {
+ QList<ConnectionFrame*> FrameList = MainWindow::getConnectionWindow()->getFrameList();
+ foreach(ConnectionFrame* frame, FrameList)
+ {
+ frame->resetConnectionWithQuality(quality);
+ frame->update();
+ }
+ }
+
+}
+
+
+void MainWindow::setPasswordForConnection(int enabled)
+{
+ if(enabled == 0)//the checkbox isn't checked, so no passowrd needed, we remove it in the titlebar
+ {
+ QString dummy = PVSConnectionManager::getManager()->setNeedPassword(false);
+ _sessionName = PVSConnectionManager::getManager()->getSessionName();
+ QString title = "PVSmgr - ";
+ title.append(_profilName);
+ title.append(" ["+_sessionName + " : ]");
+ setWindowTitle(title);
+ }
+ else if (enabled == 2) //password is needed, we show it in the titlebar
+ {
+ _pwdCon = PVSConnectionManager::getManager()->setNeedPassword(true);
+ _sessionName = PVSConnectionManager::getManager()->getSessionName();
+ QString title = "PVSmgr - ";
+ title.append(_profilName);
+ title.append(" ["+_sessionName + " : ");
+ title.append(_pwdCon+"]");
+ setWindowTitle(title);
+ }
+}
+//#endif
+
+
+void MainWindow::setindexback() //sets the index of the combobox back
+{
+#ifdef MAINWINDOW_USE_TOUCHGUI
+ ui->comboBox_touch1->setCurrentIndex(0);
+#endif
+}
+
+void MainWindow::clientlisthide() // hide or show the clientlist
+{
+
+ if (locked1 == false)
+ {
+ ui->ClWidget->show();
+ locked1 = true;
+ }
+
+ else
+ {
+ ui->ClWidget->hide();
+ locked1 = false;
+ }
+
+}
+
+
+void MainWindow::lockalltoolbar() // locks all if a dozent is set
+{
+
+
+ if (locked == false)
+ {
+ if (MainWindow::getConnectionWindow()->hasDozent)
+ {
+ MainWindow::getConnectionList()->on_lock_all();
+ locked = true;
+ }
+ else
+ {
+ QString message = QString(tr("You have to set a Superclient-machine before performing this action."));
+ QMessageBox::information(this, "PVS", message);
+ }
+ }
+
+ else
+ {
+ MainWindow::getConnectionList()->on_unlock_all();
+ locked = false;
+ }
+
+}
+
+void MainWindow::locksingle() // locks a single client
+{
+
+ MainWindow::getConnectionList()->on_lock();
+
+}
+
+void MainWindow::unlocksingle() // unlocks a single client
+{
+
+ MainWindow::getConnectionList()->on_unlock();
+
+}
+
+
+void MainWindow::combobox1(int menuindex1) // defines the functions to call from the combobox
+{
+ switch (menuindex1)
+ // index comes from the slot definition
+ {
+ case 1:
+ // Lock all
+ MainWindow::getConnectionList()->on_lock_all();
+ break;
+
+ case 2:
+ // UnLock all
+ MainWindow::getConnectionList()->on_unlock_all();
+ break;
+
+ case 3:
+ // UnProject all
+ MainWindow::getConnectionList()->on_unproject_all();
+ break;
+
+ case 4:
+ //Background Picture
+ backgroundpicture();
+ break;
+ }
+}
+
+void MainWindow::resetall() // unlock and unproject all in toolbar
+ {
+ MainWindow::getConnectionList()->on_unlock_all();
+ MainWindow::getConnectionList()->on_unproject_all();
+ }
+
+
+void MainWindow::projecttoolbar() // projection from toolbar button
+ {
+
+ MainWindow::getConnectionList()->on_projection();
+
+ }
+void MainWindow::unprojecttoolbar() // unproject all in toolbar
+ {
+
+ MainWindow::getConnectionList()->on_unprojection();
+
+ }
+
+void MainWindow::backgroundpicture()
+ {
+
+
+ fileName = QFileDialog::getOpenFileName(this,
+ tr("Open Image"), "/home", tr("Image Files (*.png *.jpg *.svg)")); // user chooses a file
+
+ QImage img(""+fileName+""); // set image
+ QString test("/tmp/test.png"); // set path for saving the scaled picture
+ QImage img2 = img.scaled(ui->widget->size(),Qt::IgnoreAspectRatio,Qt::FastTransformation); // scale it
+
+ img2.save(""+test+""); // save it
+
+ ui->widget->setStyleSheet("background-image: url(/tmp/test.png);background-repeat:no-repeat; background-position:center;"); //set the picture as background
+ foreach (ConnectionFrame* cf, MainWindow::getConnectionWindow()->getAllFrameOnWindow())
+ {
+ cf->setStyleSheet(QString::fromUtf8("background-color: rgb(150, 150, 168);"));
+ }
+
+ bgimage=true; // for the resize event, set background true
+
+
+ }
+
+void MainWindow::repaintbackgroundpicture() // same as backgroundpicture but called when mainwindow is resized
+ {
+
+ QImage img("/tmp/test.png");
+ QString test("/tmp/test.png");
+ QImage img2 = img.scaled(ui->widget->size(),Qt::IgnoreAspectRatio,Qt::FastTransformation);
+
+ img2.save(""+test+"");
+
+ ui->widget->setStyleSheet("background-image: url(/tmp/test.png);background-repeat:no-repeat; background-position:center;");
+
+
+ }
+
+void MainWindow::setdozenttoolbar() // set the dozents pc which is not locked with lockedall
+{
+
+ std::list<QString>* selectedClients =
+ MainWindow::getConnectionList()->getSelectedClients();
+
+ if (selectedClients->size() == 1)
+ {
+
+ PVSClient* pvsClient =
+ PVSConnectionManager::getManager()->getClientFromIp(
+ selectedClients->front().toStdString().c_str());
+ if (pvsClient->getVNCConnection())
+ pvsClient->getConnectionFrame()->getFrame()->setDozent();
+ }
+
+}
+
+void MainWindow::startChatDialog()
+{
+ if (!sChatDialog.isVisible())
+ sChatDialog.show(); //show the chat dialog
+ else
+ sChatDialog.raise();//show the chat dialog on top level
+}
+
+
+
+MainWindow* MainWindow::myself = NULL;
+ConnectionList* MainWindow::conList = NULL;
+ConnectionWindow* MainWindow::conWin = NULL;
+bool MainWindow::_isLockAll = false;