Serviço SFWidgets.PopupMenu

O serviço PopupMenu pode ser usado para criar menus de popup que podem ser associados a eventos ou executados por scripts. O serviço fornece as seguintes funcionalidades:

Invocação do serviço

Antes de usar o serviço PopupMenu a biblioteca ScriptForge precisa ser carregada ou importada:

note

• Macros BASIC precisam carregar a biblioteca ScriptForge usando a seguinte instrução:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Scripts Python exigem uma importação do módulo scriptforge:
from scriptforge import CreateScriptService


Em Basic

O serviço PopupMenu pode ser instanciado de múltiplas maneiras. O exemplo abaixo cria um menu de popup sem associá-lo com um evento de mouse ou aplicação.


    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 do item selecionado: " & vResponse)
        myPopup.Dispose()
    End Sub
  

A execução da Sub definida acima criará um menu de popup com duas entradas na posição X=300 e Y=300 da tela.

tip

O prefixo SFWidgets pode ser suprimido ao invocar o serviço PopupMenu.


O seguinte exemplo define uma Sub que pode ser associada a um evento de mouse:


    Sub MyPopupClick(Optional poMouseEvent as Object)
        Dim myPopup As Object
        Set myPopup = CreateScriptService("PopupMenu", poMouseEvent)
        ' Preenche o menu de popup com itens
        Dim vResponse As Variant
        vResponse = myPopup.Execute(False)
        ' Faz algo com base em vResponse
        ' ...
        myPopup.Dispose()
    End Sub
  
tip

Use o método Dispose para liberar recursos após o término da execução do menu de popup.


Também é possível associar um menu de popup com eventos disparados por aplicativos do LibreOffice, bem como por controles de formulários e caixas de diálogo. Eventos como "Botão do mouse pressionado" e "Botão do mouse liberado" são comumente associados a menus de popup.


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

Os exemplos acima podem ser escritos em Python da seguinte maneira:


    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)
        # Preenche o menu de popup com itens
        response = my_popup.Execute()
        # Faz algo com base no valor de response
        my_popup.Dispose()
  

Propriedades

Nome

Somente de leitura

Tipo

Descrição

ShortcutCharacter

Não

String

Caractere usado para definir a chave de acesso de um item de menu. O caractere padrão é ~.

SubmenuCharacter

Não

String

Caractere ou string que define como itens do menu são aninhados. O caractere padrão é >.


Menus e Submenus

Para criar um menu de popup com submenus, use o caractere definido na propriedade SubmenuCharacter durante a criação do item do menu para definir onde ele será posicionado. Por exemplo, considere a hierarquia de menu/submenu definida a seguir:


    ' 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
  

O código abaixo usa o caractere padrão de submenu > para criar a hierarquia de menu/submenu definida acima:


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

A string --- é usada para definir linhas separadoras em menus ou submenus.


Usando ícones

Itens em menus podem ter ícones, os quais são especificados como argumentos nos métodos AddCheckBox, AddItem e AddRadioButton.

Todos os ícones disponíveis no LibreOffice podem ser usados para especificar seu caminho relativo à pasta onde os arquivos de ícones se encontram no diretório de instalação. Ícones estão localizados no seguinte diretório:

INSTALLDIR/share/config

tip

Use a propriedade InstallFolder do serviço FileSystem para determinar onde o LibreOffice está instalado em seu sistema.


Esta pasta contém uma série de arquivos ZIP contendo os arquivos de imagens de todos os temas de ícones. As imagens dentro desses arquivos ZIP são organizados em pastas. Para usar um ícone, especifique o arquivo de ícone com o caminho para sua localização dentro do arquivo ZIP.

O exemplo abaixo usa o ícone "sc_newdoc.svg" que está localizado dentro da pasta "cmd". A barra "/" é usada como separador de pastas independentemente do sistema operacional.

Em Basic

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

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

Todos os temas de ícones possuem a mesma estrutura interna. O ícone exibido depende do tema de ícone atualmente em uso.


Métodos

Lista de Métodos do Serviço PopupMenu

AddCheckBox
AddItem

AddRadioButton

Execute


AddCheckBox

Insere uma caixa de seleção no menu de pop-up. Retorna um valor inteiro que identifica o item inserido.

Sintaxe:

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

Parâmetros:

menuitem: Define o texto a ser mostrado no menu. Este argumento também define a hierarquia do item dentro do menu usando o caractere de submenu.

name: Valor string que será retornado quando o item for clicado. Por padrão, o último componente da hierarquia do menu é usado.

status: Define se o item está selecionado quando o menu é criado (Padrão = False).

icon: Caminho e nome do ícone a ser mostrado sem o separador de caminho no início. O ícone que efetivamente será mostrado depende do tema de ícone em uso.

tooltip: Texto de ajuda a ser associado ao item.

Exemplo:

Em Basic

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

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

AddItem

Insere uma entrada no menu de popup. Retorna um valor inteiro que identifica o item inserido.

Sintaxe:

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

Parâmetros:

menuitem: Define o texto a ser mostrado no menu. Este argumento também define a hierarquia do item dentro do menu usando o caractere de submenu.

name: Valor string que será retornado quando o item for clicado. Por padrão, o último componente da hierarquia do menu é usado.

icon: Caminho e nome do ícone a ser mostrado sem o separador de caminho no início. O ícone que efetivamente será mostrado depende do tema de ícone em uso.

tooltip: Texto de ajuda a ser associado ao item.

Exemplo:

Em Basic

      myPopup.AddItem("Item A", Tooltip := "Uma mensagem explicativa")
    
Em Python

      my_popup.AddItem("Item A", tooltip = "Uma mensagem explicativa")
    

AddRadioButton

Insere um botão de opção no menu de popup. Retorna o valor inteiro que identifica o item inserido.

Sintaxe:

svc.AddRadioButton(menuitem: str, opt name: str, opt status: bool = False, opt icon: str, opt tooltip: str): int

Parâmetros:

menuitem: Define o texto a ser mostrado no menu. Este argumento também define a hierarquia do item dentro do menu usando o caractere de submenu.

name: Valor string que será retornado quando o item for clicado. Por padrão, o último componente da hierarquia do menu é usado.

status: Define se o item está selecionado quando o menu é criado (Padrão = False).

icon: Caminho e nome do ícone a ser mostrado sem o separador de caminho no início. O ícone que efetivamente será mostrado depende do tema de ícone em uso.

tooltip: Texto de ajuda a ser associado ao item.

Exemplo:

Em Basic

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

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

Execute

Mostra o menu de popup e espera alguma ação do usuário. Retorna o item clicado pelo usuário.

Se o usuário clicar fora do menu de popup ou se pressionar a tecla Esc, então nenhum item do menu foi selecionado. Em tais casos, o valor retornado depende do parâmetro returnid. Se returnid = True e nenhum item for selecionado, então o valor 0 (zero) será retornado. Caso contrário, uma string vazia "" será retornada.

Sintaxe:

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

Parâmetros:

returnid: Se True a ID do item selecionado é retornada. Se False o método retorna o nome do item (Padrão = True).

Exemplo:

Nos exemplos abaixo, um menu de popup é criado e o nome do item é retornado porque o argumento returnid foi definido como False.

Em Basic

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

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

Todas as rotinas ou identificadores do ScriptForge em Basic que possuem o caractere "_" como prefixo são reservadas para uso interno. Elas não devem ser usadas em macros escritas em Basic ou em Python.


♥ Doe para nosso projeto! ♥