Wobsah

# Słužba SFWidgets.Menu

Słužba Menu da so wužiwać, zo by menije z menijoweje lajsty dokumentoweho wokna LibreOfficeDev wutworiła a wotstroniła. Kóždy menijowy zapisk da so ze skriptom abo z přikazom UNO zwjazać. Tuta słužba slědowace móžnosće skići:

- Wutworjenje menijow ze swójskimi zapiskami, kontrolnymi kašćikami, opciskimi tłóčatkami a dźělatkami.

- Dekorowanje menijowych zapiskow ze symbolemi a pomocnych tekstow.

Menije, kotrež su so z tutej słužbu wutworili, su jenož za podate dokumentowe wokno k dispoziciji. Njeskładuja w dokumenće abo jako nałoženske nastajenja. Hdyž dokument začinjeće a wočinjeće, so standardne nastajenja menijoweje lajsty wobnowjeja.

Hdyž so objekty OLE kaž formle Math abo diagramy Calc w dokumenće wobdźěłuja, LibreOfficeDev menijowu lajstu po objekće znowa konfiguruje. Hdyž so to stawa, so menije, kotrež su so ze słužbu Menu wutworili, wotstronjeja a so po wobdźěłowanju objekta OLE njewobnowjeja.

## Słužbowe wuwołanje

Před wužiwanjom słužby Menu dyrbi so biblioteka 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 Menu instancuje, hdyž so metoda CreateMenu ze słužby Document wuwołuje. Slědowaca kodowa šlipka meni z mjenom Mój meni w aktualnym dokumentowym woknje z dwěmaj zapiskomaj Zapisk A a Zapisk B wutworja.

        Sub CreateMenu()
            GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
            Dim oDoc as Object, oMenu as Object
            Set oDoc = CreateScriptService("Document")
            Set oMenu = oDoc.CreateMenu("Mój meni")
            With oMenu
                .AddItem("Zapisk A", Command := "About")
                .AddItem("Zapisk B", Script := "vnd.sun.star.script:Standard.Module1.ItemB_Listener?language=Basic&location=application")
                .Dispose()
            End With
        End Sub

Po wutworjenju menija so poruča, metodu Dispose wuwołać, zo bychu so resursy wuswobodźili, kotrež so přez słužbowu instancu Menu wužiwaja.

W přikładźe horjeka je Zapisk A z přikazom UNO .uno:About zwjazany, mjeztym zo Zapisk B je ze skriptom ItemB_Listener, kotryž je w Module1 biblioteki Standard kontejnera My Macros definowany.

Slědowacy přikład ItemB_Listener definuje, kotryž so wuwołuje, hdyž so na Zapisk B klika. Tutón posłuchar prosće znamješkowy rjećazk argumenta rozdźěluje, kotryž so Sub přepodawa a pokazuje je w zdźělenskim polu.

        Sub ItemB_Listener(args As String)
            ' Znamješkowy rjećazk předźěłać, kotryž so posłucharjej přepodawa
            Dim sArgs as Object
            sArgs = Split(args, ",")
            MsgBox "Menijowe mjeno: " & sArgs(0) & Chr(13) & _
                   "Menijowy zapisk: " & sArgs(1) & Chr(13) & _
                   "Zapiskowy ID: " & sArgs(2) & Chr(13) & _
                   "Zapiskowy status: " & sArgs(3)
        End Sub

Kak so w přikładźe horjeka pokazuje, dóstawaja menijowe zapiski, kotrež su ze skriptom zwjazane, přez komu dźěleny znamješkowy rjećazk argumenta ze slědowacymi hódnotami:

- Mjeno najwyšeje runiny menija.

- ID znamješkoweho rjećazka wubraneho menijoweho zapiska.

- Numeriski ID wubraneho menijoweho zapiska.

- Aktualny staw menijoweho zapiska. To je wužitne za kontrolne kašćiki a opciske tłóčatka. Jeli zapisk je markěrowany, so hódnota „1“ wróći, hewak so „0“ wróći.

##### W Python

Přikłady horjeka hodźa so w Python takle pisać:

        from scriptforge import CreateScriptService

        def create_menu(args=None):
            oDoc = CreateScriptService("Document")
            oMenu = oDoc.CreateMenu("My Menu")
            oMenu.AddItem("Item A", command="About")
            oMenu.AddItem("Item B", script="vnd.sun.star.script:my_macros.py$item_b_listener?language=Python&location=user")
            oMenu.Dispose()

        def item_b_listener(args):
            bas = CreateScriptService("Basic")
            s_args = args.split(",")
            msg = f"Menijowe mjeno: {s_args[0]}\n"
            msg += f"Menijowe zapisk: {s_args[1]}\n"
            msg += f"Zapiskowy ID: {s_args[2]}\n"
            msg += f"Zapiskowy status: {s_args[3]}"
            bas.MsgBox(msg)

## Kajkosće

Mjeno | Přećiwo pisanju škitany | Typ | Wopisanje
--- | --- | --- | ---
ShortcutCharacter | Ně | String | Znamješko, kotrež so wužiwa, zo by přistupnu tastu menijoweho zapiski definowało. Standardne znamješko je "~".
SubmenuCharacter | Ně | String | Znamješko abo znamješkowy rjećazk, kotrejž definujetej, kak so menijowe zapiski kašćikuja. Standardne znamješko je ">".

## Meni a podmenije

Zo byšće 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ž so placěruje. Wobhladajće sej na přikład 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:

        oMenu.AddItem("Item A")
        oMenu.AddItem("Item B>Item B.1")
        oMenu.AddItem("Item B>Item B.2")
        oMenu.AddItem("---")
        oMenu.AddItem("Item C>Item C.1>Item C.1.1")
        oMenu.AddItem("Item C>Item C.1>Item C.1.2")
        oMenu.AddItem("Item C>Item C.2>Item C.2.1")
        oMenu.AddItem("Item C>Item C.2>Item C.2.2")
        oMenu.AddItem("Item C>Item C.2>---")
        oMenu.AddItem("Item C>Item C.2>Item C.2.3")
        oMenu.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ć

Zapiski w meniju móža symbole měć, kotrež so jako argumenty w metodach AddCheckBox, AddItem a AddRadioButton podawaja.

Wšě symbole, kotrež su w LibreOfficeDev k dispoziciji dadźa so wužiwać, hdyž jich šćežku relatiwnje k rjadowakej podawaće, hdźež symbolowe dataje su w instalaciskim rjadowaku. Symbole su w slědowacym rjadowaku:

INSTALLDIR/share/config

Wužiwajće kajkosć InstallFolder słužby FileSystem, zo byšće zwěsćił, hdźe je so LibreOfficeDev we wašim systemje instalowany.

Tutón rjadowak rjad ZIP-datajow wobsahuje, kotrež wobrazowe dataje kóždeje symboloweje sadźby wobsahuje, kotrež je k dispoziciji. Wobrazy w tutych ZIP-datajach su w rjadowakach organizowane. Zo byšće symbol wužiwał, podajće symbolowu dataju ze šćežku k jeje městnu w ZIP-dataji.

Slědowacy přikład symbol „sc_newdoc.svg“ wužiwa, kotryž je w rjadowaku „cmd“. Nakósna smužka „/“ so jako šćežkowe dźělatko wužiwa, njedźiwajo na dźěłowy system.

##### W Basic

          myMenu.AddItem("Item A", Icon := "cmd/sc_newdoc.svg")

##### W Python

          myMenu.AddItem("Item A", icon="cmd/sc_newdoc.svg")

Wšě symbolowe sadźby maja samsnu internu strukturu. Woprawdźity symbol, kotryž so pokazuje, wot symboloweje sadźby wotwisuje, kotraž so tuchwilu wužiwa.

## Metody

Lisćina metodow w słužbje Menu
AddCheckBox | AddItem | AddRadioButton

## AddCheckBox

Zasadźuje kontrolny kašćik do menija. Wróći cyłoličbowu hódnotu, kotraž zasadźeny zapisk identifikuje.

### Syntaksa:

svc.AddCheckBox(menuitem: str, opt name: str, opt status: bool, opt icon: str, opt tooltip: str, opt command: str, opt script: str): int

### Parametry:

menuitem: Definuje tekst, kotryž so ma w meniju pokazać. Tutón argument tež hierarchiju zapiska w meniju z pomocu podmenijoweho znamješka.

name: Znamješkowy rjećazk, kotryž so wužwa, zo by menijowy zapisk identifikował. Po standardźe so poslednja komponenta menijoweje hierarchije wužiwa.

status: Definuje, hač so zapisk wuběra, hdyž so meni wutworja (standard = False).

icon: Šćežka a mjeno symbola, kotryž so ma bjez načolneho šćežkoweho dźělatka pokazać. Poprawny symbol, kotryž so pokazuje, wot symboloweje sadźby wotwisuje, kotryž so wužiwa.

tooltip: Tekst, kotryž so ma jako pomocny tekst pokazać.

command: Mjeno přikaza UNO bjez prefiksa .uno:. Jeli mjeno přikaza njeeksistuje, so ničo njestawa.

script: IRI za skript Basic abo Python, kotryž so wuwjedźe, hdyž so na zapisk klika.

Argumentaj command a script mjez sobu wuzamkujetej, tohodla jenož jedyn z njeju da so z kóždy menijowy zapisk stajić.

Čitajće Scripting Framework URI Specification, zo byšće wjace wo syntaksy URI zhonił, kotraž so w argumenće script wužiwa.

### Přikład:

##### W Basic

          ' Menijowy zapisk, kotryž je z přikazom .uno:Paste zwjazany
          oMenu.AddCheckBox("Item A", Status := True, ToolTip := "Paste values", Command := "Paste")
          ' Wuwjedźe skript Basic Standard.Module1.MyListener, kotryž je w dokumenće składowany
          oMenu.AddCheckBox("Item B", Status := False, Script := "vnd.sun.star.script:Standard.Module1.MyListener?language=Basic&location=document")
          ' Wuwjedźe skript Python MyListener, kotryž je w dataji myScripts.py w rjadowaku wužiwarskich skriptow
          oMenu.AddCheckBox("Item C", Status := True, Script := "vnd.sun.star.script:myScripts.py$MyListener?language=Python&location=user")

##### W Python

          oMenu.AddCheckBox("Item A", status=True, tooltip="Paste values", command="Paste")
          oMenu.AddCheckBox("Item B", status=False, script="vnd.sun.star.script:Standard.Module1.MyListener?language=Basic&location=document")
          oMenu.AddCheckBox("Item C", Status=True, Script="vnd.sun.star.script:myScripts.py$MyListener?language=Python&location=user")

## AddItem

Zasadźuje zapisk popisa do menija. Wróći cyłoličbowu hódnotu, kotraž zasadźeny zapisk identifikuje.

### Syntaksa:

svc.AddItem(menuitem: str, opt name: str, opt icon: str, opt tooltip: str, opt command: str, opt script: str): int

### Parametry:

menuitem: Definuje tekst, kotryž so ma w meniju pokazać. Tutón argument tež hierarchiju zapiska w meniju z pomocu podmenijoweho znamješka.

name: Znamješkowy rjećazk, kotryž so ma wróćić, hdyž so na zapisk klika. Po standardźe so poslednja komponenta menijoweje hierarchije wužiwa.

icon: Šćežka a mjeno symbola, kotryž so ma bjez načolneho šćežkoweho dźělatka pokazać. Poprawny symbol, kotryž so pokazuje, wot symboloweje sadźby wotwisuje, kotryž so wužiwa.

tooltip: Tekst, kotryž so ma jako pomocny tekst pokazać.

command: Mjeno přikaza UNO bjez prefiksa .uno:. Jeli mjeno přikaza njeeksistuje, so ničo njestawa.

script: IRI za skript Basic abo Python, kotryž so wuwjedźe, hdyž so na zapisk klika.

Argumentaj command a script mjez sobu wuzamkujetej, tohodla jenož jedyn z njeju da so z kóždy menijowy zapisk stajić.

Čitajće Scripting Framework URI Specification, zo byšće wjace wo syntaksy URI zhonił, kotraž so w argumenće script wužiwa.

### Přikład:

##### W Basic

          oMenu.AddItem("Zapisk A", Tooltip := "Wopisowaca powěsć")

##### W Python

          oMenu.AddItem("Zapisk A", tooltip = "Wopisowaca powěsć")

## AddRadioButton

Zasadźuje zapisk opciskeho tłóčatka w meniju. Wróći cyłoličbowu hódnotu, kotraž zasadźeny zapisk identifikuje.

### Syntaksa:

svc.AddRadioButton(menuitem: str, opt name: str, opt status: str, opt icon: str, opt tooltip: str, opt command: str, opt script: str): int

### Parametry:

menuitem: Definuje tekst, kotryž so ma w meniju pokazać. Tutón argument tež hierarchiju zapiska w meniju z pomocu podmenijoweho znamješka.

name: Znamješkowy rjećazk, kotryž so ma wróćić, hdyž so na zapisk klika. Po standardźe so poslednja komponenta menijoweje hierarchije wužiwa.

status: Definuje, hač so zapisk wuběra, hdyž so meni wutworja (standard = False).

icon: Šćežka a mjeno symbola, kotryž so ma bjez načolneho šćežkoweho dźělatka pokazać. Poprawny symbol, kotryž so pokazuje, wot symboloweje sadźby wotwisuje, kotryž so wužiwa.

tooltip: Tekst, kotryž so ma jako pomocny tekst pokazać.

command: Mjeno přikaza UNO bjez prefiksa .uno:. Jeli mjeno přikaza njeeksistuje, so ničo njestawa.

script: IRI za skript Basic abo Python, kotryž so wuwjedźe, hdyž so na zapisk klika.

Argumentaj command a script mjez sobu wuzamkujetej, tohodla jenož jedyn z njeju da so z kóždy menijowy zapisk stajić.

Čitajće Scripting Framework URI Specification, zo byšće wjace wo syntaksy URI zhonił, kotraž so w argumenće script wužiwa.

### Přikład:

##### W Basic

          oMenu.AddRadioButton("Item A", Name := "A", Status := True)

##### W Python

          oMenu.AddRadioButton("Item A", name="A", status=True)

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

Słužba SFWidgets.PopupMenu

Słužba SFDocuments.Document

Prošu podpěrajće nas!