Wobsah

# Słužba SFWidgets.ContextMenu

Kontekstowe menije so při instalaciji LibreOfficeDev 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:

- Wuměnja nachwilu wšě menijowe zapiski podateho kontekstoweho menija.

- Přidawa nachwilu nowe menijowe zapiski deleka w předdefinowanym kontekstowym meniju.

- Znjemóžnja nachwilu kontekstowy meni.

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

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

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

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

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 LibreOfficeDev 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,

- kotrež su so z Nastroje --> Přiměrić… do toho definowali a w dokumenće składowali a te,

- kotrež su so z contextmenu.AddItem() přidali

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)

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

Podobne temy

Słužba SFWidgets.PopupMenu

Słužba SFWidgets.Menu

Prošu podpěrajće nas!