SFWidgets.ContextMenu-service

Contextmenu's zijn vooraf gedefinieerd tijdens de installatie van LibreOffice. Ze kunnen worden aangepast in het dialoogvenster Extra - Aanpassen.

De ContextMenu-service biedt de volgende mogelijkheden:

De nieuwe menu-instellingen worden nergens opgeslagen. Noch in het document, noch in de instellingen van LibreOffice.

Een contextmenu wordt meestal geactiveerd door met de rechtermuisknop op een specifiek gedeelte van een document te klikken. Denk bijvoorbeeld aan het klikken in een cel of op een tabblad in een Calc-document.

Service-aanroep

Voordat u de ContextMenu-service kunt gebruiken, moet de ScriptForge-bibliotheek geladen of geïmporteerd worden:

Notitiepictogram

• Basic macro's kunnen de bibliotheek ScriptForge laden met de instructie:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Python scripts kunnen de module scriptforge importeren met:
from scriptforge import CreateScriptService


In BASIC

De ContextMenu-service wordt geïnstantieerd vanuit de SF_Document.ContextMenus() en alleen SF_Datasheet.ContextMenus() methodes.


    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
  

Het uitvoeren van de hierboven gedefinieerde Sub herdefinieert het contextmenu dat betrekking heeft op een specifiek gebied in het document, in dit geval een cel die behoort tot een Calc-document.

De nieuwe definitie blijft actief totdat het document wordt gesloten of totdat het contextmenu opnieuw wordt gedefinieerd.

Tippictogram

Gebruik de Dispose-methode om resources vrij te geven na het uitvoeren van het contextmenu.


In Python

Het bovenstaande voorbeeld kan als volgt in Python worden geschreven:


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

Eigenschappen

Naam

Alleen-lezen

Type

Beschrijving

ParentDocument

Ja

Object

Het instantieobject van de bovenliggende documentklasse (of een van de subklassen daarvan).

ShortcutCharacter

Ja

String

Teken dat wordt gebruikt om de acceleratietoets van een menu-item te definiëren. Het standaardteken is ~.

SubmenuCharacter

Ja

String

Een teken of tekenreeks die bepaalt hoe menu-items genest zijn. Het standaardteken is >.


Menu en submenu's

Om een contextmenu met submenu's te maken, gebruikt u het teken dat is gedefinieerd in de eigenschap SubmenuCharacter tijdens het aanmaken van het menu-item om te bepalen waar het moet worden geplaatst. Neem bijvoorbeeld de volgende menu-/submenu-hiërarchie.


    ' 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
  

De onderstaande code gebruikt het standaard submenu-teken > om de hierboven gedefinieerde menu-/submenu-hiërarchie te creëren:


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

De tekenreeks --- wordt gebruikt om scheidingslijnen in menu's of submenu's te definiëren.


Pictogrammen gebruiken

In tegenstelling tot pop-upmenu's mogen items in een contextmenu geen pictogrammen bevatten.

Methodes

Lijst met methodes in de ContextMenu-service

Activate

AddItem

RemoveAllItems


Activate

Maak de toegevoegde items van het contextmenu dat in het document is opgeslagen beschikbaar voor uitvoering, of schakel ze juist uit, afhankelijk van het argument.

Syntaxis:

svc.Activate(opt enable: bool = True)

Parameters:

enable: Wanneer True (standaard), wordt het lokale menu dat in het document is opgeslagen, geactiveerd. Wanneer False, wordt het lokale menu genegeerd en heeft het globale menu dat is gedefinieerd op LibreOffice-niveau voorrang.

AddItem

Voegt een menu-item toe aan het contextmenu.

Syntaxis:

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

Parameters:

menuitem: Definieert de tekst die in het menu wordt weergegeven. Dit argument definieert ook de hiërarchie van het item binnen het menu door gebruik te maken van het submenu-teken. Stel het laatste component in op "---" om een regelafscheider te definiëren.

command: De naam van het UNO-commando dat wordt uitgevoerd wanneer op het item wordt geklikt, zonder het voorvoegsel .uno:. Als de commandnaam niet bestaat of niet van toepassing is, gebeurt er niets.

script: De URI voor een Basic- of Python-script dat wordt uitgevoerd wanneer op het item wordt geklikt. Houd er rekening mee dat het opgegeven script geen argumenten mag bevatten.

Voorbeeld:

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

Alle items verwijderen, beide

Deze actie kan alleen ongedaan worden gemaakt door het document te sluiten en opnieuw te openen.

Gebruik daarna, indien nodig, AddItem() om nieuwe menu-items toe te voegen.

Syntaxis:

svc.RemoveAllItems()

Voorbeeld:

Koppel de volgende Sub/def aan de rechtsklikgebeurtenis van een werkblad. Het aangepaste menu verschijnt wanneer u met de rechts klikt in kolom C van het Calc-werkblad; anders blijft het normale gedrag behouden.

In 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
    
In 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)
    
Waarschuwingspictogram

Alle ScriptForge Basic-routines of variabelen die beginnen met een underscore "_" zijn voor intern gebruik. Gebruik deze niet in een Basic of Python-macro.


Help ons, alstublieft!

Help ons, alstublieft!