Macros

From The Document Foundation Wiki
< Macros‎ | Draw
Jump to: navigation, search

Comment afficher / masquer des objets ?

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.

copie d'écran dessin avec boutons de commande
Afficher/Masquer les couches via les boutons


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.

Sub LibOCouche(LibOEvent)

dim LibOGestCouches as object

LibOGestCouches  = thiscomponent.LayerManager

if LibOGestCouches.hasByName(LibOEvent.source.model.Label) then
        LibOGestCouches.getByName(LibOEvent.source.model.Label).IsVisible =_
        not(LibOGestCouches.getByName(LibOEvent.source.model.Label).IsVisible)
else
        msgbox "Pas de couche " & LibOEvent.source.model.Label
end if

End Sub