Wobsah

# Słužba SFWidgets.PopupMenu

Słužba PopupMenu da so wužiwać, zo by wuskakowace menije wutworił, kotrež dadźa so z podawkami zwjazać abo přez skripty wuwjesć. Tuta słužba slědowace funkcije skići:

- Wutworjenje wuskakowacych menijow ze swójskimi zapiskami, kontrolnymi kašćikami a opciskimi polemi.

- Dekoracija menijowe zapiski ze symbolemi a pomocnymi tekstami.

## Słužbowe wuwołanje

Prjedy hač słužbu PopupMenu wužiwaće, dyrbiće biblioteku 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 PopupMenu da so na wjacore wašnja instanciěrować. Slědowacy přikład wuskakowacy meni wutworja, bjeztoho zo by so z podawkom myški abo nałoženja zwjazał.

        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 wubraneho zapiska: " & vResponse)
            myPopup.Dispose()
        End Sub

Hdyž so horjeka definowany wotrězk Sub wuwjedźe, so wuskakowacy meni z dwěmaj zapiskomaj w poziciji X=300 a Y=300 na wobrazowce wutwori.

Prefiks SFWidgets da so potłóčić, mjeztym zo so słužba PopupMenu wuwołuje.

Slědowacy přikład wotrězk Sub definuje, kotryž da so z podawkom myški zwjazać:

        Sub MyPopupClick(Optional poMouseEvent as Object)
            Dim myPopup As Object
            Set myPopup = CreateScriptService("PopupMenu", poMouseEvent)
            'Wuskakowacy meni ze zapiskami pjelnić
            Dim vResponse As Variant
            vResponse = myPopup.Execute(False)
            ' Čińće něšto, štož na vResponse bazuje
            ' ...
            myPopup.Dispose()
        End Sub

Wužiwajće metodu Dispose, zo byšće resursy po wuwjedźenju wuskakowaceho menija wuswobodźił.

Je tež móžno, wuskakowacy meni z podawkami zwjazać, kotrež so přez nałoženja LibreOfficeDev, formularowe a dialogowe wodźenske elementy wuwabjeja. Podawki kaž „Myška stłóčena“ a „Myška pušćena“ su zwjetša z wuskakowacymi menijemi zwjazane.

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

##### W Python

Přikłady horjeka dadźa so w Python kaž slěduje pisać:

        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)
            # Wuskakowacy meni ze zapiskami pjelnić
            response = my_popup.Execute()
            # Něšto na zakładźe wotmołwy činić
            my_popup.Dispose()

## 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 zapiska definowało. Standardne znamješko je ~.
SubmenuCharacter | Ně | String | Znamješko abo znamješkowy rjećazk, kotrejž definujetej, kak so menijowe zapiski zakašćikuja. Standardne znamješko je >.

## Meni a podmenije

Zo byšće wuskakowacy 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:

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

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 PopupMenu
AddCheckBox AddItem | AddRadioButton | Execute

## AddCheckBox

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

### Syntaksa:

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

### Přikład:

##### W Basic

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

##### W Python

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

## AddItem

Zasadźuje menijowy zapisk do wuskakowaceho 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): 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ć.

### Přikład:

##### W Basic

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

##### W Python

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

## AddRadioButton

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

### Syntaksa:

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

### Přikład:

##### W Basic

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

##### W Python

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

## Execute

Pokazuje wuskakowacy meni a čaka na akciju wužiwarja. Wróći zapisk, na kotryž je wužiwar kliknył.

Jeli wužiwar zwonka wuskakowaceho menija klika abo tastu Esc tłóči, so žadyn zapisk njewuběra. W tajkich padach wróćena hódnota wo parametra returnid wotwisuje. Jeli returnid = True a žadyn zapisk wubrany njeje, so hódnota 0 (nul) wróći. Hewak so prózdny znamješkowy rjećazk "" wróći.

### Syntaksa:

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

### Parametry:

returnid: Jeli True, so ID wubraneho zapiska wróći. Jeli False, metoda mjeno zapiska wróći (Standard = True).

### Přikład:

W slědowacych přikładach so wuskakowacy meni wutworja a mjeno zapiska so wróća, dokelž argument returnid so na False staja.

##### W Basic

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

##### W Python

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

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

Słužba SFDialogs.DialogControl

Słužba SFWidgets.Menu

Prošu podpěrajće nas!