Comment afficher / masquer des objets ?

From The Document Foundation Wiki
< Macros‎ | Draw
Jump to: navigation, search
This page is a translated version of the page Macros/Draw/001 and the translation is 100% complete.

Other languages:
English • ‎français

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.

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.

Code

En LibreOffice Basic:

Option Explicit

Sub toggle_layer_visibility (oEvent)
    
    Dim oLayerManager As Object
    
    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

Document exemple

Notes