Comment afficher / masquer des objets ?
TDF LibreOffice Document Liberation Project Blogs communautaires Weblate Nextcloud Redmine Ask LibreOffice Donner
Description
Contexte
On souhaite pouvoir afficher ou masquer des objets par un clic de bouton de commande.
La copie d'écran ci-dessous montre un exemple simple dans lequel cliquer sur les boutons "Carrés" et "Cercles" affiche ou masque respectivement les carrés ou les cercles bleus.
Réalisation
LibreOffice Draw permet de définir des couches dans les dessins. Les couches permettent de rassembler sur une page des éléments qui sont liés. Considérez les couches comme différents espaces de travail que vous pouvez masquer à l'écran, masquer à l'impression ou verrouiller. Par défaut, LibreOffice Draw propose trois couches :
- Mise en page
- Contrôles
- Lignes de cote
Nous utiliserons la possibilité de créer des couches supplémentaires pour regrouper les éléments à afficher ou masquer :
- Les carrés seront dessinés sur une couche nommée Carrés.
- Les cercles seront dessinés sur une couche nommée Cercles.
Les couches disposent d'une propriété IsVisible, de type booléen (vrai / faux). Le programme suivant "alterne" la valeur de cette propriété : Vrai devient Faux et vice-versa.
Une procédure unique est affectée à l'événement Éxécuter l'action de chaque bouton. La variable LibOEvent est passée lors du clic sur le bouton et de l'appel de la procédure.
Partant de cet objet nous pouvons "remonter" à la propriété Étiquette (Label) du bouton et nous recherchons dans les couches celle portant le même nom. Une autre possibilité serait d'utiliser la propriété Complément d'information (Tag) pour y stocker le nom de la couche concernée.
On prévient une éventuelle erreur en vérifiant que le document comprend bien une couche de ce nom via la méthode hasByName.
Code
En LibreOffice Basic:
Option Explicit
Sub toggle_layer_visibility (oEvent)
'''Déclenché par un événement cliqué sur un bouton, permet de basculer la visibilité de la couche indiquée par le bouton'''
Dim oLayerManager As Object ' com.sun.star.drawing.LayerManager
oLayerManager = ThisComponent.LayerManager
If oLayerManager.hasByName(oEvent.source.model.Label) Then
oLayerManager.getByName(oEvent.source.model.Label).IsVisible = _
Not( oLayerManager.getByName(oEvent.source.model.Label).IsVisible )
Else
MsgBox "Pas de couche " & _
CHR$(34) & oEvent.source.model.Label & CHR$(34), _
48, "toggle_layer_visibility()"
End If
End Sub ' toggle_layer_visibility