diff options
Diffstat (limited to 'src/gui/mainWindow.cpp')
| -rw-r--r-- | src/gui/mainWindow.cpp | 1205 |
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; |
