Vsebina
Kazalo 🔎︎

# Storitev SFWidgets.PopupMenu

Storitev PopupMenu lahko uporabite za ustvarjanje pojavnih menijev, ki jih lahko povežete z dogodki ali izvajate s skripti. Ta storitev ponuja naslednje zmogljivosti:

- Ustvarjanje pojavnih menijev z vnosi, potrditvenimi polji in izbirnimi polji po meri.

- Okrasitev menijskih elementov z ikonami in namigi.

## Priklic storitve

Pred uporabo storitve PopupMenu 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 PopupMenu lahko tvorite na več načinov. Spodnji primer ustvari pojavni meni brez povezovanja z dogodkom miške ali programa.

        Sub ShowPopup
            GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
            Dim myPopup As Object
            Set myPopup = CreateScriptService("SFWidgets.PopupMenu", , 300, 300)
            myPopup.AddItem("Item ~A")
            myPopup.AddItem("Item ~B")
            vResponse = myPopup.Execute()
            MsgBox("ID izbranega elementa: " & vResponse)
            myPopup.Dispose()
        End Sub

Izvajanje zgoraj določenega podprograma Sub ustvari pojavni meni z dvema vnosoma na položaju X=300 in Y=300 na zaslonu.

Predpono SFWidgets lahko pri priklicu storitve PopupMenu izpustite.

Naslednji primer določa podprogram Sub, ki ga lahko povežete z dogodkom miške:

        Sub MyPopupClick(Optional poMouseEvent as Object)
            Dim myPopup As Object
            Set myPopup = CreateScriptService("PopupMenu", poMouseEvent)
            ' Napolni pojavni meni z elementi
            Dim vResponse As Variant
            vResponse = myPopup.Execute(False)
            ' Stori nekaj na osnovi vResponse
            ' ...
            myPopup.Dispose()
        End Sub

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

Možno je tudi, da pojavni meni povežete z dogodki, ki jih prožijo moduli pisarniškega paketa LibreOffice ter kontrolniki obrazcev in pogovornih oken. Dogodki, kot sta »Gumb miške pritisnjen« in »Gumb miške sproščen«, so običajno povezani s pojavnimi meniji.

        Sub MyPopupClick(Optional poEvent as Object)
            Dim myPopup As Object
            Set myPopup = CreateScriptService("PopupMenu", poEvent)
            ' ...
        End Sub

##### V Pythonu

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

        from scriptforge import CreateScriptService

        def show_popup(args=None):
            my_popup = CreateScriptService("SFWidgets.PopupMenu", None, 300, 300)
            bas = CreateScriptService("Basic")
            my_popup.AddItem("Item ~A")
            my_popup.AddItem("Item ~B")
            response = my_popup.Execute()
            bas.MsgBox(f"Selected item ID: {response}")
            my_popup.Dispose()

        def my_popup_click(poEvent=None):
            my_popup = CreateScriptService("SFWidgets.PopupMenu", poEvent)
            # Napolni pojavni meni z elementi
            response = my_popup.Execute()
            # Stori nekaj na osnovi odziva
            my_popup.Dispose()

## 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 pojavnega 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:

        myPopup.AddItem("Item A")
        myPopup.AddItem("Item B>Item B.1")
        myPopup.AddItem("Item B>Item B.2")
        myPopup.AddItem("---")
        myPopup.AddItem("Item C>Item C.1>Item C.1.1")
        myPopup.AddItem("Item C>Item C.1>Item C.1.2")
        myPopup.AddItem("Item C>Item C.2>Item C.2.1")
        myPopup.AddItem("Item C>Item C.2>Item C.2.2")
        myPopup.AddItem("Item C>Item C.2>---")
        myPopup.AddItem("Item C>Item C.2>Item C.2.3")
        myPopup.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 PopupMenu
AddCheckBox AddItem | AddRadioButton | Execute

## AddCheckBox

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

### Skladnja:

svc.AddCheckBox(menuitem: str, opt name: str, opt status: bool = False, opt icon: str, opt tooltip: 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.

### Primer:

##### V Basicu

          myPopup.AddCheckBox("Option A", Status := True)

##### V Pythonu

          my_popup.AddCheckBox("Option A", status=True)

## AddItem

V pojavni meni vstavi menijski vnos oz. ukaz. Vrne celoštevilsko vrednost, ki identificira vstavljeni element.

### Skladnja:

svc.AddItem(menuitem: str, opt name: str, opt icon: str, opt tooltip: 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.

### Primer:

##### V Basicu

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

##### V Pythonu

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

## AddRadioButton

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

### Skladnja:

svc.AddRadioButton(menuitem: str, opt name: str, opt status: bool = False, opt icon: str, opt tooltip: 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.

### Primer:

##### V Basicu

          myPopup.AddRadioButton("Option A", Name := "A", Status := True)

##### V Pythonu

          my_popup.AddRadioButton("Option A", name="A", status=True)

## Execute

Prikaže pojavni meni in počaka na dejanje uporabnika. Vrne element, ki ga je kliknil uporabnik.

Če uporabnik klikne izven pojavnega menija ali pritisne ubežnico, ni izbran noben element. V takšnih primerih je vrnjena vrednost odvisna od parametra returnid. Če je returnid = True in ni izbran noben element, vrne vrednost 0 (nič). Sicer vrne prazen niz »«.

### Skladnja:

svc.Execute(opt returnid: bool = True): any

### Parametri:

returnid: če je True, vrne ID izbranega elementa. Če je False, metoda vrne ime elementa (privzeta vrednost je True).

### Primer:

V spodnjih primerih je ustvarjen pojavni meni, vrne pa ime elementa, saj je argument returnid nastavljen na False.

##### V Basicu

          myPopup.AddItem("Item A", Name := "A")
          myPopup.AddItem("Item B", Name := "B")
          Dim vResponse as Variant
          vResponse = myPopup.Execute(False)

##### V Pythonu

          my_popup.AddItem("Item A", name="A")
          my_popup.AddItem("Item B", name="B")
          response = my_popup.Execute(False)

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 SFDialogs.Dialog

Storitev SFDialogs.DialogControl

Storitev SFWidgets.Menu