Menus de contexto

Quando um usuário clica com o botão direito do mouse (ou toca nele e o mantém pressionado) em um bloco ou espaço de trabalho, um menu de contexto com outras ações é mostrado. É possível configurar esse menu de contexto para mostrar mais opções ou remover as opções padrão. Neste guia, explicamos como adicionar uma opção personalizada a todos os blocos ou todos os espaços de trabalho. Se você quiser mudar o menu de contexto para apenas um tipo de bloco, consulte as informações na página de blocos personalizados.

API do menu de contexto

A classe ContextMenuRegistry contém métodos para registrar, cancelar o registro e receber todas as opções do menu de contexto. A classe é um singleton, então os métodos precisam ser chamados no objeto Blockly.ContextMenuRegistry.registry em vez de criar uma nova instância por conta própria. A classe ContextMenu chama o método getContextMenuItems sempre que um menu de contexto é mostrado. Se o bloco ou espaço de trabalho tiver uma função customContextMenu, ele será chamado posteriormente para modificar a lista de opções.

Como adicionar opções personalizadas

Cada opção de menu no registro tem várias propriedades:

  • callback: uma função chamada quando a opção do menu é clicada.
  • scopeType: um de Blockly.ContextMenuRegistry.ScopeType.BLOCK ou Blockly.ContextMenuRegistry.ScopeType.WORKSPACE para onde essa opção precisa ser exibida. Se uma opção precisar ser mostrada para espaços de trabalho e blocos, ela deverá ser registrada uma vez para cada scopeType.
  • displayText: uma string ou HTML ou uma função que retorna um dos primeiros. Determina o texto mostrado no menu.
  • preconditionFn: função que retorna enabled, disabled ou hidden para determinar se e como a opção de menu será renderizada.
  • weight: um número que determina a ordem de classificação da opção. As opções com ponderações mais altas aparecem mais tarde no menu de contexto.
  • id: um ID de string exclusivo para a opção.

Cada uma das funções callback, displayText (se for uma função) e preconditionFn será chamada com um objeto Scope que contém informações sobre o espaço de trabalho ou bloco exato em que ele está sendo clicado. Dessa forma, a opção do menu de contexto pode fazer referência a propriedades sobre o espaço de trabalho ou o bloco. Por exemplo, a opção de menu de contexto que permite ao usuário excluir todos os blocos é "Excluir 42 blocos" se o espaço de trabalho tiver 42 blocos. Com o preconditionFn, uma opção de menu poderá ser enabled se alguma propriedade do bloco for verdadeira ou disabled caso contrário.

Para mais exemplos, consulte o registro das opções padrão do menu de contexto em contextmenu_items.js.

Alterar ou remover opções padrão

É possível cancelar o registro de qualquer opção em Blockly.ContextMenuRegistry.registry.unregister(id). Os códigos das opções padrão estão em contextmenu_items.js.

Para mudar uma opção padrão, chame getItem com o ID e mude conforme necessário.