Fortgeschrittenenpraktikum: GTK-Schnittstelle für Alice

Robert Grabowski 

Sommersemester 2002 
Betreuer: Thorsten Brunklaus,Andreas Rossberg
 

Inhalt

Mit GTK+ können relativ einfach grafische Benutzeroberflächen (GUIs) in C erstellt werden. Durch die in diesem Fopra erstelle Schnittstelle ist dies nun auch dem Alice-Programmierer möglich. Es können auf fast alle Funktionen von GTK+ 2 sowie auf das GnomeCanvas-Widget komfortabel zugegriffen werden.

Die Schnittstelle ist für Alice auf SEAM konzipiert, und läuft unter Windows und Linux. Voraussetzung dafür ist natürlich, dass GTK+ 2 sowie die Bibliothek libgnomecanvas installiert sind (siehe unten). 


Dokumentation 

  • Screenshot

  • Zwischenbericht vom 05.09.02 (als PS und PDF)

  • Abschlussvortrag vom  27.03.03 (als PPT und PDF)

  • Abschlussbericht vom 16.05.03 (als PS und PDF)

Bibliotheken 

Die GTK+- und GnomeCanvas-Bibliotheken werden zur Laufzeit jedes Alice-Programms benötigt, welches die Schnittstelle benutzt. Zum Übersetzen der Schnittstelle selbst werden darüberhinaus alle Includedateien der Bibliotheken sowie das Programm pkg-config benötigt.

  • Windows
    Alle benötigten DLLs, Includedateien und Programme befinden sich in diesem Package (.tar.bz2, ca. 7 MB).

  • Linux
    Folgende Pakete müssen  installiert sein: glib-2.0, gtk+-2.0, atk-1.0, pango-1.0, libgnomecanvas-2.0, libart_lgpl-2.3, pkg-config-0.12. Diese Bibliotheken sind auf jeden Fall Bestandteil des GNOME-Desktops der Version 2. Mit höheren Versionsnummern sollte es auch keine Probleme geben, sofern das Binding neu übersetzt wird.
     

Phasen

  1. Native-Komponenten - erledigt

  2. Aus C-Header-Dateien von GTK und GDK werden Native-Komponenten generiert, die die eigentlichen C-Bibliotheksfunktionen aufrufen. Dabei werden die von den Gtk-Funktionen benutzen C-Datentypen auf Alice-Typen abgebildet. Diese Schicht führt zudem eine Typüberprüfung für von GObject abgeleitete Objekte durch.
     
  3. Enum-Konstanten, Unsafe-Komponente, Hauptkomponente - erledigt

  4. Alle Gtk-Aufzählungstypen werden als datatypes in einer eigenen Struktur verfügbar gemacht. Die Unsafe-Komponente ruft Funktionen der Native-Komponente auf. Die Hauptkomponente schließlich führt Enums- und Unsafe-Struktur zusammen.
     
  5. GnomeCanvas - erledigt

  6. Es werden Bindings für das GnomeCanvas hinzugefügt. 
     
  7. GTK-Eventhandling - erledigt

  8. Das Eventhandling wird so implementiert, dass die unter Alice Callback-Funktionen definiert werden können. Dazu wird bei Gtk ein eigener Eventhandler registriert, der auf alle Ereignisse reagiert und in einen Strom schreibt. Ein Alice-Thread liest die so aufgezeichneten Events aus dem Strom und ruft die eigentlichen Callback-Funktionen auf.
     
  9. Garbage Collection - erledigt

  10. Der Referenzzähler jedes durch eine GTK-Funktion erzeugten Objekts wird sofort nach dem Funktionsaufruf erhöht. Dies hindert die GTK-Bibliothek daran, das Objekt vorzeitig aus dem Speicher zu entfernen. Sobald unter Alice keine Referenz mehr auf das Objekt vorhanden ist, wird der interne Objekt-Referenzzähler verringert, wodurch das Objekt sicher entfernt werden kann.
     
  11. Windows-Version - erledigt

  12. Die Schnittstelle muss unter Windows zum Laufen gebracht werden.
     
  13. Dokumentation, Kommentare, etc. - erledigt

    Hierzu gehört auch die Portierung der Beispielprogramme sowie der Abschlussbericht.

Links

  • Ein Inspector für Alice

  • parallel laufendes Fopra von Bernadette Blum und Marvin Schiller, in welchem diese Gtk-Schnittstelle benutzt werden soll