/*
# 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 <src/gui/mainWindow.h>
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());
}