Innhald

# SFWidgets.Sprettoppmeny-teneste

Sprettoppmenyane vert førehandsdefinerte når LibreOffice vert installert. Du kan tilpassa desse i dialogvindauget Verktøy → Tilpass.

ContextMenu-tenesta har desse funksjonane:

- Byt ut midlartidig alle menyelementa i ein bestemt sprettoppmeny.

- Legg midlatidig til nye menyelement nedst i ein førehandsdefinert sprettoppmeny.

- Slå av sprettoppmenyen midlartidig.

Dei nye menyinnstillingane vert ikkje lagra nokon stad, korkje i dokumentet eller i LibreOffice-innstillingane.

Ein sprettoppmeny vert til vanleg opna ved å høgreklikka eit bestemt område i eit dokument. Tenk deg å klikka i ei celle eller på ei arkfane i eit Calc-dokument.

## Oppkall av tenester

Før du brukar ContextMenu-tenesta, må ScriptForge-biblioteket lastast inn eller importerast:

• 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

ContextMenu-tenesta vert sett opp berre frå metodane SF_Document.ContextMenus() og SF_Datasheet.ContextMenus().

        Sub DefineContextMenu()
            GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
            Dim calc As Object, menu As Object
            Set calc = CreateScriptService("Document", ThisComponent)
            Set menu = calc.ContextMenus("cell")  ' Right-click on a cell
            '  ... Define the context menu ...
            menu.Dispose()
        End Sub

Køyrer du Sub som er definert ovanfor, vert sprettoppmenyen omdefinert i høve til eit bestemt område i dokumentet, her ei celle i eit Calc-dokument.

Den nye definisjonen vert brukt så lenge dokumentet er ope eller til sprettoppmenyen eventuelt vert definert på nytt.

Bruk Dispose-metoden for å frigjera ressursar etter at du har køyrd sprettoppmenyen.

##### I Python

Eksempelet ovanfor kan skrivast slik i Python:

        from scriptforge import CreateScriptService

        def DefineContextMenu(args=None):
            basic = CreateScriptService("Basic")
            calc = CreateScriptService("Document", basic.ThisComponent)
            menu = calc.ContextMenus("cell")  # Right-click on a cell
            #  ... Define the context menu ...
            menu.Dispose()

## Eigenskapar

Namn | Skriveverna | Type | Skildring
--- | --- | --- | ---
ParentDocument | Ja | Object | Førekomsten av den overordna dokumentklassen (eller ein av underklassane i han).
ShortcutCharacter | Ja | String | Teikn som vert brukt for å definera tilgangsnøkkelen til eit menyelement. Standardteiknet er ~.
SubmenuCharacter | Ja | String | Teikn eller streng som definerer korleis elementa er nøsta. Standardteikn er >.

## Meny og undermenyar

For å laga ein sprettoppmeny med undermenyar, bruk teiknet som er definert i SubmenuCharacter-eigenskapen når du lagar menyoppføringa for å definera kvar han skal plasserast. Tenk deg for eksempel følgjande meny-/undermenyhierarki.

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

        menu.AddItem("Item A")
        menu.AddItem("Item B>Item B.1")
        menu.AddItem("Item B>Item B.2")
        menu.AddItem("---")
        menu.AddItem("Item C>Item C.1>Item C.1.1")
        menu.AddItem("Item C>Item C.1>Item C.1.2")
        menu.AddItem("Item C>Item C.2>Item C.2.1")
        menu.AddItem("Item C>Item C.2>Item C.2.2")
        menu.AddItem("Item C>Item C.2>---")
        menu.AddItem("Item C>Item C.2>Item C.2.3")
        menu.AddItem("Item C>Item C.2>Item C.2.4")

Strengen --- vert brukt for å definera skiljelinjer i menyar eller undermenyar.

## Bruka ikon

I motsetnad til popup-menyar, kan elementa i sprettoppmenyane ikkje innehalda ikon.

## Metodar

Liste over metodar i sprettoppmenytenesta
Activate | AddItem | RemoveAllItems

## Activate

Gjer dei tillagte elementa frå sprettoppmenyen som er lagra i dokumentet tilgjengelege for utføring, eller slå dei av , avhengig av argumentet.

### Syntaks:

svc.Activate(opt enable: bool = True)

### Parametrar:

slå på: Når Sann (standard), vert den lokale menyen som er lagra i dokumentet slått på. Når Usann, vet den lokale menyen ignorert og den globale menyen som er definert på LibreOffice-nivå vert prioritert.

## AddItem

Set ei menyoppføring inn i sprettoppmenyen.

### Syntaks:

svc.AddItem(menuitem: str, opt command: str, opt script: str)

### Parametrar:

menyelement: Definerer teksten som skal visast i menyen. Dette argumentet definerer også hierarkiet til elementet i menyen ved å bruka undermenyteiknet. Set den siste komponenten til "---" for å definera eit linjeskiljeteikn.

kommando: Namnet på UNO-kommandoen som skal køyrast når det vert klikka på elementet, utan prefikset .uno:. Viss kommandonamnet ikkje finst eller ikkje er aktuelt, skjer det ingenting.

skript: Adressa (URI-en) til eit Basic- eller Python-skript som vert køyrd når det vert klikka på elementet. Merk at det gjevne skriptet ikkje får nokre argument.

### Eksempel:

##### I Basic

          menu.AddItem("Meny øvst>Element 1", kommando := "Om")
          menu.AddItem("Menu top>Item 2", script := "vnd.sun.star.script:myLib.Module1.ThisSub?language=Basic&location=document")

##### I Python

          menu.AddItem("Meny øvst>Element 1", kommando := "Om")
          menu.AddItem('Menu top>Item 2', script = 'vnd.sun.star.script:Module1.py$thisdef?language=Python&location=document')

## RemoveAllItems

Fjern alle element, begge

- førehandsdefinert med Verktøy → Tilpass og lagra i dokumentet

- lagt til med contextmenu.AddItem()

Denne handlinga kan ikkje angrast utan ved å lukka og opna dokumentet på nytt.

Etterpå, når det er relevant, bruk AddItem() for å setja inn nye menyelement.

### Syntaks:

svc.RemoveAllItems()

### Eksempel:

Knyt neste Sub/def til høgreklikk-hendinga i eit ark. Den tilpassa menyen kjem fram når du høgreklikkar i kolonne C i Calc-arket, elles vert normal oppførsel bevart.

##### I Basic

          Sub OnRightClick1(Optional XRange)  '  Xrange is a com.sun.star.table.XCellRange object
          Dim calc As Object, menu As Object, in_column As Boolean
          Set calc = CreateScriptService("Calc", ThisComponent)
          Set menu = calc.ContextMenus("cell")
          menu.RemoveAllItems()
          in_column = ( Len(calc.Intersect("Sheet1.$C:$C", XRange.AbsoluteName)) > 0 )
          If in_column Then
              menu.AddItem("A", script := "vnd.sun.star.script:Standard.Module1.EnterA?language=Basic&location=document")
              ' ...
          End If
          menu.Activate(in_column)
          End Sub

##### I Python

            def OnRightClick1(XRange = None)  #  Xrange is a com.sun.star.table.XCellRange object
                basic = CreateScriptService('basic')
                calc = CreateScriptService('Calc', basic.ThisComponent)
                menu = calc.ContextMenus('cell')
                menu.RemoveAllItems()
                in_column = ( len(calc.Intersect("Sheet1.$C:$C", XRange.AbsoluteName)) > 0 )
                if in_column:
                    menu.AddItem('A', script = 'vnd.sun.star.script:Module1.py$EnterA?language=Python&location=document")
                    # ...
                menu.Activate(in_column)

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

Støtt oss!