Manipola le proprietà degli oggetti per livello

    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:

    Descrizione

    Contesto

    Vogliamo essere in grado di mostrare o nascondere gli oggetti facendo clic su un pulsante.

    La schermata seguente mostra un esempio in cui facendo clic sui pulsanti "Quadrati" o "Cerchi" vengono visualizzati o nascosti i rispettivi oggetti.

    Mostra/nascondi livelli tramite i pulsanti.

    Realizzazione

    LibreOffice Draw consente la definizione di livelli in una determinata pagina di disegno. L'uso dei livelli ci consente di accedere a oggetti esclusivi di un determinato livello. Pensate ai livelli come diverse aree di lavoro disponibili che potete gestire individualmente, come la loro visibilità o se devono essere bloccati od omessi durante la stampa, ecc. Per impostazione predefinita, Draw propone tre livelli (che possono essere visualizzati nella barra degli strumenti inferiore dell'interfaccia ):

    • Disposizione
    • Controlli
    • Linee di quotatura

    Creeremo altri due livelli manualmente per poter gestire gli oggetti per livello:

    • I quadrati verranno creati nel livello chiamato Quadrati.
    • I cerchi verranno creati nel livello chiamato Cerchi.

    Ogni livello ha una proprietà booleana chiamata IsVisible. La macro seguente alterna questa proprietà tra True e False.

    Una macro univoca viene attivata dall'evento Esegui azione per ciascun pulsante. La variabile oEvent viene passata come argomento alla macro che viene eseguita quando si fa clic sul pulsante. Questo può essere impostato creando un Push Button e fate clic con il pulsante destro del mouse e selezionate Control Properties, e infine in Events è possibile selezionare una macro per l'elemento Execute action.

    Da questo possiamo tracciare la proprietà Label del pulsante e trovare un ciclo attraverso il livello per vedere se troviamo un oggetto con lo stesso nome. Un'altra opzione è usare la proprietà Tag per memorizzare il nome del livello in questione.

    Il codice prevede anche un possibile errore verificando che il documento abbia realmente un layer con quel nome, indagando sulla proprietà hasByName.

    Codice

    In LibreOffice Basic:

    Option Explicit
    
    Sub toggle_layer_visibility (oEvent)
        '''Attivato dall'evento cliccato sul pulsante, alterna la visibilità del livello indicato dal pulsante'''
    
        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 "Non esiste alcun livello chiamato " & _
            CHR$(34) & oEvent.source.model.Label & CHR$(34), _
            48, "toggle_layer_visibility()"
        End If
        
    End Sub ' toggle_layer_visibility

    Esempio di file ODG

    Note