/* # 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/ # ----------------------------------------------------------------------------- # processesStartDialog.cpp Dialog to get process to send to clients # ----------------------------------------------------------------------------- */ #include "processesStartDialog.h" #include "ui_processesStartDialog.h" #include ProcessesStartDialog::ProcessesStartDialog(QWidget *parent) : QDialog(parent), procStartUi(new Ui::ProcessesStartDialog) { procStartUi->setupUi(this); connect( procStartUi->sendButton, SIGNAL( clicked()), this, SLOT( send())); connect( procStartUi->cancelButton, SIGNAL( clicked()), this, SLOT( notSend())); connect( procStartUi->saveButton, SIGNAL( clicked()), this, SLOT ( save())); //if we click or double click one of our items we put it in our message connect( procStartUi->processesList, SIGNAL( cellDoubleClicked(int,int)), this, SLOT ( itemClicked(int,int))); connect( procStartUi->processesList, SIGNAL( cellClicked(int,int)), this, SLOT ( itemClicked(int,int))); listProcesses(); } ProcessesStartDialog::~ProcessesStartDialog() { // } void ProcessesStartDialog::send() { QString procd = procStartUi->message->text(); save(); //save (if we made changes to our list) if (procd.length()>0) { QMessageBox::StandardButton start = QMessageBox::question(0, tr("PVS Start Process"), tr("Do you want to start the process: ") + procd + tr(" on the selected Clients?"), QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok); if (start == QMessageBox::Ok) { //write name of process to setProcessesDialog MainWindow::getWindow()->setProcessesDialog(procd); procStartUi->message->clear(); emit accept(); } } } void ProcessesStartDialog::notSend() { procStartUi->message->clear(); emit reject(); } void ProcessesStartDialog::listProcesses() { /*settings.beginWriteArray("RemoteProcessesList"); settings.setArrayIndex(0); settings.setValue("command", "oowriter"); settings.setValue("description", "Open Office Writer"); settings.setArrayIndex(1); settings.setValue("command", "oocalc"); settings.setValue("description", "Open Office Calc"); settings.endArray();*/ //read from settings int size = settings.beginReadArray("RemoteProcessesList"); for (int i = 0; i < size; ++i) { settings.setArrayIndex(i); procStartUi->processesList->setRowCount(i+1); procStartUi->processesList->setItem(i, 0, new QTableWidgetItem(settings.value("command").toString(),0)); procStartUi->processesList->setItem(i, 1, new QTableWidgetItem(settings.value("description").toString(),0)); } settings.endArray(); //add empty items to our List QString empty = " "; procStartUi->processesList->setRowCount(procStartUi->processesList->rowCount()+1); procStartUi->processesList->setItem(procStartUi->processesList->rowCount()-1, 0, new QTableWidgetItem(empty,0)); procStartUi->processesList->setItem(procStartUi->processesList->rowCount()-1, 1, new QTableWidgetItem(empty,0)); } void ProcessesStartDialog::save() { //if we delete items from our list we increment our decrement - to decrement our arrayindex int decrement = 0; // if both our last elements are empty dont read them // we need this if we have added new elements if ((procStartUi->processesList->item(procStartUi->processesList->rowCount()-1, 0) != 0) && (procStartUi->processesList->item(procStartUi->processesList->rowCount()-1, 1) != 0)) { settings.beginWriteArray("RemoteProcessesList"); for (int i = 0; i < procStartUi->processesList->rowCount(); ++i) { //if elements are only whitespaces we ignore them if ((procStartUi->processesList->item(i, 0)->text().remove(QRegExp("\\s")) != "") && (procStartUi->processesList->item(i, 1)->text().remove(QRegExp("\\s")) != "")) { settings.setArrayIndex(i-decrement); settings.setValue("command", procStartUi->processesList->item(i, 0)->text()); settings.setValue("description", procStartUi->processesList->item(i, 1)->text()); } else decrement++; //and increment our decrement } settings.endArray(); } else { settings.beginWriteArray("RemoteProcessesList"); for (int i = 0; i < procStartUi->processesList->rowCount()-1; ++i) { if ((procStartUi->processesList->item(i, 0)->text().remove(QRegExp("\\s")) != "") && (procStartUi->processesList->item(i, 1)->text().remove(QRegExp("\\s")) != "")) { settings.setArrayIndex(i-decrement); settings.setValue("command", procStartUi->processesList->item(i, 0)->text()); settings.setValue("description", procStartUi->processesList->item(i, 1)->text()); } else decrement++; } settings.endArray(); } listProcesses(); } void ProcessesStartDialog::itemClicked(int row, int column) { //if last item exists we put it in our message if (procStartUi->processesList->item(row, 0) != 0) procStartUi->message->setText(procStartUi->processesList->item(row, 0)->text()); }