Podpořte nás!

Služba SFWidgets.ContextMenu

Místní nabídky jsou předdefinovány při instalaci LibreOfficeDev. 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í LibreOfficeDev.

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

Make the added items of the context menu stored in the document available for execution, or, at the opposite, disable them, depending on the argument.

Syntaxe:

svc.Activate(opt enable: bool = True)

Parametry:

enable: When True (default), the local menu stored in the document is made active. When False, the local menu is ignored and the global menu defined at LibreOfficeDev level takes the precedence.

AddItem

Inserts a menu entry in the context menu.

Syntaxe:

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

Parametry:

menuitem: Defines the text to be displayed in the menu. This argument also defines the hierarchy of the item inside the menu by using the submenu character. Set the last component to "---" to define a line separator.

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.