Innhald
Innhaldsliste 🔎︎

# Tenesta SFWidgets.PopupMenu

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

Før du brukar tenesta PopupMeny, må biblioteket ScriptForge vera lasta inn eller importert:

• 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 standard undermeny-teiknet > for å laga meny-/undermenyhierarkiet 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 skiljelinjer i menyar eller undermenyar.

## Bruka ikon

Elementa i menyen kan ha ikon som er spesifiserte som argument i metodane AddCheckBox, AddItem og AddRadioButton.

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("Element A", tooltip = "Ei forklarande melding")

## 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å.

Viss brukaren klikkar utanfor sprettoppmenyen eller trykkjer på Esc-tasten, er ingen element valde. I slike tilfelle avhenger den returnerte verdien av parameteren returnid. Viss returnid = Sann og ingen element er valde, vert verdien 0 (null) returnert. Elles vert det returnert ein tom streng "".

### 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

Tenesta SFWidgets.Meny