Innhald
Innhaldsliste 🔎︎

# SFWidgets.PopupMenu service

Tenesta PopupMenu kan brukast til å laga sprettoppmenyar som kan knyttast til hendingar eller køyrast av skript. Denne tenesta inneheld desse funksjonane:

- Lagar ein sprettoppmeny med tilpassa innføringar, avkryssingsfelt og radioknappar.

- Dekorasjon av menyelement med ikon og infotekstar

## Oppkall av tenester

Before using the PopupMenu service the ScriptForge library needs to be loaded or imported:

• Grunnleggjande makroar krev innlasting av biblioteket ScriptForge ved hjelp av denne setninga:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
• Python-skript krev import frå scriptforge-modulen:
from scriptforge import CreateScriptService

##### I Basic

Tenesta PopupMenu kan setjast opp på fleire måtar. Eksempelet nedanfor lagar ein sprettoppmeny utan å knyte han til ei mus- eller ei programhending.

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

Når du køyrer Sub definert ovanfor, vert det laga ein sprettoppmeny med to element i plasseringa X=300 og Y=300 på skjermen.

Prefikset SFWidgets kan undertrykkjast når du kallar opp tenesta PopupMenu.

Eksempelet nedanfor definerer eit Sub som kan knyttast til ei musehending:

        Sub MyPopupClick(Optional poMouseEvent as Object)
            Dim myPopup As Object
            Set myPopup = CreateScriptService("PopupMenu", poMouseEvent)
            Fyll sprettoppmenyen med element
            Dim vResponse As Variant
            vResponse = myPopup.Execute(False)
            ' Gjer noko basert på vResponse
            ' ...
            myPopup.Dispose()
        End Sub

Bruk metoden Dispose for å frigjera resursar når sprettoppmenyen er ferdig.

Det er også mogleg å kopla ein sprettoppmeny til hendingar som som vert utløyst av LibreOffice-program, skjema- og dialogvindaugekontrollar. Hendingar som «Museknapp trykt» og «Museknapp sleppt» er til vanleg knytt til sprettoppmenyar.

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

##### I Python

Eksempelet ovanfor kan skrivast slik i 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)
            # Fyll sprettoppmenyen med element
            response = my_popup.Execute()
            # Gjer noko basert på respons
            my_popup.Dispose()

## Eigenskapar

Namn | Skriveverna | Type | Skildring
--- | --- | --- | ---
ShortcutCharacter | Nei | String | Teikn som vert brukt for å definera tilgangsnøkkelen til eit menyelement. Standardteiknet er «~».
SubmenuCharacter | Nei | String | Teikn eller streng som definerer korleis elementa er nøsta. Standardteikn er «>».

## Menyar og undermenyar

Når du skal laga sprettoppmenyar med undermenyar, brukar du det teiknet som er definert i eigenskapen SubmenuCharacter for å definera kor dei skal plasserast. Du kan for eksempel vurdera dette meny/undermeny-hierakiet:

        ' 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 nedanfor brukar standardteiknet til undermenyar «>» for å laga det meny/undermeny-hierakiet som er definert ovanfor.

        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 "---" vert brukt for å definera linjeskift i menyar og undermenyar.

## Bruka ikon

Items in the menu can have icons, which are specified as arguments in the AddCheckBox, AddItem and AddRadioButton methods.

Alle tilgjengelege ikon i LibreOffice kan brukast ved å spesifisera banen deira i høve til mappa der ikonfilene er plasserte i installasjonsmappa. Ikona er lagde i denne mappa:

INSTALLDIR/share/config

Bruk eigenskapen InstallFolder i tenesta FileSystem for å bestemma kor LibreOffice er installert på systemet.

Denne mappa inneheld ein serie ZIP-filer som inneheld biletfiler for kvart av dei tilgjengelege ikonsetta. Bileta i desse ZIP-filene er organiserte i mapper. For å bruka eit ikon, spesifiserer du ikonfila med stien til plasseringa inne i ZIP-fila.

Eksempelet nedanfor brukar ikonet "sc_newdoc.svg" som ligg i mappa "cmd". Teiknet skråstrek "/" vert brukt som stiskiljeteikn same kva operativsystem som er i bruk.

##### I Basic

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

##### I Python

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

Alle ikonsetta har den same interne strukturen. Kva for ikon som vert vist er avhengig av kva ikonsett som er i bruk.

## Metodar

Liste over metodar i tenesta PopupMenu
AddCheckBox AddItem | AddRadioButton | Execute

## AddCheckBox

Set inn ein avkryssingsboks i sprettoppmenyen. Returnerer ein heiltalsverdi som identifiserer det innsette elementet.

### Syntaks:

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

### Parametrar:

menuitem: Definerer teksten som skal visast i menyen. Dette argument definerer også plassen elementet har i menyhierarkiet ved hjelp av undermeny-teiknet.

namn: Strengverdien som skal returnerast når det vert klikka på elementet. Som standard vert det siste elementet i menyhierakiet brukt.

status: Definerer om elementet er vald når menyen vert laga (Standard = Usann).

ikon: Sti til og namn på ikonet som skal visast utan det innleiande stiskiljeteiknet. Kva ikon som vert vist er avhengig av kva ikonsett som er i bruk.

verktøytips: Teksten som skal visast som verktøytips.

### Eksempel:

##### I Basic

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

##### I Python

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

## AddItem

Set inn ei menyoppføring i sprettoppmenyen. Returnerer ein heiltalsverdi som identifiserer det innsette elementet.

### Syntaks:

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

### Parametrar:

menuitem: Definerer teksten som skal visast i menyen. Dette argument definerer også plassen elementet har i menyhierarkiet ved hjelp av undermeny-teiknet.

namn: Strengverdien som skal returnerast når det vert klikka på elementet. Som standard vert det siste elementet i menyhierakiet brukt.

ikon: Sti til og namn på ikonet som skal visast utan det innleiande stiskiljeteiknet. Kva ikon som vert vist er avhengig av kva ikonsett som er i bruk.

verktøytips: Teksten som skal visast som verktøytips.

### Eksempel:

##### I Basic

          myPopup.AddItem("Item A", Tooltip := "Ei forklarande melding")

##### I Python

          my_popup.AddItem("Item A", tooltip = "A descriptive message")

## AddRadioButton

Set inn ein radioknapp i sprettoppmenyen. Returnerer ein heiltalsverdi som identifiserer det innsette elementet.

### Syntaks:

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

### Parametrar:

menuitem: Definerer teksten som skal visast i menyen. Dette argument definerer også plassen elementet har i menyhierarkiet ved hjelp av undermeny-teiknet.

namn: Strengverdien som skal returnerast når det vert trykt på elementet. Som standard vert det siste elementet i menyhierakiet brukt.

status: Definerer om elementet er vald når menyen vert laga (Standard = Usann).

ikon: Sti til og namn på ikonet som skal visast utan det innleiande stiskiljeteiknet. Kva ikon som vert vist er avhengig av kva ikonsett som er i bruk.

verktøytips: Teksten som skal visast som verktøytips.

### Eksempel:

##### I Basic

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

##### I Python

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

## Execute

Visar sprettoppmenyen og ventar på ei handling frå brukaren. Returnerer det elementet det vert trykt på.

If the user clicks outside the popup menu or presses the Esc key, then no item is selected. In such cases, the returned value depends on the returnid parameter. If returnid = True and no item is selected, then the value 0 (zero) is returned. Otherwise an empty string "" is returned.

### Syntaks:

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

### Parametrar:

returnid: Viss denne er Sann vert ID for det valde elementet returnert. Viss metoden returnerer Usann vert namnet på elementet returnert (Standard = Sann).

### Eksempel:

I eksempelet nedanfor vert det laga ein sprettoppmeny og namnet på elementet vert returnert fordi argumentet returnid er sett til Usann.

##### 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-rutinane og -identifikatorane som vert innleidde med understrek «_» er reserverte for internt bruk. Dei er ikkje meint brukte i Basic-makroar.

Liknande emne

Tenesta SFDialogs.Dialog

Tenesta SFDialogs.DialogControl

SFWidgets.Menu service