Whole document tree
    

Whole document tree

Didacticiel: Vue d'ensemble des widgets Page suivante Page précédente Table des matières

5. Vue d'ensemble des widgets

Les étapes pour créer un widget en GTK sont :

  1. gtk_*_new() - une des fonctions disponibles pour créer un nouveau widget. Ces fonctions sont décrites dans cette section.
  2. Connexion de tous les signaux que l'on souhaite utiliser avec les gestionnaires adéquats.
  3. Configuration des attributs du widget.
  4. Placement du widget dans un container en utilisant un appel approprié comme gtk_container_add() ou gtk_box_pack_start().
  5. Affichage du widget grâce à gtk_widget_show().

gtk_widget_show() permet à GTK de savoir que l'on a fini de configurer les attributs du widget et qu'il est prêt à être affiché. On peut aussi utiliser gtk_widget_hide() pour le faire disparaître. L'ordre dans lequel on affiche les widgets n'est pas important, mais il est préférable d'afficher la fenêtre en dernier pour qu'elle surgisse d'un seul coup plutôt que de voir les différents widgets apparaître à l'écran au fur et à mesure. Les fils d'un widget (une fenêtre est aussi un widget) ne seront pas affichés tant que la fenêtre elle-même n'est pas affichée par la fonction gtk_widget_show().

5.1 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), donnee_de_rappel);

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'oeil 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.

5.2 La hiérarchie des widgets

Voici l'arbre de la hiérarchie de classes utilisées pour implanter les widgets.

    GtkObject
    +-- GtkData
    |   \-- GtkAdjustment
    |
    \-- GtkWidget
        +-- GtkContainer
        |   +-- GtkBin
        |   |   +-- GtkAlignment
        |   |   +-- GtkFrame
        |   |   |   *-- GtkAspectFrame
        |   |   |
        |   |   +-- GtkItem
        |   |   |   +-- GtkListItem
        |   |   |   +-- GtkMenuItem
        |   |   |   |   +-- GtkCheckMenuItem
        |   |   |   |       *-- GtkRadioMenuItem
        |   |   |   |
        |   |   |   *-- GtkTreeItem
        |   |   |
        |   |   +-- GtkViewport
        |   |   \-- GtkWindow
        |   |       +-- GtkDialog
        |   |       \-- GtkFileSelection
        |   |
        |   +-- GtkBox
        |   |   +-- GtkHBox
        |   |   \-- GtkVBox
        |   |       +-- GtkColorSelection
        |   |       \-- GtkCurve
        |   |
        |   +-- GtkButton
        |   |   +-- GtkOptionMenu
        |   |   \-- GtkToggleButton
        |   |       \-- GtkCheckButton
        |   |           \-- GtkRadioButton
        |   |
        |   +-- GtkList
        |   +-- GtkMenuShell
        |   |   +-- GtkMenu
        |   |   \-- GtkMenuBar
        |   |
        |   +-- GtkNotebook
        |   +-- GtkScrolledWindow
        |   +-- GtkTable
        |   \-- GtkTree
        |
        +-- GtkDrawingArea
        +-- GtkEntry
        +-- GtkMisc
        |   +-- GtkArrow
        |   +-- GtkImage
        |   +-- GtkLabel
        |   \-- GtkPixmap
        |
        +-- GtkPreview
        +-- GtkProgressBar
        +-- GtkRange
        |   +-- GtkScale
        |   |   +-- GtkHScale
        |   |   \-- GtkVScale
        |   |
        |   \-- GtkScrollbar
        |       +-- GtkHScrollbar
        |       \-- GtkVScrollbar
        |
        +-- GtkRuler
        |   +-- GtkHRuler
        |   \-- GtkVRuler
        |
        \-- GtkSeparator
            +-- GtkHSeparator
            \-- GtkVSeparator

5.3 Widgets sans fenêtre

Les widgets suivants n'ont pas de fenêtre associée. Si vous voulez capturer des événements, vous devez utiliser GtkEventBox. Reportez-vous à la section sur Le widget EventBox

GtkAlignment
GtkArrow
GtkBin
GtkBox
GtkImage
GtkItem
GtkLabel
GtkPaned
GtkPixmap
GtkScrolledWindow
GtkSeparator
GtkTable
GtkViewport
GtkAspectFrame
GtkFrame
GtkVPaned
GtkHPaned
GtkVBox
GtkHBox
GtkVSeparator
GtkHSeparator

Nous continuerons notre exploration de GTK en examinant chaque widget tour à tour, créant quelques fonctions simples pour les afficher. Une autre source intéressante est le programme testgtk.c livré avec GTK. Il se trouve dans le répertoire gtk/


Page suivante Page précédente Table des matières