Vsebina

# Storitev SFWidgets.ContextMenu

Kontekstni meniji so vnaprej določeni ob namestitvi LibreOfficeDev. Ni jih možno prilagajati prek pogovornega okna Orodja + Prilagodi.

Storitev ContextMenu zagotavlja naslednje zmožnosti:

- Začasno zamenja vse elemente menija v določenem kontekstnem meniju.

- Začasno doda nove menijske izbire na dno vnaprej določenega kontekstnega menija.

- Naredi kontekstni meni začasno nedejaven.

Nove nastavitve menija niso nikjer shranjene: niti v dokumentu niti v nastavitvah LibreOfficeDev.

Kontekstni meni običajno sproži desni klik določenega področja dokumenta. Zamislite si klik celice ali zavihka delovnega lista v dokumentu Calc.

## Priklic storitve

Pred uporabo storitve ContextMenu je potrebno naložiti ali uvoziti knjižnico ScriptForge:

• Za makre Basic mora biti naložena knjižnica ScriptForge z naslednjim ukazom:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
• Za skripte Python mora biti opravljen uvoz iz modula scriptforge:
from scriptforge import CreateScriptService

##### V Basicu

Storitev ContextMenu se kliče samo iz metod SF_Document.ContextMenus() in 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

Izvajanje Sub, določeno zgoraj, ponovno definira kontekstni meni glede na določeno področje v dokumentu, v tem primeru je to celica, ki pripada dokumentu Calc.

Nova definicija bo ostala dejavna vse dokler dokument ni zaprt ali kontekstni meni ni znova definiran.

Uporabite metodo Dispose, da sprostite vire po izvedbi kontekstnega menija.

##### V Pythonu

Zgornji primer lahko zapišemo v Pythonu na sledeč način:

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

## Lastnosti

Ime | Samo za branje | Vrsta | Opis
--- | --- | --- | ---
ParentDocument | Da | Object | Instanca nadrejenega razreda dokumenta (ali enega njegovih podrazredov).
ShortcutCharacter | Da | String | Znak, ki določa dostopno tipko za menijski element. Privzeta vrednost je ~.
SubmenuCharacter | Da | String | Znak ali niz, ki določa, kako so elementi menija gnezdeni. Privzeti znak je >.

## Meni in podmeniji

Za izdelavo kontekstnega menija s podmeniji uporabite znak, določen z lastnostjo SubmenuCharacter, medtem ko ustvarjate menijski vnos z določitvijo, kam bo postavljen. Razmislite npr. o naslednji hierarhiji menija/podmenijev.

        ' 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

Spodnja koda uporablja privzeti znak podmenija > za tvorbo zgoraj določene hierarhije menija/podmenijev:

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

Niz --- je uporabljen za določitev črtnih ločil v menijih in podmenijih.

## Uporaba ikon

Za razliko od pojavnih menijev izbire kontekstnega menija ne smejo vsebovati ikon.

## Metode

Seznam metod storitve ContextMenu
Activate | AddItem | RemoveAllItems

## Activate

Dodane izbire v kontekstnem meniju, shranjenem v dokumentu, dajte na voljo za izvajanje ali jih, ravno nasprotno, onemogočite, odvisno od argumenta.

### Skladnja:

svc.Activate(opt enable: bool = True)

### Parametri:

enable: če ima vrednost True (privzeta vrednost),je krajevni meni, shranjen v dokumentu, aktiven. Če je False, je krajevni meni prezrt in prednost ima globalni meni, ki je definiran na ravni LibreOfficeDev.

## AddItem

Vstavi menijski vnos v kontekstni meni.

### Skladnja:

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

### Parametri:

menuitem: določa besedilo, ki bo prikazano v meniju. Ta argument definira tudi hierarhijo elementa v meniju z uporabo znaka za podmeni. Zadnjo komponento nastavite na "---", da določite ločilno črto.

command: ime ukaza UNO, ki bo izveden, ko bo element kliknjen, brez predpone .uno:. Če ime ukaza ne obstaja ali ni relevantno v tem kontekstu, se ne zgodi nič.

script: URI za skript Basic oz. Python, ki bo izvršen, ko se zgodi klik elementa. Upoštevajte, da dani skript ne prejme nobenega argumenta.

### Primer:

##### V Basicu

          menu.AddItem("Menu top>Item 1", command := "O programu")
          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 = 'O programu')
          menu.AddItem('Menu top>Item 2', script = 'vnd.sun.star.script:Module1.py$thisdef?language=Python&location=document')

## RemoveAllItems

Odstrani vse elemente, oba

- vnaprej določeno z Orodja + Prilagodi in shranjen v dokumentu

- dodano s contextmenu.AddItem()

Tega dejanja ni možno povrniti, razen če zaprete in ponovno odprete dokument.

Kasneje. če je to potrebno, uporabite AddItem(), da vstavite nove menijske vnose.

### Skladnja:

svc.RemoveAllItems()

### Primer:

Nato povežite Sub/def z dogodkom ob desnem kliku (on-right-click) delovnega lista. Pojavi se meni po meri, če desno kliknete v stolpec C delovnega lista Calc, sicer se ohrani običajno vedenje.

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

Vsi podprogrami ali identifikatorji ScriptForge Basic s predpono podčrtaja (»_«) so rezervirani za interno uporabo. Uporabi v makrih Basic ali skriptih Python niso namenjeni.

Podobne teme

Storitev SFWidgets.PopupMenu

Storitev SFWidgets.Menu

Podprite nas!