# Programmation GTK2 en Pascal/GtkTable

* Programmation GTK2 en Pascal
* Introduction
* Pré-requis
* Logiciels nécessaires
* Installation sous Linux
* Installation sous Windows
* Installation sous Mac/OS
* Une application minimale
* Les bases
* La notion d'objet
* La gestion des évènements
* Le placement des contrôles
* Les contrôles (widgets) Gtk
* Les fenêtres
* Les conteneurs
* Les visuels
* Les boutons
* La saisie de données
* Les listes déroulantes
* Les menus
* Les décorations
* La barre d'outils
* Les sélections
* Les zones de texte
* Les listes et arbres
* La Glib : objets et fonctions
* Dessiner avec le Gdk
* Conclusion
* Bibliographie

## Présentation

Dans la famille des conteneurs, voilà sûrement le contrôle le plus intéressant. En effet il peut être parfois douloureux de placer correctement son interface avec l'utilisation de plusieurs GtkBox. Le contrôle GtkTable est conçu pour résoudre ce problème car il utilise une grille invisible pour attacher les contrôles mais sans pour autant perdre la puissance de GTK+ avec le redimensionnement automatique.

### Hiérarchie

* Hiérarchie
* GObject
* └─GtkObject
* └─GtkWidget
* └─GtkContainer
* └─GtkTable

## Utilisation de base

Au moment de la création de la GtkTable, nous allons spécifier le nombre de lignes et de colonnes, puis y placer les éléments avec 3 principales caractéristiques :
* la position de départ et de fin de l'élément par rapport aux lignes ;
* la position de départ et fin de l'élément par rapport aux colonnes ;
* la façon de réagir du contrôle (remplir la zone, agrandir, etc.).

### Création d'une GtkTable

La fonction de création est :
Les paramètres rows et columns permettent de définir respectivement le nombre de lignes et de colonnes de la grille. Le paramètre homogeneous quant à lui définit, comme pour une [[../GtkBox|GtkBox, si tous les contrôles contenus dans la GtkTable utilisent un espace équivalent.

### Insertion d'éléments

La première fonction étudiée est :
À première vue, cette fonction peut apparaître compliquée, mais elle est en réalité très simple. Le paramètre child représente le contrôle à attacher à la grille, les paramètres left_attach et right_attach, les positions à gauche et à droite du contrôle et les paramètres top_attach et bottom_attach, les positions supérieures et inférieures du contrôle.
Les paramètres xoptions et yoptions permettent de spécifier respectivement la façon dont le contrôle réagit horizontalement et verticalement au redimensionnement de la GtkTable. Ces paramètres peuvent prendre 3 valeurs (que l'on peut associer) :
* GTK_EXPAND : spécifie que cette section de la grille s'étirera pour remplir l'espace disponible ;
* GTK_SHRINK : détermine ce qui se produira s'il y a un espace insuffisant pour répondre à la requête de taille du contrôle enfant, alors le contrôle se voit attribué une allocation réduite, ce qui peut entraîner un effet de « bords coupés » ;
* GTK_FILL : spécifie que le contrôle enfant s'étirera pour remplir l'espace disponible, utilisé uniquement si GTK_EXPAND est défini.
Les deux derniers paramètres xpadding et ypadding définissent l'espace supplémentaire à ajouter aux bords du contrôle (à droite et à gauche pour le premier, au-dessus et en dessous pour le second).
La deuxième fonction est :
Ceci est la version simplifiée de la première fonction car elle définit automatiquement les paramètres xoptions et yoptions à GTK_EXPAND | GTK_FILL et les paramètres xpadding et ypadding à 0.

### Modification de la table

Il est possible de changer la taille de la grille après sa création à l'aide de cette fonction :
Le paramètre table est la GtkTable à modifier, et les paramètres rows et columns les nouveaux nombres de lignes et de colonnes.
Ces deux fonctions permettent de changer l'espace d'une ligne ou d'une colonne spécifique :
La première définit l'espace autour d'une ligne tandis que la deuxième fait la même chose pour une colonne.
Celles-ci ont le même rôle que les deux précédentes fonctions, mais agissent sur l'ensemble de la GtkTable :
Et pour connaître ces espacements nous avons quatre fonctions différentes :
Les deux premières fonctions permettent de connaître l'espace entre la ligne numéro row (ou la colonne numéro column) et sa suivante. Les deux autres fonctions quant à elles, renvoient la valeur par défaut des espacements, c'est à dire la valeur qui sera utilisé au prochain ajout d'un contrôle.

## Programme exemple

Nous allons utiliser le même exemple que dans le chapitre sur les GtkBox, pour bien montrer la différence au niveau du code.
Voilà le fichier gtk008.pas :
Voilà ce que donne l'exécution du programme gtk008 :
* Conteneurs :
* GtkContainer ~
* GtkBox ~
* GtkBin —
* GtkHBox ~
* GtkVBox ~
* GtkTable ~
* GtkNotebook