Programmation GTK/Conversions de types


Vous remarquerez, au fur et à mesure que vous progressez, que GTK utilise un système de coercition de type. Celle-ci est toujours réalisée en utilisant des macros qui vérifient si l'objet donné peut être converti et qui réalisent cette coercition. Les macros que vous rencontrerez le plus sont :

  • GTK_WIDGET(widget)
  • GTK_OBJECT(object)
  • GTK_SIGNAL_FUNC(function)
  • GTK_CONTAINER(container)
  • GTK_WINDOW(window)
  • GTK_BOX(box)

Elles sont toutes utilisées pour convertir les paramètres des fonctions. Vous les verrez dans les exemples et, en règle générale, vous saurez les utiliser simplement en regardant la déclaration d'une fonction.

Comme vous pouvez le voir dans la hiérarchie de classes ci-dessous, tous les GtkWidgets dérivent d'une classe de base GtkObject. Ceci signifie que vous pouvez utiliser un widget à chaque fois qu'une fonction requiert un objet - il suffit d'utiliser la macro GTK_OBJECT().

Par exemple :

 gtk_signal_connect(GTK_OBJECT(button), "clicked",
                    GTK_SIGNAL_FUNC(fonction_rappel), <var>&lt;donnee_de_rappel&gt;</var>);

Cet appel convertit le bouton en objet et fournit une conversion pour le pointeur de fonction vers la fonction de rappel.

De nombreux widgets sont aussi des containers. Si vous regardez la hiérarchie de classe ci-dessous, vous remarquerez que beaucoup de widgets viennent de la classe GtkContainer. N'importe lequel de ces widgets peut être utilisé avec la macro GTK_CONTAINER pour être passé en paramètre à une fonction qui attend un container.

Malheureusement, ces macros ne peuvent être couvertes en détail dans ce didacticiel, Je vous recommande donc de jeter un coup d’œil sur les fichier en-têtes GTK : ils peuvent s'avérer très instructifs. En fait, il n'est pas difficile de comprendre comment fonctionne un widget, il suffit d'étudier les déclarations des fonctions.