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:

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:

Merknadsikon

• 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.

Tipsikon

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

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

Denne handlinga kan ikkje angrast uten 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)
    
Åtvaringsikon

Alle ScriptForge Basic-rutinane og -identifikatorane som vert innleidde med understrek «_» er reserverte for internt bruk. Dei er ikkje meint brukte i Basic-makroar.


Støtt oss!

Støtt oss!