Słužba SFWidgets.ContextMenu

Kontekstowe menije so při instalaciji LibreOffice předdefinuja. Dadźa so w dialogu Nastroje --> Přiměrić… přiměrić.

Słužba ContextMenu slědowace móžnosće skići:

Nastajenja noweho menija so nihdźe njeskładuja. Ani w dokumenće ani w nastajenjach LibreOffice.

Kontekstowy meni so zwjetša přez kliknjeje z prawej tastu myški na wěsty wobłuk dokumenta wuwabja. Klikńće do cele abo na tabelowy rajtark w dokumenće Calc.

Słužbowe wuwołanje

Prjedy hač móžeće słužbu ContexMenu wužiwać, dyrbiće biblioteku ScriptForge začitać abo importować:

Symbol za Notica

• Makra Basic sej wužaduja, zo so biblioteka ScriptForge z pomocu slědowaceho přikaza začituje:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Skripty Python sej import z modula scriptforge wužaduja:
from scriptforge import CreateScriptService


W Basic

słužba ContextMenu so jenož z metodow SF_Document.ContextMenus() a SF_Datasheet.ContextMenus() instanciěruje.


    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
  

Hdyž so horjeka definowana subrutina Sub wuwjedźe, so kontekstowy meni nastupajo wěsty wobłuk w dokumenće znowa definuje, tu cela, kotraž k dokumentej Calc słuša.

Nowa definicija aktiwna wostawa, doniž so dokument njezačini abo so kontekstowy meni znowa njedefinuje.

Symbol Pokiw

Wužiwajće metodu Dispose, zo byšće po wuwjedźenju kontekstoweho menija resursy wuswobodźił.


W Python

Přikład horjeka da so kaž slěduje w Python pisać:


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

Kajkosće

Mjeno

Přećiwo pisanju škitany

Typ

Wopisanje

ParentDocument

Haj

Object

Instancna klasa nadrjadowaneho dokumenta (abo jedna z jeho podklasow).

ShortcutCharacter

Haj

String

Znamješko, kotrež so wužiwa, zo by přistupnu tastu menijoweho zapiska definowało. Standardne znamješko je ~.

SubmenuCharacter

Haj

String

Znamješko abo znamješkowy rjećazk, kotrejž definujetej, kak so menijowe zapiski zakašćikuja. Standardne znamješko je >.


Meni a podmenije

Zo byšće kontekstowy meni z podmenijemi wutworił, wužiwajće znamješko, kotrež je w kajkosći SubmenuCharacter definowane, mjeztym zo menijowy zapisk wutworjeće, zo byšće definował, hdźež ma so placěrować. Dźiwajće na přikład na slědowacu menijowu/podmenijowu hierarchiju.


    ' 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
  

Slědowacy kod standardne podmenijowe znamješko > wužiwa, zo by menijowu/podmenijowu hierarchiju wutworił, kotraž je horjeka definowana:


    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")
  
Symbol za Notica

Znamješkowy rjećazk --- so wužiwa, zo by dźělenske linije w menijach abo podmenijach definował.


Symbole wužiwać

Na rozdźěl wot wuskakowacych menijow, njesmědźa kontekstowe menije symbole wobsahować.

Metody

Lisćiny metodow w słužbje ContextMenu

Activate

AddItem

RemoveAllItems


Activate

Stajće přidate zapiski jibtekstoweho menija, kotryž su w dokumenće składowane za wuwjedźenje k dispoziciji, abo znjemóžńće je nawopak wotwisujo wot argumenta.

Syntaksa:

svc.Activate(opt enable: bool = True)

Parametry:

enable: Hdyž True (standard), so lokalny meni, kotryž je w dokumenće składowany, zmóžni. Hdyž False so lokalny meni ignoruje a globalny meni, kotrež je na runinje LibreOffice definowany, ma prioritu.

AddItem

Zasadźuje menijowy zapisk do kontekstoweho menija.

Syntaksa:

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

Parametry:

menuitem: Definuje tekst, kotryž so ma w meniju pokazać. Tutón argument tež hierarchiju zapiska w meniju z pomocu podmenijoweho znamješka definuje. Stajće poslednju komponentu na „---“, zo byšće linijowe dźělatko definował.

command: Meno přikaza UNO, kotryž so wuwjedźe, hdyž so na zapisk klika, bjez prefiksa .uno:. Jeli mjeno přikaza njeeksistuje abo nałožujomny njeje, so ničo njestanje.

script: URI za skirpt Basic abo Python, kotryž so wuwjedźe, hdyž so na zapisk klika. Dźiwajće na to, zo podaty skript argument njedóstawa.

Přikład:

W Basic

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

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

RemoveAllItems

Wotstronja wšě zapiski, te,

Tuta akcija njeda so cofnyć, chibazo dokument so začinja a zaso wočinja.

Wužiwajće poto, jeli to je relewantne, AddItem(), zo byšće nowe menijowe zapiski zasadźił.

Syntaksa:

svc.RemoveAllItems()

Přikład:

Zwjazajće přichodnu podrutinu Sub/def z podawkom praweho klika tabele. Swójski meni so zjewi, hdyž z prawej tastu myški do špalty C tabele Calc klikaće, hewak so normalne zadźerženje wobchowa.

W 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
    
W 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)
    
Warnowanski symbol

Wšě rutiny Basic ScriptForge abo identifikatory, kotrež so z podsmužku „_“ započinaja, su za interne wužiwanje wuměnjene. Njejsu za to myslene, so w makrach Basic abo skriptach Python wužiwać.


Prošu podpěrajće nas!

Prošu podpěrajće nas!