Služba SFWidgets.ContextMenu

Místní nabídky jsou předdefinovány při instalaci LibreOffice. Lze je přizpůsobit v dialogovém okně Nástroje + Přizpůsobit.

Služba ContextMenu poskytuje následující možnosti:

Nové nastavení nabídky se nikde neuloží. Ani v dokumentu, ani v nastavení LibreOffice.

Místní nabídka se obvykle spouští kliknutím pravým tlačítkem myši na konkrétní oblast dokumentu. Zvažte kliknutí do buňky nebo na záložku listu v dokumentu programu Calc.

Volání služby

Před používáním služby ContextMenu je nutné načíst či naimportovat knihovnu ScriptForge pomocí:

Ikona poznámky

• V makrech Basicu je nutné načíst knihovnu ScriptForge následujícím příkazem:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Ve skriptech Pythonu je nezbytné import z modulu scriptforge:
from scriptforge import CreateScriptService


V Basicu

Služba ContextMenu je instancována pouze z metod SF_Document.ContextMenus() a 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
  

Spuštění výše definovaného příkazu Sub předefinuje místní nabídku týkající se konkrétní oblasti v dokumentu, zde buňky patřící do dokumentu Calc.

Nová definice zůstane aktivní, dokud nebude dokument zavřen nebo dokud nebude znovu definována místní nabídka.

Ikona tipu

Po spuštění místní nabídky použijte metodu Dispose k uvolnění zdrojů.


V Pythonu

Výše uvedený příklad lze v Pythonu napsat následovně:


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

Vlastnosti

Název

Pouze pro čtení

Typ

Popis

ParentDocument

Ano

Object

Instance nadřazené třídy dokumentů (nebo jedné z jejích podtříd).

ShortcutCharacter

Ano

String

Znak použitý pro určení přístupové klávesy pro položku nabídky. Výchozím znakem je ~.

SubmenuCharacter

Ano

String

Znak nebo řetězec určující, jak jsou položky nabídky vnořeny. Výchozím znakem je >.


Nabídka a podnabídky

Při vytváření nístní nabídky s podnabídkami použijte k určení jejich umístění znak, který byl definován vlastností SubmenuCharacter při vytváření položky nabídky. Příkladem může být následující hierarchie nabídky a podnabídek.


    ' 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
  

V následujícím kódu je pro vytvoření výše uvedené hierarchie nabídky a podnabídek použit výchozí znak pro podnabídky >:


    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 poznámky

Řetězcem --- se definuje oddělovací čára v nabídkách nebo podnabídkách.


Použití ikon

Na rozdíl od vyskakovacích nabídek nesmí položky místní nabídky obsahovat žádné ikony.

Metody

Seznam metod služby ContextMenu

Activate

AddItem

RemoveAllItems


Activate

Zpřístupní přidané položky z místní nabídky uložené v dokumentu pro spuštění, nebo je naopak zakáže.

Syntaxe:

svc.Activate(opt enable: bool = True)

Parametry:

enable: Pokud je hodnota True (výchozí), lokální nabídka uložená v dokumentu se aktivuje. Pokud je hodnota False, lokální nabídka se ignoruje a přednost má globální nabídka definovaná na úrovni LibreOffice.

AddItem

Vloží položku nabídky do místní nabídky.

Syntaxe:

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

Parametry:

menuitem: Definuje text, který se má zobrazit v nabídce. Tento argument také definuje hierarchii položek v nabídce pomocí znaku podnabídky. Nastavením poslední komponenty na "---" definujete oddělovač řádků.

command: The name of the UNO command that will be run when the item is clicked, without the .uno: prefix. If the command name does not exist or is not applicable, nothing will happen.

script: The URI for a Basic or Python script that will be executed when the item is clicked. Note that the given script will not get any argument.

Příklad:

V Basicu

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

      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

Remove all items, both

This action cannot be reverted except by closing and reopening the document.

Afterwards, when relevant, use AddItem() to insert new menu items.

Syntaxe:

svc.RemoveAllItems()

Příklad:

Associate next Sub/def with the on-right-click event of a sheet. The custom menu appears when right-clicking in column C of the Calc sheet, otherwise the normal behaviour is preserved.

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 upozornění

Všechny procedury nebo identifikátory knihovny ScriptForge, které jsou uvozeny podtržítkem "_", jsou určeny pro interní použití. Není zamýšleno je používat v makrech Basicu nebo skriptech Pythonu.


Podpořte nás!

Podpořte nás!