Storitev SFWidgets.ContextMenu

Kontekstni meniji so vnaprej določeni ob namestitvi LibreOfficeDev. Ni jih možno prilagajati prek pogovornega okna Orodja + Prilagodi.

Storitev ContextMenu zagotavlja naslednje zmožnosti:

Nove nastavitve menija niso nikjer shranjene: niti v dokumentu niti v nastavitvah LibreOfficeDev.

Kontekstni meni običajno sproži desni klik določenega področja dokumenta. Zamislite si klik celice ali zavihka delovnega lista v dokumentu Calc.

Priklic storitve

Pred uporabo storitve ContextMenu je potrebno naložiti ali uvoziti knjižnico ScriptForge:

Ikona opombe

• Za makre Basic mora biti naložena knjižnica ScriptForge z naslednjim ukazom:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Za skripte Python mora biti opravljen uvoz iz modula scriptforge:
from scriptforge import CreateScriptService


V Basicu

Storitev ContextMenu se kliče samo iz metod SF_Document.ContextMenus() in 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
  

Izvajanje Sub, določeno zgoraj, ponovno definira kontekstni meni glede na določeno področje v dokumentu, v tem primeru je to celica, ki pripada dokumentu Calc.

Nova definicija bo ostala dejavna vse dokler dokument ni zaprt ali kontekstni meni ni znova definiran.

Ikona namiga

Uporabite metodo Dispose, da sprostite vire po izvedbi kontekstnega menija.


V Pythonu

Zgornji primer lahko zapišemo v Pythonu na sledeč način:


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

Lastnosti

Ime

Samo za branje

Vrsta

Opis

ParentDocument

Da

Object

Instanca nadrejenega razreda dokumenta (ali enega njegovih podrazredov).

ShortcutCharacter

Da

String

Znak, ki določa dostopno tipko za menijski element. Privzeta vrednost je ~.

SubmenuCharacter

Da

String

Znak ali niz, ki določa, kako so elementi menija gnezdeni. Privzeti znak je >.


Meni in podmeniji

Za izdelavo kontekstnega menija s podmeniji uporabite znak, določen z lastnostjo SubmenuCharacter, medtem ko ustvarjate menijski vnos z določitvijo, kam bo postavljen. Razmislite npr. o naslednji hierarhiji menija/podmenijev.


    ' 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
  

Spodnja koda uporablja privzeti znak podmenija > za tvorbo zgoraj določene hierarhije menija/podmenijev:


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

Niz --- je uporabljen za določitev črtnih ločil v menijih in podmenijih.


Uporaba ikon

Za razliko od pojavnih menijev izbire kontekstnega menija ne smejo vsebovati ikon.

Metode

Seznam metod storitve ContextMenu

Activate

AddItem

RemoveAllItems


Activate

Dodane izbire v kontekstnem meniju, shranjenem v dokumentu, dajte na voljo za izvajanje ali jih, ravno nasprotno, onemogočite, odvisno od argumenta.

Skladnja:

svc.Activate(opt enable: bool = True)

Parametri:

enable: če ima vrednost True (privzeta vrednost),je krajevni meni, shranjen v dokumentu, aktiven. Če je False, je krajevni meni prezrt in prednost ima globalni meni, ki je definiran na ravni LibreOfficeDev.

AddItem

Vstavi menijski vnos v kontekstni meni.

Skladnja:

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

Parametri:

menuitem: določa besedilo, ki bo prikazano v meniju. Ta argument definira tudi hierarhijo elementa v meniju z uporabo znaka za podmeni. Zadnjo komponento nastavite na "---", da določite ločilno črto.

command: ime ukaza UNO, ki bo izveden, ko bo element kliknjen, brez predpone .uno:. Če ime ukaza ne obstaja ali ni relevantno v tem kontekstu, se ne zgodi nič.

script: URI za skript Basic oz. Python, ki bo izvršen, ko se zgodi klik elementa. Upoštevajte, da dani skript ne prejme nobenega argumenta.

Primer:

V Basicu

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

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

RemoveAllItems

Odstrani vse elemente, oba

Tega dejanja ni možno povrniti, razen če zaprete in ponovno odprete dokument.

Kasneje. če je to potrebno, uporabite AddItem(), da vstavite nove menijske vnose.

Skladnja:

svc.RemoveAllItems()

Primer:

Nato povežite Sub/def z dogodkom ob desnem kliku (on-right-click) delovnega lista. Pojavi se meni po meri, če desno kliknete v stolpec C delovnega lista Calc, sicer se ohrani običajno vedenje.

V Basicu

      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
    
V Pythonu

        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)
    
Ikona opozorila

Vsi podprogrami ali identifikatorji ScriptForge Basic s predpono podčrtaja (»_«) so rezervirani za interno uporabo. Uporabi v makrih Basic ali skriptih Python niso namenjeni.


Podprite nas!

Podprite nas!