diff options
40 files changed, 2745 insertions, 91 deletions
@@ -1,3 +1,4 @@ .cproject .project build/ +Debug/ @@ -2,19 +2,20 @@ Initial design and first versions: Simon Wittenberg <wittenb@informatik.uni-freiburg.de> Involved team members at the moment: +Fabian Schillinger <schillif@informatik.uni-freiburg.de> +Johann Latocha <johann@latocha.de> +Sébastien Braun <sebb@yellowhippy.org> + +Credits of left team members: Johann Betz <jbetz@informatik.uni-freiburg.de> Javier Castillo <castillf@informatik.uni-freiburg.de> -Johann Latocha <johann@latocha.de> Achille Nana <achille.achille@gmail.com> Simon Rettberg <simon.rettberg@gmail.com> Fadi Salameh <fadi84@hotmail.com> Alexander Hoppe <a.hoppe@gmail.com> Benjamin Lieberwirt <benjamin.lieberwirth@googlemail.com> -Credits of left team members: -- - Project management, supervision: Dirk von Suchodoletz <dvs@openslx.com> Sebastian Schmelzer <sebastian@schmelzer.ws> -Simon Wittenberg <wittenb@informatik.uni-freiburg.de>
\ No newline at end of file +Johann Latocha <johann@latocha.de>
\ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 4214fd3..4eeaea8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -102,6 +102,9 @@ SET( PVSMGR_SRCS src/util/TextFile.cpp src/util/serviceDiscoveryUtil.cpp src/gui/aboutDialog.cpp + src/gui/processesDialog.cpp + src/gui/processesStartDialog.cpp + src/gui/processWidget.cpp src/gui/multicastConfigDialog.cpp ) @@ -151,10 +154,13 @@ SET( PVSMGR_UIS src/gui/ui/mainwindow.ui src/gui/ui/profileDialog.ui src/gui/ui/dialog.ui + src/gui/ui/processesStartDialog.ui src/gui/ui/projectionDialog.ui src/gui/ui/aboutDialog.ui src/gui/ui/serverChatDialog.ui src/gui/ui/clientFileSendDialog.ui + src/gui/ui/processesDialog.ui + src/gui/ui/processWidget.ui src/gui/ui/multicastConfigDialog.ui ) @@ -162,6 +168,7 @@ SET( PVSMGRTOUCH_UIS src/gui/ui/mainwindowtouch.ui src/gui/ui/profileDialog.ui src/gui/ui/dialog.ui + src/gui/ui/processesStartDialog.ui src/gui/ui/projectionDialog.ui src/gui/ui/aboutDialog.ui src/gui/ui/serverChatDialog.ui @@ -202,6 +209,7 @@ SET( PVSMGR_MOC_HDRS src/gui/connectionFrame.h src/gui/profileDialog.h src/gui/dialog.h + src/gui/processesStartDialog.h src/gui/projectionDialog.h src/gui/serverChatDialog.h src/gui/serverFileTransfert.h @@ -212,6 +220,8 @@ SET( PVSMGR_MOC_HDRS src/net/pvsServiceBroadcast.h src/net/SslServer.h src/gui/aboutDialog.h + src/gui/processesDialog.h + src/gui/processWidget.h src/gui/multicastConfigDialog.h ) @@ -438,8 +448,8 @@ SET( CPACK_GENERATOR "DEB;RPM" ) SET( CPACK_SET_DESTDIR "ON" ) SET( CPACK_PACKAGE_NAME "pvs" ) SET( CPACK_PACKAGE_VERSION_MAJOR "2" ) -SET( CPACK_PACKAGE_VERSION_MINOR "0" ) -SET( CPACK_PACKAGE_VERSION_PATCH "3" ) +SET( CPACK_PACKAGE_VERSION_MINOR "8" ) +SET( CPACK_PACKAGE_VERSION_PATCH "0" ) SET( CPACK_PACKAGE_DESCRIPTION_SUMMARY "Pool Video Switch" ) SET( CPACK_PACKAGE_DESCRIPTION "") SET( CPACK_PACKAGE_CONTACT "Simon Wittenberg <wittenb@informatik.uni-freiburg.de>" ) diff --git a/TRANSLATION b/TRANSLATION index 74a10cb..1d04f06 100644 --- a/TRANSLATION +++ b/TRANSLATION @@ -1,4 +1,2 @@ Javier Castillo <castillf@informatik.uni-freiburg.de> -Johann Latocha <johann@latocha.de> -Achille Nana <achille.achille@gmail.com> -Fadi Salameh <fadi84@hotmail.com>
\ No newline at end of file +Johann Latocha <johann@latocha.de>
\ No newline at end of file diff --git a/doc/LaTeX/pvs-doc.aux b/doc/LaTeX/pvs-doc.aux new file mode 100644 index 0000000..604ccf1 --- /dev/null +++ b/doc/LaTeX/pvs-doc.aux @@ -0,0 +1,140 @@ +\relax +\catcode`"\active +\ifx\hyper@anchor\@undefined +\global \let \oldcontentsline\contentsline +\gdef \contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} +\global \let \oldnewlabel\newlabel +\gdef \newlabel#1#2{\newlabelxx{#1}#2} +\gdef \newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} +\AtEndDocument{\let \contentsline\oldcontentsline +\let \newlabel\oldnewlabel} +\else +\global \let \hyper@last\relax +\fi + +\select@language{ngerman} +\@writefile{toc}{\select@language{ngerman}} +\@writefile{lof}{\select@language{ngerman}} +\@writefile{lot}{\select@language{ngerman}} +\@writefile{toc}{\contentsline {chapter}{Inhaltsverzeichnis}{I}{section*.1}} +\@writefile{toc}{\contentsline {part}{I\hspace {1em}Idee und \IeC {\"U}berblick}{1}{part.1}} +\@writefile{toc}{\contentsline {chapter}{\numberline {1}Idee}{3}{chapter.1}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\newlabel{einleitung}{{1}{3}{Idee\relax }{chapter.1}{}} +\@writefile{lof}{\contentsline {figure}{\numberline {1.1}{\ignorespaces Student Control Panel des Edubuntu-Pakets, welches im Umfeld von Linux-Terminalservern eingesetzt werden kann.}}{3}{figure.1.1}} +\newlabel{uscp}{{1.1}{3}{Student Control Panel des Edubuntu-Pakets, welches im Umfeld von Linux-Terminalservern eingesetzt werden kann.\label {uscp}\relax }{figure.1.1}{}} +\@writefile{toc}{\contentsline {chapter}{\numberline {2}Funktionen eines Software-Video-Switchs}{5}{chapter.2}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\newlabel{funktionen}{{2}{5}{Funktionen eines Software-Video-Switchs\relax }{chapter.2}{}} +\@writefile{toc}{\contentsline {section}{\numberline {2.1}W\IeC {\"u}nschenswerte Basisfunktionen}{5}{section.2.1}} +\@writefile{lof}{\contentsline {figure}{\numberline {2.1}{\ignorespaces Student Control Panel des Edubuntu-Pakets, welches im Umfeld von Linux-Terminalservern eingesetzt werden kann.}}{5}{figure.2.1}} +\newlabel{uscp}{{2.1}{5}{Student Control Panel des Edubuntu-Pakets, welches im Umfeld von Linux-Terminalservern eingesetzt werden kann.\label {uscp}\relax }{figure.2.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {2.2}Funktionserweiterungen}{5}{section.2.2}} +\@writefile{toc}{\contentsline {chapter}{\numberline {3}Aufbau dieses Handbuchs}{7}{chapter.3}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\newlabel{aufbau}{{3}{7}{Aufbau dieses Handbuchs\relax }{chapter.3}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.1}Heraushebungen und Formatierungen}{7}{section.3.1}} +\@writefile{toc}{\contentsline {part}{II\hspace {1em}Bedienungsanleitung}{9}{part.2}} +\@writefile{toc}{\contentsline {chapter}{\numberline {4}PVS-Steuerkonsole}{11}{chapter.4}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{toc}{\contentsline {section}{\numberline {4.1}Allgemein}{11}{section.4.1}} +\@writefile{lof}{\contentsline {figure}{\numberline {4.1}{\ignorespaces Die PVS-Steuerkonsole}}{11}{figure.4.1}} +\newlabel{fig:pvsmgra}{{4.1}{11}{Die PVS-Steuerkonsole\relax }{figure.4.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.1}Die Client-Liste}{12}{subsection.4.1.1}} +\newlabel{clientliste}{{4.1.1}{12}{Die Client-Liste\relax }{subsection.4.1.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.2}Die VNC-Frames}{12}{subsection.4.1.2}} +\@writefile{lof}{\contentsline {figure}{\numberline {4.2}{\ignorespaces Dummy und Nicht Dummy Frames}}{13}{figure.4.2}} +\newlabel{fig:pvsdummy}{{4.2}{13}{Dummy und Nicht Dummy Frames\relax }{figure.4.2}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.3}Tastenk\IeC {\"u}rzel f\IeC {\"u}r PVS-Server}{14}{subsection.4.1.3}} +\newlabel{Taste}{{4.1.3}{14}{Tastenkürzel für PVS-Server\relax }{subsection.4.1.3}{}} +\@writefile{toc}{\contentsline {chapter}{\numberline {5}PVS-Client}{15}{chapter.5}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{lof}{\contentsline {figure}{\numberline {5.1}{\ignorespaces Toolbar des PVS-Clients}}{16}{figure.5.1}} +\newlabel{png:toolbar}{{5.1}{16}{Toolbar des PVS-Clients\relax }{figure.5.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {5.1}Chat}{16}{section.5.1}} +\@writefile{lof}{\contentsline {figure}{\numberline {5.2}{\ignorespaces Chat-Dialog des PVS-Clients}}{17}{figure.5.2}} +\newlabel{png:chat}{{5.2}{17}{Chat-Dialog des PVS-Clients\relax }{figure.5.2}{}} +\@writefile{toc}{\contentsline {section}{\numberline {5.2}Konfiguration}{17}{section.5.2}} +\@writefile{lof}{\contentsline {figure}{\numberline {5.3}{\ignorespaces Konfigurationsdialog des PVS-Clients}}{18}{figure.5.3}} +\newlabel{png:config}{{5.3}{18}{Konfigurationsdialog des PVS-Clients\relax }{figure.5.3}{}} +\@writefile{toc}{\contentsline {part}{III\hspace {1em}Entwicklerdokumentation}{19}{part.3}} +\@writefile{toc}{\contentsline {chapter}{\numberline {6}Erzeugen und Installieren der Applikation}{21}{chapter.6}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{toc}{\contentsline {section}{\numberline {6.1}Voraussetzungen}{21}{section.6.1}} +\@writefile{toc}{\contentsline {section}{\numberline {6.2}Kompilieren aus Quellen}{22}{section.6.2}} +\@writefile{toc}{\contentsline {section}{\numberline {6.3}Installation}{22}{section.6.3}} +\@writefile{toc}{\contentsline {chapter}{\numberline {7}Eingesetzte GUI-Bibliothek}{25}{chapter.7}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{toc}{\contentsline {section}{\numberline {7.1}Internationalisierung}{25}{section.7.1}} +\@writefile{toc}{\contentsline {chapter}{\numberline {8}Aufbau und Funktionsweise des PVS}{27}{chapter.8}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{toc}{\contentsline {section}{\numberline {8.1}Einzelne Komponenten}{27}{section.8.1}} +\@writefile{toc}{\contentsline {subsection}{\numberline {8.1.1}Zuordnung von Konsole und Clients}{27}{subsection.8.1.1}} +\@writefile{toc}{\contentsline {subsubsection}{Absicherung und Verifikation der Identit\IeC {\"a}t}{27}{section*.4}} +\@writefile{toc}{\contentsline {subsubsection}{Generierung von Sitzungsnamen}{28}{section*.5}} +\@writefile{toc}{\contentsline {section}{\numberline {8.2}\IeC {\"U}berblick \IeC {\"u}ber Aktivit\IeC {\"a}ten auf Clients}{29}{section.8.2}} +\@writefile{toc}{\contentsline {subsection}{\numberline {8.2.1}Projektion an Alle}{29}{subsection.8.2.1}} +\@writefile{toc}{\contentsline {subsection}{\numberline {8.2.2}Projektion eines Clients auf dem Beamer}{29}{subsection.8.2.2}} +\@writefile{toc}{\contentsline {subsection}{\numberline {8.2.3}Chat- und Informationskanal}{30}{subsection.8.2.3}} +\@writefile{toc}{\contentsline {section}{\numberline {8.3}Netzwerkkommunikation}{32}{section.8.3}} +\@writefile{toc}{\contentsline {subsection}{\numberline {8.3.1}PVS-Protokoll}{32}{subsection.8.3.1}} +\@writefile{toc}{\contentsline {subsection}{\numberline {8.3.2}PVS-Messages}{33}{subsection.8.3.2}} +\newlabel{pvs-msg-liste}{{8.3.2}{34}{PVS-Messages\relax }{subsection.8.3.2}{}} +\@writefile{lot}{\contentsline {table}{\numberline {8.1}{\ignorespaces Liste der PVS Messages}}{34}{table.8.1}} +\newlabel{tab:messagelist}{{8.1}{34}{Liste der PVS Messages\relax }{table.8.1}{}} +\@writefile{toc}{\contentsline {chapter}{\numberline {9}PVS-Steuerkonsole}{35}{chapter.9}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{toc}{\contentsline {section}{\numberline {9.1}pvsmgr in Qt}{35}{section.9.1}} +\@writefile{toc}{\contentsline {section}{\numberline {9.2}GUI Server-Konsole}{35}{section.9.2}} +\@writefile{toc}{\contentsline {subsection}{\numberline {9.2.1}Die Architektur}{35}{subsection.9.2.1}} +\@writefile{lof}{\contentsline {figure}{\numberline {9.1}{\ignorespaces pvsmgr-Architektur}}{36}{figure.9.1}} +\newlabel{fig:pvsmgr}{{9.1}{36}{pvsmgr-Architektur\relax }{figure.9.1}{}} +\@writefile{lof}{\contentsline {figure}{\numberline {9.2}{\ignorespaces Abh{\"a}ngigkeitsdiagram: MainWindow}}{37}{figure.9.2}} +\newlabel{fig:mainwindow}{{9.2}{37}{Abh{\"a}ngigkeitsdiagram: MainWindow\relax }{figure.9.2}{}} +\@writefile{toc}{\contentsline {subsubsection}{Clientliste-Ansicht}{38}{section*.6}} +\@writefile{lof}{\contentsline {figure}{\numberline {9.3}{\ignorespaces Abh{\"a}ngigkeitsdiagramm der ConnectionList-Klasse}}{38}{figure.9.3}} +\newlabel{fig:ConnectionList}{{9.3}{38}{Abh{\"a}ngigkeitsdiagramm der ConnectionList-Klasse\relax }{figure.9.3}{}} +\@writefile{toc}{\contentsline {subsubsection}{VNC-Ansicht}{39}{section*.7}} +\@writefile{lof}{\contentsline {figure}{\numberline {9.4}{\ignorespaces Abh{\"a}ngigkeitsdiagramm der ConnectionFrame-Klasse}}{39}{figure.9.4}} +\newlabel{fig:Connectionframe}{{9.4}{39}{Abh{\"a}ngigkeitsdiagramm der ConnectionFrame-Klasse\relax }{figure.9.4}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {9.2.2}Client-Seite}{40}{subsection.9.2.2}} +\@writefile{toc}{\contentsline {subsection}{\numberline {9.2.3}Server-Seite}{40}{subsection.9.2.3}} +\@writefile{toc}{\contentsline {section}{\numberline {9.3}Verbindungsverwaltung und Projektion}{41}{section.9.3}} +\@writefile{toc}{\contentsline {subsection}{\numberline {9.3.1}Projektion}{41}{subsection.9.3.1}} +\newlabel{pvs-console-projection}{{9.3.1}{41}{Projektion\relax }{subsection.9.3.1}{}} +\@writefile{toc}{\contentsline {subsubsection}{Qualit\IeC {\"a}tsoptionen}{42}{section*.8}} +\newlabel{pvs-console-quality}{{9.3.1}{42}{Qualitätsoptionen\relax }{section*.8}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {9.3.2}Remote Help}{42}{subsection.9.3.2}} +\@writefile{toc}{\contentsline {chapter}{\numberline {10}PVS-Client}{43}{chapter.10}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{lof}{\contentsline {figure}{\numberline {10.1}{\ignorespaces Back- und Frontend des PVS-Clients kommunizieren \IeC {\"u}ber D-Bus}}{43}{figure.10.1}} +\newlabel{pdf:dbus}{{10.1}{43}{Back- und Frontend des PVS-Clients kommunizieren über D-Bus\relax }{figure.10.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {10.1}Grafische Benutzeroberfl\IeC {\"a}che}{44}{section.10.1}} +\@writefile{toc}{\contentsline {section}{\numberline {10.2}User-Interface f\IeC {\"u}r Benutzerkonfiguration}{45}{section.10.2}} +\@writefile{toc}{\contentsline {section}{\numberline {10.3}Darstellung von VNC-Datenstr\IeC {\"o}men}{45}{section.10.3}} +\newlabel{pvsclient-datenstrom}{{10.3}{45}{Darstellung von VNC-Datenströmen\relax }{section.10.3}{}} +\@writefile{toc}{\contentsline {section}{\numberline {10.4}Chat-Interface}{46}{section.10.4}} +\@writefile{toc}{\contentsline {section}{\numberline {10.5}Datei\IeC {\"u}bertragung und Interface}{46}{section.10.5}} +\@writefile{toc}{\contentsline {section}{\numberline {10.6}VNC Server}{47}{section.10.6}} +\@writefile{toc}{\contentsline {subsection}{\numberline {10.6.1}Vergleich von VNC Servern}{48}{subsection.10.6.1}} +\@writefile{toc}{\contentsline {paragraph}{Vino}{48}{section*.9}} +\@writefile{toc}{\contentsline {paragraph}{Krfb}{48}{section*.10}} +\@writefile{toc}{\contentsline {paragraph}{x11vnc}{49}{section*.11}} +\@writefile{toc}{\contentsline {subsection}{\numberline {10.6.2}VNC Script}{50}{subsection.10.6.2}} +\newlabel{pvs-vnc-script}{{10.6.2}{50}{VNC Script\relax }{subsection.10.6.2}{}} +\@writefile{toc}{\contentsline {section}{\numberline {10.7}VNC Viewer}{50}{section.10.7}} +\@writefile{toc}{\contentsline {subsection}{\numberline {10.7.1}Tastatur und Maussteuerung}{51}{subsection.10.7.1}} +\newlabel{pvsclient-remotehelp}{{10.7.1}{51}{Tastatur und Maussteuerung\relax }{subsection.10.7.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {10.8}Signalbehandlung}{52}{section.10.8}} +\@writefile{toc}{\contentsline {part}{IV\hspace {1em}Anhang}{53}{part.4}} +\newlabel{png:kd}{{IV}{55}{Anhang\relax }{part.4}{}} diff --git a/doc/LaTeX/pvs-doc.idx b/doc/LaTeX/pvs-doc.idx new file mode 100644 index 0000000..2548b25 --- /dev/null +++ b/doc/LaTeX/pvs-doc.idx @@ -0,0 +1,34 @@ +\indexentry{Einleitung|hyperpage}{3} +\indexentry{Video Switch|hyperpage}{3} +\indexentry{Laptop|hyperpage}{3} +\indexentry{VGA|hyperpage}{3} +\indexentry{DVI|hyperpage}{3} +\indexentry{Klassenraum|hyperpage}{3} +\indexentry{Student Control Panel|hyperpage}{3} +\indexentry{Idee|hyperpage}{3} +\indexentry{Funktion|hyperpage}{5} +\indexentry{Schreibweise|hyperpage}{7} +\indexentry{Kommando|hyperpage}{7} +\indexentry{Quelltext|hyperpage}{7} +\indexentry{Konfiguration|hyperpage}{7} +\indexentry{Formatierung|hyperpage}{7} +\indexentry{Verzeichnis|hyperpage}{7} +\indexentry{Dateiname|hyperpage}{7} +\indexentry{Installieren|hyperpage}{21} +\indexentry{Paket!RPM|hyperpage}{22} +\indexentry{Paket!DPKG|hyperpage}{22} +\indexentry{QT|hyperpage}{25} +\indexentry{GUI|hyperpage}{25} +\indexentry{Internationalisierung|hyperpage}{25} +\indexentry{Aufbau|hyperpage}{27} +\indexentry{Funktionsweise|hyperpage}{27} +\indexentry{Konzept|hyperpage}{27} +\indexentry{Komponenten|hyperpage}{27} +\indexentry{Projektion|hyperpage}{29} +\indexentry{Beamer|hyperpage}{29} +\indexentry{Chat|hyperpage}{30} +\indexentry{Netzwerkkommunikation|hyperpage}{32} +\indexentry{Protokoll!PVS|hyperpage}{32} +\indexentry{Protokoll|hyperpage}{32} +\indexentry{Message!PVS|hyperpage}{33} +\indexentry{Message|hyperpage}{33} diff --git a/doc/LaTeX/pvs-doc.log b/doc/LaTeX/pvs-doc.log new file mode 100644 index 0000000..e634d13 --- /dev/null +++ b/doc/LaTeX/pvs-doc.log @@ -0,0 +1,1065 @@ +This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009/Debian) (format=pdflatex 2010.9.4) 2 OCT 2010 17:01 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**pvs-doc.tex +(./pvs-doc.tex +LaTeX2e <2009/09/24> +Babel <v3.8l> and hyphenation patterns for english, usenglishmax, dumylang, noh +yphenation, loaded. +\@indexfile=\write3 +\openout3 = `pvs-doc.idx'. + +Writing index file pvs-doc.idx +(./mystyle-pdf.tex (/usr/share/texmf-texlive/tex/latex/base/book.cls +Document Class: book 2007/10/19 v1.4h Standard LaTeX document class +(/usr/share/texmf-texlive/tex/latex/base/bk12.clo +File: bk12.clo 2007/10/19 v1.4h Standard LaTeX file (size option) +) +\c@part=\count79 +\c@chapter=\count80 +\c@section=\count81 +\c@subsection=\count82 +\c@subsubsection=\count83 +\c@paragraph=\count84 +\c@subparagraph=\count85 +\c@figure=\count86 +\c@table=\count87 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\bibindent=\dimen102 +) +(/usr/share/texmf-texlive/tex/generic/babel/babel.sty +Package: babel 2008/07/06 v3.8l The Babel package + +(/usr/share/texmf-texlive/tex/generic/babel/ngermanb.ldf +Language: ngermanb 2008/07/06 v2.6n new German support from the babel system + +(/usr/share/texmf-texlive/tex/generic/babel/babel.def +File: babel.def 2008/07/06 v3.8l Babel common definitions +\babel@savecnt=\count88 +\U@D=\dimen103 +) + +Package babel Warning: No hyphenation patterns were loaded for +(babel) the language `ngerman' +(babel) I will use the patterns loaded for \language=0 instead. + +\l@ngerman = a dialect from \language0 +\l@naustrian = a dialect from \language\l@ngerman +Package babel Info: Making " an active character on input line 92. +)) (/usr/share/texmf-texlive/tex/latex/ucs/ucs.sty +Package: ucs 2004/10/17 UCS: Unicode input support + +(/usr/share/texmf-texlive/tex/latex/ucs/data/uni-global.def +File: uni-global.def 2004/10/17 UCS: Unicode global data +) +\uc@secondtry=\count89 +\uc@combtoks=\toks14 +\uc@combtoksb=\toks15 +\uc@temptokena=\toks16 +) +(/usr/share/texmf-texlive/tex/latex/base/fontenc.sty +Package: fontenc 2005/09/27 v1.99g Standard LaTeX package + +(/usr/share/texmf-texlive/tex/latex/base/t1enc.def +File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file +LaTeX Font Info: Redeclaring font encoding T1 on input line 43. +)) +(/usr/share/texmf-texlive/tex/latex/base/inputenc.sty +Package: inputenc 2008/03/30 v1.1d Input encoding file +\inpenc@prehook=\toks17 +\inpenc@posthook=\toks18 + +(/usr/share/texmf-texlive/tex/latex/ucs/utf8x.def +File: utf8x.def 2004/10/17 UCS: Input encoding UTF-8 +)) +(/usr/share/texmf-texlive/tex/latex/tools/multicol.sty +Package: multicol 2008/12/05 v1.6h multicolumn formatting (FMi) +\c@tracingmulticols=\count90 +\mult@box=\box26 +\multicol@leftmargin=\dimen104 +\c@unbalance=\count91 +\c@collectmore=\count92 +\doublecol@number=\count93 +\multicoltolerance=\count94 +\multicolpretolerance=\count95 +\full@width=\dimen105 +\page@free=\dimen106 +\premulticols=\dimen107 +\postmulticols=\dimen108 +\multicolsep=\skip43 +\multicolbaselineskip=\skip44 +\partial@page=\box27 +\last@line=\box28 +\mult@rightbox=\box29 +\mult@grightbox=\box30 +\mult@gfirstbox=\box31 +\mult@firstbox=\box32 +\@tempa=\box33 +\@tempa=\box34 +\@tempa=\box35 +\@tempa=\box36 +\@tempa=\box37 +\@tempa=\box38 +\@tempa=\box39 +\@tempa=\box40 +\@tempa=\box41 +\@tempa=\box42 +\@tempa=\box43 +\@tempa=\box44 +\@tempa=\box45 +\@tempa=\box46 +\@tempa=\box47 +\@tempa=\box48 +\@tempa=\box49 +\c@columnbadness=\count96 +\c@finalcolumnbadness=\count97 +\last@try=\dimen109 +\multicolovershoot=\dimen110 +\multicolundershoot=\dimen111 +\mult@nat@firstbox=\box50 +\colbreak@box=\box51 +) +(/usr/share/texmf-texlive/tex/latex/graphics/graphicx.sty +Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/share/texmf-texlive/tex/latex/graphics/keyval.sty +Package: keyval 1999/03/16 v1.13 key=value parser (DPC) +\KV@toks@=\toks19 +) +(/usr/share/texmf-texlive/tex/latex/graphics/graphics.sty +Package: graphics 2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR) + +(/usr/share/texmf-texlive/tex/latex/graphics/trig.sty +Package: trig 1999/03/16 v1.09 sin cos tan (DPC) +) +(/etc/texmf/tex/latex/config/graphics.cfg +File: graphics.cfg 2009/08/28 v1.8 graphics configuration of TeX Live +) +Package graphics Info: Driver file: pdftex.def on input line 91. + +(/usr/share/texmf-texlive/tex/latex/pdftex-def/pdftex.def +File: pdftex.def 2009/08/25 v0.04m Graphics/color for pdfTeX +\Gread@gobject=\count98 +)) +\Gin@req@height=\dimen112 +\Gin@req@width=\dimen113 +) +(/usr/share/texmf-texlive/tex/latex/base/makeidx.sty +Package: makeidx 2000/03/29 v1.0m Standard LaTeX package +) +(/usr/share/texmf-texlive/tex/latex/ltxmisc/ulem.sty +\UL@box=\box52 +\UL@hyphenbox=\box53 +\UL@skip=\skip45 +\UL@hook=\toks20 +\UL@pe=\count99 +\UL@pixel=\dimen114 +\ULC@box=\box54 +Package: ulem 2000/05/26 +\ULdepth=\dimen115 +) +(/usr/share/texmf/tex/latex/xcolor/xcolor.sty +Package: xcolor 2007/01/21 v2.11 LaTeX color extensions (UK) + +(/etc/texmf/tex/latex/config/color.cfg +File: color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive +) +Package xcolor Info: Driver file: pdftex.def on input line 225. +Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1337. +Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1341. +Package xcolor Info: Model `RGB' extended on input line 1353. +Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1355. +Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1356. +Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1357. +Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1358. +Package xcolor Info: Model `Gray' substituted by `gray' on input line 1359. +Package xcolor Info: Model `wave' substituted by `hsb' on input line 1360. +) +(/usr/share/texmf-texlive/tex/latex/moreverb/moreverb.sty +Package: moreverb 2008/06/03 v2.3 `more' verbatim facilities + +(/usr/share/texmf-texlive/tex/latex/tools/verbatim.sty +Package: verbatim 2003/08/22 v1.5q LaTeX2e package for verbatim enhancements +\every@verbatim=\toks21 +\verbatim@line=\toks22 +\verbatim@in@stream=\read1 +) +\verbatim@out=\write4 +\tab@position=\count100 +\tab@size=\count101 +\listing@line=\count102 +) +(/usr/share/texmf-texlive/tex/latex/fancyhdr/fancyhdr.sty +\fancy@headwidth=\skip46 +\f@ncyO@elh=\skip47 +\f@ncyO@erh=\skip48 +\f@ncyO@olh=\skip49 +\f@ncyO@orh=\skip50 +\f@ncyO@elf=\skip51 +\f@ncyO@erf=\skip52 +\f@ncyO@olf=\skip53 +\f@ncyO@orf=\skip54 +) +(/usr/share/texmf-texlive/tex/latex/caption/caption2.sty +Package: caption2 2008/07/01 v2.2c Customising captions (AS) + + +Package caption2 Warning: **************************************************** +(caption2) THIS PACKAGE IS OBSOLETE: +(caption2) This package attempts to provide an `caption2' +(caption2) package v2.0/2.1 author environment so that OLD +(caption2) documents can be successfully processed. It should +(caption2) NOT be used for NEW documents! New documents should +(caption2) use the regular `caption' package v3.x instead. +(caption2) **************************************************** + +(/usr/share/texmf-texlive/tex/latex/caption/caption3.sty +Package: caption3 2009/10/09 v3.1k caption3 kernel (AR) +\captionmargin=\dimen116 +\captionmargin@=\dimen117 +\captionwidth=\dimen118 +\caption@indent=\dimen119 +\caption@parindent=\dimen120 +\caption@hangindent=\dimen121 +) +Package caption2 Info: Running in caption2 v2.0 compatibility mode on input lin +e 209. +\captionlinewidth=\dimen122 +\realcaptionwidth=\dimen123 +)) +(/usr/share/texmf-texlive/tex/latex/hyperref/hyperref.sty +Package: hyperref 2009/10/09 v6.79a Hypertext links for LaTeX + +(/usr/share/texmf-texlive/tex/generic/oberdiek/ifpdf.sty +Package: ifpdf 2009/04/10 v2.0 Provides the ifpdf switch (HO) +Package ifpdf Info: pdfTeX in pdf mode detected. +) +(/usr/share/texmf-texlive/tex/generic/oberdiek/ifvtex.sty +Package: ifvtex 2008/11/04 v1.4 Switches for detecting VTeX and its modes (HO) +Package ifvtex Info: VTeX not detected. +) +(/usr/share/texmf-texlive/tex/generic/ifxetex/ifxetex.sty +Package: ifxetex 2009/01/23 v0.5 Provides ifxetex conditional +) +(/usr/share/texmf-texlive/tex/latex/oberdiek/hycolor.sty +Package: hycolor 2009/10/02 v1.5 Code for color options of hyperref/bookmark (H +O) + +(/usr/share/texmf-texlive/tex/latex/oberdiek/xcolor-patch.sty +Package: xcolor-patch 2009/10/02 xcolor patch +)) +\@linkdim=\dimen124 +\Hy@linkcounter=\count103 +\Hy@pagecounter=\count104 + +(/usr/share/texmf-texlive/tex/latex/hyperref/pd1enc.def +File: pd1enc.def 2009/10/09 v6.79a Hyperref: PDFDocEncoding definition (HO) +) +(/usr/share/texmf-texlive/tex/generic/oberdiek/etexcmds.sty +Package: etexcmds 2007/12/12 v1.2 Prefix for e-TeX command names (HO) + +(/usr/share/texmf-texlive/tex/generic/oberdiek/infwarerr.sty +Package: infwarerr 2007/09/09 v1.2 Providing info/warning/message (HO) +) +Package etexcmds Info: Could not find \expanded. +(etexcmds) That can mean that you are not using pdfTeX 1.50 or +(etexcmds) that some package has redefined \expanded. +(etexcmds) In the latter case, load this package earlier. +) +(/usr/share/texmf-texlive/tex/latex/latexconfig/hyperref.cfg +File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive +) +(/usr/share/texmf-texlive/tex/latex/oberdiek/kvoptions.sty +Package: kvoptions 2009/08/13 v3.4 Keyval support for LaTeX options (HO) + +(/usr/share/texmf-texlive/tex/generic/oberdiek/kvsetkeys.sty +Package: kvsetkeys 2009/07/30 v1.5 Key value parser with default handler suppor +t (HO) +)) +Package hyperref Info: Option `pdfpagelabels' set `true' on input line 2864. +Package hyperref Info: Option `plainpages' set `false' on input line 2864. +Package hyperref Info: Option `colorlinks' set `true' on input line 2864. +Package hyperref Info: Hyper figures OFF on input line 2975. +Package hyperref Info: Link nesting OFF on input line 2980. +Package hyperref Info: Hyper index ON on input line 2983. +Package hyperref Info: Plain pages OFF on input line 2990. +Package hyperref Info: Backreferencing OFF on input line 2995. + +Implicit mode ON; LaTeX internals redefined +Package hyperref Info: Bookmarks ON on input line 3191. +(/usr/share/texmf-texlive/tex/latex/ltxmisc/url.sty +\Urlmuskip=\muskip10 +Package: url 2006/04/12 ver 3.3 Verb mode for urls, etc. +) +LaTeX Info: Redefining \url on input line 3428. + +(/usr/share/texmf-texlive/tex/generic/oberdiek/bitset.sty +Package: bitset 2007/09/28 v1.0 Data type bit set (HO) + +(/usr/share/texmf-texlive/tex/generic/oberdiek/intcalc.sty +Package: intcalc 2007/09/27 v1.1 Expandable integer calculations (HO) +) +(/usr/share/texmf-texlive/tex/generic/oberdiek/bigintcalc.sty +Package: bigintcalc 2007/11/11 v1.1 Expandable big integer calculations (HO) + +(/usr/share/texmf-texlive/tex/generic/oberdiek/pdftexcmds.sty +Package: pdftexcmds 2009/09/23 v0.6 LuaTeX support for pdfTeX utility functions + (HO) + +(/usr/share/texmf-texlive/tex/generic/oberdiek/ifluatex.sty +Package: ifluatex 2009/04/17 v1.2 Provides the ifluatex switch (HO) +Package ifluatex Info: LuaTeX not detected. +) +(/usr/share/texmf-texlive/tex/generic/oberdiek/ltxcmds.sty +Package: ltxcmds 2009/08/05 v1.0 Some LaTeX kernel commands for general use (HO +) +) +Package pdftexcmds Info: LuaTeX not detected. +Package pdftexcmds Info: \pdf@primitive is available. +Package pdftexcmds Info: \pdf@ifprimitive is available. +))) +\Fld@menulength=\count105 +\Field@Width=\dimen125 +\Fld@charsize=\dimen126 +\Field@toks=\toks23 +Package hyperref Info: Hyper figures OFF on input line 4377. +Package hyperref Info: Link nesting OFF on input line 4382. +Package hyperref Info: Hyper index ON on input line 4385. +Package hyperref Info: backreferencing OFF on input line 4392. +Package hyperref Info: Link coloring ON on input line 4395. +Package hyperref Info: Link coloring with OCG OFF on input line 4402. +Package hyperref Info: PDF/A mode OFF on input line 4407. + +(/usr/share/texmf-texlive/tex/generic/oberdiek/atbegshi.sty +Package: atbegshi 2008/07/31 v1.9 At begin shipout hook (HO) +) +\Hy@abspage=\count106 +\c@Item=\count107 +\c@Hfootnote=\count108 +) +*hyperref using driver hpdftex* +(/usr/share/texmf-texlive/tex/latex/hyperref/hpdftex.def +File: hpdftex.def 2009/10/09 v6.79a Hyperref driver for pdfTeX +\Fld@listcount=\count109 +) (./pvs-doc.aux + +LaTeX Warning: Label `uscp' multiply defined. + +) +\openout1 = `pvs-doc.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 4. +LaTeX Font Info: ... okay on input line 4. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 4. +LaTeX Font Info: ... okay on input line 4. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 4. +LaTeX Font Info: ... okay on input line 4. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 4. +LaTeX Font Info: ... okay on input line 4. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 4. +LaTeX Font Info: ... okay on input line 4. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 4. +LaTeX Font Info: ... okay on input line 4. +LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 4. +LaTeX Font Info: ... okay on input line 4. +LaTeX Font Info: Try loading font information for T1+cmss on input line 4. + (/usr/share/texmf-texlive/tex/latex/base/t1cmss.fd +File: t1cmss.fd 1999/05/25 v2.5h Standard LaTeX font definitions +) +(/usr/share/texmf-texlive/tex/latex/ucs/ucsencs.def +File: ucsencs.def 2003/11/29 Fixes to fontencodings LGR, T3 +) +(/usr/share/texmf-texlive/tex/context/base/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count110 +\scratchdimen=\dimen127 +\scratchbox=\box55 +\nofMPsegments=\count111 +\nofMParguments=\count112 +\everyMPshowfont=\toks24 +\MPscratchCnt=\count113 +\MPscratchDim=\dimen128 +\MPnumerator=\count114 +\everyMPtoPDFconversion=\toks25 +) +Package caption Info: Begin \AtBeginDocument code. +Package caption Info: End \AtBeginDocument code. +Package hyperref Info: Link coloring ON on input line 4. + (/usr/share/texmf-texlive/tex/latex/hyperref/nameref.sty +Package: nameref 2007/05/29 v2.31 Cross-referencing by name of section + +(/usr/share/texmf-texlive/tex/latex/oberdiek/refcount.sty +Package: refcount 2008/08/11 v3.1 Data extraction from references (HO) +) +\c@section@level=\count115 +) +LaTeX Info: Redefining \ref on input line 4. +LaTeX Info: Redefining \pageref on input line 4. + (./pvs-doc.out) +(./pvs-doc.out) +\@outlinefile=\write5 +\openout5 = `pvs-doc.out'. + +\AtBeginShipoutBox=\box56 + (./header.tex +<bilder/siegel-neu.jpg, id=227, 570.18372pt x 570.18372pt> +File: bilder/siegel-neu.jpg Graphic file (type jpg) + +<use bilder/siegel-neu.jpg> +(/usr/share/texmf-texlive/tex/latex/ucs/data/uni-0.def +File: uni-0.def 2004/10/17 UCS: Unicode data U+0000..U+00FF +) [1 + +{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map} <./bilder/siegel-neu.jpg>] +[2] + +LaTeX Font Warning: Font shape `T1/cmss/m/sc' in size <14.4> not available +(Font) Font shape `T1/cmr/m/sc' tried instead on input line 39. + +[3] +Underfull \hbox (badness 10000) in paragraph at lines 45--52 + + [] + +[4]) + +Package hyperref Warning: No destination for bookmark of \addcontentsline, +(hyperref) destination is added on input line 7. + +(./pvs-doc.toc +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <12> on input line 6. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <8> on input line 6. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <6> on input line 6. + + +Package Fancyhdr Warning: \headheight is too small (12.0pt): + Make it at least 25.40292pt. + We now make it that large for the rest of the document. + This may cause the page layout to be inconsistent, however. + +[1 + +]) +\tf@toc=\write6 +\openout6 = `pvs-doc.toc'. + + [2] (./zusfassung.tex [3 + +])pdfTeX warning (ext4): destination with the same identifier (name{page.1}) ha +s been already used, duplicate ignored +<to be read again> + \relax +l.13 \part{Idee und Ãœberblick} + [1 + +]pdfTeX warning (ext4): destination with the same identifier (name{page.2}) has + been already used, duplicate ignored +<to be read again> + \relax +l.13 \part{Idee und Ãœberblick} + [2] (./intro/0000-chapter.tex +Kapitel 1. +<bilder/studentctlpanel.png, id=333, 866.05525pt x 523.71pt> +File: bilder/studentctlpanel.png Graphic file (type png) + +<use bilder/studentctlpanel.png>pdfTeX warning (ext4): destination with the sam +e identifier (name{page.3}) has been already used, duplicate ignored +<to be read again> + \relax +l.13 D + em soll ein eigener Ansatz entgegengesetzt werden, der die eingangs ge... +[3 + + <./bilder/studentctlpanel.png>] +Overfull \hbox (2.64162pt too wide) in paragraph at lines 13--14 +[]\T1/cmss/m/n/12 Dem soll ein eigen-er Ansatz ent-ge-genge-set-zt wer-den, der + die ein-gangs genan-nten Beschränkun- + [] + +) (./intro/0100-funktionen.texpdfTeX warning (ext4): destination with the same +identifier (name{page.4}) has been already used, duplicate ignored +<to be read again> + \relax +l.1 \chapter + {Funktionen eines Software-Video-Switchs} [4] +Kapitel 2. +File: bilder/studentctlpanel.png Graphic file (type png) +<use bilder/studentctlpanel.png>) (./intro/0900-textaufbau.tex [5 + +] [6 + +] +Kapitel 3. +LaTeX Font Info: Try loading font information for T1+cmtt on input line 12. +(/usr/share/texmf-texlive/tex/latex/base/t1cmtt.fd +File: t1cmtt.fd 1999/05/25 v2.5h Standard LaTeX font definitions +)) [7] [8 + +] [9] [10] +(./user/0001-chapter.tex +Kapitel 4. +<bilder/pvsmgrAll.jpg, id=374, 1312.905pt x 989.6975pt> +File: bilder/pvsmgrAll.jpg Graphic file (type jpg) + +<use bilder/pvsmgrAll.jpg> +Underfull \hbox (badness 10000) in paragraph at lines 17--32 + + [] + + +Underfull \vbox (badness 1052) has occurred while \output is active [] + + [11 + + <./bilder/pvsmgrAll.jpg>] <bilder/dum.jpg, id=383, 1312.905pt x 985.6825pt> +File: bilder/dum.jpg Graphic file (type jpg) + +<use bilder/dum.jpg> +Underfull \hbox (badness 10000) in paragraph at lines 34--63 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 34--63 + + [] + + +LaTeX Warning: `h' float specifier changed to `ht'. + +[12] +Underfull \hbox (badness 10000) in paragraph at lines 66--69 + + [] + + +Underfull \vbox (badness 10000) has occurred while \output is active [] + + [13 <./bilder/dum.jpg>] +Underfull \hbox (badness 10000) in paragraph at lines 70--71 + + [] + +) (./user/0000-chapter.tex +Underfull \hbox (badness 10000) in paragraph at lines 72--1 + + [] + +[14] +Kapitel 5. +[15 + +] <bilder/clientToolbar.png, id=409, 463.331pt x 22.484pt> +File: bilder/clientToolbar.png Graphic file (type png) + +<use bilder/clientToolbar.png> +LaTeX Font Info: Try loading font information for OMS+cmss on input line 20. + +LaTeX Font Info: No file OMScmss.fd. on input line 20. + + +LaTeX Font Warning: Font shape `OMS/cmss/m/n' undefined +(Font) using `OMS/cmsy/m/n' instead +(Font) for symbol `textbullet' on input line 20. + +[16 <./bilder/clientToolbar.png>] +<bilder/clientChatDialog.png, id=421, 403.106pt x 312.367pt> +File: bilder/clientChatDialog.png Graphic file (type png) + +<use bilder/clientChatDialog.png> +<bilder/clientConfigDialog.png, id=423, 367.774pt x 238.491pt> +File: bilder/clientConfigDialog.png Graphic file (type png) + +<use bilder/clientConfigDialog.png> + +LaTeX Warning: `h' float specifier changed to `ht'. + +) [17 <./bilder/clientChatDialog.png>] [18 <./bilder/clientConfigDialog.png>] +[19 + +] [20] (./devel/0000-chapter.tex) (./devel/0100-build.tex +Kapitel 6. + +Underfull \hbox (badness 10000) in paragraph at lines 3--4 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 5--7 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 8--10 + + [] + + +Overfull \hbox (6.42374pt too wide) in paragraph at lines 23--25 +\T1/cmss/m/n/12 Eingesetztes Buildsys-tem und der Makefile-Generator. Um dis-tr +i-bu-tion-sspez-i-fis-che Pakete + [] + +[21 + +] +Underfull \hbox (badness 10000) in paragraph at lines 34--35 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 36--40 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 51--53 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 54--60 + + [] + +[22] +Underfull \hbox (badness 10000) in paragraph at lines 61--62 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 63--65 + + [] + +) (./devel/0200-gui-lib.tex [23] [24 + +] +Kapitel 7. +[25]) (./devel/0300-pvs.tex [26] +Kapitel 8. +(./devel/0310-service-discovery.tex [27 + +]) +Underfull \vbox (badness 10000) has occurred while \output is active [] + + [28] +Underfull \hbox (badness 10000) in paragraph at lines 45--58 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 45--58 + + [] + +[29] +Underfull \hbox (badness 10000) in paragraph at lines 67--67 +[]\T1/cmtt/m/n/12 <Username des + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 67--67 +[]\T1/cmtt/m/n/12 <<Username des + [] + + +Overfull \hbox (7.24413pt too wide) in paragraph at lines 67--67 +\T1/cmtt/m/n/12 Absenders>:<Die + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 67--67 +\T1/cmtt/m/n/12 eigentliche + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 67--68 +[]\T1/cmtt/m/n/12 <<Vom server + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 67--68 +\T1/cmtt/m/n/12 zugewissene + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 67--68 +\T1/cmtt/m/n/12 ID des + [] + +[30] +Underfull \hbox (badness 10000) in paragraph at lines 135--143 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 144--177 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 144--177 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 144--177 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 144--177 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 144--177 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 144--177 + + [] + +[31] +Overfull \hbox (1.08073pt too wide) in paragraph at lines 184--189 +\T1/cmss/m/n/12 sich der Dis-patch-er für Nachricht-en vom Typ Com-mand in der +Klasse \T1/cmtt/m/n/12 pvsServerConnection\T1/cmss/m/n/12 , + [] + + +Overfull \hbox (11.3282pt too wide) in paragraph at lines 184--189 +\T1/cmss/m/n/12 wie fol-gt als Han-dler reg-istri-ert: \T1/cmtt/m/n/12 _pvsServ +erConnection->addCommandHandler("*", this, + [] + +[32] +Underfull \hbox (badness 10000) in paragraph at lines 202--202 +[]\T1/cmss/m/n/12 hostname + [] + + +Underfull \hbox (badness 7558) in paragraph at lines 202--202 +\T1/cmss/m/n/12 port pass- + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 202--202 +\T1/cmss/m/n/12 word + [] + + +Underfull \hbox (badness 4378) in paragraph at lines 205--206 +[]\T1/cmss/m/n/12 Client mit Nachricht + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 210--210 +[]\T1/cmss/m/n/12 ^^RWrong + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 210--211 +[]\T1/cmss/m/n/12 Wird bei falschem + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 220--221 +[]\T1/cmss/m/n/12 Client hinzufü-gen + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 222--223 +[]\T1/cmss/m/n/12 Festgelegter Name + [] + +) (./devel/0400-pvs-console.tex [33] [34] +Kapitel 9. + +Underfull \hbox (badness 10000) in paragraph at lines 3--7 + + [] + +<bilder/pvsmgr.jpg, id=525, 796.9775pt x 569.12625pt> +File: bilder/pvsmgr.jpg Graphic file (type jpg) + <use bilder/pvsmgr.jpg> +<bilder/mainwindow.png, id=527, 518.8986pt x 373.6359pt> +File: bilder/mainwindow.png Graphic file (type png) + +<use bilder/mainwindow.png> +Underfull \hbox (badness 10000) in paragraph at lines 21--48 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 21--48 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 21--48 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 21--48 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 21--48 + + [] + +[35 + +] + +LaTeX Warning: `h' float specifier changed to `ht'. + + +Underfull \hbox (badness 10000) in paragraph at lines 49--56 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 57--60 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 57--60 + + [] + +[36 <./bilder/pvsmgr.jpg>] +Underfull \hbox (badness 10000) in paragraph at lines 61--72 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 73--76 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 77--81 + + [] + +[37 <./bilder/mainwindow.png (PNG copy)>] + +LaTeX Warning: Reference `fig:connectionlist' on page 38 undefined on input lin +e 87. + +<bilder/ConnectionList.png, id=543, 583.9416pt x 354.8457pt> +File: bilder/ConnectionList.png Graphic file (type png) + +<use bilder/ConnectionList.png> +<bilder/connectionframe.png, id=544, 516.0078pt x 352.6776pt> +File: bilder/connectionframe.png Graphic file (type png) + +<use bilder/connectionframe.png> + +LaTeX Warning: Reference `connectionframe' on page 38 undefined on input line 1 +20. + + +Underfull \hbox (badness 10000) in paragraph at lines 105--124 + + [] + + +Underfull \vbox (badness 1629) has occurred while \output is active [] + + [38 <./bilder/ConnectionList.png (PNG copy)>] [39 <./bilder/connectionframe.pn +g (PNG copy)>] +Underfull \hbox (badness 10000) in paragraph at lines 130--150 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 153--158 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 159--164 + + [] + +[40] +Overfull \hbox (9.46333pt too wide) in paragraph at lines 171--174 +\T1/cmss/m/n/12 schon in der Liste der Pro-jek-tion-sziele vorhan-den ist. Ist +er nicht vorhan-den, wird ein Auswahldia- + [] + + +Overfull \hbox (2.76924pt too wide) in paragraph at lines 171--174 +\T1/cmtt/m/n/12 MainWindow::getWindow()->getConnectionList()->getTargetToDispla +y(source)\T1/cmss/m/n/12 ). + [] + +[41]) (./devel/0500-pvs-client.tex [42] +Kapitel 10. + +Underfull \hbox (badness 10000) in paragraph at lines 2--3 + + [] + +<bilder/DBus.pdf, id=573, 273.02pt x 217.613pt> +File: bilder/DBus.pdf Graphic file (type pdf) + <use bilder/DBus.pdf> [43 + + <./bilder/DBus.pdf>] [44] +Underfull \hbox (badness 10000) in paragraph at lines 73--74 + + [] + + +Overfull \hbox (5.7754pt too wide) in paragraph at lines 77--78 +\T1/cmss/m/n/12 über den Kon-struk-tor definiert und nach einem Aufruf von \T1/ +cmtt/m/n/12 VNCClientThread::start() + [] + +[45] +Underfull \hbox (badness 10000) in paragraph at lines 88--89 + + [] + +[46] +Underfull \hbox (badness 10000) in paragraph at lines 95--97 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 98--101 + + [] + +[47] +Underfull \hbox (badness 2285) in paragraph at lines 117--128 +\T1/cmss/m/it/12 ^^C/.gconf/desktop/gnome/remote_access/%gconf.xml \T1/cmss/m/n +/12 kon-fig-urier-bar. Pa-ram-e-ter kön-nen + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 117--128 +\T1/cmss/m/n/12 durch \T1/cmtt/m/n/12 gconftool-2 -s -t int desktop/gnome/remot +e_access/alternative_port + [] + + +Underfull \hbox (badness 7256) in paragraph at lines 117--128 +\T1/cmtt/m/n/12 <portnumber> \T1/cmss/m/n/12 bzw. das Ein-fü-gen von z.B. \T1/c +mtt/m/n/12 <entry name=``alternative_port'' + [] + + +Underfull \hbox (badness 3471) in paragraph at lines 117--128 +\T1/cmtt/m/n/12 mtime=``1259858032'' type= ``int'' value=``<portnumber>''/> \T1 +/cmss/m/n/12 in die entsprechende + [] + +[48] [49] +Overfull \hbox (1.44884pt too wide) in paragraph at lines 189--190 +[]\T1/cmss/m/n/12 Um einen Mehrfach-start des VNC Servers zu ver-hin-dern, wird + zunächst im-mer ein \T1/cmtt/m/n/12 pvs-vncsrv + [] + + +Underfull \hbox (badness 1728) in paragraph at lines 197--199 +\T1/cmss/m/n/12 die Eingaben in der Klasse \T1/cmtt/m/n/12 ClientVNCViewer \T1/ +cmss/m/n/12 abge-fan-gen und ve-r-ar-beit-et wer-den. + [] + + +Underfull \hbox (badness 1107) in paragraph at lines 197--199 +\T1/cmss/m/n/12 Dies kann durch Über-schreiben der geerbten Meth-ode \T1/cmtt/m +/n/12 event \T1/cmss/m/n/12 er-re-icht wer-den \T1/cmtt/m/n/12 bool + [] + +[50] +Overfull \hbox (4.18437pt too wide) in paragraph at lines 211--215 +\T1/cmtt/m/n/12 Key-[]enum$[][]\T1/cmss/m/n/12 ) un-ter-schieden wer-den. Die T +astatur- und Mau-seingaben müssen dann entsprechend + [] + + +Overfull \hbox (11.09923pt too wide) in paragraph at lines 211--215 +\T1/cmss/m/n/12 an \T1/cmtt/m/n/12 vncClientThread \T1/cmss/m/n/12 weit-ergelei +t-et wer-den. In der Klasse vnc-Client-Thread wer-den die Eingaben + [] + +[51] +Underfull \hbox (badness 4441) in paragraph at lines 240--243 +[]\T1/cmss/m/n/12 Um Sig-nale ab-fan-gen zu kön-nen, muss nun noch das sigac-ti +on Ob-jekt durch + [] + + +Underfull \hbox (badness 2181) in paragraph at lines 240--243 +\T1/cmtt/m/n/12 sigaction(SIGTERM, &act, 0) \T1/cmss/m/n/12 mit den entsprechen +-den Sig-nalen (hi-er SIGTERM) + [] + +) [52] [53 + +] [54] (./appendix/0000-chapter.tex +<bilder/Klassendiagramm.pdf, id=646, 598.235pt x 845.55902pt> +File: bilder/Klassendiagramm.pdf Graphic file (type pdf) + +<use bilder/Klassendiagramm.pdf> + +LaTeX Warning: `h' float specifier changed to `ht'. + +) +No file pvs-doc.ind. +[55 <./bilder/Klassendiagramm.pdf>] (./pvs-doc.aux) + +LaTeX Font Warning: Some font shapes were not available, defaults substituted. + + +LaTeX Warning: There were undefined references. + + +LaTeX Warning: There were multiply-defined labels. + + ) +Here is how much of TeX's memory you used: + 7300 strings out of 495061 + 103737 string characters out of 1182622 + 191400 words of memory out of 3000000 + 10133 multiletter control sequences out of 15000+50000 + 17588 words of font info for 39 fonts, out of 3000000 for 9000 + 28 hyphenation exceptions out of 8191 + 38i,14n,44p,1625b,576s stack positions out of 5000i,500n,10000p,200000b,50000s + </home/fabian/.texmf-var/fonts/pk/ljfour/jknappen/ec/ecsi1200.600pk> </home/ +fabian/.texmf-var/fonts/pk/ljfour/jknappen/ec/ectt1200.600pk> </home/fabian/.te +xmf-var/fonts/pk/ljfour/jknappen/ec/ecsx1095.600pk> </home/fabian/.texmf-var/fo +nts/pk/ljfour/jknappen/ec/ecsx1728.600pk> </home/fabian/.texmf-var/fonts/pk/ljf +our/jknappen/ec/ecsx1440.600pk> </home/fabian/.texmf-var/fonts/pk/ljfour/jknapp +en/ec/ecsx1200.600pk> </home/fabian/.texmf-var/fonts/pk/ljfour/jknappen/ec/ecss +1200.600pk> </home/fabian/.texmf-var/fonts/pk/ljfour/jknappen/ec/eccc1440.600pk +> </home/fabian/.texmf-var/fonts/pk/ljfour/jknappen/ec/ecss1095.600pk> </home/f +abian/.texmf-var/fonts/pk/ljfour/jknappen/ec/ecss1440.600pk> </home/fabian/.tex +mf-var/fonts/pk/ljfour/jknappen/ec/ecsi1440.600pk> </home/fabian/.texmf-var/fon +ts/pk/ljfour/jknappen/ec/ecss1728.600pk> </home/fabian/.texmf-var/fonts/pk/ljfo +ur/jknappen/ec/ecss2488.600pk> </home/fabian/.texmf-var/fonts/pk/ljfour/jknappe +n/ec/ecsx2488.600pk></usr/share/texmf-texlive/fonts/type1/public/amsfonts/cm/cm +mi12.pfb></usr/share/texmf-texlive/fonts/type1/public/amsfonts/cm/cmr12.pfb></u +sr/share/texmf-texlive/fonts/type1/public/amsfonts/cm/cmr8.pfb></usr/share/texm +f-texlive/fonts/type1/public/amsfonts/cm/cmsy10.pfb> +Output written on pvs-doc.pdf (62 pages, 2362812 bytes). +PDF statistics: + 1429 PDF objects out of 1440 (max. 8388607) + 156 named destinations out of 1000 (max. 500000) + 514 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/doc/LaTeX/pvs-doc.out b/doc/LaTeX/pvs-doc.out new file mode 100644 index 0000000..e311c72 --- /dev/null +++ b/doc/LaTeX/pvs-doc.out @@ -0,0 +1,56 @@ +\BOOKMARK [0][-]{section*.1}{Inhaltsverzeichnis}{} +\BOOKMARK [-1][-]{part.1}{I Idee und \334berblick}{} +\BOOKMARK [0][-]{chapter.1}{Idee}{part.1} +\BOOKMARK [0][-]{chapter.2}{Funktionen eines Software-Video-Switchs}{part.1} +\BOOKMARK [1][-]{section.2.1}{W\374nschenswerte Basisfunktionen}{chapter.2} +\BOOKMARK [1][-]{section.2.2}{Funktionserweiterungen}{chapter.2} +\BOOKMARK [0][-]{chapter.3}{Aufbau dieses Handbuchs}{part.1} +\BOOKMARK [1][-]{section.3.1}{Heraushebungen und Formatierungen}{chapter.3} +\BOOKMARK [-1][-]{part.2}{II Bedienungsanleitung}{} +\BOOKMARK [0][-]{chapter.4}{PVS-Steuerkonsole}{part.2} +\BOOKMARK [1][-]{section.4.1}{Allgemein}{chapter.4} +\BOOKMARK [2][-]{subsection.4.1.1}{Die Client-Liste}{section.4.1} +\BOOKMARK [2][-]{subsection.4.1.2}{Die VNC-Frames}{section.4.1} +\BOOKMARK [2][-]{subsection.4.1.3}{Tastenk\374rzel f\374r PVS-Server}{section.4.1} +\BOOKMARK [0][-]{chapter.5}{PVS-Client}{part.2} +\BOOKMARK [1][-]{section.5.1}{Chat}{chapter.5} +\BOOKMARK [1][-]{section.5.2}{Konfiguration}{chapter.5} +\BOOKMARK [-1][-]{part.3}{III Entwicklerdokumentation}{} +\BOOKMARK [0][-]{chapter.6}{Erzeugen und Installieren der Applikation}{part.3} +\BOOKMARK [1][-]{section.6.1}{Voraussetzungen}{chapter.6} +\BOOKMARK [1][-]{section.6.2}{Kompilieren aus Quellen}{chapter.6} +\BOOKMARK [1][-]{section.6.3}{Installation}{chapter.6} +\BOOKMARK [0][-]{chapter.7}{Eingesetzte GUI-Bibliothek}{part.3} +\BOOKMARK [1][-]{section.7.1}{Internationalisierung}{chapter.7} +\BOOKMARK [0][-]{chapter.8}{Aufbau und Funktionsweise des PVS}{part.3} +\BOOKMARK [1][-]{section.8.1}{Einzelne Komponenten}{chapter.8} +\BOOKMARK [2][-]{subsection.8.1.1}{Zuordnung von Konsole und Clients}{section.8.1} +\BOOKMARK [1][-]{section.8.2}{\334berblick \374ber Aktivit\344ten auf Clients}{chapter.8} +\BOOKMARK [2][-]{subsection.8.2.1}{Projektion an Alle}{section.8.2} +\BOOKMARK [2][-]{subsection.8.2.2}{Projektion eines Clients auf dem Beamer}{section.8.2} +\BOOKMARK [2][-]{subsection.8.2.3}{Chat- und Informationskanal}{section.8.2} +\BOOKMARK [1][-]{section.8.3}{Netzwerkkommunikation}{chapter.8} +\BOOKMARK [2][-]{subsection.8.3.1}{PVS-Protokoll}{section.8.3} +\BOOKMARK [2][-]{subsection.8.3.2}{PVS-Messages}{section.8.3} +\BOOKMARK [0][-]{chapter.9}{PVS-Steuerkonsole}{part.3} +\BOOKMARK [1][-]{section.9.1}{pvsmgr in Qt}{chapter.9} +\BOOKMARK [1][-]{section.9.2}{GUI Server-Konsole}{chapter.9} +\BOOKMARK [2][-]{subsection.9.2.1}{Die Architektur}{section.9.2} +\BOOKMARK [2][-]{subsection.9.2.2}{Client-Seite}{section.9.2} +\BOOKMARK [2][-]{subsection.9.2.3}{Server-Seite}{section.9.2} +\BOOKMARK [1][-]{section.9.3}{Verbindungsverwaltung und Projektion}{chapter.9} +\BOOKMARK [2][-]{subsection.9.3.1}{Projektion}{section.9.3} +\BOOKMARK [2][-]{subsection.9.3.2}{Remote Help}{section.9.3} +\BOOKMARK [0][-]{chapter.10}{PVS-Client}{part.3} +\BOOKMARK [1][-]{section.10.1}{Grafische Benutzeroberfl\344che}{chapter.10} +\BOOKMARK [1][-]{section.10.2}{User-Interface f\374r Benutzerkonfiguration}{chapter.10} +\BOOKMARK [1][-]{section.10.3}{Darstellung von VNC-Datenstr\366men}{chapter.10} +\BOOKMARK [1][-]{section.10.4}{Chat-Interface}{chapter.10} +\BOOKMARK [1][-]{section.10.5}{Datei\374bertragung und Interface}{chapter.10} +\BOOKMARK [1][-]{section.10.6}{VNC Server}{chapter.10} +\BOOKMARK [2][-]{subsection.10.6.1}{Vergleich von VNC Servern}{section.10.6} +\BOOKMARK [2][-]{subsection.10.6.2}{VNC Script}{section.10.6} +\BOOKMARK [1][-]{section.10.7}{VNC Viewer}{chapter.10} +\BOOKMARK [2][-]{subsection.10.7.1}{Tastatur und Maussteuerung}{section.10.7} +\BOOKMARK [1][-]{section.10.8}{Signalbehandlung}{chapter.10} +\BOOKMARK [-1][-]{part.4}{IV Anhang}{} diff --git a/doc/LaTeX/pvs-doc.pdf b/doc/LaTeX/pvs-doc.pdf Binary files differnew file mode 100644 index 0000000..2b43baf --- /dev/null +++ b/doc/LaTeX/pvs-doc.pdf diff --git a/doc/LaTeX/pvs-doc.toc b/doc/LaTeX/pvs-doc.toc new file mode 100644 index 0000000..cfaa531 --- /dev/null +++ b/doc/LaTeX/pvs-doc.toc @@ -0,0 +1,65 @@ +\select@language {ngerman} +\contentsline {chapter}{Inhaltsverzeichnis}{I}{section*.1} +\contentsline {part}{I\hspace {1em}Idee und \IeC {\"U}berblick}{1}{part.1} +\contentsline {chapter}{\numberline {1}Idee}{3}{chapter.1} +\contentsline {chapter}{\numberline {2}Funktionen eines Software-Video-Switchs}{5}{chapter.2} +\contentsline {section}{\numberline {2.1}W\IeC {\"u}nschenswerte Basisfunktionen}{5}{section.2.1} +\contentsline {section}{\numberline {2.2}Funktionserweiterungen}{5}{section.2.2} +\contentsline {chapter}{\numberline {3}Aufbau dieses Handbuchs}{7}{chapter.3} +\contentsline {section}{\numberline {3.1}Heraushebungen und Formatierungen}{7}{section.3.1} +\contentsline {part}{II\hspace {1em}Bedienungsanleitung}{9}{part.2} +\contentsline {chapter}{\numberline {4}PVS-Steuerkonsole}{11}{chapter.4} +\contentsline {section}{\numberline {4.1}Allgemein}{11}{section.4.1} +\contentsline {subsection}{\numberline {4.1.1}Die Client-Liste}{12}{subsection.4.1.1} +\contentsline {subsection}{\numberline {4.1.2}Die VNC-Frames}{12}{subsection.4.1.2} +\contentsline {subsection}{\numberline {4.1.3}Tastenk\IeC {\"u}rzel f\IeC {\"u}r PVS-Server}{14}{subsection.4.1.3} +\contentsline {chapter}{\numberline {5}PVS-Client}{15}{chapter.5} +\contentsline {section}{\numberline {5.1}Chat}{16}{section.5.1} +\contentsline {section}{\numberline {5.2}Konfiguration}{17}{section.5.2} +\contentsline {part}{III\hspace {1em}Entwicklerdokumentation}{19}{part.3} +\contentsline {chapter}{\numberline {6}Erzeugen und Installieren der Applikation}{21}{chapter.6} +\contentsline {section}{\numberline {6.1}Voraussetzungen}{21}{section.6.1} +\contentsline {section}{\numberline {6.2}Kompilieren aus Quellen}{22}{section.6.2} +\contentsline {section}{\numberline {6.3}Installation}{22}{section.6.3} +\contentsline {chapter}{\numberline {7}Eingesetzte GUI-Bibliothek}{25}{chapter.7} +\contentsline {section}{\numberline {7.1}Internationalisierung}{25}{section.7.1} +\contentsline {chapter}{\numberline {8}Aufbau und Funktionsweise des PVS}{27}{chapter.8} +\contentsline {section}{\numberline {8.1}Einzelne Komponenten}{27}{section.8.1} +\contentsline {subsection}{\numberline {8.1.1}Zuordnung von Konsole und Clients}{27}{subsection.8.1.1} +\contentsline {subsubsection}{Absicherung und Verifikation der Identit\IeC {\"a}t}{27}{section*.4} +\contentsline {subsubsection}{Generierung von Sitzungsnamen}{28}{section*.5} +\contentsline {section}{\numberline {8.2}\IeC {\"U}berblick \IeC {\"u}ber Aktivit\IeC {\"a}ten auf Clients}{29}{section.8.2} +\contentsline {subsection}{\numberline {8.2.1}Projektion an Alle}{29}{subsection.8.2.1} +\contentsline {subsection}{\numberline {8.2.2}Projektion eines Clients auf dem Beamer}{29}{subsection.8.2.2} +\contentsline {subsection}{\numberline {8.2.3}Chat- und Informationskanal}{30}{subsection.8.2.3} +\contentsline {section}{\numberline {8.3}Netzwerkkommunikation}{32}{section.8.3} +\contentsline {subsection}{\numberline {8.3.1}PVS-Protokoll}{32}{subsection.8.3.1} +\contentsline {subsection}{\numberline {8.3.2}PVS-Messages}{33}{subsection.8.3.2} +\contentsline {chapter}{\numberline {9}PVS-Steuerkonsole}{35}{chapter.9} +\contentsline {section}{\numberline {9.1}pvsmgr in Qt}{35}{section.9.1} +\contentsline {section}{\numberline {9.2}GUI Server-Konsole}{35}{section.9.2} +\contentsline {subsection}{\numberline {9.2.1}Die Architektur}{35}{subsection.9.2.1} +\contentsline {subsubsection}{Clientliste-Ansicht}{38}{section*.6} +\contentsline {subsubsection}{VNC-Ansicht}{39}{section*.7} +\contentsline {subsection}{\numberline {9.2.2}Client-Seite}{40}{subsection.9.2.2} +\contentsline {subsection}{\numberline {9.2.3}Server-Seite}{40}{subsection.9.2.3} +\contentsline {section}{\numberline {9.3}Verbindungsverwaltung und Projektion}{41}{section.9.3} +\contentsline {subsection}{\numberline {9.3.1}Projektion}{41}{subsection.9.3.1} +\contentsline {subsubsection}{Qualit\IeC {\"a}tsoptionen}{42}{section*.8} +\contentsline {subsection}{\numberline {9.3.2}Remote Help}{42}{subsection.9.3.2} +\contentsline {chapter}{\numberline {10}PVS-Client}{43}{chapter.10} +\contentsline {section}{\numberline {10.1}Grafische Benutzeroberfl\IeC {\"a}che}{44}{section.10.1} +\contentsline {section}{\numberline {10.2}User-Interface f\IeC {\"u}r Benutzerkonfiguration}{45}{section.10.2} +\contentsline {section}{\numberline {10.3}Darstellung von VNC-Datenstr\IeC {\"o}men}{45}{section.10.3} +\contentsline {section}{\numberline {10.4}Chat-Interface}{46}{section.10.4} +\contentsline {section}{\numberline {10.5}Datei\IeC {\"u}bertragung und Interface}{46}{section.10.5} +\contentsline {section}{\numberline {10.6}VNC Server}{47}{section.10.6} +\contentsline {subsection}{\numberline {10.6.1}Vergleich von VNC Servern}{48}{subsection.10.6.1} +\contentsline {paragraph}{Vino}{48}{section*.9} +\contentsline {paragraph}{Krfb}{48}{section*.10} +\contentsline {paragraph}{x11vnc}{49}{section*.11} +\contentsline {subsection}{\numberline {10.6.2}VNC Script}{50}{subsection.10.6.2} +\contentsline {section}{\numberline {10.7}VNC Viewer}{50}{section.10.7} +\contentsline {subsection}{\numberline {10.7.1}Tastatur und Maussteuerung}{51}{subsection.10.7.1} +\contentsline {section}{\numberline {10.8}Signalbehandlung}{52}{section.10.8} +\contentsline {part}{IV\hspace {1em}Anhang}{53}{part.4} diff --git a/doc/LaTeX/zusfassung.log b/doc/LaTeX/zusfassung.log new file mode 100644 index 0000000..4924af6 --- /dev/null +++ b/doc/LaTeX/zusfassung.log @@ -0,0 +1,333 @@ +This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009/Debian) (format=pdflatex 2010.9.4) 2 OCT 2010 17:00 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**zusfassung.tex +(./zusfassung.tex +LaTeX2e <2009/09/24> +Babel <v3.8l> and hyphenation patterns for english, usenglishmax, dumylang, noh +yphenation, loaded. +! Undefined control sequence. +l.2 \small + +? +! Undefined control sequence. +l.3 \section + *{Zusammenfassung} +? + +! LaTeX Error: Missing \begin{document}. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H <return> for immediate help. + ... + +l.3 \section* + {Zusammenfassung} +? +Missing character: There is no * in font nullfont! +Missing character: There is no Z in font nullfont! +Missing character: There is no u in font nullfont! +Missing character: There is no s in font nullfont! +Missing character: There is no a in font nullfont! +Missing character: There is no m in font nullfont! +Missing character: There is no m in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no n in font nullfont! +Missing character: There is no f in font nullfont! +Missing character: There is no a in font nullfont! +Missing character: There is no s in font nullfont! +Missing character: There is no s in font nullfont! +Missing character: There is no u in font nullfont! +Missing character: There is no n in font nullfont! +Missing character: There is no g in font nullfont! +Missing character: There is no D in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no r in font nullfont! +Missing character: There is no P in font nullfont! +Missing character: There is no o in font nullfont! +Missing character: There is no o in font nullfont! +Missing character: There is no l in font nullfont! +Missing character: There is no V in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no d in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no o in font nullfont! +Missing character: There is no S in font nullfont! +Missing character: There is no w in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no t in font nullfont! +Missing character: There is no c in font nullfont! +Missing character: There is no h in font nullfont! +Missing character: There is no ( in font nullfont! +Missing character: There is no P in font nullfont! +Missing character: There is no V in font nullfont! +Missing character: There is no S in font nullfont! +Missing character: There is no ) in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no s in font nullfont! +Missing character: There is no t in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no n in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no A in font nullfont! +Missing character: There is no p in font nullfont! +Missing character: There is no p in font nullfont! +Missing character: There is no l in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no k in font nullfont! +Missing character: There is no a in font nullfont! +Missing character: There is no t in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no o in font nullfont! +Missing character: There is no n in font nullfont! +Missing character: There is no , in font nullfont! +Missing character: There is no d in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no s in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no t in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no n in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no g in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no r in font nullfont! +Missing character: There is no Z in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no t in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no m in font nullfont! +Missing character: There is no Z in font nullfont! +Missing character: There is no u in font nullfont! +Missing character: There is no g in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no d in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no s in font nullfont! +Missing character: There is no O in font nullfont! +Missing character: There is no p in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no n in font nullfont! +Missing character: There is no S in font nullfont! +Missing character: There is no L in font nullfont! +Missing character: There is no X in font nullfont! +Missing character: There is no - in font nullfont! +Missing character: There is no P in font nullfont! +Missing character: There is no r in font nullfont! +Missing character: There is no o in font nullfont! +Missing character: There is no j in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no k in font nullfont! +Missing character: There is no t in font nullfont! +Missing character: There is no s in font nullfont! +Missing character: There is no a in font nullfont! +Missing character: There is no m in font nullfont! +Missing character: There is no R in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no c in font nullfont! +Missing character: There is no h in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no n in font nullfont! +Missing character: There is no z in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no n in font nullfont! +Missing character: There is no t in font nullfont! +Missing character: There is no r in font nullfont! +Missing character: There is no u in font nullfont! +Missing character: There is no m in font nullfont! +Missing character: There is no d in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no r in font nullfont! +Missing character: There is no U in font nullfont! +Missing character: There is no n in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no v in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no r in font nullfont! +Missing character: There is no s in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no t in font nullfont! +Missing character: There is no à in font nullfont! +Missing character: There is no ¤ in font nullfont! +Missing character: There is no t in font nullfont! +Missing character: There is no F in font nullfont! +Missing character: There is no r in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no b in font nullfont! +Missing character: There is no u in font nullfont! +Missing character: There is no r in font nullfont! +Missing character: There is no g in font nullfont! +Missing character: There is no u in font nullfont! +Missing character: There is no n in font nullfont! +Missing character: There is no d in font nullfont! +Missing character: There is no a in font nullfont! +Missing character: There is no m in font nullfont! +Missing character: There is no L in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no h in font nullfont! +Missing character: There is no r in font nullfont! +Missing character: There is no s in font nullfont! +Missing character: There is no t in font nullfont! +Missing character: There is no u in font nullfont! +Missing character: There is no h in font nullfont! +Missing character: There is no l in font nullfont! +Missing character: There is no f in font nullfont! +Missing character: There is no à in font nullfont! +Missing character: There is no ¼ in font nullfont! +Missing character: There is no r in font nullfont! +Missing character: There is no K in font nullfont! +Missing character: There is no o in font nullfont! +Missing character: There is no m in font nullfont! +Missing character: There is no m in font nullfont! +Missing character: There is no u in font nullfont! +Missing character: There is no n in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no k in font nullfont! +Missing character: There is no a in font nullfont! +Missing character: There is no t in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no o in font nullfont! +Missing character: There is no n in font nullfont! +Missing character: There is no s in font nullfont! +Missing character: There is no s in font nullfont! +Missing character: There is no y in font nullfont! +Missing character: There is no s in font nullfont! +Missing character: There is no t in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no m in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no n in font nullfont! +Missing character: There is no t in font nullfont! +Missing character: There is no w in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no c in font nullfont! +Missing character: There is no k in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no l in font nullfont! +Missing character: There is no t in font nullfont! +Missing character: There is no w in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no r in font nullfont! +Missing character: There is no d in font nullfont! +Missing character: There is no . in font nullfont! + +Overfull \hbox (20.0pt too wide) in paragraph at lines 3--5 +[] + [] + + +! LaTeX Error: Missing \begin{document}. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H <return> for immediate help. + ... + +l.6 I + nzwischen liegt die Version 3 vor ... +? +Missing character: There is no I in font nullfont! +Missing character: There is no n in font nullfont! +Missing character: There is no z in font nullfont! +Missing character: There is no w in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no s in font nullfont! +Missing character: There is no c in font nullfont! +Missing character: There is no h in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no n in font nullfont! +Missing character: There is no l in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no g in font nullfont! +Missing character: There is no t in font nullfont! +Missing character: There is no d in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no V in font nullfont! +Missing character: There is no e in font nullfont! +Missing character: There is no r in font nullfont! +Missing character: There is no s in font nullfont! +Missing character: There is no i in font nullfont! +Missing character: There is no o in font nullfont! +Missing character: There is no n in font nullfont! +Missing character: There is no 3 in font nullfont! +Missing character: There is no v in font nullfont! +Missing character: There is no o in font nullfont! +Missing character: There is no r in font nullfont! +Missing character: There is no . in font nullfont! +Missing character: There is no . in font nullfont! +Missing character: There is no . in font nullfont! + +Overfull \hbox (20.0pt too wide) in paragraph at lines 6--7 +[] + [] + + +! LaTeX Error: The font size command \normalsize is not defined: + there is probably something wrong with the class file. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H <return> for immediate help. + ... + +l.9 \normalsize + +? + +! LaTeX Error: The font size command \normalsize is not defined: + there is probably something wrong with the class file. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H <return> for immediate help. + ... + +l.10 \newpage + +? +[1]) +* +(Please type a command or say `\end') +* +(Please type a command or say `\end') +* +(Please type a command or say `\end') +*q + +! LaTeX Error: Missing \begin{document}. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H <return> for immediate help. + ... + +<*> q + +? \end +Type <return> to proceed, S to scroll future error messages, +R to run without stopping, Q to run quietly, +I to insert something, +1 or ... or 9 to ignore the next 1 to 9 tokens of input, +H for help, X to quit. +? x + +Here is how much of TeX's memory you used: + 8 strings out of 495061 + 296 string characters out of 1182622 + 45108 words of memory out of 3000000 + 3283 multiletter control sequences out of 15000+50000 + 3640 words of font info for 14 fonts, out of 3000000 for 9000 + 28 hyphenation exceptions out of 8191 + 19i,4n,14p,221b,113s stack positions out of 5000i,500n,10000p,200000b,50000s +Output written on zusfassung.pdf (1 page, 914 bytes). +PDF statistics: + 6 PDF objects out of 1000 (max. 8388607) + 0 named destinations out of 1000 (max. 500000) + 1 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/format.sh b/format.sh deleted file mode 100755 index d2a218f..0000000 --- a/format.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -echo "Do not use, it sucks..." -exit -# Note: As astyle seems to change the way of indenting things in detail in every release, -# it makes no sense to use this frequently, cause it would require everyone to use the -# same version of astyle, otherwise you get lots of modified files on every commit :( - -FILES=`find src/ -name \*.cpp && find src/ -name \*.h` - -# option -j would add { } to every if-statement, but not supported in <1.24 -for i in $FILES; do - astyle --style=ansi -A1 $i -done diff --git a/icons/gearsgo.png b/icons/gearsgo.png Binary files differnew file mode 100644 index 0000000..e5c3217 --- /dev/null +++ b/icons/gearsgo.png diff --git a/icons/gearsstop.png b/icons/gearsstop.png Binary files differnew file mode 100644 index 0000000..23adfbb --- /dev/null +++ b/icons/gearsstop.png @@ -1,5 +1,6 @@ <RCC> <qresource prefix="/"> + <file>icons/gearsgo.png</file> <file>icons/gears.png</file> <file>icons/projection.png</file> <file>icons/reset.png</file> @@ -1,5 +0,0 @@ -#!/bin/bash - -while [ 1 -lt 2 ]; do - wget --secure-protocol=SSLv3 --no-check-certificate -O index.html https://localhost:3490/ -done diff --git a/src/core/pvsClient.cpp b/src/core/pvsClient.cpp index 0d08b1d..0448f97 100644 --- a/src/core/pvsClient.cpp +++ b/src/core/pvsClient.cpp @@ -299,3 +299,22 @@ void PVSClient::vncFinished() _vncPasswordReceived = false; } +QVector<QString> PVSClient::getProcessesVector() +{ + return processesVector; +} + +void PVSClient::clearProcessesVector() +{ + processesVector.clear(); +} + +void PVSClient::processesVectorAdd(QString msg) +{ + if (msg.indexOf("<#>") > 0) + processesVector.append(msg); + else if (msg.indexOf("vector ready") == 0) + { + emit processVectorReady(true); + } +} diff --git a/src/core/pvsClient.h b/src/core/pvsClient.h index 180995a..e547e12 100644 --- a/src/core/pvsClient.h +++ b/src/core/pvsClient.h @@ -15,6 +15,7 @@ #include "src/net/pvsClientConnection.h" #include "src/gui/frame.h" #include <QtCore/QThread> +#include <QVector> class PVSServer; class VNCConnection; @@ -104,6 +105,16 @@ public: int getClientindex() { return _clientIndex; } int getConnectionId() { return _pvsClientConnection->getID(); } + QVector<QString> getProcessesVector(); + + +public slots: + void processesVectorAdd(QString msg); + void clearProcessesVector(); + +signals: + void processVectorReady( bool ); + private Q_SLOTS: void vncFinished(); @@ -124,6 +135,8 @@ private: QString _vncRwPassword; int _clientIndex; bool _vncAllowed, _vncRequested, _vncPasswordReceived, _vncRwPasswordReceived, _vncInitMutex, _vncProject; + QVector<QString> processesVector; + }; #endif diff --git a/src/core/pvsConnectionManager.cpp b/src/core/pvsConnectionManager.cpp index 5bf6418..db302c4 100644 --- a/src/core/pvsConnectionManager.cpp +++ b/src/core/pvsConnectionManager.cpp @@ -192,6 +192,9 @@ void PVSConnectionManager::onCommand(PVSMsg command) { QString message = command.getMessage(); QString ident = command.getIdent(); + + PVSClient* tmp = getClientFromConnectionId(command.getSndID()); + if (ident.compare("VNCSRVRESULT") == 0) { int e = string2Int(message); @@ -218,6 +221,45 @@ void PVSConnectionManager::onCommand(PVSMsg command) break; } } + if (ident.compare("PROCESSES") == 0) + { + QString id = int2String(command.getSndID()); + if (message.startsWith("START")) + { + QString msgcontent = message.remove(0,6); + if (msgcontent.startsWith("ERROR")) + { + ConsoleLog writeError("[Client: " + id + ", PROCESS] could not start: " +msgcontent.remove(0,6)); + } + else + { + //ConsoleLog writeLine(QString("[Client: " + id + ", PROCESS] started: " +msgcontent)); + } + } + if (message.startsWith("STOP")) + { + QString msgcontent = message.remove(0,5); + if (msgcontent.startsWith("ERROR")) + { + ConsoleLog writeError("[Client: " + id + ", PROCESS] could not stop: " +msgcontent.remove(0,6)); + } + else + { + //ConsoleLog writeLine(QString("[Client: " + id + ", PROCESS] stopped: " +msgcontent)); + } + } + if (message.startsWith("SHOW")) + { + QString msgcontent = message.remove(0,5); + if (msgcontent.startsWith("ERROR")) + ConsoleLog writeError("[Client: " + id + ", PROCESS] could not show processes: " +msgcontent.remove(0,6)); + else if (msgcontent.startsWith("clear")) + tmp->clearProcessesVector(); + else if (msgcontent.startsWith("finished")) + tmp->processesVectorAdd("vector ready"); + else tmp->processesVectorAdd(message); + } + } else if (ident == "MCASTFTANNOUNCE") { _pvsServer.sendToAll(command); diff --git a/src/gui/connectionList.cpp b/src/gui/connectionList.cpp index 2f9829e..f0fb7d6 100644 --- a/src/gui/connectionList.cpp +++ b/src/gui/connectionList.cpp @@ -502,6 +502,9 @@ void ConnectionList::on_unlock_all() void ConnectionList::on_unproject_all() { MainWindow::getConnectionWindow()->unprojectAllStations(); + sourceList.clear(); + targetList.clear(); + sourceMap.clear(); } diff --git a/src/gui/connectionWindow.cpp b/src/gui/connectionWindow.cpp index cf51051..df31562 100644 --- a/src/gui/connectionWindow.cpp +++ b/src/gui/connectionWindow.cpp @@ -472,6 +472,35 @@ void ConnectionWindow::messageStation(QString ident, QString message, pvsCon->sendMessage(PVSMESSAGE, ident, message); } +/* + * to send COMMAND instead of PVSMESSaGE + */ +bool ConnectionWindow::commandStations(QString ident, QString message) { + if (std::list<QString>* messageList = MainWindow::getConnectionList()->getSelectedClients()) { + if (!messageList->empty()) { + for (std::list<QString>::iterator tmpIt = messageList->begin(); tmpIt + != messageList->end(); tmpIt++) { + PVSClient + * tmpConnection = + PVSConnectionManager::getManager()->getClientFromIp( + (*tmpIt).toUtf8().data()); + // we don't want to lock the dozent machine + if (tmpConnection && tmpConnection->getConnectionFrame()->getFrame() && + !tmpConnection->getConnectionFrame()->getFrame()->isDozent()) + { + //messageStation(ident, message, tmpConnection); + tmpConnection->sendMessage(PVSCOMMAND, ident, message); + } else { + // scream in agony + } + } + } + delete messageList; + } + return true; +} + + bool ConnectionWindow::lockStationsWithMessage(QString message) { if (!hasDozent) diff --git a/src/gui/connectionWindow.h b/src/gui/connectionWindow.h index 85e2881..55442db 100644 --- a/src/gui/connectionWindow.h +++ b/src/gui/connectionWindow.h @@ -84,6 +84,7 @@ public: bool lockInvertStations(); void lockInvertStation(PVSClient* pvsCon); bool messageStations(QString ident, QString message); + bool commandStations(QString ident, QString message); void messageStation(QString ident, QString message, PVSClient* pvsCon); bool lockStationsWithMessage(QString message); void lockStationsWithMessage(QString message, PVSClient* pvsCon); diff --git a/src/gui/dialog.cpp b/src/gui/dialog.cpp index 3c9b7a2..5f24009 100644 --- a/src/gui/dialog.cpp +++ b/src/gui/dialog.cpp @@ -30,7 +30,7 @@ Dialog::Dialog(QWidget *parent) : connect( dui->send, SIGNAL( clicked()), this, SLOT( send())); connect( dui->cancel, SIGNAL( clicked()), this, SLOT( NotSend())); - connect(dui->message, SIGNAL(textChanged()), this, SLOT(textchange())); + connect( dui->message, SIGNAL(textChanged()), this, SLOT(textchange())); } Dialog::~Dialog() diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 19b1021..1376851 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -35,6 +35,7 @@ using namespace std; #include <src/gui/connectionList.h> #include <src/gui/connectionWindow.h> #include <src/gui/profileDialog.h> +#include <src/gui/processesDialog.h> //#include <src/gui/dialog.h> #include <src/core/pvsConnectionManager.h> #include <src/gui/multicastConfigDialog.h> @@ -112,6 +113,7 @@ MainWindow::MainWindow(QWidget *parent) : connect(ui->actionUnprojection, SIGNAL(triggered()), this, SLOT(unprojecttoolbar())); connect(ui->actionDozent, SIGNAL(triggered()), this, SLOT(setdozenttoolbar())); connect(ui->actionShowProcesses, SIGNAL(triggered()), this, SLOT(showProcesses())); + connect(ui->actionStartProcess, SIGNAL(triggered()), this, SLOT(startProcess())); // Ui specific settings @@ -138,6 +140,8 @@ MainWindow::MainWindow(QWidget *parent) : connect(ui->actionConfigure_Network, SIGNAL(triggered()), this, SLOT(configureNetwork())); connect(ui->actionShowProcesses, SIGNAL(triggered()), this, SLOT(showProcesses())); ui->actionShowProcesses->setStatusTip(tr("Show Processes of the selected Client")); + connect(ui->actionStartProcess, SIGNAL(triggered()), this, SLOT(startProcess())); + ui->actionStartProcess->setStatusTip(tr("Starts Process on the selected Client(s)")); connect(ui->actionShow_Username, SIGNAL(triggered()), this, SLOT(showusername())); connect(ui->actionShow_Hostname_IP, SIGNAL(triggered()), this, SLOT(showip())); @@ -270,24 +274,24 @@ void MainWindow::loadSettings() if (current.compare("default") == 0) { setWindowTitle("PVSmgr - Default"); - QPoint pos1 = settings.value("default/1", QPoint(0, 0)).toPoint(); - MainWindow::getConnectionWindow()->addFrameBySettings("1", pos1); - QPoint pos2 = settings.value("default/2", QPoint(194, 0)).toPoint(); - MainWindow::getConnectionWindow()->addFrameBySettings("2", pos2); - QPoint pos3 = settings.value("default/3", QPoint(388, 0)).toPoint(); - MainWindow::getConnectionWindow()->addFrameBySettings("3", pos3); - QPoint pos4 = settings.value("default/4", QPoint(582, 0)).toPoint(); - MainWindow::getConnectionWindow()->addFrameBySettings("4", pos4); - QPoint pos5 = settings.value("default/5", QPoint(0, 173)).toPoint(); - MainWindow::getConnectionWindow()->addFrameBySettings("5", pos5); - QPoint pos6 = settings.value("default/6", QPoint(194, 173)).toPoint(); - MainWindow::getConnectionWindow()->addFrameBySettings("6", pos6); - QPoint pos7 = settings.value("default/7", QPoint(388, 173)).toPoint(); - MainWindow::getConnectionWindow()->addFrameBySettings("7", pos7); - QPoint pos8 = settings.value("default/8", QPoint(582, 173)).toPoint(); - MainWindow::getConnectionWindow()->addFrameBySettings("8", pos8); - QPoint pos9 = settings.value("default/9", QPoint(293, 346)).toPoint(); - MainWindow::getConnectionWindow()->addFrameBySettings("9", pos9); +// QPoint pos1 = settings.value("default/1", QPoint(0, 0)).toPoint(); +// MainWindow::getConnectionWindow()->addFrameBySettings("1", pos1); +// QPoint pos2 = settings.value("default/2", QPoint(194, 0)).toPoint(); +// MainWindow::getConnectionWindow()->addFrameBySettings("2", pos2); +// QPoint pos3 = settings.value("default/3", QPoint(388, 0)).toPoint(); +// MainWindow::getConnectionWindow()->addFrameBySettings("3", pos3); +// QPoint pos4 = settings.value("default/4", QPoint(582, 0)).toPoint(); +// MainWindow::getConnectionWindow()->addFrameBySettings("4", pos4); +// QPoint pos5 = settings.value("default/5", QPoint(0, 173)).toPoint(); +// MainWindow::getConnectionWindow()->addFrameBySettings("5", pos5); +// QPoint pos6 = settings.value("default/6", QPoint(194, 173)).toPoint(); +// MainWindow::getConnectionWindow()->addFrameBySettings("6", pos6); +// QPoint pos7 = settings.value("default/7", QPoint(388, 173)).toPoint(); +// MainWindow::getConnectionWindow()->addFrameBySettings("7", pos7); +// QPoint pos8 = settings.value("default/8", QPoint(582, 173)).toPoint(); +// MainWindow::getConnectionWindow()->addFrameBySettings("8", pos8); +// QPoint pos9 = settings.value("default/9", QPoint(293, 346)).toPoint(); +// MainWindow::getConnectionWindow()->addFrameBySettings("9", pos9); QString title = "PVSmgr - "; title.append(_profilName); @@ -794,13 +798,50 @@ void MainWindow::showProcesses() { std::list<QString>* selectedClients = MainWindow::getConnectionList()->getSelectedClients(); - if (selectedClients->size() == 1) + if (selectedClients->size() >= 1) + { + ProcessDialog procDialog; + procDialog.exec(); + + } + else + { + QString + message = + QString( + tr( + "This operation can only be performed if you have selected at least one Client!")); + QMessageBox::information(this, "PVS", message); + } + +} + + +/* Perform some action if actionStartProcess button was pressed + * + */ +void MainWindow::startProcess() +{ + std::list<QString>* selectedClients = + MainWindow::getConnectionList()->getSelectedClients(); + if (selectedClients->size() >= 1) { // do stuff - PVSClient * pvsClient = + /*PVSClient * pvsClient = PVSConnectionManager::getManager()->getClientFromIp( - selectedClients->front().toStdString().c_str()); - pvsClient->sendMessage(PVSCOMMAND, "SHOWPROCESSES", ""); + selectedClients->front().toStdString().c_str());*/ + + ProcessesStartDialog procD; + QString myString = NULL; + int result = procD.exec(); + + if (result == 1) + { + myString = MainWindow::getWindow()->getProcessesDialog(); + if(!myString.isEmpty()) + MainWindow::getConnectionWindow()->commandStations("STARTPROCESS",myString); + } + } else { @@ -808,7 +849,7 @@ void MainWindow::showProcesses() message = QString( tr( - "This operation can only be performed if you have selected a Client!")); + "This operation can only be performed if you have selected at least one Client!")); QMessageBox::information(this, "PVS", message); } } diff --git a/src/gui/mainWindow.h b/src/gui/mainWindow.h index c1f100e..58787ed 100644 --- a/src/gui/mainWindow.h +++ b/src/gui/mainWindow.h @@ -10,9 +10,11 @@ #include <src/gui/connectionWindow.h> #include <src/gui/profileDialog.h> //#include <src/gui/dialog.h> +#include <src/gui/processesStartDialog.h> #include <src/core/pvsClient.h> #include <src/core/pvsConnectionManager.h> #include "src/gui/aboutDialog.h" +#include "src/gui/processesDialog.h" #include "src/gui/serverChatDialog.h" #include <src/gui/serverFileTransfert.h> @@ -94,6 +96,9 @@ public: void setMsgDialog(QString msgd){msgDialog = msgd;}; QString getMsgDialog(){return msgDialog;}; + void setProcessesDialog(QString procd){procDialog = procd;}; + QString getProcessesDialog(){return procDialog;}; + bool isLockAllStatus() { return _isLockAll; @@ -131,9 +136,10 @@ private: ConnectionDialog* pwDiag; ConnectionDialog* messageDiag;*/ - AboutDialog *_aboutDialog; + AboutDialog *_aboutDialog; QString msgDialog; + QString procDialog; bool bgimage; bool locked, locked1; bool force_square; @@ -181,6 +187,7 @@ public slots: void setdozenttoolbar(); void startChatDialog(); void showProcesses(); + void startProcess(); private slots: void onToggleLog(bool showtime); diff --git a/src/gui/processWidget.cpp b/src/gui/processWidget.cpp new file mode 100644 index 0000000..9b59b2a --- /dev/null +++ b/src/gui/processWidget.cpp @@ -0,0 +1,98 @@ +/* +# 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/ +# ----------------------------------------------------------------------------- +# processWidget.cpp + Widget to start/stop processes on a client. This widget is used in + processesDialog.cpp as a tab in the QTabWidget +# ----------------------------------------------------------------------------- +*/ + +#include "processesDialog.h" +#include "processWidget.h" +#include "ui_processWidget.h" + +ProcessWidget::ProcessWidget(QWidget *parent, PVSClient *cl): + QWidget(parent), + prowui(new Ui::ProcessWidget) +{ + prowui->setupUi(this); + + client = cl; + + connect( prowui->startButton, SIGNAL( clicked()), this, SLOT( startProcess())); + connect( prowui->refreshButton, SIGNAL( clicked()), this, SLOT( refrProcessList())); + connect( prowui->stopButton, SIGNAL( clicked()), this, SLOT( stopProcess())); + connect( client, SIGNAL( processVectorReady(bool)), this, SLOT( refrProcessList())); + + sendCommand("SHOWPROCESSES", ""); +} + +void ProcessWidget::startProcess() +{ + QMessageBox::StandardButton start = QMessageBox::question(0, + tr("PVS Start Process"), tr("Do you want to start the process: ") + prowui->processLineEdit->text() + + tr(" on User '") + client->getDesktopName() + tr("' ?"), + QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok); + + if (start == QMessageBox::Ok) + { + sendCommand("STARTPROCESS", prowui->processLineEdit->text()); + sendCommand("SHOWPROCESSES", ""); + } + prowui->processLineEdit->clear(); +} + +void ProcessWidget::refrProcessList() +{ + for(int i=prowui->processTable->rowCount(); i == 0; i--) + { + prowui->processTable->removeRow(i); + } + prowui->processTable->setRowCount(0); + QVector<QString> processes = client->getProcessesVector(); + + for (int i=0; i<processes.size(); i++) + { + prowui->processTable->setRowCount(i+1); + QStringList processesList = processes.at(i).split(QRegExp("<#>")); + for (int j=0; j<processesList.size()&&j<3; j++) + { + prowui->processTable->setItem(i,j,new QTableWidgetItem(processesList.at(j),0)); + } + } + prowui->processTable->selectRow(0); +} + +void ProcessWidget::stopProcess() +{ + if (prowui->processTable->rowCount() > 0) + { + QMessageBox::StandardButton start = QMessageBox::question(0, + tr("PVS Start Process"), tr("Do you want to stop the process: ") + prowui->processTable->item(prowui->processTable->currentRow(),1)->text() + + tr(" on User '") + client->getDesktopName() + tr("' ?"), + QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok); + if (start == QMessageBox::Ok) + { + sendCommand("KILLPROCESS", prowui->processTable->item(prowui->processTable->currentRow(),0)->text()); + sendCommand("SHOWPROCESSES", ""); + } + } +} + +void ProcessWidget::sendCommand(QString ident, QString message) +{ + client->sendMessage(PVSCOMMAND, ident, message); +} + +ProcessWidget::~ProcessWidget() +{ + delete prowui; +} diff --git a/src/gui/processWidget.h b/src/gui/processWidget.h new file mode 100644 index 0000000..7e7eb72 --- /dev/null +++ b/src/gui/processWidget.h @@ -0,0 +1,35 @@ +#ifndef PROCESSWIDGET_H_ +#define PROCESSWIDGET_H_ + +#include <QDialog> +#include <QtGui> +#include <QVector> + +namespace Ui { + class ProcessWidget; +} + +class PVSClient; +class ProcessWidget: public QWidget +{ + Q_OBJECT + +public: + ProcessWidget(QWidget *parent, PVSClient *client); + ~ ProcessWidget(); + QAbstractItemModel *model; +public slots: + void refrProcessList(); + +private: + Ui::ProcessWidget *prowui; + PVSClient *client; + QVector<QString> *processes; + +private slots: + void startProcess(); + void stopProcess(); + void sendCommand(QString ident, QString message); +}; + +#endif diff --git a/src/gui/processesDialog.cpp b/src/gui/processesDialog.cpp new file mode 100644 index 0000000..cda76ea --- /dev/null +++ b/src/gui/processesDialog.cpp @@ -0,0 +1,60 @@ +/* +# 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/ +# ----------------------------------------------------------------------------- +# processesDialog.cpp + Dialog where a tab with running processes for every client is shown +# ----------------------------------------------------------------------------- +*/ + +#include "processesDialog.h" +#include "ui_processesDialog.h" +#include <src/gui/processWidget.h> +//#include <src/gui/mainWindow.h> + +ProcessDialog::ProcessDialog(QDialog *parent) : + QDialog(parent), + procui(new Ui::ProcessesDialog) +{ + procui->setupUi(this); + + tWidget = new QTabWidget; + procui->grLayout->addWidget(tWidget); + + connect( tWidget, SIGNAL( currentChanged(int)), this, SLOT( currChanged())); + + std::list<PVSClient*> listAll = + PVSConnectionManager::getManager()->getConnections(); + for (std::list<PVSClient*>::iterator it = listAll.begin(); it + != listAll.end(); it++) + { + if (*it == NULL || (*it)->getConnectionFrame() == NULL) continue; + if ((*it)->getConnectionFrame()->getFrame() && + /*!(*it)->getConnectionFrame()->getFrame()->isDozent() &&*/ + (*it)->getVNCConnection()) + tWidget->addTab(new ProcessWidget(0, *it), (*it)->getUserName()); + else if (!(*it)->getConnectionFrame()->getFrame()) + ConsoleLog writeError(QString("The Frame connection from client: "). + append((*it)->getConnectionFrame()->getTaskbarTitle()). + append(QString(" is corrupted. Reconnect the client it again."))); + } +} + +// if other Tab is activated we say our tab to refresh the processList +void ProcessDialog::currChanged() +{ + ProcessWidget *temp = static_cast<ProcessWidget*>(tWidget->currentWidget()); + temp->refrProcessList(); +} + +ProcessDialog::~ProcessDialog() +{ + delete procui; +} diff --git a/src/gui/processesDialog.h b/src/gui/processesDialog.h new file mode 100644 index 0000000..9d98136 --- /dev/null +++ b/src/gui/processesDialog.h @@ -0,0 +1,37 @@ +#ifndef PROCESSESDIALOG_H +#define PROCESSESDIALOG_H + +#include <QDialog> +#include <QtGui> +#include <src/gui/processWidget.h> +#include <src/gui/mainWindow.h> +#include <list> + + +namespace Ui { + class ProcessesDialog; +} + +class ConnectionList; +class PVSClient; +class PVSConnectionManager; +class ProcessesWidget; +class MainWindow; + +class ProcessDialog : public QDialog { + Q_OBJECT +public: + ProcessDialog(QDialog *parent = 0); + ~ProcessDialog(); + + +private: + Ui::ProcessesDialog *procui; + QTabWidget *tWidget; + QDialogButtonBox *buttonBox; + +private slots: + void currChanged(); +}; + +#endif // PROCESSESDIALOG_H diff --git a/src/gui/processesStartDialog.cpp b/src/gui/processesStartDialog.cpp new file mode 100644 index 0000000..b4c8c79 --- /dev/null +++ b/src/gui/processesStartDialog.cpp @@ -0,0 +1,75 @@ +/* +# 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) +{ + textLabel = new QLabel; + textLabel->setText("Process to start:"); + + messageEdit = new QLineEdit; + + layout = new QGridLayout; + + sendButton = new QPushButton(tr("Start")); + cancelButton = new QPushButton(tr("Cancel")); + + connect( sendButton, SIGNAL( clicked()), this, SLOT( send())); + connect( cancelButton, SIGNAL( clicked()), this, SLOT( NotSend())); + + layout->addWidget(textLabel,0,0); + layout->addWidget(messageEdit,1,0); + layout->addWidget(cancelButton,2,0); + layout->addWidget(sendButton,2,0); + + setLayout(layout); + setWindowTitle(tr("PVS start Process")); +} + +ProcessesStartDialog::~ProcessesStartDialog() +{ + //delete procstartui; +} + +void ProcessesStartDialog::send() +{ + QString procd = messageEdit->text(); + MainWindow::getWindow()->setProcessesDialog(procd); + messageEdit->clear(); + emit accept(); +} + +void ProcessesStartDialog::NotSend() +{ + messageEdit->clear(); + emit reject(); +} + +/*void ProcessesStartDialog::changeEvent(QEvent *e) +{ + //QDialog::changeEvent(e); + //switch (e->type()) { + //case QEvent::LanguageChange: + // procstartui->retranslateUi(this); + // break; + //default: + // break; + //} +}*/ diff --git a/src/gui/processesStartDialog.h b/src/gui/processesStartDialog.h new file mode 100644 index 0000000..61aee4f --- /dev/null +++ b/src/gui/processesStartDialog.h @@ -0,0 +1,31 @@ +#ifndef PROCESSESSTARTDIALOG_H +#define PROCESSESSTARTDIALOG_H + +#include <QDialog> +#include <QtGui> + + +class MainWindow; + +class ProcessesStartDialog : public QDialog { + Q_OBJECT +public: + ProcessesStartDialog(QWidget *parent = 0); + ~ProcessesStartDialog(); + +/*protected: + void changeEvent(QEvent *e);*/ + +private: + QGridLayout *layout; + QLabel *textLabel; + QLineEdit *messageEdit; + QPushButton *sendButton; + QPushButton *cancelButton; + +private slots: + void send(); + void NotSend(); +}; + +#endif // PROCESSESSTARTDIALOG_H diff --git a/src/gui/ui/mainwindow.ui b/src/gui/ui/mainwindow.ui index 7913e38..d444092 100644 --- a/src/gui/ui/mainwindow.ui +++ b/src/gui/ui/mainwindow.ui @@ -294,6 +294,7 @@ <addaction name="actionLock"/> <addaction name="actionChat"/> <addaction name="actionShowProcesses"/> + <addaction name="actionStartProcess"/> </widget> <action name="actionShow_Username"> <property name="checkable"> @@ -559,6 +560,15 @@ <string>Show Processes of the selected Client</string> </property> </action> + <action name="actionStartProcess"> + <property name="icon"> + <iconset resource="../../../pvsmgr.qrc"> + <normaloff>:/icons/gearsgo.png</normaloff>:/icons/gearsgo.png</iconset> + </property> + <property name="text"> + <string>Start Process</string> + </property> + </action> </widget> <layoutdefault spacing="6" margin="11"/> <resources> diff --git a/src/gui/ui/mainwindowtouch.ui b/src/gui/ui/mainwindowtouch.ui index 24f40b6..3480f09 100644 --- a/src/gui/ui/mainwindowtouch.ui +++ b/src/gui/ui/mainwindowtouch.ui @@ -28,8 +28,8 @@ <rect> <x>0</x> <y>0</y> - <width>1329</width> - <height>660</height> + <width>1335</width> + <height>673</height> </rect> </property> <layout class="QGridLayout" name="gridLayout_3"> @@ -347,27 +347,18 @@ <bool>false</bool> </attribute> <addaction name="action_Exit"/> - <addaction name="separator"/> <addaction name="actionFoto"/> - <addaction name="separator"/> <addaction name="actionView"/> - <addaction name="separator"/> <addaction name="actionProjection"/> - <addaction name="separator"/> <addaction name="actionUnprojection"/> - <addaction name="separator"/> <addaction name="actionLocksingle"/> - <addaction name="separator"/> <addaction name="actionUnlocksingle"/> - <addaction name="separator"/> <addaction name="actionLock"/> - <addaction name="separator"/> <addaction name="actionresetall"/> - <addaction name="separator"/> <addaction name="actionDozent"/> - <addaction name="separator"/> <addaction name="actionConfigure_Network"/> <addaction name="actionShowProcesses"/> + <addaction name="actionStartProcess"/> </widget> <action name="actionShow_Username"> <property name="checkable"> @@ -660,6 +651,15 @@ <string>Show Processes of the selected Client</string> </property> </action> + <action name="actionStartProcess"> + <property name="icon"> + <iconset resource="../../../pvsmgr.qrc"> + <normaloff>:/icons/gearsgo.png</normaloff>:/icons/gearsgo.png</iconset> + </property> + <property name="text"> + <string>Start Process</string> + </property> + </action> </widget> <layoutdefault spacing="6" margin="11"/> <resources> diff --git a/src/gui/ui/processWidget.ui b/src/gui/ui/processWidget.ui new file mode 100644 index 0000000..3e7f55e --- /dev/null +++ b/src/gui/ui/processWidget.ui @@ -0,0 +1,227 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ProcessWidget</class> + <widget class="QWidget" name="ProcessWidget"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>646</width> + <height>504</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <widget class="QWidget" name="verticalLayoutWidget_2"> + <property name="geometry"> + <rect> + <x>10</x> + <y>10</y> + <width>631</width> + <height>481</height> + </rect> + </property> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QGroupBox" name="groupBox_2"> + <property name="title"> + <string>Prozessliste</string> + </property> + <widget class="QWidget" name="verticalLayoutWidget"> + <property name="geometry"> + <rect> + <x>10</x> + <y>24</y> + <width>611</width> + <height>361</height> + </rect> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QTableWidget" name="processTable"> + <property name="frameShadow"> + <enum>QFrame::Sunken</enum> + </property> + <property name="editTriggers"> + <set>QAbstractItemView::NoEditTriggers</set> + </property> + <property name="showDropIndicator" stdset="0"> + <bool>false</bool> + </property> + <property name="dragDropOverwriteMode"> + <bool>false</bool> + </property> + <property name="alternatingRowColors"> + <bool>true</bool> + </property> + <property name="selectionMode"> + <enum>QAbstractItemView::SingleSelection</enum> + </property> + <property name="selectionBehavior"> + <enum>QAbstractItemView::SelectRows</enum> + </property> + <property name="gridStyle"> + <enum>Qt::DotLine</enum> + </property> + <property name="sortingEnabled"> + <bool>true</bool> + </property> + <property name="wordWrap"> + <bool>false</bool> + </property> + <property name="cornerButtonEnabled"> + <bool>false</bool> + </property> + <property name="rowCount"> + <number>0</number> + </property> + <attribute name="horizontalHeaderVisible"> + <bool>true</bool> + </attribute> + <attribute name="horizontalHeaderCascadingSectionResizes"> + <bool>false</bool> + </attribute> + <attribute name="horizontalHeaderHighlightSections"> + <bool>false</bool> + </attribute> + <attribute name="horizontalHeaderShowSortIndicator" stdset="0"> + <bool>true</bool> + </attribute> + <attribute name="horizontalHeaderStretchLastSection"> + <bool>true</bool> + </attribute> + <attribute name="verticalHeaderHighlightSections"> + <bool>true</bool> + </attribute> + <attribute name="horizontalHeaderShowSortIndicator" stdset="0"> + <bool>true</bool> + </attribute> + <attribute name="horizontalHeaderStretchLastSection"> + <bool>true</bool> + </attribute> + <attribute name="horizontalHeaderCascadingSectionResizes"> + <bool>false</bool> + </attribute> + <attribute name="horizontalHeaderVisible"> + <bool>true</bool> + </attribute> + <attribute name="horizontalHeaderHighlightSections"> + <bool>false</bool> + </attribute> + <attribute name="verticalHeaderHighlightSections"> + <bool>true</bool> + </attribute> + <column> + <property name="text"> + <string>ID</string> + </property> + </column> + <column> + <property name="text"> + <string>Name</string> + </property> + </column> + <column> + <property name="text"> + <string>Commandline</string> + </property> + </column> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="refreshButton"> + <property name="text"> + <string>Aktualisieren</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="stopButton"> + <property name="text"> + <string>Prozess beenden</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + </widget> + </item> + <item> + <widget class="Line" name="line"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QGroupBox" name="groupBox"> + <property name="maximumSize"> + <size> + <width>16777215</width> + <height>80</height> + </size> + </property> + <property name="title"> + <string>Prozess starten</string> + </property> + <widget class="QWidget" name="horizontalLayoutWidget"> + <property name="geometry"> + <rect> + <x>10</x> + <y>20</y> + <width>611</width> + <height>51</height> + </rect> + </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QLineEdit" name="processLineEdit"/> + </item> + <item> + <widget class="QPushButton" name="startButton"> + <property name="text"> + <string>Prozess starten</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_3"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </widget> + </item> + </layout> + </widget> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src/gui/ui/processesDialog.ui b/src/gui/ui/processesDialog.ui new file mode 100644 index 0000000..4ac4859 --- /dev/null +++ b/src/gui/ui/processesDialog.ui @@ -0,0 +1,92 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ProcessesDialog</class> + <widget class="QDialog" name="ProcessesDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>654</width> + <height>562</height> + </rect> + </property> + <property name="windowTitle"> + <string>Prozesse</string> + </property> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="geometry"> + <rect> + <x>310</x> + <y>530</y> + <width>341</width> + <height>32</height> + </rect> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Close</set> + </property> + <property name="centerButtons"> + <bool>false</bool> + </property> + </widget> + <widget class="QWidget" name="widget" native="true"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>651</width> + <height>531</height> + </rect> + </property> + <widget class="QWidget" name="gridLayoutWidget"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>651</width> + <height>521</height> + </rect> + </property> + <layout class="QGridLayout" name="grLayout"/> + </widget> + </widget> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>ProcessesDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel"> + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>ProcessesDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel"> + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/src/gui/ui/processesStartDialog.ui b/src/gui/ui/processesStartDialog.ui new file mode 100644 index 0000000..5d8c7ee --- /dev/null +++ b/src/gui/ui/processesStartDialog.ui @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ProcessesStartDialog</class> + <widget class="QDialog" name="ProcessesStartDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>393</width> + <height>109</height> + </rect> + </property> + <property name="windowTitle"> + <string>Start Process</string> + </property> + <widget class="QWidget" name="layoutWidget"> + <property name="geometry"> + <rect> + <x>20</x> + <y>20</y> + <width>351</width> + <height>71</height> + </rect> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLineEdit" name="message"/> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="spacing"> + <number>5</number> + </property> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>108</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="cancel"> + <property name="text"> + <string>Cancel</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="send"> + <property name="text"> + <string>Send</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + </widget> + <layoutdefault spacing="6" margin="11"/> + <resources/> + <connections/> +</ui> diff --git a/src/pvs.cpp b/src/pvs.cpp index f582caa..755eea5 100755 --- a/src/pvs.cpp +++ b/src/pvs.cpp @@ -262,15 +262,21 @@ void PVS::onCommand(PVSMsg cmdMessage) } if (ident.compare("SHOWPROCESSES") == 0) { - // do stuff to show processes - // to test if SHOWPROCESSES command is submitted correct uncomment following lines - // a messagebox will appear on the client - // emit showMessage("Show Processes", "", true); + _pvsServerConnection->sendMessage(PVSMsg(PVSCOMMAND, "PROCESSES", "SHOW clear")); //tell the client that we want to clear his process-list + showProc(); return; } + if (ident.compare("STARTPROCESS") == 0) + { + QProcess *proc = new QProcess( this ); + proc->start(message); //we try to run the process with the name message + _pvsServerConnection->sendMessage(PVSMsg(PVSCOMMAND, "PROCESSES", "START Process "+message+": started")); + return; + } if (ident.compare("KILLPROCESS") == 0) { - // do stuff to kill a process + QProcess *proc = new QProcess( this ); + proc->start("kill "+message); //we try to kill the process with the given ID return; } @@ -928,3 +934,71 @@ QString PVS::getConfigValue(QString key) { return _settings.value(key).toString(); } + +void PVS::showProc() +{ + //look at procfs + QDir procfs("/proc"); + QStringList proc = procfs.entryList(); + int uid = getuid(); + bool write; + + for (int i=0;i<proc.length();i++) //every directory in /proc is checked + { + write = false; + QString tmp = proc.at(i); + QString snd = ""; + if (!tmp.contains(QRegExp("\\D"))) //we have to check if name is number + { + QString name = ""; + QFile file("/proc/"+tmp+QString("/status")); //read status file + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + return; + + QTextStream in(&file); + QString line = in.readLine(); + while (!line.isNull()) + { + if (line.startsWith("Name:")) //to get the name of our process + { + name = line.remove(0,6); + snd.append(tmp).append(QString("<#>")).append(line).append("<#>"); + //lets check if the process belongs to our PVS better not to show it if we dont want to crash PVS + } else if (line.startsWith("Gid:")) //and to check that the process is a user process + //we had to read name first because every file in /proc + //has size 0 byte + { + line.remove(0,5); + if (line.startsWith(QString::number(uid))) + write = true; + else break; + + } + line = in.readLine(); + } + if (write) + { + if ((name.startsWith("pvs")) || (name.startsWith("dbus"))) + write = false; + } + if (write) //if process belongs to user (and not to PVS) we go on + { + QFile file("/proc/"+tmp+QString("/cmdline")); //and read cmdline + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + return; + + QTextStream in(&file); + QString line = in.readLine(); + while (!line.isNull()) + { + int templength = snd.length()+3; + snd.append(line.left(150+templength)); //but only up to a length of 150-name-id-seperators + break; + } + } + if (write) //if process belongs to user we send the line to client + _pvsServerConnection->sendMessage(PVSMsg(PVSCOMMAND, "PROCESSES", "SHOW "+snd)); + } + } + _pvsServerConnection->sendMessage(PVSMsg(PVSCOMMAND, "PROCESSES", "SHOW finished")); //at the end we send that every process has been sent +} @@ -26,6 +26,9 @@ #include "src/version.h" #include "src/util/consoleLogger.h" #include "src/util/clientGUIUtils.h" +#include <QFile> +#include <QTextStream> +#include <QDir> #include "src/input/inputEventHandler.h" class PVSServiceDiscovery; @@ -156,6 +159,8 @@ private: int stopVNCScript(); ///< stop the vnc server (via script) static void signalHandler(int signal); //handles posix signals + void showProc(); //sends list of user processes to connection manager + PVSServerConnection* _pvsServerConnection; ///< our tcp connection object to the pvsserver PVSServiceDiscovery *_sdClient; diff --git a/src/pvsgui.cpp b/src/pvsgui.cpp index eb1383b..1520c81 100644 --- a/src/pvsgui.cpp +++ b/src/pvsgui.cpp @@ -450,24 +450,6 @@ void printVersion() int main(int argc, char *argv[]) { - QtSingleApplication app(argc, argv); - app.setQuitOnLastWindowClosed(false); - app.setOrganizationName("openslx"); - app.setOrganizationDomain("openslx.org"); - app.setApplicationName("pvsgui"); - - // only one instance should be allowed - if (app.sendMessage("")) - { - qDebug("[PVSGUI] ERROR: Already running. Exiting"); - return 0; - } - - // use system locale as language to translate gui - QTranslator translator; - translator.load(":pvsgui"); - app.installTranslator(&translator); - bool visible = false; int position = -1; @@ -506,6 +488,25 @@ int main(int argc, char *argv[]) opt = getopt_long( argc, argv, optString, longOpts, &longIndex ); } + + QtSingleApplication app(argc, argv); + app.setQuitOnLastWindowClosed(false); + app.setOrganizationName("openslx"); + app.setOrganizationDomain("openslx.org"); + app.setApplicationName("pvsgui"); + + // only one instance should be allowed + if (app.sendMessage("")) + { + qDebug("[PVSGUI] ERROR: Already running. Exiting"); + return 0; + } + + // use system locale as language to translate gui + QTranslator translator; + translator.load(":pvsgui"); + app.installTranslator(&translator); + PVSGUI pvsgui; pvsgui.setPosition(position); pvsgui.setVisible(visible); diff --git a/src/version.h b/src/version.h index de5c6aa..a08c819 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ -#define VERSION_STRING "2.0.5" -#define VERSION_NUMBER 205 +#define VERSION_STRING "2.8.0" +#define VERSION_NUMBER 280 |