Pular para conteúdo

Tag recordList

Tag recordList

 

A tag/componente recordList é uma lista de registros na interface. Usada em conjunto com um NodeDatabase, o controle apresenta um painel na interface para cada item/nodo filho de um campo.

 

Observações:

  •  
  • O painel dos itens é customizado pelo programador.
  • O painel dos itens deve ser um form (ver Tag form) e é chamado de Template Form.
  • Você vai precisar de ao menos dois arquivos de extensão ".lfm": Um onde se encontra o recordList, e outro representando o painel item.
  • Cada item possui seu próprio objeto nodo, e cada painel de item é automaticamente ligado a seu escopo de dados.

Herança

O recordList possui todas as características da tag layout. 

Veja:

 

Características

Além das características herdadas, o recordList possui também as seguintes características:

Propriedades e atributos

Propriedade Tipo Valor Padrão Descrição
field String \<string vazio> Caminho de um campo no NodeDatabase.  Quando associado, o recordList passa a usar este campo para salvar e apresentar os itens desta lista.  Observações: Deve ser preenchido para o recordList funcionar. O campo informado se tornará um nodo no NodeDatabase  Veja também: Lua Form e NodeDatabase NodeDatabase 
templateForm String \<string vazio> Identifica qual é o template form do record list, isto é, o painel que será exibido para cada item.  Deve ser igual ao atributo "name" de um form contido em algum arquivo ".lfm" do projeto do plugin.  Sim, você precisará de outro arquivo ".lfm" para definir fazer esta tag funcionar. 
itemHeight Float 64.0 Altura padrão de cada item do recordList.  Este valor é usado quando a propriedade "height" do Template Form não for definida. 
minQt Integer 0 Define qual é a quantidade mínima de itens que este recordList deve apresentar na interface.  Experimente colocar o valor 1 nesta propriedade. As vezes isto ajuda o usuário =) 
autoHeight Boolean False Quando true, o recordList automaticamente se expande/contrai na vertical para melhor visualização de seus itens.  Quando false, o recordList apresenta barras de rolagens quando o conteúdo for maior que sua altura. 
layout Enumerado: "vertical" "horizontal" "horizontalTiles" "verticalTiles" "vertical" Define como são organizados visualmente os itens do recordList.  "vertical' - Os itens são empilhados de forma vertical, 1 item por linha. A altura de cada painel é definido pela propriedade "height" do templateForm e a largura é ajustada para equivaler à largura do recordList.  "horizontal" - Os Itens são empilhados lado a lado, de forma horizontal em apenas 1 linha. A largura de cada painel é definido pelo atributo "width" do templateForm e a altura é ajustada para equivaler à altura do recordList. A propriedade autoHeight é desativada ao usar este layout.  "horizontalTiles" - Os itens são dispostos na horizontal (lado a lado), podendo quebrar de linha quando for preciso mais espaço. Tanto a altura quanto a largura de cada painel são definidos pelas propriedades "width" e "height" do templateForm.  "verticalTiles" - Os itens são dispostos na vertical, podendo ocupar mais de 1 coluna quando houver espaço para isso. Tanto a altura quanto a largura de cada painel são definidos pelas propriedades "width" e "height" do templateForm. 
selectable Boolean False Indica se o recordList deve funcionar visualmente como uma lista de itens selecionáveis. 
selectedNode Objeto Nodo \<\< Não há >> Contém o Objeto Nodo do item atualmente focado/selecionado no recordList.  Caso não haja seleção, contém nil.  Ao atribuir um valor, o recordList procura qual de seus itens está associado ao nodo e o seleciona. Caso não encontre, a seleção será desfeita e selectedNode passará a ser nil
selectedForm Objeto Form \<\< Não há >> (Somente Leitura) Contém o Objeto Form do item atualmente focado/selecionado no recordList.  Caso não haja seleção, contém nil

 

Métodos

Método Descrição
recordList:append(); Insere um novo item ao recordList.  Retorno: Caso consiga inserir um novo item, retorna o novo objeto Nodo do item inserido, senão retorna nil
recordList:sort(); Força o recordList a executar uma reordenação de seus itens.  Observação: Você deve manipular o evento onCompare para definir como os itens serão ordenados.
recordList:scrollToNode(node) Se a propriedade "autoHeight" for false, este método movimenta as barras de rolagem do recordList para que o painel do nodo fique visível na tela do usuário.  Parâmetros: node - um objeto Nodo identificando o nodo do item que deseja tornar visível na tela do usuário.  

 

Eventos

Nome do evento Descrição
onSelect Este evento é invocado quando a seleção do recordList muda, isto é, quando um item for selecionado ou quando nenhum item estiver selecionado.  Observações:  Para descobrir qual item foi selecionado, utilize as propriedades selectedNode e selectedForm Este evento é disparado mesmo quando a propriedade "selectable" for false. 
onBeginEnumeration Este evento é invocado quando o recordList começar a enumerar as mudanças de itens, disparando, logo a seguir, 0 ou mais eventos onItemAdded e/ou onItemRemoved. 
onItemAdded Evento disparado quando um item for carregado/adicionado visualmente no recordList  Parâmetros: node - Objeto Nodo do item adicionado. form - Objeto Form do item adicionado.  Observações: Este evento representa um item que foi enumerado visualmente na lista e não necessariamente que um novo item foi inserido nos dados salvos. Durante o carregamento dos dados, este evento é disparado para cada item carregado. 
onItemRemoved Evento disparado quando um item for descarregado/removido visualmente do recordList  Parâmetros: node - Objeto Nodo do item removido. form - Objeto Form do item removido.  Observações: Este evento representa um item que deixou de ser enumerado visualmente da lista e não necessariamente que um item foi deletado dos dados salvos. 
onEndEnumeration Este evento é invocado quando o recordList terminar de enumerar as mudanças de itens e não houver outro evento onItemAdded e/ou oItemRemoved para disparar a seguir. 
onCompare Este evento é invocado em momentos chaves para garantir a ordenação dos itens que são mostrados na interface. Quando invocado, o evento traz 2 nodos para que o programador retorne, entre os dois, qual deve aparecer antes.  Parâmetros: nodeA - Objeto Nodo contendo um nodo que deve ser comparado. nodeB - Objeto Nodo contendo o outro nodo que deve ser comparado.  Retorno: Retorne um número menor que 0 se "nodeA" deve ser exibido antes de "nodeB" Retorne um número maior que 0 se "nodeA" deve ser exibido depois de "nodeB" Retorne 0 se os dois são equivalentes na questão da ordem.  Observação: Veja o exemplo 2 para entender melhor como este evento funciona. 

 

Veja Tratando eventos do Lua Form

 

Exemplos

Exemplo 1 - Lista simples de edits

 

Arquivo “ficha.lfm”
\<?xml version="1.0" encoding="UTF-8"?> \<form name="frmFichaTeste">                 \<button left="20" top="20" height="25" text="Nova Magia" width="80"                 onClick="self.rclMagias:append();"/>          \<recordList name="rclMagias" field="magias" templateForm="frmItemDeMagia"                     left="20" top="60" width="300" autoHeight="true"/> \</form>

 

 

 

Arquivo “itemDeMagia.lfm”
\<?xml version="1.0" encoding="UTF-8"?> \<form name="frmItemDeMagia" height="30" margins="{top=2,bottom=2}">                \<edit align="client" field="nome" margins="{right=2}"/>                 \<button align="right" text="Apagar" width="80"                 onClick="ndb.deleteNode(sheet);"/> \</form>

 

A tag recordList do arquivo "ficha.lfm" utiliza o form do arquivo"itemDeMagia.lfm" quando é definido sua propriedade "templateForm".

 

Image   Image

 

Note que existe uma instância de "frmItemDeMagia" para cada item existente.

 

Observação: No botão apagar foi utilizada a biblioteca "ndb" para apagar um item. Leia mais sobre em:

 

Detalhes que valem prestar a atenção:

  • Na tag form do arquivo "itemDeMagia.lfm", a propriedade "height" foi definida. Esta é a altura do painel que se repete para cada item. Provavelmente você precisará definir um valor "height" apropriado para seu caso =).
  • A variável "sheet" que foi referenciada no arquivo "itemDeMagia.lfm" representa o objeto nodo do item ligado ao painel e não da ficha.

 

 

Exemplo 2 - Adicionando uma ordenação ao Exemplo 1

 

Manipulando o evento OnCompare parar ordenar de forma crescente pelo atributo "nome" dos itens.

 

..... ..... \<recordList name="rclMagias" field="magias" templateForm="frmItemDeMagia"                         left="20" top="60" width="300" autoHeight="true">         \<event name="onCompare">                 return utils.compareStringPtBr(nodeA.nome, nodeB.nome);         \</event> \</recordList> ... ...

 

 

 

Ordenando pelo \<custo, nome>. Isto é, ordenar pelo custo e considerar o nome em caso de empate.

 

\<recordList name="rclMagias" field="magias" templateForm="frmItemDeMagia"                         left="20" top="60" width="300" autoHeight="true">         \<event name="onCompare">\<![CDATA[                                if (nodeA.custo or 0) \< (nodeB.custo or 0) then                         return -1;                 elseif (nodeA.custo or 0) > (nodeB.custo or 0) then                         return 1;                 else                            return utils.compareStringPtBr(nodeA.nome, nodeB.nome);                 end;                                ]]>         \</event> \</recordList>

 

 


Created with the Personal Edition of HelpNDoc: Maximize Your PDF Protection with These Simple Steps