From a1be80d76695511f7996f366f2e983db2e96b972 Mon Sep 17 00:00:00 2001
From: Fabian Schillinger
Date: Tue, 9 Nov 2010 02:25:21 +0100
Subject: added a list to processesStartDialog: we can chose some commands from
this list to start them or we can add new entries for a later usage
modified documentation
---
src/gui/processesStartDialog.cpp | 89 ++++++++++++++++-
src/gui/processesStartDialog.h | 9 +-
src/gui/ui/processesStartDialog.ui | 193 ++++++++++++++++++++++++++++++-------
3 files changed, 243 insertions(+), 48 deletions(-)
(limited to 'src')
diff --git a/src/gui/processesStartDialog.cpp b/src/gui/processesStartDialog.cpp
index d1a7017..e0a6286 100644
--- a/src/gui/processesStartDialog.cpp
+++ b/src/gui/processesStartDialog.cpp
@@ -25,7 +25,13 @@ ProcessesStartDialog::ProcessesStartDialog(QWidget *parent) :
procStartUi->setupUi(this);
connect( procStartUi->sendButton, SIGNAL( clicked()), this, SLOT( send()));
connect( procStartUi->cancelButton, SIGNAL( clicked()), this, SLOT( notSend()));
- procStartUi->listOfProcessesButton->hide();
+ 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()
@@ -36,7 +42,7 @@ 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,
@@ -48,9 +54,9 @@ void ProcessesStartDialog::send()
{
//write name of process to setProcessesDialog
MainWindow::getWindow()->setProcessesDialog(procd);
+ procStartUi->message->clear();
+ emit accept();
}
- procStartUi->message->clear();
- emit accept();
}
}
@@ -62,5 +68,78 @@ void ProcessesStartDialog::notSend()
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());
}
diff --git a/src/gui/processesStartDialog.h b/src/gui/processesStartDialog.h
index 856279b..358a356 100644
--- a/src/gui/processesStartDialog.h
+++ b/src/gui/processesStartDialog.h
@@ -19,17 +19,14 @@ public:
private:
Ui::ProcessesStartDialog *procStartUi;
-
- /*QGridLayout *layout;
- QLabel *textLabel;
- QLineEdit *messageEdit;
- QPushButton *sendButton;
- QPushButton *cancelButton;*/
+ QSettings settings;
private slots:
void send();
void notSend();
void listProcesses();
+ void save();
+ void itemClicked(int row, int column);
};
#endif // PROCESSESSTARTDIALOG_H
diff --git a/src/gui/ui/processesStartDialog.ui b/src/gui/ui/processesStartDialog.ui
index 0f6c60a..2003c57 100644
--- a/src/gui/ui/processesStartDialog.ui
+++ b/src/gui/ui/processesStartDialog.ui
@@ -6,71 +6,190 @@
0
0
- 418
- 120
+ 524
+ 309
Start Process
-
+
10
10
- 401
- 101
+ 503
+ 291
-
+
-
-
-
- Process to start:
-
-
-
- -
-
-
- -
-
-
- 5
-
+
-
-
+
- List of Processes
+ Either use a command from this list or type in the process in the lower field.
-
-
-
- Qt::Horizontal
+
+
+ Qt::ScrollBarAsNeeded
+
+
+ Qt::ScrollBarAlwaysOff
+
+
+ QAbstractItemView::DoubleClicked|QAbstractItemView::SelectedClicked
+
+
+ true
+
+
+ QAbstractItemView::SingleSelection
+
+
+ QAbstractItemView::SelectRows
+
+
+ Qt::DotLine
+
+
+ false
+
+
+ false
-
-
- 108
- 20
-
+
+ false
-
+
+ true
+
+
+ false
+
+
+ 200
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ 200
+
+
+
+ Command
+
+
+
+
+ Description
+
+
+
+
+ -
+
+
-
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Save
+
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ -
+
-
-
+
- Cancel
+ Process to start:
-
-
-
- Start
+
+
+ -
+
+
+ 5
-
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 108
+ 20
+
+
+
+
+ -
+
+
+ Cancel
+
+
+
+ -
+
+
+ Start
+
+
+
+
--
cgit v1.2.3-55-g7522
From 659e756d5ba4944de7d8d87cbf3574cd97027150 Mon Sep 17 00:00:00 2001
From: Fabian Schillinger
Date: Wed, 10 Nov 2010 19:16:47 +0100
Subject: moved filter for ProcessList to pvsmgr.conf (this way the user cant
modify its filter)
---
src/gui/processWidget.cpp | 11 +++++++----
src/gui/processWidget.h | 2 ++
src/pvs.cpp | 11 +++++------
src/pvs.h | 2 +-
4 files changed, 15 insertions(+), 11 deletions(-)
(limited to 'src')
diff --git a/src/gui/processWidget.cpp b/src/gui/processWidget.cpp
index 38dd2ae..2211c93 100644
--- a/src/gui/processWidget.cpp
+++ b/src/gui/processWidget.cpp
@@ -23,7 +23,10 @@ ProcessWidget::ProcessWidget(QWidget *parent, PVSClient *cl):
QWidget(parent),
prowui(new Ui::ProcessWidget)
{
+ //filterSettings.setValue("RemoteProcessesList/filter", "pvs pvsgui pvsmgr pvsmgrtouch");
+
prowui->setupUi(this);
+ filter = filterSettings.value("RemoteProcessesList/filter").toString();
client = cl;
@@ -33,7 +36,7 @@ ProcessWidget::ProcessWidget(QWidget *parent, PVSClient *cl):
connect( client, SIGNAL( processVectorReady(bool)), this, SLOT( refrProcessList()));
//tell client we want to see his processes
- sendCommand("SHOWPROCESSES", "");
+ sendCommand("SHOWPROCESSES", filter);
}
void ProcessWidget::startProcess()
@@ -46,14 +49,14 @@ void ProcessWidget::startProcess()
if (start == QMessageBox::Ok)
{
sendCommand("STARTPROCESS", prowui->processLineEdit->text());
- sendCommand("SHOWPROCESSES", "");
+ sendCommand("SHOWPROCESSES", filter);
}
prowui->processLineEdit->clear();
}
void ProcessWidget::resendProcessList()
{
- sendCommand("SHOWPROCESSES", "");
+ sendCommand("SHOWPROCESSES", filter);
}
void ProcessWidget::refrProcessList(bool timerEvent)
@@ -127,7 +130,7 @@ void ProcessWidget::stopProcess()
}
}
//tell client to update his list
- sendCommand("SHOWPROCESSES", "");
+ sendCommand("SHOWPROCESSES", filter);
}
}
diff --git a/src/gui/processWidget.h b/src/gui/processWidget.h
index 4d696eb..7f6737c 100644
--- a/src/gui/processWidget.h
+++ b/src/gui/processWidget.h
@@ -25,6 +25,8 @@ private:
Ui::ProcessWidget *prowui;
PVSClient *client;
QVector *processes;
+ QSettings filterSettings;
+ QString filter;
private slots:
void startProcess();
diff --git a/src/pvs.cpp b/src/pvs.cpp
index 843a725..1f751b8 100755
--- a/src/pvs.cpp
+++ b/src/pvs.cpp
@@ -263,7 +263,7 @@ void PVS::onCommand(PVSMsg cmdMessage)
if (ident.compare("SHOWPROCESSES") == 0)
{
_pvsServerConnection->sendMessage(PVSMsg(PVSCOMMAND, "PROCESSES", "SHOW clear")); //tell the client that we want to clear his process-list
- showProc();
+ showProc(message);
return;
}
if (ident.compare("STARTPROCESS") == 0)
@@ -938,10 +938,9 @@ QString PVS::getConfigValue(QString key)
return _settings.value(key).toString();
}
-void PVS::showProc()
+void PVS::showProc(QString filter)
{
- QString settings = getConfigValue("RemoteProcess/filter");
- QStringList filter = settings.split(" ");
+ QStringList filterList = filter.split(" ");
//look at procfs
QDir procfs("/proc");
@@ -988,9 +987,9 @@ void PVS::showProc()
}
if (write) //check if user belongs to pvs
{
- for (int i=0;iName<\#>cmdline und füllt somit seinen Prozessvektor auf. Ist \textit{/proc} komplett abgearbeitet wird ein PVSCOMMAND mit Ident SHOW und Inhalt finished abgesendet, dies löst ein erneuetes lesen der Prozessliste Managerseitig aus:\\
-Hier wird zu beginn die Prozessliste des Client gelöscht und der Prozessvektor des Clients gelesen. Für jeden Eintrag der Art PID<\#>Name<\#>cmdline wird eine neue Zeile in der Prozessliste geschrieben und PID, Name und cmdline in die jeweiligen Zellen geschrieben.
+Hier wird zu beginn die Prozessliste des Client gelöscht und der Prozessvektor des Clients gelesen. Für jeden Eintrag der Art PID<\#>Name<\#>cmdline wird eine neue Zeile in der Prozessliste geschrieben und PID, Name und cmdline in die jeweiligen Zellen geschrieben.\\
+Prozesse die aus der Liste herausgefiltert werden werden auch in der Datei \textit{pvsmgr.conf} abgespeichert. Eine mögliche Konfigurationsdatei sieht etwa so aus:
+\begin{verbatim}
+[RemoteProcessesList]
+filter=pvs pvsgui pvsmgr
+\end{verbatim}
\section{Netzwerkkommunikation}
\index{Netzwerkkommunikation}
diff --git a/doc/LaTeX/intro/0000-chapter.tex b/doc/LaTeX/intro/0000-chapter.tex
index c3c5efe..6b3319b 100644
--- a/doc/LaTeX/intro/0000-chapter.tex
+++ b/doc/LaTeX/intro/0000-chapter.tex
@@ -2,13 +2,13 @@
\label{einleitung}
\index{Einleitung} \index{Video Switch} \index{Laptop} \index{VGA} \index{DVI} \index{Klassenraum} \index{Student Control Panel} \index{Idee}
-Video-Switches für Klassenräume sind schon seit langem auf dem Markt: Sie setzen typischerweise auf eine Hardware-Lösung, die das Verlegen von vielen Metern Kabel bei dadurch erzwungener statischer Anordnung der Rechner verlangt. Sie sind nicht nur aufgrund des Einsatzes spezieller Hardware relativ teuer, sondern unflexibel bei technischen Weiterentwicklungen: Höhere Bildschirmauflösungen oder der Wechsel vom VGA- auf den DVI-Connector bzw. Display-Port oder die Ablösung von PS2 durch USB sind nur durch einen Komplettaustausch oder unangenehme Kompromisse zu haben. Ziemlich ungeeignet erweisen sich hardware-basierte Lösungen beim Einsatz mobiler Geräte wie Laptops. Generell erschweren sie die Veränderung der ursprünglichen Aufstellung der Maschinen und schaffen damit ungünstige Bedingungen für neue didaktische Konzepte.
+Video-Switches für Klassenräume sind schon seit langem auf dem Markt: Sie setzen typischerweise auf eine Hardware-Lösung, die das Verlegen von vielen Metern Kabel bei dadurch erzwungener statischer Anordnung der Rechner verlangt. Sie sind nicht nur aufgrund des Einsatzes spezieller Hardware relativ teuer, sondern unflexibel bei technischen Weiterentwicklungen: Höhere Bildschirmauflösungen oder der Wechsel vom VGA auf den DVI oder PS2 auf den USB-Stecker sind nur durch einen Komplettaustausch oder unangenehme Kompromisse zu haben. Ziemlich ungeeignet erweisen sich hardware-basierte Lösungen beim Einsatz mobiler Geräte wie Laptops. Zudem erschweren sie die Veränderung der ursprünglichen Aufstellung der Maschinen und schaffen damit ungünstige Bedingungen für neue didaktische Konzepte.
\begin{figure}[h]
\center
\includegraphics[width=11.5cm]{bilder/studentctlpanel.png}
\caption{Student Control Panel des Edubuntu-Pakets, welches im Umfeld von Linux-Terminalservern eingesetzt werden kann.\label{uscp}}
\end{figure}
-Neben den Hardware-basierten Varianten existieren inzwischen eine Reihe von Software-Produkten. Leider bieten sie keine optimalen Lösungen: Neben typischerweise exorbitanten Lizenzkosten, die oft mit einem didaktisch und konzeptionell fragwürdigen Feature-Set begründet werden, orientieren sie sich an einem einzigen auf den Schulungs-PCs festinstalliertem Betriebssystem. Oft stehen die Produkte nur für ausgewählte Microsoft-Betriebssysteme zur Verfügung und können damit nicht dem Anspruch einer breit angelegten Umgebung entsprechen, wie sie in Universitäten, Bildungseinrichtungen aber auch durchaus in Schulen vorzufinden ist. Zudem kommen regelmäßige, typischerweise kostenpflichtige Produkt-Updates hinzu, denen sich nur begrenzt ausweichen läßt.
+Neben den Hardware-basierten Varianten existieren inzwischen eine Reihe von Software-Produkten. Leider bieten sie keine optimalen Lösungen: Neben oft exorbitanten Lizenzkosten, die oft mit einem didaktisch und konzeptionell fragwürdigen Feature-Set begründet werden, orientieren sie sich an einem einzigen auf den Schulungs-PCs festinstalliertem Betriebssystem. Oft stehen sie nur für ausgewählte Microsoft-Betriebssysteme zur Verfügung und können damit nicht dem Anspruch einer breiten und allgemeinen universitären Umgebung entsprechen. Zudem kommen regelmäßige, typischerweise kostenpflichtige Produkt-Updates hinzu, denen sich nur begrenzt ausweichen läßt.
Dem soll ein eigener Ansatz entgegengesetzt werden, der die eingangs genannten Beschränkungen aufhebt und dem Anspruch einer modernen universitären computer-gestützten Lehre entgegenkommt. Das Projekt soll stufenweise von einer einfachen Basislösung in Rückmeldung mit den Lehrenden weiterentwickelt werden. Ein Open-Source-Ansatz gewährleistet zudem eine größere Nachhaltigkeit. Selbst bei einer Projekteinstellung können andere auf den Code weiterhin zurückgreifen und damit einerseits bestehende Installationen aktualisieren und andererseits eigene Entwicklungen schneller vorantreiben.
diff --git a/doc/LaTeX/intro/0100-funktionen.tex b/doc/LaTeX/intro/0100-funktionen.tex
index 47799e4..0dbac13 100644
--- a/doc/LaTeX/intro/0100-funktionen.tex
+++ b/doc/LaTeX/intro/0100-funktionen.tex
@@ -10,7 +10,7 @@ In der verfügbaren Version wurden eine Reihe von Features realisiert. Hierzu z
\begin{figure}[h]
\center
\includegraphics[width=11.5cm]{bilder/studentctlpanel.png}
-\caption{Die Steuerkonsole des Pool Video Switches in ihrer Hauptansicht. Diese grafische Applikation sollte sinnvollerweise auf einem eigenen Desktop oder komplett eigenen Rechner laufen.\label{uscp}}
+\caption{Student Control Panel des Edubuntu-Pakets, welches im Umfeld von Linux-Terminalservern eingesetzt werden kann.\label{uscp}}
\end{figure}
Bei der Realisierung wurde einerseits auf die Absicherung der Steuerverbindungen und andererseits auf die Aspekte des Datenschutzes geachtet. Anders als bei vergleichbaren Produkten liegt in der Standardinstallation die Kontrolle bei den Teilnehmern.
diff --git a/src/gui/processWidget.cpp b/src/gui/processWidget.cpp
index 2211c93..df865a4 100644
--- a/src/gui/processWidget.cpp
+++ b/src/gui/processWidget.cpp
@@ -23,11 +23,17 @@ ProcessWidget::ProcessWidget(QWidget *parent, PVSClient *cl):
QWidget(parent),
prowui(new Ui::ProcessWidget)
{
- //filterSettings.setValue("RemoteProcessesList/filter", "pvs pvsgui pvsmgr pvsmgrtouch");
+
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()));
--
cgit v1.2.3-55-g7522