Innhald

# Tenesta SFWidgets.Meny

Tenesta Meny kan brukast for å laga og fjerna menyar frå menylinja i eit LibreOffice-dokumentvindauge. Kvar menyoppføring kan knytast til eit skript eller til ein UNO-kommando. Denne tenesta gjev desse funksjonane:

- Oppretting av menyar med sjølvdefinerte oppføringar, avmerkingsboksar, radioknappar og skiljeteikn.

- Utstyre menyelement med ikon og infotekstar

Menyar som er laga med denne tenesta er tilgjengelege berre for eit spesifisert dokumentvindauge. Dei vert ikkje lagra i dokumentet eller som programinnstillingar. Når dokumentet vert lukka og opna att, vert standardmenylinjene gjenoppretta.

Når OLE-objekt, for eksempel matematiske formlar eller Calc-diagram, vert redigerte frå eit dokument, set LibreOffice menylinja opp på nytt i høve til objektet. Når dette skjer, vert menyane som er sette opp med menytenesta fjerna og vert ikkje gjenoppretta etter at OLE-objektet er redigert.

## Oppkall av tenester

Før du brukar tenesta Meny, 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 Meny vert starta ved å kalla opp metoden CreateMenu frå tenesta Dokument. Kodesnutten nedanfor lagar ein meny kalla Min meny i gjeldande dokumentvindauge med to oppføringar, Element A og Element B.

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

Når menyen er laga, vert det rådd til å kalla opp metoden Dispose for å frigjera ressursar som vert brukte av ein førekomst av tenesta Menu.

I eksempelet ovanfor er Element A knytt til UNO-kommandoen .uno:About, medan Element B er knytt til skriptet ItemB_Listener definert i Module1 i biblioteket Standard i behaldaren Mine makroar.

Eksempelet nedanfor definerer ItemB_Listener som vert kalla opp når det vert trykt på Item B. Denne lyttaren deler ganske enkelt opp argumentstrengen som vert sendt til Sub og viser delane i ein meldingsboks.

        Sub ItemB_Listener(args As String)
            ' Handsamar argumentstrengen som vert sendt til lyttaren
            Dim sArgs as Object
            sArgs = Split(args, ",")
            MsgBox "Menynamn: " & sArgs(0) & Chr(13) & _
                   "Menyelement: " & sArgs(1) & Chr(13) & _
                   "Element-ID: "     & sArgs(2) & Chr(13) & _
                   "Elementstatus: " & sArgs(3)
        End Sub

Som vist i eksempelet ovanfor, mottek menyoppføringar knytte til eit skript eit kommadelt strengargument med desse verdiane:

- Toppnivånamnet på menyen.

- Streng-ID-en til den valde menyoppføringa.

- Den numeriske ID-en til den valde menyoppføringa.

- Den gjeldande tilstanden til menyelementet. Dette er nyttig for avkryssingsboksar og radioknappar. Viss det er kryssa av for dette elementet, vert verdien "1" returnert, elles vert "0" returnert.

##### I Python

Eksempelet ovanfor kan skrivast slik i 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"Menunamn: {s_args[0]}\n"
            msg += f"Menyelement: {s_args[1]}\n"
            msg += f"Element-ID: {s_args[2]}\n"
            msg += f"Elementstatus: {s_args[3]}"
            bas.MsgBox(msg)

## Eigenskapar

Name | Skriveverna | Type | Beskriving
--- | --- | --- | ---
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 nysta. Standardteikn er «>».

## Meny og undermenyar

For å laga ein meny med undermenyar, bruk teiknet som er definert i eigenskapen SubmenuCharacter medan du lagar menyoppføringa for å definera plasseringa av han. Tenk for eksempel på det følgjande meny-/undermeny-hierarkiet.

        ' 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:

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

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 «Menu»
AddCheckBox | AddItem | AddRadioButton

## AddCheckBox

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

### Syntaks:

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

### Parametrar:

menuitem: Definerer teksten som skal visast i menyen. Dette argumentet definerer også hierarkiet til elementet inne i menyen ved å bruka undermeny-teiknet.

name: Strengverdien som vert brukt for å identifisera elementet. Som standard vert det siste elementet i menyhierakiet brukt.

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

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

tooltip: Teksten som skal visast i hjelpebobla.

command: Namnet på ein UNO-kommando utan prefikset .uno:. Viss namnet ikkje finst, skjer ingenting.

script: URI for eit Basic- eller Python-skript som vert utført når det vert klikka på elementet.

Argumenta command og script utelukkar kvarandre, difor kan berre eitt av dei setjast for kvart menyelement.

Sjå Scripting Framework URI Specification for å læra meir om URI-syntaksen som vert brukt i script-argument.

### Eksempel:

##### I Basic

          ' Menyoppføring knytt til kommandoen .uno:Paste
          oMenu.AddCheckBox("Item A", Status := True, ToolTip := "Paste values", Command := "Paste")
          ' Køyrer Basic-skriptet «Standard.Module1.MyListener» som er lagra i dokumentet
          oMenu.AddCheckBox("Item B", Status := False, Script := "vnd.sun.star.script:Standard.Module1.MyListener?language=Basic&location=document")
          ' Køyrer Python-skriptet MyListener som ligg i fila myScripts.py i brukarskriptmappa
          oMenu.AddCheckBox("Item C", Status := True, Script := "vnd.sun.star.script:myScripts.py$MyListener?language=Python&location=user")

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

Set inn ein merkelapp i menyen. Returnerer ein heiltalsverdi som identifiserer det innsette elementet.

### Syntaks:

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

name: Strengverdien som skal returnerast når det vert trykt 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.

tooltip: Teksten som skal visast i hjelpebobla.

command: Namnet på ein UNO-kommando utan prefikset .uno:. Viss namnet ikkje finst, skjer ingenting.

script: URI for eit Basic- eller Python-skript som vert utført når det vert klikka på elementet.

Argumenta command og script utelukkar kvarandre, difor kan berre eitt av dei setjast for kvart menyelement.

Sjå Scripting Framework URI Specification for å læra meir om URI-syntaksen som vert brukt i script-argument.

### Eksempel:

##### I Basic

          oMenu.AddItem("Element A", Tooltip := "Ei beskrivande melding")

##### I Python

          oMenu.AddItem("Element A", Tooltip = "Ei beskrivande melding")

## AddRadioButton

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

### Syntaks:

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

name: 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: Stien til og namnet på ikonet som skal visast utan det innleiande stiskiljeteiknet. Kva ikon som vert vist er avhengig av kva ikonsett som er i bruk.

tooltip: Teksten som skal visast i hjlepebobla.

command: Namnet på ein UNO-kommando utan prefikset .uno:. Viss namnet ikkje finst, skjer ingenting.

script: URI for eit Basic- eller Python-skript som vert utført når det vert klikka på elementet.

Argumenta command og script utelukkar kvarandre, difor kan berre eitt av dei setjast for kvart menyelement.

Sjå Scripting Framework URI Specification for å læra meir om URI-syntaksen som vert brukt i script-argument.

### Eksempel:

##### I Basic

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

##### I Python

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

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 SFWidgets.PopupMenu

Tenesta SFDocuments.Document

Støtt oss!