Comment afficher / masquer des objets ?

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


    Other languages:

    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)
        '''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

    Document exemple

    Notes