Indhold
Indholdsfortegnelse 🔎︎

# Tjenesten SFWidgets.PopupMenu

Tjenesten PopupMenu kan bruges til at oprette popup-menuer, der kan knyttes til hændelser eller udføres af scripts. Denne tjeneste giver disse muligheder:

- Oprettelse af popup-menuer med tilpassede, afkrydsningsfelter og alternativknapper.

- Udsmykning af menuelementer med ikoner og værktøjstips.

## Kald af tjeneste

Før brug af tjenesten PopupMenu skal biblioteket ScriptForge være indlæst eller importeret:

• Basic macros require to load ScriptForge library using the following statement:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
• Python scripts require an import from scriptforge module:
from scriptforge import CreateScriptService

##### I Basic

Tjenesten PopupMenu kan instantieres på flere måder. Eksemplet herunder opretter en popup-menu uden at knytte den til en mus eller en program-hændelse.

        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("Valgt element-ID: " & vResponse)
            myPopup.Dispose()
        End Sub

Kørsel af Sub (delprogrammet), der er defineret herover, opretter en poppu-menu med to elementer på positionen x=300 og y=300 på skærmen.

Forstavelsen SFWidgets kan undertrykkes under kaldet af tjenesten PopupMenu.

Følgende eksempel definerer et Sub (delprogram), der kan knyttes til en musehændelse.

        Sub MyPopupClick(Optional poMouseEvent as Object)
            Dim myPopup As Object
            Set myPopup = CreateScriptService("PopupMenu", poMouseEvent)
            ' Udfyld popup-menuen med elementer
            Dim vResponse As Variant
            vResponse = myPopup.Execute(False)
            ' Gør noget baseret på vResponse
            ' ...
            myPopup.Dispose()
        End Sub

Brug metoden Dispose (bortskaf) for at frigøre ressourcer, efter at popup-menuen er udført.

Det er også muligt at knytte en popup-menu til hændelser, udløst af LibreOffice-programmer, formularer og dialogkontroller. Hændelser som for eksempel "Museknap trykket" og "Museknap sluppet" knyttes almindeligvis til popup-menuer.

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

##### I Python

Eksemplerne herover kan skrives i Python som følger:

        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)
            # Udfyld popup-menuen med elementer
            response = my_popup.Execute()
            # Gør noget baseret på svar
            my_popup.Dispose()

## Egenskaber

Navn | Skrivebeskyttet | Type | Beskrivelse
--- | --- | --- | ---
ShortcutCharacter | No | String | Tegn, der bruges til at definere adgangsnøglen til et menuelement. Standardtegnet er "~".
SubmenuCharacter | Nej | String | Tegn eller streng, der definerer, hvordan menuelementer indlejres. Standardtegnet er ">".

## Menuer og undermenuer

For at oprette en popup-menu med undermenuer bruger du det tegn, der er defineret i egenskaben SubmenuCharacter (undermenu-tegn), under oprettelsen af menu-elementet for at definere, hvor det skal placeres. Overvej for eksempel det følgende menu/undermenu-hierarki.

        ' 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

Koden herunder bruger standardtegnet til undermenuer ">" til at oprette det menu/undermenu-hierarki, der er defineret ovenfor.

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

Strengen "---" bruges til at definere linjeskift i menuer eller undermenuer.

## Brug af ikoner

Elementer i menuen kan have ikoner, som er angivet som argumenter i metoderne AddCheckBox, AddItem og AddRadioButton.

Alle tilgængelige koder i LibreOffice kan bruges ved at angive deres sti i forhold til den mappe, hvor ikonfilerne er placeret installationsmappen. Ikoner er placeret i denne mappe:

INSTALLDIR/share/config

Brug egenskaben InstallFolder (installer_mappe) i tjenesten FileSystem til at bestemme, hvor LibreOffice er installeret på dit system.

Denne mappe indeholder en serie ZIP-filer, der indeholder hvert tilgængeligt ikonsæts billedfiler. Billederne i disse ZIP-filer er organiseret i mapper. For at bruge et ikon angiver du ikonfilen med stien til dens placering inde i ZIP-filen.

Eksemplet herunder bruger ikonet "sc_newdoc.svg", der er placeret inde i mappen "cmd". Tegnet Skråstreg "/" bruges som sti-skilletegn uanset operativsystemet.

##### I Basic

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

##### I Python

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

Alle ikonsæt har den samme interne struktur. Det faktisk viste ikon afhænger af det ikonsæt, der aktuelt er brug.

## Metoder

Liste over metoder i tjenesten PopupMenu
AddCheckBox AddItem | AddRadioButton | Execute

## AddCheckBox

Indsætter et afkrydsningsfelt i popup-menuen. Returnerer en heltalsværdi, der identificerer det indsatte element.

### Syntaks:

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

### Parametre:

menuitem (menuelement): Definerer teksten, der skal vises i menuen. Dette argument definerer også elementets plads i menuhierarkiet ved hjælp af undermenu-tegnet.

navn: Strengværdi, der skal returneres, når der klikkes på elementet. Som standard bruges det sidste element i menuhierarkiet.

status: Definerer, om elementet er valgt, når menuen oprettes (Standard = False - falsk).

ikon: Sti til og navn på ikonet, der skal vises, uden det indledende stiskilletegn. Det faktisk viste ikon afhænger af det anvendte ikonsæt.

værktøjstip: Tekst, der skal vises som værktøjstip.

### Eksempel:

##### I Basic

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

##### I Python

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

## AddItem

Indsætter et menuelement i popupmenuen. Returnerer en heltalsværdi, der identificerer det indsatte element.

### Syntaks:

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

### Parametre:

menuitem (menuelement): Definerer teksten, der skal vises i menuen. Dette argument definerer også elementets plads i menuhierarkiet ved hjælp af undermenu-tegnet.

navn: Strengværdi, der skal returneres, når der klikkes på elementet. Som standard bruges det sidste element i menuhierarkiet.

ikon: Sti til og navn på ikonet, der skal vises, uden det indledende stiskilletegn. Det faktisk viste ikon afhænger af det anvendte ikonsæt.

værktøjstip: Tekst, der skal vises som værktøjstip.

### Eksempel:

##### I Basic

          myPopup.AddItem("Element A", Tooltip := "En beskrivende besked")

##### I Python

          my_popup.AddItem("Item A", tooltip = "En beskrivende meddelelse")

## AddRadioButton

Indsætter et alternativknap-element i popup-menuen. Returnerer en heltalsværdi, der identificerer indsatte element.

### Syntaks:

svc.AddRadioButton(menuitem: str, opt name: str, opt status: bool = False, opt icon: str, opt tooltip: str): int

### Parametre:

menuitem (menuelement): Definerer teksten, der skal vises i menuen. Dette argument definerer også elementets plads i menuhierarkiet ved hjælp af undermenu-tegnet.

navn: Strengværdi, der skal returneres, når der klikkes på elementet. Som standard bruges det sidste element i menuhierarkiet.

status: Definerer, om elementet er valgt, når menuen oprettes (Standard = False - falsk).

ikon: Sti til og navn på ikonet, der skal vises, uden det indledende stiskilletegn. Det faktisk viste ikon afhænger af det anvendte ikonsæt.

værktøjstip: Tekst, der skal vises som værktøjstip.

### Eksempel:

##### I Basic

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

##### I Python

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

## Execute

Viser popup-menuen og venter på en brugerhandling. Returnerer det element, brugeren klikkede på.

Hvis brugeren klikker uden for popup-menuen eller trykker på Esc-tasten, vælges der intet element. I disse tilfælde afhænger den returnerede af parameteren returnid. Hvis returnid = True (retur_id = Sand) og der ikke er valgt et element, returneres værdien 0 (nul). Ellers returneres en tom streng "".

### Syntaks:

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

### Parametre:

returnid: Hvis True (sand) returneres det valgte ID. Hvis metoden returnerer False (falsk), returnerer metoden elementets navn (Standard = True - sand).

### Eksempel:

I eksemplet herunder oprettes en popup-menu og elementets navn returneres, fordi argumentet returnid er sat til False (falsk).

##### I Basic

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

##### I Python

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

Alle ScriptForge Basic-rutiner eller identifikatorer, der er indledet med et understreget tegn "_" er reserveret til internt brug. Det er ikke meningen, at de skal bruges i Basic-makroer eller Python-scripts.

Relaterede emner

SFDialogs. Dialog

Tjenesten SFDialogs.DialogControl

Tjenesten SFWidgets.Menu