Manipola le proprietà degli oggetti per livello

From The Document Foundation Wiki
< Macros‎ | Draw
Jump to navigation Jump to search
This page is a translated version of the page Macros/Draw/001 and the translation is 100% complete.
Other languages:
English • ‎français • ‎italiano

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