summaryrefslogblamecommitdiffstats
path: root/src/gui/processesStartDialog.cpp
blob: e0a62862b654cfcc13888ebe3ec4a6af96f6ce2f (plain) (tree)




















                                                                               

                                             
 
                                   

                                                                                    






                                                                                                                  



                                             
          



                                 
                                                     
                                                       










                                                                                                           

                                                      
                 
         

 
                                    
 
                                      


                      
                                          
 









































































                                                                                                                             
 
/*
# 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());
}