Indhold

# Tjenesten SFWidgets.ContextMenu

Kontekstmenuer er forhåndsdefinerede ved LibreOffice-installation. De kan tilpasse i dialogen Funktioner + Tilpas.

Tjenesten ContextMenu tilbyder følgende funktioner:

- Erstat midlertidigt alle menuelementerne for en bestemt kontekstmenu.

- Tilføj midlertidigt et nyt menuelement nederst i en forhåndsdefineret kontekstmenu.

- Gør kontekstmenuen midlertidigt inaktiv.

De nye menuindstillinger gemmes ikke noget sted. Hverken i dokumentet eller i LibreOffice-indstillingerne.

En kontekstmenu udløses normalt af et højreklik på et bestmet område af et dokument. Tænk på at klikke i en celle eller på en arkfane i et Calc-dokument.

## Kald af tjeneste

Før du bruger ContextMenu-tjenesten, skal ScriptForge-biblioteket være indlæst eller importeret:

• Basic-makroer kræver, at biblioteket ScriptForge indlæses med følgende udtryk:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
• Python-scripts kræver import af scriptforge-modulet:
from scriptforge import CreateScriptService

##### I Basic

Tjenesten ContextMenu instantieres kun fra metoderne 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ører du den Sub, som er defineret ovenfor, omdefineres kontekstmenuen hørende til et bestemt område i dokumentet, i dette tilfælde en celler i et Calc-dokument.

Den nye definition forbliver aktiv indtil dokumentet lukkes, eller indtil kontekstmenuen bliver omdefineret igen.

Brug Dispose-metoden til at frigive ressourcer efter du har udført kontekstmenuen.

##### I Python

Eksemplet ovenfor kan skrives i Python på denne måde:

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

## Egenskaber

Navn | Skrivebeskyttet (Readonly) | Type | Beskrivelse
--- | --- | --- | ---
ParentDocument | Ja | Object | Instansen af den overordnede dokumentklasse (eller en af dens underklasser).
ShortcutCharacter | Ja | String | Tegn som bruges til at definere genvejstast for et menuelement. Standardtegnet er ~.
SubmenuCharacter | Ja | String | Tegn eller streng, som definerer hvordan menuelementer er indlejret (undermenuer). Standardtegnet er > .

## Menuer og undermenuer

For at oprette en kontekstmenu med undermenuer, brug tegnet defineret i SubmenuCharacter-egenskaben, når du opretter det menu-element, hvor undermenuen skal placeres. Som eksempel, se 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 nedenfor bruger standard-undermenutegnet > til at oprette menu/undermenu-hierarkiet defineret ovenfor:

        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 --- bruges til at definere skillelinjer i menuer eller undermenuer.

## Brug af ikoner

I modsætning til pop op-menuer, må kontekstmenuer ikke indeholde nogen ikoner.

## Metoder

Liste over metoder i ContextMenu-tjenesten
Activate | AddItem | RemoveAllItems

## Activate

Gør de tilføjede elementer fra kontekstmenuen gemt i dokumentet tilgængelige for udførelse, eller modsat, deaktivér dem, afhængigt af argumentet.

### Syntaks:

svc.Activate(opt enable: bool = True)

### Parametre:

enable (aktivér): Når True (standardværdi) bliver den lokale menu, som er gemt i dokumentet, gjort aktiv. Når False, ignoreres den lokale menu, og den globale menu defineret på LibreOffice-niveau har forrang.

## AddItem

Indsætter et menuelement i kontekstmenuen.

### Syntaks:

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

### Parametre:

menuitem (menuelement): Angiver den tekst, som skal vises i menuen. Dette argument definerer også hierarkiet af elementet i menuen ved hjælp af undermenu-tegnet. Sæt den sidste komponent til "---" for at definere en skillelinje.

command (kommando): Navnet på den UNO-kommando, som skal køres, når der klikkes på elementet, uden .uno-præfikset. Hvis kommandonavnet ikke eksisterer eller ikke er er aktuelt, vil ingenting ske.

script: URI'en (adressen) for et Basic- eller Python-script, der bliver udført, når der klikkes på elementet. Bemærk at det givne script ikke vil modtage nogen argumenter.

### Eksempel:

##### I Basic

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

##### I Python

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

## RemoveAllItems

Fjern alle elementer, begge

- forhåndsdefineret med Funktioner + Tilpas og gemt i dokumentet

- tilføjet med contextmenu.AddItem()

Denne handling kan ikke fortrydes undtagen ved at lukke og genåbne dokumentet.

Bagefter, brug AddItem() til at indsætte nye menuelementer., når det er relevant.

### Syntaks:

svc.RemoveAllItems()

### Eksempel:

Tilknyt næste Sub/def med højreklik-hændelsen for et ark. Den tilpassede menu vises når der højreklikkes i kolonne C på Calc-arket, ellers bevares den normale opførsel.

##### 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-rutiner eller identifikatorer, der indledes med et understregstegn "_" er reserveret til internt brug. Det er ikke meningen, at de skal bruges i Basic-makroer eller Python-scripts.

Relaterede emner

Tjenesten SFWidgets.PopupMenu

Tjenesten SFWidgets.Menu

Støt os venligst!