/* # Copyright (c) 2010 - 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/ # ----------------------------------------------------------------------------- # processWidget.cpp Widget to start/stop processes on a client. This widget is used in processesDialog.cpp as a tab in the QTabWidget # ----------------------------------------------------------------------------- */ #include "processesDialog.h" #include "processWidget.h" #include "ui_processWidget.h" ProcessWidget::ProcessWidget(QWidget *parent, PVSClient *cl): QWidget(parent), prowui(new Ui::ProcessWidget) { prowui->setupUi(this); filter = filterSettings.value("RemoteProcessesList/filter").toString(); if (filter == "") { filterSettings.setValue("RemoteProcessesList/filter", "pvs pvsgui x11vnc dbus-launch dbus-daemon"); filter = "pvs pvsgui x11vnc dbus-launch dbus-daemon"; } client = cl; connect( prowui->startButton, SIGNAL( clicked()), this, SLOT( startProcess())); connect( prowui->refreshButton, SIGNAL( clicked()), this, SLOT( resendProcessList())); connect( prowui->stopButton, SIGNAL( clicked()), this, SLOT( stopProcess())); connect( client, SIGNAL( processVectorReady(bool)), this, SLOT( refrProcessList())); //tell client we want to see his processes sendCommand("SHOWPROCESSES", filter); } void ProcessWidget::startProcess() { QMessageBox::StandardButton start = QMessageBox::question(0, tr("PVS Start Process"), tr("Do you want to start the process: ") + prowui->processLineEdit->text() + tr(" on this Client?"), QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok); if (start == QMessageBox::Ok) { sendCommand("STARTPROCESS", prowui->processLineEdit->text()); sendCommand("SHOWPROCESSES", filter); } prowui->processLineEdit->clear(); } void ProcessWidget::resendProcessList() { sendCommand("SHOWPROCESSES", filter); } void ProcessWidget::refrProcessList(bool timerEvent) { if (timerEvent) { if (prowui->processTable->selectedItems().length() > 0) return; else { resendProcessList(); return; } } //remove every item of our list for(int i=prowui->processTable->rowCount(); i == 0; i--) { prowui->processTable->removeRow(i); } prowui->processTable->setRowCount(0); //read every entry of the vector - split it - and put it to the list QVector processes = client->getProcessesVector(); for (int i=0; iprocessTable->setRowCount(i+1); QStringList processesList = processes.at(i).split(QRegExp("<#>")); for (int j=0; jprocessTable->setItem(i,j,new QTableWidgetItem(processesList.at(j),0)); } } } void ProcessWidget::stopProcess() { if (prowui->processTable->rowCount() > 0) { //get a list of all selected items QList selectedItems = prowui->processTable->selectedItems(); QList rows; for (int i=0;irow()) < 0) rows.append(selectedItems.at(i)->row()); } //append names of processes QString processesMessage = ""; for (int i=0;iprocessTable->item(rows.at(i),1)->text()); processesMessage.append(QString(tr(" "))); } QMessageBox::StandardButton start = QMessageBox::question(0, tr("PVS Start Process"), tr("Do you want to stop the process(es):") + processesMessage + tr("on this Client?"), QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok); if (start == QMessageBox::Ok) { //send KILLPROCESS for every row for (int i=0;iprocessTable->item(rows.at(i),0)->text()); } } //tell client to update his list sendCommand("SHOWPROCESSES", filter); } } void ProcessWidget::sendCommand(QString ident, QString message) { client->sendMessage(PVSCOMMAND, ident, message); } ProcessWidget::~ProcessWidget() { delete prowui; }