Inhoud

# SFWidgets.Menu-service

De service Menu kan worden gebruikt om menu's te maken en te verwijderen uit de menubalk van een LibreOffice-documentvenster. Elk menu-item kan worden gekoppeld aan een script of aan een UNO-opdracht. Deze service biedt de volgende mogelijkheden:

- Het maken van menu's met aangepaste items, selectievakjes, keuzerondjes en scheidingstekens.

- Decoratie van menu-items met pictogrammen en helptips.

Menu's die met deze service zijn gemaakt, zijn alleen beschikbaar voor een bepaald documentvenster. Ze worden niet opgeslagen in het document of als applicatie-instellingen. Als u het document sluit en opent, worden de standaard menubalkinstellingen hersteld.

Wanneer OLE-objecten zoals wiskundige formules of Calc-diagrammen worden bewerkt vanuit een document, configureert LibreOffice de menubalk opnieuw volgens het object. Wanneer dit gebeurt, worden de menu's die zijn gemaakt met de service Menu verwijderd en niet hersteld na het bewerken van het OLE-object.

## Service aanroep

Voordat de service Menu gebruikt kan worden, moet de bibliotheek ScriptForge eerst worden geladen of geïmporteerd:

• Basic macro's kunnen de bibliotheek ScriptForge laden met de instructie:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
• Python scripts kunnen de module scriptforge importeren met:
from scriptforge import CreateScriptService

##### In BASIC

Een instantie van de service Menu wordt aangemaakt met het aanroepen van de methode CreateMenu van de service Document. In onderstaand stukje code wordt een menu My Menu in het huidige document aangemaakt met twee menu-regels Item A en Item B.

        Sub CreateMenu()
            GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
            Dim oDoc as Object, oMenu as Object
            Set oDoc = CreateScriptService("Document")
            Set oMenu = oDoc.CreateMenu("MijnMenu")
            With oMenu
                .AddItem("Item A", Command := "About")
                .AddItem("Item B", Script := "vnd.sun.star.script:Standard.Module1.ItemB_Listener?language=Basic&location=application")
                .Dispose()
            End With
        End Sub

Nadat u het menu hebt gemaakt, wordt aanbevolen om de methode Dispose aan te roepen om de bronnen vrij te maken die worden gebruikt door de service-instantie Menu.

In het bovenstaande voorbeeld is Item A gekoppeld aan het UNO-commando .uno:About terwijl Item B is gekoppeld aan het script ItemB_Listener gedefinieerd in Module1 van de Standard-bibliotheek van de container Mijn macro's.

Het volgende voorbeeld definieert ItemB_Listener dat wordt aangeroepen wanneer op Item B wordt geklikt. Deze listener splitst eenvoudig de argumentreeks die aan de Sub is doorgegeven en toont deze in een berichtvenster.

        Sub ItemB_Listener(args As String)
            ' Verwerk de argumentreeks die aan de luisteraar is doorgegeven
            Dim sArgs as Object
            sArgs = Split(args, ",")
            MsgBox "Menunaam: "   & sArgs(0) & Chr(13) & _
                   "Menu-item: "   & sArgs(1) & Chr(13) & _
                   "Item-ID: "     & sArgs(2) & Chr(13) & _
                   "Itemstatus: " & sArgs(3)
        End Sub

Zoals in het bovenstaande voorbeeld wordt getoond, ontvangen menu-items die aan een script zijn gekoppeld een door komma's gescheiden tekenreeksargument met de volgende waarden:

- De naam op het hoogste niveau van het menu.

- De tekenreeks-ID van het geselecteerde menu-item.

- De numerieke ID van het geselecteerde menu-item.

- De huidige status van het menu-item. Dit is handig voor selectievakjes en keuzerondjes. Als het item is aangevinkt, wordt de waarde "1" geretourneerd, anders wordt "0" geretourneerd.

##### In Python

Dezelfde voorbeelden in Python:

        from scriptforge import CreateScriptService

        def create_menu(args=None):
            oDoc = CreateScriptService("Document")
            oMenu = oDoc.CreateMenu("My Menu")
            oMenu.AddItem("Item A", command="About")
            oMenu.AddItem("Item B", script="vnd.sun.star.script:my_macros.py$item_b_listener?language=Python&location=user")
            oMenu.Dispose()

        def item_b_listener(args):
            bas = CreateScriptService("Basic")
            s_args = args.split(",")
            msg = f"Menunaam: {s_args[0]}\n"
            msg += f"Menu-item: {s_args[1]}\n"
            msg += f"Item-ID: {s_args[2]}\n"
            msg += f"Itemstatus: {s_args[3]}"
            bas.MsgBox(msg)

## Eigenschappen

Name | AlleenLezen | Type | Beschrijving
--- | --- | --- | ---
ShortcutCharacter | Nee | String | Teken dat wordt gebruikt om de toegangssleutel van een menu-item te definiëren. Het standaardteken is "~".
SubmenuCharacter | Nee | String | Teken of tekenreeks die bepaalt hoe menu-items worden genest. Het standaardteken is ">".

## Menu en submenu's

Om een menu met submenu's te maken, gebruikt u het teken dat is gedefinieerd in de eigenschap SubmenuCharacter terwijl u het menu-item maakt om te bepalen waar het zal worden geplaatst. Beschouw bijvoorbeeld de volgende menu-/submenuhiërarchie.

        ' Item A
        ' Item B > Item B.1
        '          Item B.2
        ' ------ (line separator)
        ' Item C > Item C.1 > Item C.1.1
        '                     Item C.1.2
        ' Item C > Item C.2 > Item C.2.1
        '                     Item C.2.2
        '                     ------ (line separator)
        '                     Item C.2.3
        '                     Item C.2.4

De onderstaande code gebruikt het standaard submenu-teken ">" om de hierboven gedefinieerde menu-/submenuhiërarchie te creëren:

        oMenu.AddItem("Item A")
        oMenu.AddItem("Item B>Item B.1")
        oMenu.AddItem("Item B>Item B.2")
        oMenu.AddItem("---")
        oMenu.AddItem("Item C>Item C.1>Item C.1.1")
        oMenu.AddItem("Item C>Item C.1>Item C.1.2")
        oMenu.AddItem("Item C>Item C.2>Item C.2.1")
        oMenu.AddItem("Item C>Item C.2>Item C.2.2")
        oMenu.AddItem("Item C>Item C.2>---")
        oMenu.AddItem("Item C>Item C.2>Item C.2.3")
        oMenu.AddItem("Item C>Item C.2>Item C.2.4")

De tekenreeks --- wordt gebruikt om scheidingslijnen te definiëren in menu's of submenu's.

### Pictogrammen gebruiken

Items in het menu kunnen pictogrammen hebben, die als argumenten worden opgegeven in de methoden AddCheckBox, AddItem en AddRadioButton.

Alle pictogrammen die beschikbaar zijn in LibreOffice kunnen worden gebruikt door hun pad op te geven ten opzichte van de map waarin de pictogrambestanden zich in de installatiemap bevinden. Pictogrammen bevinden zich in de volgende map:

INSTALLDIR/share/config

Gebruik de eigenschap InstallFolder van de service FileSystem om te bepalen waar LibreOffice op uw systeem is geïnstalleerd.

Deze map bevat een reeks ZIP-bestanden met de afbeeldingsbestanden van elke beschikbare pictogrammenset. De afbeeldingen in deze ZIP-bestanden zijn georganiseerd in mappen. Om een pictogram te gebruiken, specificeert u het pictogrambestand met het pad naar de locatie in het ZIP-bestand.

In het onderstaande voorbeeld wordt het pictogram "sc_newdoc.svg" gebruikt dat zich in de map "cmd" bevindt. De schuine streep "/" wordt gebruikt als padscheiding, ongeacht het besturingssysteem.

##### In BASIC

          myMenu.AddItem("Item A", Icon := "cmd/sc_newdoc.svg")

##### In Python

          myMenu.AddItem("Item A", icon="cmd/sc_newdoc.svg")

Alle pictogrammensets hebben dezelfde interne structuur. Het daadwerkelijk weergegeven pictogram is afhankelijk van de pictogrammenset die momenteel wordt gebruikt.

## Methoden

Lijst met methoden in de menuservice
AddCheckBox | AddItem | AddRadioButton

## AddCheckBox

Voegt een selectievakje in het menu in. Retourneert een geheel getal dat het ingevoegde item identificeert.

### Syntaxis:

svc.AddCheckBox(menuitem: str, opt name: str, opt status: bool, opt icon: str, opt tooltip: str, opt command: str, opt script: str): int

### Parameters:

menuitem: Definieert de tekst die in het menu moet worden weergegeven. Dit argument definieert ook de hiërarchie van het item in het menu met behulp van het submenuteken.

name: Tekenreekswaarde die wordt gebruikt om het menu-item te identificeren. Standaard wordt het laatste onderdeel van de menuhiërarchie gebruikt.

status: Definieert of het item is geselecteerd wanneer het menu wordt gemaakt (standaard = False).

icon: Pad en naam van het pictogram dat moet worden weergegeven zonder het voorlooppadscheidingsteken. Het getoonde pictogram hangt af van de pictogrammenset die wordt gebruikt.

tooltip: Tekst die moet worden weergegeven als helptip.

command: De naam van een UNO-opdracht zonder het voorvoegsel .uno:. Als de opdrachtnaam niet bestaat, gebeurt er niets.

script: De URI voor een Basic- of Python-script dat wordt uitgevoerd wanneer op het item wordt geklikt.

De argumenten command en script sluiten elkaar uit, dus er kan er maar één voor elk menu-item worden ingesteld.

Raadpleeg Scripting Framework URI-specificatie voor meer informatie over de URI-syntaxis die wordt gebruikt in het argument script.

### Voorbeeld:

##### In BASIC

          'Menu-item geassocieerd met de opdracht .uno:Paste
          oMenu.AddCheckBox("Item A", Status := True, ToolTip := "Paste values", Command := "Paste")
          ' Voert het basisscript Standard.Module1.MyListener uit dat in het document is opgeslagen
          oMenu.AddCheckBox("Item B", Status := False, Script := "vnd.sun.star.script:Standard.Module1.MyListener?language=Basic&location=document")
          ' Voert het Python-script MyListener uit dat zich bevindt in het bestand myScripts.py in de map met gebruikersscripts
          oMenu.AddCheckBox("Item C", Status := True, Script := "vnd.sun.star.script:myScripts.py$MyListener?language=Python&location=user")

##### In Python

          oMenu.AddCheckBox("Item A", status=True, tooltip="Paste values", command="Paste")
          oMenu.AddCheckBox("Item B", status=False, script="vnd.sun.star.script:Standard.Module1.MyListener?language=Basic&location=document")
          oMenu.AddCheckBox("Item C", Status=True, Script="vnd.sun.star.script:myScripts.py$MyListener?language=Python&location=user")

## AddItem

Voegt een labelitem in het menu in. Retourneert een geheel getal dat het ingevoegde item identificeert.

### Syntaxis:

svc.AddItem(menuitem: str, opt name: str, opt icon: str, opt tooltip: str, opt command: str, opt script: str): int

### Parameters:

menuitem: Definieert de tekst die in het menu moet worden weergegeven. Dit argument definieert ook de hiërarchie van het item in het menu met behulp van het submenuteken.

name: Tekenreeks die moet worden geretourneerd wanneer op het item wordt geklikt. Standaard wordt het laatste onderdeel van de menuhiërarchie gebruikt.

icon: Pad en naam van het pictogram dat moet worden weergegeven zonder het voorlooppadscheidingsteken. Het getoonde pictogram hangt af van de pictogrammenset die wordt gebruikt.

tooltip: Tekst die moet worden weergegeven als helptip.

command: De naam van een UNO-opdracht zonder het voorvoegsel .uno:. Als de opdrachtnaam niet bestaat, gebeurt er niets.

script: De URI voor een Basic- of Python-script dat wordt uitgevoerd wanneer op het item wordt geklikt.

De argumenten command en script sluiten elkaar uit, dus er kan er maar één voor elk menu-item worden ingesteld.

Raadpleeg Scripting Framework URI-specificatie voor meer informatie over de URI-syntaxis die wordt gebruikt in het argument script.

### Voorbeeld:

##### In BASIC

          oMenu.AddItem("Item A", Tooltip := "Een beschrijvend bericht")

##### In Python

          oMenu.AddItem("Item A", tooltip = "Een beschrijvend bericht")

## AddRadioButton

Voegt een keuzerondje in het menu in. Retourneert een geheel getal dat het ingevoegde item identificeert.

### Syntaxis:

svc.AddRadioButton(menuitem: str, opt name: str, opt status: str, opt icon: str, opt tooltip: str, opt command: str, opt script: str): int

### Parameters:

menuitem: Definieert de tekst die in het menu moet worden weergegeven. Dit argument definieert ook de hiërarchie van het item in het menu met behulp van het submenuteken.

name: Tekenreeks die moet worden geretourneerd wanneer op het item wordt geklikt. Standaard wordt het laatste onderdeel van de menuhiërarchie gebruikt.

status: Definieert of het item is geselecteerd wanneer het menu wordt gemaakt (standaard = False).

icon: Pad en naam van het pictogram dat moet worden weergegeven zonder het voorlooppadscheidingsteken. Het getoonde pictogram hangt af van de pictogrammenset die wordt gebruikt.

tooltip:Tekst die moet worden weergegeven als helptip.

command: De naam van een UNO-opdracht zonder het voorvoegsel .uno:. Als de opdrachtnaam niet bestaat, gebeurt er niets.

script: De URI voor een Basic- of Python-script dat wordt uitgevoerd wanneer op het item wordt geklikt.

De argumenten command en script sluiten elkaar uit, dus er kan er maar één voor elk menu-item worden ingesteld.

Raadpleeg Scripting Framework URI-specificatie voor meer informatie over de URI-syntaxis die wordt gebruikt in het argument script.

### Voorbeeld:

##### In BASIC

          oMenu.AddRadioButton("Item A", Name := "A", Status := True)

##### In Python

          oMenu.AddRadioButton("Item A", name="A", status=True)

Alle ScriptForge Basic-routines of variabelen die beginnen met een underscore "_" zijn voor intern gebruik. Gebruik deze niet in een Basic of Python-macro.

Verwante onderwerpen

Service SFWidgets.PopupMenu

SFDocuments.Document-service