Open Source im professionellen Einsatz

Automat und Zustände

POE-typisch definiert der Session-Konstruktor ab Zeile 22 insgesamt fünf ver- schiedene Zustände, zwischen denen der im Skript definierte Automat hin und her springt. Nach dem Starten des POE-Kernels in Zeile 31 läuft das GUI und arbeitet die User-Eingaben ab, bis der Anwender das Programm endlich mit einem Klick auf das Schließen-Icon des Hauptfensters beendet.

Per Definition legt der »_start«-Zustand in Zeile 24 den Anfangszustand fest. Die ihm zugewiesene Funktion »ui_start()« baut die grafische Oberfläche auf und ist ab Zeile 58 definiert.

Wie schon in früheren Beiträgen zum Thema POE ausgeführt (zum Beispiel in [4]), holen die Makros »KERNEL«, »SESSION« und »HEAP« Automatenvariablen aus Perls Array »@_« für Funktionsargumente. »HEAP« ist ein Hash für eine Session des Automaten und dient zum Ab- legen allerlei globaler Variablen, die der Automat dann von Callback zu Callback durchschleift, wobei er sie allerdings sauber von anderen Sessions trennt.

Speichern oder zusammenklappen

Zeile 64 ruft den Konstruktor des GUI-Hauptfensters »Gtk2::Window« auf, in dessen Rahmen später eine Listbox mit abspielbereiten Videos zu liegen kommt. Der Parameter »toplevel« gibt an, dass es sich um das Hauptfenster der Applikation handelt. Eine Referenz darauf legt das Skript im Heap ab, nicht um später in Callbacks darauf zuzugreifen, sondern um sicherzustellen, dass Perl eine Referenz auf das Hauptfenster in einer Vari- ablen speichert, die sich nicht mit dem Abschluss der Funktion »ui_start()« in Luft auflöst. Denn wenn dies geschähe, fiele daraufhin das Applikationsfenster sang- und klanglos in sich zusammen, obwohl die Applikation ja noch weiterlaufen soll.

Der Aufruf der Methode »signal_ui_destroy()« definiert in Zeile 66, dass mit dem Zusammenfallen des Hauptfensters (zum Beispiel weil der User mit der Maus das Schließen-Icon angeklickt hat) sich auch die Applikation, also der POE-Kernel beendet. Das in Zeile 69 erzeugte Widget »Gtk2::SimpleList« nimmt die Daten der zweispaltigen Anzeige auf.

Wie Abbildung 1 zeigt, besteht jede Zeile dieser Videoliste links aus einem Zeitstempel und rechts aus dem Namen einer zugehörigen Videodatei. Beide Spalten sind vom Datentyp Text, beherbergen also nur einfache Zeichenketten ohne farbliche Hervorhebungen oder anderen Schnickschnack.

Unter dem Kürzel »slist« speichert das Skript eine Referenz auf das Widget im Sessionheap ab. Die Methode »add()« fügt die Listbox in das Hauptfenster ein und das nachfolgende »show_all()« zeichnet das GUI dann schließlich auf den Bildschirm.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook