Vsebina

# Storitev SFWidgets.Menu

Storitev Menu lahko uporabite za ustvarjanje in odstranjevanje menijev v menijski vrstici okna dokumenta LibreOffice. Vsak menijski vnos lahko povežete s skriptom ali ukazom UNO. Ta storitev ponuja naslednje zmogljivosti:

- Ustvarjanje menijev z vnosi, potrditvenimi polji, izbirnimi polji in ločili po meri.

- Okrasitev menijskih elementov z ikonami in namigi.

Meniji, ustvarjeni s to storitvijo, so na voljo le v navedenem oknu dokumenta. Ne shranijo se v dokument, tudi kot nastavitve programa ne. Če zaprete in odprete dokument, s tem obnovite privzete nastavitve menijske vrstice.

Če predmete OLE, kot so formule programa Math ali grafikoni programa Calc, urejamo v dokumentu, LibreOffice prilagodi menijsko vrstico glede na predmet. Ko se to zgodi, se meniji, ustvarjeni s storitvijo Menu, odstranijo in se več ne obnovijo, ko je urejanje predmeta OLE zaključeno.

## Priklic storitve

Pred uporabo storitve Menu 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

Instanco storitve Menu lahko tvorite s klicem metode CreateMenu iz storitve Document. Spodnji odlomek kode ustvari meni Moj meni v oknu trenutnega dokumenta z dvema vnosoma, Element A in Element B.

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

Po izdelavi menija je priporočeno, da pokličete metodo Dispose, da sprostite vire, ki jih uporablja instanca storitve Menu.

V zgornjem primeru je Element A povezan z ukazom UNO .uno:About, medtem ko je Element B povezan s skriptom ItemB_Listener, določenim v Modul1 knjižnice Standardno vsebnika Moji Makri.

Naslednji primer določi ItemB_Listener, ki bo klican, ko je kliknjen Element B. Ta poslušalec enostavno razdeli niz, podan v Sub, na argumente in jih prikaže v pojavnem oknu.

        Sub ItemB_Listener(args As String)
            ' Obdelaj niz argumentov, podan poslušalcu
            Dim sArgs as Object
            sArgs = Split(args, ",")
            MsgBox "Ime menija: " & sArgs(0) & Chr(13) & _
                   "Element menija: " & sArgs(1) & Chr(13) & _
                   "ID elementa= " & sArgs(2) & Chr(13) & _
                   "Stanje elementa: " & sArgs(3)
        End Sub

Kot prikazuje zgornji primer, prejmejo menijski vnosi, povezani s skriptom, argument kot niz, ločen z vejicami, z naslednjimi vrednostmi:

- Vrhnje ime menija.

- ID niza izbranega menijskega vnosa.

- Številski ID izbranega menijskega vnosa.

- Trenutno stanje menijskega vnosa. To je uporabno za potrditvena polja in izbirne gumbe. Če je element potrjen, vrne vrednost "1", sicer vrne "0".

##### V Pythonu

Zgornje primere lahko zapišemo v Pythonu na sledeč način:

        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"Ime menija: {s_args[0]}\n"
            msg += f"Element menija: {s_args[1]}\n"
            msg += f"ID elementa: {s_args[2]}\n"
            msg += f"Stanje elementa: {s_args[3]}"
            bas.MsgBox(msg)

## Lastnosti

Ime | Samo za branje | Vrsta | Opis
--- | --- | --- | ---
ShortcutCharacter | Ne | String | Znak, ki določa dostopno tipko za menijski element. Privzeta vrednost je »~«.
SubmenuCharacter | Ne | String | Znak ali niz, ki določa, kako so elementi menija gnezdeni. Privzeti znak je »>«.

## Meni in podmeniji

Za izdelavo 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:

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

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

### Uporaba ikon

Elementi menija imajo lahko ikone, ki so določene kot argumenti metod AddCheckBox, AddItem in AddRadioButton.

Uporabite lahko vse ikone, ki so na voljo v LibreOffice, tako da določite njihovo pot relativno glede na mapo, kjer se nahajajo datoteke ikon v namestitveni mapi. Ikone se nahajajo v naslednji mapi:

INSTALLDIR/share/config

Uporabite lastnost InstallFolder storitve FileSystem, da ugotovite, kje na vašem sistemu je nameščen LibreOffice.

Ta mapa vsebuje niz datotek ZIP, ki vsebujejo slikovne datoteke vseh naborov ikon, ki so na voljo. Slike v teh datotekah ZIP so organizirane v mape. Če želite uporabiti ikono, navedite datoteko ikone s potjo do njenega mesta v datoteki ZIP.

Spodnji primer uporablja ikono »sc_newdoc.svg«, ki se nahaja v mapi »cmd«. Znak poševnice »/« se uporablja kot ločilo v poteh, ne glede na uporabljeni operacijski sistem.

##### V Basicu

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

##### V Pythonu

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

Vsi nabori ikon imajo isto interno strukturo. Dejansko prikazana ikona je odvisna od trenutno uporabljenega nabora ikon.

## Metode

Seznam metod storitve Menu
AddCheckBox | AddItem | AddRadioButton

## AddCheckBox

V meni vstavi potrditveno polje. Vrne celoštevilsko vrednost, ki identificira vstavljeni element.

### Skladnja:

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

### Parametri:

menuitem: določa besedilo, ki bo prikazano v meniju. Ta argument definira tudi hierarhijo elementa v meniju z uporabo znaka za podmeni.

name: vrednost niza, ki identificira element menija. Privzeto je uporabljena zadnja komponenta hierarhije menija.

status: določa, ali je element izbran, ko je ustvarjen meni (privzeta vrednost je False).

icon: pot in ime ikone, ki bo prikazana, brez vodilnega ločila poti. Dejansko prikazana ikona je odvisna od uporabljenega nabora ikon.

tooltip: besedilo, ki bo prikazano kot namig.

command: ime ukaza UNO brez predpone .uno:. Če ime ukaza ne obstaja, se ne zgodi nič.

script: URI za skript Basic oz. Python, ki bo izvršen, ko se zgodi klik elementa.

Argumenta command in script sta vzajemno izključujoča, zato lahko za vsak element menija nastavite le enega izmed njiju.

Če želite izvedeti več o skladnji URI, uporabljeni v argumentu script, si oglejte specifikacijo URI na wiki-strani specifikacije URI za ogrodje skriptanja (v angl.).

### Primer:

##### V Basicu

          ' Menijski vnos, povezan z ukazom .uno:Paste
          oMenu.AddCheckBox("Item A", Status := True, ToolTip := "Paste values", Command := "Paste")
          ' Zažene skript Basic Standard.Module1.MyListener, shranjen v dokumentu
          oMenu.AddCheckBox("Item B", Status := False, Script := "vnd.sun.star.script:Standard.Module1.MyListener?language=Basic&location=document")
          ' Zažene skript Python MyListener, ki se nahaja v datoteki myScripts.py v mapi uporabniških skriptov
          oMenu.AddCheckBox("Item C", Status := True, Script := "vnd.sun.star.script:myScripts.py$MyListener?language=Python&location=user")

##### V Pythonu

          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

V meni vstavi oznako kot vnos. Vrne celoštevilsko vrednost, ki identificira vstavljeni element.

### Skladnja:

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

### Parametri:

menuitem: določa besedilo, ki bo prikazano v meniju. Ta argument definira tudi hierarhijo elementa v meniju z uporabo znaka za podmeni.

name: vrednost niza, ki bo vrnjena ob kliku elementa. Privzeto je uporabljena zadnja komponenta hierarhije menija.

icon: pot in ime ikone, ki bo prikazana, brez vodilnega ločila poti. Dejansko prikazana ikona je odvisna od uporabljenega nabora ikon.

tooltip: besedilo, ki bo prikazano kot namig.

command: ime ukaza UNO brez predpone .uno:. Če ime ukaza ne obstaja, se ne zgodi nič.

script: URI za skript Basic oz. Python, ki bo izvršen, ko se zgodi klik elementa.

Argumenta command in script sta vzajemno izključujoča, zato lahko za vsak element menija nastavite le enega izmed njiju.

Če želite izvedeti več o skladnji URI, uporabljeni v argumentu script, si oglejte specifikacijo URI na wiki-strani specifikacije URI za ogrodje skriptanja (v angl.).

### Primer:

##### V Basicu

          oMenu.AddItem("Element A", Tooltip := "Opisno sporočilo")

##### V Pythonu

          oMenu.AddItem("Element A", tooltip := "Opisno sporočilo")

## AddRadioButton

V meni vstavi izbirni gumb. Vrne celoštevilsko vrednost, ki identificira vstavljeni element.

### Skladnja:

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

### Parametri:

menuitem: določa besedilo, ki bo prikazano v meniju. Ta argument definira tudi hierarhijo elementa v meniju z uporabo znaka za podmeni.

name: vrednost niza, ki bo vrnjena ob kliku elementa. Privzeto je uporabljena zadnja komponenta hierarhije menija.

status: določa, ali je element izbran, ko je ustvarjen meni (privzeta vrednost je False).

icon: pot in ime ikone, ki bo prikazana, brez vodilnega ločila poti. Dejansko prikazana ikona je odvisna od uporabljenega nabora ikon.

tooltip: besedilo, ki bo prikazano kot namig.

command: ime ukaza UNO brez predpone .uno:. Če ime ukaza ne obstaja, se ne zgodi nič.

script: URI za skript Basic oz. Python, ki bo izvršen, ko se zgodi klik elementa.

Argumenta command in script sta vzajemno izključujoča, zato lahko za vsak element menija nastavite le enega izmed njiju.

Če želite izvedeti več o skladnji URI, uporabljeni v argumentu script, si oglejte specifikacijo URI na wiki-strani specifikacije URI za ogrodje skriptanja (v angl.).

### Primer:

##### V Basicu

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

##### V Pythonu

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

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 SFDocuments.Document