Panel

De La Mouche VII


Un objet "panel" est une fenêtre qui est considérée comme un élément d'une pile constituée de l'ensemble des obets "panel". La bibliothèque Panel inclut une fonction de mise à jour (similaire à refresh()) qui affiche tous les panels dans l'ordre de la pile, de bas en haut.

Compilation

  • Inclure <panel.h>.
  • Utiliser l'option -lpanel, de préférence avant -lncurses.

Bases

Création et suppression

On crée un panel à partir d'une fenêtre, en appelant la fonction new_panel() sur un pointeur WINDOW. Le nouveau panel prend le haut de la pile. La fenêtre qui constitue le panel est accessible via la fonction panel_window() appelée avec le pointeur panel en argument.

La fonction del_panel() permet de supprimer un panel de la pile, sans désalouer la fenêtre associée.

Gestion des fenêtres

On peut remplacer la fenêtre d'un panel par une autre, éventuellement d'une taille différente, grâce à la fonction replace_panel(). Cette opération ne change pas la position du panel dans la pile.

La fonction move_panel() permet de déplacer un panel. La taille, le contenu, la position dans la pile restent identiques.

Déplacer un panel tout en haut ou tout en bas de la pile se fait respectivement avec les fonctions top_panel() et bottom_panel(). Ces deux opérations ne modifient ni la taille, ni la position, ni le contenu du panel.

Affichage

La fonction update_panels() effectue tous les appels à wnoutrefresh() nécessaires. Elle n'appelle pas doupdate(), qu'il faut lancer manuellement.

Il faut éviter d'utiliser wnoutrefresh() et wrefresh() avec les panels. Elles ne fonctionnent que si le panel de la fenêtre est au-dessus de la pile ou non masquée par d'autres panels.

La fenêtre stdscr est considérée comme étant au-dessous de tous les panels. Même lorsque seule stdscr a été modifiée, il faut appeler update_panels() et doupdate(), car des modifications sur les panels peuvent masquer des parties de stdscr.

La fonction wgetch() appelant automatiquement wrefresh(), il est nécessaire de s'assurer qu'aucun panel ne masque la fenêtre effectuant la lecture.

Il n'y a actuellement aucun moyen d'afficher les changements apportés dans un panel masqué sans réafficher toute la pile.

Il est possible de supprimer temporairement de la pile un panel, via la fonction hide_panel(), et de la fairre réapparaître par show_panel(). On teste l'état d'un panel à l'aide de panel_hidden(). Les panels cachés sont ignorés par la fonction panel_update(), mais les autres opérations s'appliquent..

Gestion de la pile

Il est possible de naviguer dans la pile à l'aide des fonctions panel_above() et panel_below().

Divers

Un pointeur utilisateur est associé à chaque panel. Il n'est pas utilisé par la bibliothèque Panel, et on peut lui attacher des données. Voir les pages de manuel des fonctions set_panel_userptr() et panel_userptr() pour plus de détails.

Fonctions

  • PANEL *new_panel(WINDOW *fenetre) : crée un nouveau panel à partir de la fenêtre.
  • WINDOW *panel_window(const PANEL *panel) : permet de récupérer la fenêtre constituant le panel.
  • int del_panel(PANEL *panel) : supprime le panel de la pile.
  • int replace_panel(PANEL *panel, WINDOW *fenetre) : remplace la fenêtre constituant le panel par celle passée en argument.
  • int move_panel(PANEL *panel, int starty, int startx) : déplace un panel de manière à ce que son coin supérieur gauche soit aux coordonnées (starty,startx).
  • int top_panel(PANEL *panel) : déplace un panel tout en haut de la pile.
  • int bottom_panel(PANEL *panel) : déplace un panel tout en bas de la pile.
  • int hide_panel(PANEL *panel) : retire un panel de la pile, sans le supprimer.
  • int show_panel(PANEL *panel) : fait réapparaître un panel masqué au-dessus de la pile. Identique à top_panel() dans ncurses.
  • int panel_hidden(const PANEL *panel) : teste si un panel est caché (dans la pile ou pas). Valeurs de retour ?
  • PANEL *panel_above(const PANEL *panel) : retourne le panel au-dessus de "panel" dans la pile. Si "panel" est nul, retourne le panel le plus bas.
  • PANEL *panel_below(const PANEL *panel) : retourne le panel en-dessous de "panel" dans la pile. Si "panel" est NULL, retourne le panel le plus haut.