Inhoud

# Service SFWidgets.PopupMenu

De service PopupMenu kan worden gebruikt om pop-upmenu's te maken die aan gebeurtenissen kunnen worden gekoppeld of door scripts kunnen worden uitgevoerd. Deze service biedt de volgende mogelijkheden:

- Het maken van pop-upmenu's met aangepaste items, selectievakjes en keuzerondjes.

- Decoratie van menu-items met pictogrammen en helptips.

## Service aanroep

Voordat de service PopupMenu 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

De service PopupMenu kan op meerdere manieren worden geïnstantieerd. In het onderstaande voorbeeld wordt een pop-upmenu gemaakt zonder het te associëren met een muis- of toepassingsgebeurtenis.

        Sub ShowPopup
            GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
            Dim myPopup As Object
            Set myPopup = CreateScriptService("SFWidgets.PopupMenu", , 300, 300)
            myPopup.AddItem("Item ~A")
            myPopup.AddItem("Item ~B")
            vResponse = myPopup.Execute()
            MsgBox("Geselecteerd item-ID: " & vResponse)
            myPopup.Dispose()
        End Sub

Als u de hierboven gedefinieerde Sub uitvoert, wordt een pop-upmenu gemaakt met twee items op de positie X=300 en Y=300 op het scherm.

Het voorvoegsel SFWidgets kan worden onderdrukt terwijl de service PopupMenu wordt aangeroepen.

Het volgende voorbeeld definieert een Sub die kan worden gekoppeld aan een muisgebeurtenis:

        Sub MyPopupClick(Optional poMouseEvent as Object)
            Dim myPopup As Object
            Set myPopup = CreateScriptService("PopupMenu", poMouseEvent)
            ' Pop-upmenu vullen met items
            Dim vResponse As Variant
            vResponse = myPopup.Execute(False)
            ' Doe iets op basis van vResponse
            ' ...
            myPopup.Dispose()
        End Sub

Gebruik de methode Dispose om bronnen vrij te maken na het uitvoeren van het pop-upmenu.

Het is ook mogelijk om een pop-upmenu te associëren met gebeurtenissen die worden geactiveerd door LibreOffice-toepassingen, formulier- en dialoogvensterbesturingselementen. Gebeurtenissen zoals "Muisknop ingedrukt" en "Muisknop losgelaten" worden vaak geassocieerd met pop-upmenu's.

        Sub MyPopupClick(Optional poEvent as Object)
            Dim myPopup As Object
            Set myPopup = CreateScriptService("PopupMenu", poEvent)
            ' ...
        End Sub

##### In Python

Dezelfde voorbeelden in Python:

        from scriptforge import CreateScriptService

        def show_popup(args=None):
            my_popup = CreateScriptService("SFWidgets.PopupMenu", None, 300, 300)
            bas = CreateScriptService("Basic")
            my_popup.AddItem("Item ~A")
            my_popup.AddItem("Item ~B")
            response = my_popup.Execute()
            bas.MsgBox(f"Selected item ID: {response}")
            my_popup.Dispose()

        def my_popup_click(poEvent=None):
            my_popup = CreateScriptService("SFWidgets.PopupMenu", poEvent)
            # Pop-upmenu vullen met items
            response = my_popup.Execute()
            # Doe iets op basis van reactie
            my_popup.Dispose()

## 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 pop-upmenu 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 submenuteken > om de hierboven gedefinieerde menu-/submenuhiërarchie te creëren:

        myPopup.AddItem("Item A")
        myPopup.AddItem("Item B>Item B.1")
        myPopup.AddItem("Item B>Item B.2")
        myPopup.AddItem("---")
        myPopup.AddItem("Item C>Item C.1>Item C.1.1")
        myPopup.AddItem("Item C>Item C.1>Item C.1.2")
        myPopup.AddItem("Item C>Item C.2>Item C.2.1")
        myPopup.AddItem("Item C>Item C.2>Item C.2.2")
        myPopup.AddItem("Item C>Item C.2>---")
        myPopup.AddItem("Item C>Item C.2>Item C.2.3")
        myPopup.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 methodes 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.

## Methodes

Lijst met methodes in de service PopupMenu
AddCheckBox AddItem | AddRadioButton | Execute

## AddCheckBox

Voegt een selectievakje in het pop-upmenu in. Retourneert een geheel getal dat het ingevoegde item identificeert.

### Syntaxis:

svc.AddCheckBox(menuitem: str, opt name: str, opt status: bool = False, opt icon: str, opt tooltip: 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.

### Voorbeeld:

##### In BASIC

          myPopup.AddCheckBox("Option A", Status := True)

##### In Python

          my_popup.AddCheckBox("Option A", status=True)

## AddItem

Voegt een menu-item in het pop-upmenu in. Retourneert een geheel getal dat het ingevoegde item identificeert.

### Syntaxis:

svc.AddItem(menuitem: str, opt name: str, opt icon: str, opt tooltip: 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.

### Voorbeeld:

##### In BASIC

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

##### In Python

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

## AddRadioButton

Voegt een keuzerondje in het pop-upmenu in. Retourneert een geheel getal dat het ingevoegde item identificeert.

### Syntaxis:

svc.AddRadioButton(menuitem: str, opt name: str, opt status: bool = False, opt icon: str, opt tooltip: 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.

### Voorbeeld:

##### In BASIC

          myPopup.AddRadioButton("Option A", Name := "A", Status := True)

##### In Python

          my_popup.AddRadioButton("Option A", name="A", status=True)

## Execute

Toont het pop-upmenu en wacht op een actie van de gebruiker. Retourneert het item waarop de gebruiker heeft geklikt.

Als de gebruiker buiten het pop-upmenu klikt of op de toets Esc drukt, wordt er geen item geselecteerd. In dergelijke gevallen is de geretourneerde waarde afhankelijk van de parameter returnid. Als returnid = True en er is geen item geselecteerd, dan wordt de waarde 0 (nul) geretourneerd. Anders wordt een lege tekenreeks "" geretourneerd.

### Syntaxis:

svc.Execute(opt returnid: bool = True): any

### Parameters:

returnid: Indien True wordt de geselecteerde item-ID geretourneerd. Als False retourneert de methode de naam van het item (standaard = True).

### Voorbeeld:

In de onderstaande voorbeelden wordt een pop-upmenu gemaakt en wordt de naam van het item geretourneerd omdat het argument returnid is ingesteld op False.

##### In BASIC

          myPopup.AddItem("Item A", Name := "A")
          myPopup.AddItem("Item B", Name := "B")
          Dim vResponse as Variant
          vResponse = myPopup.Execute(False)

##### In Python

          my_popup.AddItem("Item A", name="A")
          my_popup.AddItem("Item B", name="B")
          response = my_popup.Execute(False)

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

SFDialogs.Dialog-service

service SFDialogs.DialogControl

SFWidgets.Menu-service