summaryrefslogblamecommitdiffstats
path: root/src/gui/projectionDialog.cpp
blob: 32e4651b96022f0d198c6143fd307b858e1f2be9 (plain) (tree)




















































                                                                                           






                                                                                                           


                                      

                                                                                                     



















































































                                                                                              
/*
# 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/
# -----------------------------------------------------------------------------
# projectionDialog.cpp
	Dialog to select client for the projection
# -----------------------------------------------------------------------------
*/

#include "projectionDialog.h"
#include "ui_projectionDialog.h"
#include <src/gui/mainWindow.h>
#include <QtGui>
#include <iostream>

ProjectionDialog::ProjectionDialog(QWidget *parent) :
    QDialog(parent),
    pui(new Ui::projectionDialog)
{
    pui->setupUi(this);
    this->setWindowTitle(tr("Target for Projection"));

    source = MainWindow::getConnectionList()->getSelectedClients()->front();
    setupContent(MainWindow::getWindow()->getConnectionList()->getTargetToDisplay(source));

	pui->send->setDisabled(true);

    connect( pui->send, SIGNAL( clicked() ), this, SLOT( sendListToProject() ) );
    connect( pui->cancel, SIGNAL( clicked() ), this, SLOT( cancelProject() ) );
    connect( pui->checkBox, SIGNAL( clicked() ), this, SLOT( selectAll() ) );
}

ProjectionDialog::~ProjectionDialog()
{
	delete pui;
	QCheckBox* cbox;
	foreach(cbox, checkList)
	{
		disconnect( cbox, SIGNAL( clicked() ), this, SLOT( sendState() ) );
	}
}

void ProjectionDialog::setupContent(QList<QString> content)
{
	if (!content.isEmpty())
	{
		// get a list of all dozent machines
		QStringList dozentList;
		QList<ConnectionFrame*> clients = MainWindow::getConnectionWindow()->getAllFrameOnWindow();
		foreach (ConnectionFrame *client, clients)
			if (client->isDozent())
				dozentList.append(client->getTaskbarTitle());

		QString item;
		foreach(item, content)
		{
			// FIXME: Projection on tutor PC does not work bc. we change his name here...
			// if (dozentList.contains(item)) item.append(" (Tutor PC)");
			QCheckBox *checkbox = new QCheckBox(item,this);
			pui->verticalLayout_2->addWidget(checkbox);
			checkList.push_back(checkbox);
			connect( checkbox, SIGNAL( clicked() ), this, SLOT( sendState() ) );
		}
	}
	else
	{
		QLabel *textInfo = new QLabel(this);
		textInfo->setText("No Target available");
		pui->verticalLayout_2->addWidget(textInfo);
		pui->checkBox->setDisabled(true);
	}
}

void ProjectionDialog::sendListToProject()
{
	MainWindow::getConnectionList()->setProjectProporties(source);
	QCheckBox* cbox;

	foreach(cbox, checkList)
	{
		if (cbox->isChecked())
		{
			MainWindow::getConnectionList()->addTargetToProjectList(cbox->text());
		}
	}
	emit accept();
}

void ProjectionDialog::cancelProject()
{
	emit reject();
}

void ProjectionDialog::sendState()
{
	QCheckBox* cbox;
	bool set = false;

	foreach(cbox, checkList)
	{
		if (cbox->isChecked())
		{
			pui->send->setDisabled(false);
			set = true;
			break;
		}
	}

	if (!set)
		pui->send->setDisabled(true);

}

void ProjectionDialog::selectAll()
{
	if(pui->checkBox->isChecked())
	{
		QCheckBox* cbox;
		foreach(cbox, checkList)
			cbox->setChecked(true);
		pui->send->setDisabled(false);
	}
	else
	{
		QCheckBox* cbox;
		foreach(cbox, checkList)
			cbox->setChecked(false);
		pui->send->setDisabled(true);
	}
}

void ProjectionDialog::changeEvent(QEvent *e)
{
    QDialog::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        pui->retranslateUi(this);
        break;
    default:
        break;
    }
}