# Programmation GTK/Détails sur les boîtes

* Introduction
* Bien débuter
** « Bonjour tout le monde » en GTK
** Compilation de « Bonjour tout le monde »
** Théorie des signaux et des rappels
** « Bonjour tout le monde » pas à pas
** Types de données
** Compléments sur les gestionnaires de signaux
** Un « Bonjour tout le monde » amélioré
* Placement des widgets
** Théorie des boîtes de placement
** Détails sur les boîtes
** Programme de démonstration des placements
** Placement avec les tables
** Exemple de placement avec table
* Vue d'ensemble des widgets
** Conversions de types
** La hiérarchie des widgets
** Widgets sans fenêtre
* Widgets boutons
** Boutons normaux
** Boutons commutateurs
** Cases à cocher
** Boutons radio
* Widgets divers
** Labels
** Le widget bulle d'aide
** Barres de progression
** Boîtes de dialogue
** Pixmaps
* Widgets containers
** Bloc-notes
** Fenêtres avec barres de défilement
* Widgets listes
** Signaux
** Fonctions
** Exemple
** Widget item de liste
* Widgets de sélections de fichiers
* Widgets Menu
** Création manuelle de menus
** Exemple de menu manuel
** Utilisation de GtkMenuFactory
** Exemple d'usine à menu
* Widgets non documentes
** Entrées de texte
** Sélections de couleurs
** Contrôle d'intervalle
** Règles
** Boîtes de texte
** Prévisualisation
** Courbes
* Widget EventBox
* Configuration des attributs de widget
* Temporisations, fonctions d'E/S et d'attente
** Temporisations
** Surveillance des E/S
** Fonctions d'attente
* Gestion des sélections
** Introduction
** Récupération de la sélection
** Fournir la sélection
* glib
** Définitions
** Listes doublement chaînées
** Listes simplement chaînées
** Gestion de la mémoire
** Timers
** Gestion des chaînes
** Utilitaires et fonctions d'erreurs
* Fichiers rc de GTK
** Fonctions pour les fichiers rc
** Format des fichiers rc de GTK
** Exemple de fichier rc
* Écriture de vos propres widgets
** Vue d'ensemble
** Anatomie d'un widget
** Création d'un widget composé
** Création d'un widget à partir de zéro
** En savoir plus
* Scribble, un programme simple de dessin
** Présentation
** Gestion d'événement
** Le widget DrawingArea et le dessin
** Ajouter le support XInput
* Conseils pour l'écriture d'applications GTK
* Contributions
* Remerciements
* Copyright
* Introduction
* Bien débuter
** « Bonjour tout le monde » en GTK
** Compilation de « Bonjour tout le monde »
** Théorie des signaux et des rappels
** « Bonjour tout le monde » pas à pas
** Types de données
** Compléments sur les gestionnaires de signaux
** Un « Bonjour tout le monde » amélioré
* Placement des widgets
** Théorie des boîtes de placement
** Détails sur les boîtes
** Programme de démonstration des placements
** Placement avec les tables
** Exemple de placement avec table
* Vue d'ensemble des widgets
** Conversions de types
** La hiérarchie des widgets
** Widgets sans fenêtre
* Widgets boutons
** Boutons normaux
** Boutons commutateurs
** Cases à cocher
** Boutons radio
* Widgets divers
** Labels
** Le widget bulle d'aide
** Barres de progression
** Boîtes de dialogue
** Pixmaps
* Widgets containers
** Bloc-notes
** Fenêtres avec barres de défilement
* Widgets listes
** Signaux
** Fonctions
** Exemple
** Widget item de liste
* Widgets de sélections de fichiers
* Widgets Menu
** Création manuelle de menus
** Exemple de menu manuel
** Utilisation de GtkMenuFactory
** Exemple d'usine à menu
* Widgets non documentes
** Entrées de texte
** Sélections de couleurs
** Contrôle d'intervalle
** Règles
** Boîtes de texte
** Prévisualisation
** Courbes
* Widget EventBox
* Configuration des attributs de widget
* Temporisations, fonctions d'E/S et d'attente
** Temporisations
** Surveillance des E/S
** Fonctions d'attente
* Gestion des sélections
** Introduction
** Récupération de la sélection
** Fournir la sélection
* glib
** Définitions
** Listes doublement chaînées
** Listes simplement chaînées
** Gestion de la mémoire
** Timers
** Gestion des chaînes
** Utilitaires et fonctions d'erreurs
* Fichiers rc de GTK
** Fonctions pour les fichiers rc
** Format des fichiers rc de GTK
** Exemple de fichier rc
* Écriture de vos propres widgets
** Vue d'ensemble
** Anatomie d'un widget
** Création d'un widget composé
** Création d'un widget à partir de zéro
** En savoir plus
* Scribble, un programme simple de dessin
** Présentation
** Gestion d'événement
** Le widget DrawingArea et le dessin
** Ajouter le support XInput
* Conseils pour l'écriture d'applications GTK
* Contributions
* Remerciements
* Copyright
[ Modifier le sommaire ]
À cause de cette liberté, le placement des boîtes avec GTK peut paraître déroutant au premier abord. Il existe beaucoup d'options et il n'est pas tout de suite évident de comprendre comment elles s'accordent toutes ensemble. En fait, il y a 5 styles de base différents.
Chaque ligne contient une boîte horizontale (hbox) contenant plusieurs boutons. L'appel à gtk_box_pack indique la façon dont sont placés tous les boutons dans la hbox. Chaque bouton est placé dans la hbox de la même façon (mêmes paramètres que la fonction gtk_box_pack_start).
Voici la déclaration de la fonction gtk_box_pack_start.
Le premier paramètre est la boîte dans laquelle on place l'objet, le second est cet objet. Tous les objets sont tous des boutons jusqu'à maintenant, on place donc des boutons dans des boîtes.
Le paramètre expand de gtk_box_pack_start ou gtk_box_pack_end contrôle la façon dont le widget est placé dans la boîte. S'il vaut TRUE, les widgets sont disposés dans la boîte de façon à en occuper tout l'espace. S'il vaut FALSE, la boîte est rétrécie pour correspondre à la taille du widget. Mettre expand à FALSE vous permettra d'aligner à droite et à gauche vos widgets. Sinon, ils s'élargiront pour occuper toute la boîte. Le même effet pourrait être obtenu en utilisant uniquement une des deux fonctions gtk_box_pack_start ou pack_end.
Le paramètre fill des fonctions gtk_box_pack contrôle si de l'espace supplémentaire doit être alloué aux objets eux-mêmes (TRUE), ou si on doit rajouter de l'espace (padding) dans la boîte autour des objets (FALSE). Il n'a de sens que si le paramètre expand vaut TRUE.
Lorsque l'on crée une nouvelle boîte, on utilise une fonction comme :
Le paramètre homogeneous de gtk_hbox_new (et c'est la même chose pour gtk_vbox_new) vérifie que chaque objet de la boîte ait la même taille (i.e. la même largeur dans une hbox, la même hauteur dans une vbox). S'il vaut TRUE, le paramètre expand des fonctions gtk_box_pack sera toujours mis à TRUE.
Quelle est alors la différence entre les paramètres spacing (configuré lorsque la boîte est créée) et padding (configuré lorsque les éléments sont placés) ? spacing ajoute de l'espace entre les objets, et padding en ajoute de chaque côté d'un objet. La figure suivante devrait éclairer tout cela&nbsp:
Voici le code utilisé pour créer les images ci-dessus. J'y ai mis beaucoup de commentaires en espérant que vous n'aurez pas de problème pour le relire. Compilez-le et jouez avec les différents paramètres.