WinBox - Documentation 1.2

Constructs

C'est con ce truc...

Méthodes de Construct

Voici d'autres méthodes que normalement vous n'utiliserez que très peu. Elles servent à libérer automatiquement à la fin de l'appel de votre construction la mémoire d'éléments allouée dynamiquement. Elles sont utiles si par exemple vous définissez un widget qui peut-être ne sera pas utilisé. Si vous ne le liez à aucun widget-layout, sa mémoire ne sera pas automatiquement libérée à la fermeture du construct. En utilisant wAddWidgetToConstruct, vous garantissez que la mémoire sera libérée.

Qu'est-ce qu'un Construct ?

Un construct est une structure interne utilisée par WinBox pour réunir tous les objets (widgets, polices, images, backgronds, ...) que vous utilisez dans votre construction.

Une construction représente un ensemble de widgets liés les uns aux autres. Par exemple, une fenêtre avec tous ses widgets-enfants forme une construction.

Un construction est définie par son widget principal, c'est-à-dire celui qui contient tous les autres widgets, c'est la base de votre construction. Il faut également lui associer un thème.

La structure Construct est automatiquement créée lors de l'appel d'une des fonctions wDrawConstruct, wActivateConstruct ou wExecConstruct. Si vous avez besoin de le créer vous-même avant l'exécution/dessin (pour utiliser les méthodes de type wAddWidgetToConstruct, ...), appelez la fonction wNewConstruct.

Comment Exécuter sa Construction ?

Très simplement. Si mainWidget est votre widget principal, il suffit d'écrire :
wExecConstruct(mainWidget, wDefaultTheme());
Pour exécuter votre construction et tous ses widgets. Si tous les widgets sont statiques, le programme réagira à deux choses : Une fois que le programme est terminé, le construct s'occupe de libérer toute la mémoire utilisée. wExecConstruct renvoie 0 si l'appui sur la touche ESC ou une fonction callback a causé l'interruption du programme, et 1 si c'est la touche ENTER.

Si vous souhaitez savoir si c'est l'appui sur la touche ESC ou une fonction callback qui a déclenché l'interruption du programme, il vous suffit de tester le résultat de la fonction K_ESC().

Vous pouvez avoir besoin d'effectuer des opérations juste après que le programme quitte. Par exemple vous demandez l'utilisateur de saisir des données dans une boite de dialogue, et s'il a appuie sur ENTER vous enregistrez ces données, tandis que s'il presse ESC vous ne les sauvegardez pas. Le problème qui se pose alors est que wExecConstruct ne le permet pas : sitôt que l'utilisateur a quitté le programme, les widgets sont libérés et inutilisables. On ne peut donc plus accéder à leurs données.
Il faut alors utiliser les fonction wActivateConstruct et wCloseConstruct de la sorte :

// J'utilise wActivateConstruct à la place de wExecConstruct
int ok:
ok = wActivateConstruct(mainWidget, wDefaultTheme());

// Si l'utilisateur a pressé ENTER
if (ok == 1) {
  // je sauvegarde mes données
  ...
}

// Puis je libère le construct
wCloseConstruct(mainWidget);

Enfin, vous pouvez avoir besoin de dessiner votre construction sans vouloir l'exécuter tout de suite. Il vous suffit d'appeler la fonction wDrawConstruct puis d'exécuter votre construct le moment désiré :

// Je dessine ma construction
wDrawConstruct(mainWidget, wDefaultTheme());

// Je fais ce que je veux...
...

// J'exécute/active ma construction
wExecConstruct(mainWidget, NULL);

NOTE: L'arguement theme peut être égal à NULL. Dans ce cas, si la construction a déjà été associée à un thème, celui-ci est conservé; sinon, la fonction wDefaultTheme() est automatiquement appellée.