Vous êtes à peu près ici : Accueil  »   tutoriel PyGTK  »   PyGTK : sommaire

Chapitre 13. Le widget TextView

Sommaire

13.1. Présentation des widgets de texte
13.2. TextView : la zone de texte
13.3. TextBuffer : le buffer de texte
13.3.1. Récupérer des informations sur le buffer
13.3.2. Créer des TextIter
13.3.3. Insérer, récupérer et supprimer du texte
13.3.4. Créer et manipuler des TextMark
13.3.5. Créer et appliquer des TextTag
13.3.6. Insérer des images et des widgets
13.4. TextIter : les itérateurs de texte
13.4.1. Récupérer les attributs d'un TextIter
13.4.2. Récupérer les attributs d'un texte portant un TextIter
13.4.3. Copier un TextIter
13.4.4. Récupérer du texte et des objets
13.4.5. Vérifier les balises à une position de TextIter
13.4.6. Vérifier la position dans le texte
13.4.7. Se déplacer dans le texte
13.4.8. Se déplacer à un emplacement spécifique
13.4.9. Rechercher du texte
13.5. TextMark : les marques de texte
13.6. TextTag et TextTagTable : les balises de texte
13.6.1. Les TextTag
13.6.2. La TextTagTable
13.7. Un exemple de TextView

13.1. Présentation des widgets de texte

Le widget TextView (zone de texte) ainsi que les objets qui lui sont asociés (TextBuffer, TextMark, TextIter, TextTag et TextTagTable) offrent une structure puissante d'édition de texte multiligne.

Un TextBuffer (buffer de texte) contient le texte qui est affiché par un ou plusieurs widgets TextView. Avec GTK+ 2.0 le texte est encodé en UTF-8, ce qui signifie qu'un caractère peut être encodé avec plusieurs octets. Dans un TextBuffer on doit bien faire la distinction entre le décompte des caractères (appelé offset) et le décompte des octets (appelé index).

Les TextIter (itérateurs de texte) permettent une représentation volatile d'une position dans un TextBuffer, située entre deux caractères. Les TextIter ne sont valables que tant que le nombre de caractères dans le TextBuffer est inchangé. Chaque fois que l'on insère ou efface des caractères dans un TextBuffer tous les TextIter sont invalidés. Les TextIter sont le moyen le plus utilisé de spécifier des positions dans un TextBuffer afin d'y manipuler du texte.

Les TextMark (marques de texte) permettent de marquer des positions qui ne seront pas affectées par les modifications du TextBuffer. Une marque est comme un TextIter (elle représente une position entre deux caractères d'un TextBuffer) à la différence que si l'on efface le texte qui l'entoure elle reste à l'endroit où était le texte effacé. Si l'on insère du texte à la position indiquée par cette marque, celle-ci se retrouvera soit à gauche, soit à droite du texte inséré, en fonction de la gravité de la marque — la marque restera à droite du texte inséré dans le cas d'une gravité à droite, et à gauche dans le cas d'une gravité à gauche. On peut choisir de donner un nom à une TextMark, ou bien la laisser anonyme. Chaque TextBuffer comporte deux TextMark prédéfinies, nommées insert et selection_bound, faisant référence aux positions respectives du point d'insertion et de la fin de la sélection (la sélection est comprise entre les marques insert et selection_bound).

Les objets TextTag (balises de texte) spécifient un ensemble d'attributs pouvant être appliqués à une portion de texte d'un TextBuffer. Chaque TextBuffer a une TextTagTable (table des balises de texte) qui recense les balises disponibles dans ce buffer. Plusieurs TextBuffer peuvent se partager la même TextTagTable pour offrir une meilleure cohérence. On utilise souvent les TextTag pour modifier l'apparence d'une portion de texte mais elles peuvent tout aussi bien servir à empêcher l'édition de cette même portion de texte.