Pular para conteúdo

Arrastando e Soltando Informações / Drag And Drop

Arrastando e Soltando informações / Drag and Drop

 

Arrastar e Soltar, do inglês "Drag and Drop", é a ação de clicar em um objeto virtual e "arrastá-lo" a uma posição diferente ou sobre um outro objeto virtual. De maneira geral, ele pode ser usado para invocar diversos tipos de ações, ou criar vários tipos de associações entre dois objetos abstratos.

 

A sequência básica de ações relacionadas ao drag-and-drop é:

  • Clicar, e manter o botão do mouse apertado para "agarrar" o objeto,
  • "Arrastar" (drag) o objeto/cursor à posição ou localização desejada,
  • "Soltar" (drop) o objeto, soltando o botão pressionado.

 

Fluxo de acontecimento

 

No exemplo a seguir, o usuário iniciou o processo drag-and-drop agarrando o objeto preto (1 na figura), arrastando o mouse até o objeto vermelho (3 na figura) e soltando o botão.

Image

 

O fluxo segue na seguinte ordem:

  • O Usuário clica e mantêm o botão do mouse pressionado sobre o objeto 1 para iniciar um processo de drag-and-drop.
  • O Firecast, através do evento onStartDrag do objeto 1, pede para que o objeto 1 informe as informações que o usuário pode arrastar dele.
  • O Plugin SDK3, dentro da chamada do evento onStartDrag, informa ao Firecast o que o usuário pode arrastar do objeto 1. Os dados são adicionados a um objeto Drag (2 na figura) que o Firecast cria automaticamente para esta operação de drag-and-drop específica.
  • O Firecast interage com o usuário até que ele passe o mouse sobre uma área de Drop, isto é, de um objeto que aceite que operações drag-and-drop sejam "largadas" sobre ele. O objeto 3 possui uma área de drop.
  • O Firecast, através do evento onStartDrop do objeto 3, pede para que o objeto 3 informe o quais informações o usuário pode "largar" sobre ele.
  • O Plugin SDK3, dentro da chamada do evento onStartDrop, informa ao Firecast o que o usuário pode largar sobre o objeto 3. Os dados são adicionados a um objeto Drop que o Firecast cria automaticamente para receber estas informações.
  • O Firecast, com base nas informações do objeto Drag preenchidas pelo objeto 1 e nas informações do objeto Drop preenchidas pelo objeto 3, decide se a operação drag-and-drop pode acontecer. Se um não conseguir lidar com as informações do outro, a operação drag-and-drop não poderá ser concluída.
  • Caso a operação Drag-and-Drop puder ser finalizada, o Firecast chama a ação do objeto 3 ou objeto 1 que melhor puder lidar com esta operação.

 

Informações e Ações em uma operação drag-and-drop

 

Para que uma operação Drag-And-Drop aconteça, é necessário haver ao menos uma informação e ao menos uma ação capaz de lidar com ela. 

 

Informações e ações podem existir tanto no objeto Drag quanto no objeto Drop: 

 

Informações e ações estão atreladas a um DataType, isto é, a uma cadeia de caracteres que define o tipo de dados que é arrastado.

 

DataTypes padrões do Firecast

O programador pode inventar qualquer DataType, porém existem os seguintes que são padrões do Firecast:

 

DataType padrão Valor transportado
text Uma cadeia de caracteres, um texto qualquer. 
imageURL Uma cadeia de caracteres que contém uma URL de uma imagem. 
player Um objeto Jogador 
players Array de objeto Jogador 
character Um objeto Personagem 
characters Array de objeto Personagem 
libraryItem Um objeto BibliotecaItem 
libraryItens Array de objeto BibliotecaItem 
sceneUnitClass Um objeto SceneUnitClass 
sceneUnitClasses Array de objeto SceneUnitClass 
imageFile A table containing the following attributes: name - String with the name of the file. mimeType - String with the MIME type of the image (examples: image/jpeg, image/png) stream - A read-only Stream object containing the image file bytes. 
imageFiles An array of tables with the same structure as the "imageFile".

 

Observação: Ao utilizar os dataTypes padrões, o RRPG valida e exige que sejam transportados valores adequados conforme a tabela acima.

 

 

Exemplos

 

Exemplo 1 - Arrastando um texto de um Label

Experimente arrastar o label para a caixa de digitação de mensagens e comandos do RRPG.

 

\<label text="Me arraste!" top="150" hitTest="true">     \<event name="OnStartDrag">         drag:addData("text", "Texto que será arrastado deste label!");     \</event> \</label> 

 

 

Exemplo 2 - Arrastando uma imagem e um texto de um Label

Experimente arrastar o label para o log do chat do RRPG!

 

\<label text="Me arraste!" top="150" hitTest="true">     \<event name="OnStartDrag">         drag:addData("text", "Texto que será arrastado deste label!");         drag:addData("imageURL", "http://www.rrpg.com.br/wp-content/uploads/2013/05/cropped-Untitled-2.png");     \</event> \</label> 

 

 

 

Exemplo 3 - Um controle que captura arraste de imagens.

Arraste uma imagem do browser Chrome ou do jogador para este controle.

 

\<rectangle left="150" top="150"            width="150" height="150"            strokeColor="yellow" strokeSize="1"            color="none">                 \<image name="imgImagem" align="client" hitTest="true">         \<event name="OnStartDrop">             drop:addAction("imageURL",                 function(value)                     self.imgImagem.src = value;                 end);         \</event>     \</image>     \</rectangle> 

 

 

Exemplo 4 - Um controle que captura arraste de Jogadores.

Arraste um jogador da mesa para este controle!

 

\<rectangle left="150" top="150"            width="150" height="150"            strokeColor="yellow" strokeSize="1"            color="none"            hitTest="true">                 \<event name="OnStartDrop">         drop:addAction("player",             function(value)                 showMessage("O login deste jogador é: " .. value.login);                   end);     \</event>            \</rectangle> 

 

Exemplo 5 - Arrastando uma ação à partir de um botão

Arraste este botão para um jogador da mesa!

 

\<button left="150" top="150" text="meArraste">     \<event name="OnStartDrag">         drag:addAction("player",             function(destValue)                 showMessage("Você me arrastou para o jogador: " .. destValue.login);             end);     \</event> \</button> 

Created with the Personal Edition of HelpNDoc: Generate EPub eBooks with ease