Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

ProcedureParâmetrosDescriçãoExemplo/Utilização
pi-create-node
ParâmetrosTipoDescrição
pcKe (I)CharChave do node
pcKePar (I)CharPai do node
pcLabel (I)CharLabel do node
pcIco(I)CharÍcone do node
pcOptn (I)CharParâmetros do node



Cria um node no TreeView.

O pcOptn é uma lista de parâmetros que são separados por chr(1).

Valores válidos para o pcOptn:

ParâmetroDescrição
expandedInicia o node expendido
collapsedInicia o node fechado (não expandido) - opção default
selectedSeleciona o node ate o próximo refresh
refreshRealiza o refresh do TreeView
AutoSort=yes/noLiga ou desliga a ordenação do TreeView
font=nDefine uma fonte para o node
fgcolor=nDefine uma cor de frente para o node
bgcolor=nDefine uma cor de fundo para o node
tooltip=xxxDefine um help para o node
DO ON ERROR UNDO, LEAVE:
    RUN pi-create-node
("n1","","node 1","","").
    RUN pi-create-node
("n2","","node 2","","expanded").
END.
pi-update-node
ParâmetroTipoDescrição
pcKe (I)CharChave do node a mover
pcFieldNames (I)CharLista de campos, exemplo: "lab,ico"
pcFieldValues (I)CharLista de valores separados por chr(1)
pcOptn (I)CharParâmetros do node

Atualiza o label, ícone ou a lista de opções de um determinado node.

Para remover um item do pcOptn existente, coloque "!" na frente da opção, conforme o exemplo abaixo:

pcOptn="!font"

A opção acima removerá o fonte definido para o node.

ASSIGN cFgColor = "font=1".
RUN pi-update-node
(c-codigo-node, "", "", cFgColor).
RUN pi-atualizaTreeview.
pi-node-is-expandedatualizaTreeview
Faz uma atualização/refresh do TreeView.
RUN pi-atualizaTreeview.
tvNodeEvent
ParâmetroTipoDescrição
pcEvent (I)CharEvento que aconteceu
pcNodeKey pcKe (I)CharChave do node

Retorno "YES" ou "NO" indicando se o node está expandido.

RUN pi-node-is-expanded 
(INPUT c-codigo-node).
IF RETURN-VALUE = "YES" THEN
 MESSAGE "O NÓ ESTÁ EXPANDIDO"
VIEW-AS ALERT-BOX.
ELSE
  MESSAGE "O NÓ NÃO ESTÁ EXPANDIDO"
VIEW-AS ALERT-BOX.

Procedure auxiliar que é assinada no TreeView, onde todos os eventos que ocorrerem no TreeView chamarão esta procedure.

Você não precisa chamar esta procedure diretamente, pois quem irá chamá-la

pi-atualizaTreeviewFaz uma atualização/refresh do TreeView.
RUN pi-atualizaTreeview.
tvNodeEvent
ParâmetroTipoDescrição
pcEvent (I)CharEvento que aconteceu
pcNodeKey (I)CharChave do node

Procedure auxiliar que é assinada no TreeView, onde todos os eventos que ocorrerem no TreeView chamarão esta procedure.

Você não precisa chamar esta procedure diretamente, pois quem irá chamá-la é o TreeView.

Nesta procedure será alimentada a variável c-codigo-node com a chave do node selecionado.


pi-ClickTreeview

Procedure que será chamada pelo tvNodeEvent sempre que ocorrer um evento de "select" (click em um node) no TreeView.

Caso queria capturar este evento, esta Procedure deve ser definida no seu programa.

A variável c-codigo-node irá conter a chave do node selecionado.

PROCEDURE pi-ClickTreeView:
MESSAGE "Chave do Nó: " +
c-codigo-node
VIEW-AS ALERT-BOX.
END PROCEDURE.
pi-CtrlPopupTreeview
ParâmetroTipoDescrição
pcAction (I)Char

Ação do Popup:

"build" ou "choose"

pcEvent (I)CharItem do Popup escolhido
pcNodeKey (I)
Chave do node

Procedure utilizada para criar e controlar o Popup Menu do TreeView.

Caso queria definir um Popup Menu para a TreeView, esta Procedure deve ser definida no seu programa.

Ela será chamada pelo tvNodeEvent em dois momentos:

1) Criação do Popup Menu

Executada na momento em que o componente é criado. Passando como parâmetro o Ação "build". Neste momento a Procedure deverá retornar uma String com a lista dos itens a serem apresentados no Popup. A lista deve utilizar o separador "chr(1)" e ser composta por Label e Valor de cada item. Exemplo: "Label Item1" + chr(1) + "valoritem1" + chr(1) + "Label ItemN" + chr(1) + "valoritemN". É possível acrescentar uma régua entre os itens, para isto, basta incluir um item com o Label "RULE" e o valor igual a branco.

Obs: O parâmetro pcNodeKey irá conter a chave do node selecionado, caso queira criar um Popup Menu personalizado para cada node.

2) Clique no Item do Popup Menu

Executada no momento em que algum item do Popup é clicado. Passando como parâmetro a Ação "choose" e o valor do item clicado no parâmetro pcEvent.

PROCEDURE pi-CtrlPopupTreeview:
 DEF INPUT PARAM pcAction  AS CHAR NO-UNDO.
 DEF INPUT PARAM pcEvent   AS CHAR NO-UNDO.
 DEF INPUT PARAM pcNodeKey AS CHAR NO-UNDO.
   // Criação do Popup Menu
   IF pcAction = "build" THEN DO:
    RETURN "Muda Cor"  + CHR(1) +
"menuMudaCor" + CHR(1) +
"Deleta Nó" + CHR(1) +
"menuDelNode" + CHR(1) +
"RULE"       + CHR(1) +
""          + CHR(1) +
"Detalhes"   + CHR(1) +
"menuDetalhe".
   END.

// Clica em um Item do Popup Menu
   IF pcAction = "choose" THEN DO:
      CASE pcEvent:
       WHEN "menuMudaCor" THEN DO:
          MESSAGE "MUDANDO A COR DO NÓ !"
VIEW-AS ALERT-BOX. 
         END.
       WHEN "menuDelNode" THEN DO:
        MESSAGE "DELETANDO O NÓ !"
VIEW-AS ALERT-BOX.         
END.
         WHEN "menuDetalhe" THEN DO:
        MESSAGE "MOSTRANDO DETALHES !"
VIEW-AS ALERT-BOX.
        END.
      END CASE.
      RETURN.
   END.
END PROCEDURE. 
pi-GenericEventTreeview
ParâmetroTipoDescrição
pcEvent (I)CharEvento que aconteceu
pcNodeKey (I)CharChave do node

Procedure que será chamada pelo tvNodeEvent para todos os eventos do TreeView que não sejam o evento de "select" (tratado pela PI pi-ClickTreeview) e os eventos de Popup Menu (tratados pela PI pi-CtrlPopupTreeview).

Caso queria capturar algum evento específico do TreeView, esta Procedure deve ser definida no seu programa.

O parâmetro pcEvent irá conter o evento que ocorreu, por exemplo "expand", que ocorre quando o node é expandido.

PROCEDURE pi-GenericEventTreeview:
 DEF INPUT PARAM pcEvent   AS CHAR NO-UNDO.
 DEF INPUT PARAM pcNodeKey AS CHAR NO-UNDO.

 MESSAGE "OCORREU O EVENTO: " + pcEvent SKIP
"PARA O NÓ: " + pcNodeKey
VIEW-AS ALERT-BOX.
END PROCEDURE.

...

pcOk
ProcedureParâmetrosDescriçãoExemplo/Utilização
addNode *
ParâmetrosTipoDescrição
pcKe (I)CharChave do node
pcKePar (I)CharChave Pai do node
pcLabel (I)CharLabel do node
pcIco (I)CharÍcone do node
pcOptn (I)CharParâmetros do node

Adiciona um node no TreeView.

Se o node for adicionado a um

node pai, ele será o último filho.

DO ON ERROR UNDO, LEAVE:
 RUN addNode IN h-4gltreeview
("n1","","node1","","").
 RUN addNode IN h-4gltreeview
("n2","","node2","","expanded").
  RUN addNode IN h-4gltreeview
("n21","n2","node21","","").
  RUN addNode IN h-4gltreeview
("n22","n2","node22","","expanded").
 RUN addNode IN h-4gltreeview
("n221","n22","node221","image/book02.bmp","").
 RUN addNode IN h-4gltreeview
("n222","n22","node222","image/book02.bmp","").
  RUN addNode IN h-4gltreeview
("n3","","node3","present1.bmp","expanded").
  RUN addNode IN h-4gltreeview
("n31","n3","node31","image/$.bmp","").
 RUN addNode IN h-4gltreeview
("n4","","node4","image/smile56.bmp","").
END.

updateNode *


ParâmetroTipoDescrição
pcKe (I)CharChave do node a mover
pcFieldNames (I)CharList de campos, exemplo: "lab,ico"
pcFieldValues (I)CharLista de valores separados por chr(1)
pcOptn (I)CharParâmetros do node
Atualiza o label, ícone ou a lista de opções de um determinado node.
RUN updateNode IN h-4gltreeview
(c-codigo-node, "", "", cFgColor).
deleteNode
ParâmetroTipoDescrição
pcKe (I)CharChave do node
pcOptn (I)CharParâmetros do node
Elimina o node informado.
RUN deleteNode IN h-4gltreeview
(c-codigo-node, "refresh").
moveNode
ParâmetroTipoDescrição
pcKe (I)CharChave do node a mover
pcToKe (I)CharMover para o node
pcMode (I)CharModos possíveis: after, before, parent
pcOptn (I)CharOpção possível: refresh
Move um node origem, como filho de outro node destino. Caso o pcMode = "parent" e o node destino seja em branco, ele jogara o node origem como o último node do nível 0.
RUN moveNode IN h-4gltreeview 
(c-codigo-node, c-codigo-node-pai, "after", "refresh").
enableObject
Habilita o TreeView.
RUN enableObject IN h-4gltreeview.
initializeObject
Inicializa o TreeView.
RUN initializeObject IN h-4gltreeview.
destroyObject
Elimina o TreeView da memória.
IF  VALID-HANDLE(h-4gltreeview) THEN DO:
    RUN destroyObject IN h-4gltreeview.
    DELETE PROCEDURE h-4gltreeview.
END.
getFrameTreeview
ParâmetroTipoDescrição
hFrame (O)HandleHandle da frame do TreeView
Retorna o handle da frame do TreeView.
RUN getFrameTreeview IN h-4gltreeview 
(OUTPUT hFrameTV).
emptyTree
Zera o conteúdo da TreeView.
RUN emptyTree IN h-4gltreeview.
applyEntryPassar o parâmetro vazio ("")Faz um entry no TreeView.
RUN applyEntry IN h-4gltreeview
(INPUT "").
expandBranch
ParâmetroTipoDescrição
pcKe (I)CharChave do node

Expande o node e todos os seus filhos. 

Obs: Caso queria expandir apenas o node (e não os filhos), use a função "expandNode".

RUN expandBranch IN h-4gltreeview
(c-codigo-node).
RUN pi-atualizaTreeview.

getNodeDetails
ParâmetroTipoDescrição
pcKe (I)CharChave do node
Retorna detalhes do node do informado.detalhes do node do informado.
RUN getNodeDetails IN h-4gltreeview
(c-codigo-node, OUTPUT hNdBf).
MESSAGE 
    "id:" hNdBf:BUFFER-FIELD("id"):BUFFER-VALUE SKIP
    "label:" hNdBf:BUFFER-FIELD("lab"):BUFFER-VALUE SKIP
    "ico:" hNdBf:BUFFER-FIELD("ico"):BUFFER-VALUE SKIP
    "level:" hNdBf:BUFFER-FIELD("level"):BUFFER-VALUE SKIP
   "parent:" hNdBf:BUFFER-FIELD("par"):BUFFER-VALUE SKIP
   "prev-sib
RUN getNodeDetails IN h-4gltreeview
(c-codigo-node, OUTPUT hNdBf).
MESSAGE 
    "id:" hNdBf:BUFFER-FIELD("idpre"):BUFFER-VALUE SKIP
    "labelnext-sib:" hNdBf:BUFFER-FIELD("labnex"):BUFFER-VALUE SKIP
    "icoexpand:" hNdBf:BUFFER-FIELD("icoexpanded"):BUFFER-VALUE SKIP
    "leveloptn:" hNdBf:BUFFER-FIELD("leveloptn"):BUFFER-VALUE SKIP
   "parent:" hNdBf:BUFFER-FIELD("par"):BUFFER-VALUE SKIP
   "prev-sib:" hNdBf:BUFFER-FIELD("pre"):BUFFER-VALUE SKIP
  "next-sib:" hNdBf:BUFFER-FIELD("nex"):BUFFER-VALUE SKIP
  "expand:" hNdBf:BUFFER-FIELD("expanded"):BUFFER-VALUE SKIP
    "optn:" hNdBf:BUFFER-FIELD("optn"):BUFFER-VALUE
   
    VIEW-AS ALERT-BOX INFO BUTTONS OK.
DELETE OBJECT hNdBf.
hasNodes
ParâmetroTipoDescrição
pcHasN (O)LogicalExiste node
Retorna Verdadeiro ou False se o TreeView possuir nodes.
IF DYNAMIC-FUNCTION('hasNodes' IN h-4gltreeview) THEN DO:
MESSAGE "Existe Nós no Treeview"
VIEW-AS ALERT-BOX INFO BUTTONS OK.
DELETE OBJECT hNdBfEND.
hasNodes
getTreeCount
ParâmetroTipoDescrição
pcHasN pcCount (O)LogicalIntegerExiste nodequantidade nodes
Retorna Verdadeiro ou False se o TreeView possuir nodes.a quantidade de nodes do TreeView.
ASSIGN iTreeCount = 
  IF DYNAMIC-FUNCTION('hasNodesgetTreeCount' IN h-4gltreeview) THEN DO:.
MESSAGE "A Treeview MESSAGEpossui "Existe Nós no Treeview" + string(iTreeCount) + " nós !"
VIEW-AS ALERT-BOX.END.
getTreeCount
getNodeParentKey
pcCount quantidade nodes
ParâmetroTipoDescrição
pcKe (I)CharChave do node
pcKePar (O)IntegerCharChave do node Pai
Retorna a quantidade de nodes do TreeViewchave do node Pai do node informado.
ASSIGN iTreeCountcParentKey = 
   DYNAMIC-FUNCTION('getTreeCountgetNodeParentKey' IN h-4gltreeview).,
MESSAGE "A Treeview possui " + string(iTreeCount) + " nós !"
VIEWc-AS ALERT-BOXcodigo-node).
getNodeParentKey
selectNode
ParâmetroTipoDescrição
pcKe (I)CharChave do node
pcKePar pcOk (O)CharChave do node PaiLogicalIndica se foi possível selecionar o node.
Seleciona o node Retorna a chave do node Pai do node informado.
ASSIGN cParentKeylOk = 
DYNAMIC-FUNCTION('getNodeParentKeyselectNode' IN h-4gltreeview,
c-codigo-node).
selectNode
collapseNode
ParâmetroTipoDescrição
pcKe (I)CharChave do node
pcOptn (I)CharOpção possível: refresh
pcOk (O)LogicalIndica se foi possível selecionar contrair o node.
Seleciona Contrai o node informado.
ASSIGN lOk =
DYNAMIC-FUNCTION('selectNodecollapseNode' IN h-4gltreeview,
c-codigo-nodenode, "refresh").
collapseNode
expandNode
ParâmetroTipoDescrição
pcKe (I)CharChave do node
pcOptn (I)CharOpção possível: refresh
pcOk (O)LogicalIndica se foi possível contrair expandir o node.
Contrai

Expande o node informado.

Obs: Os filhos não serão expandidos. Para isto, utilize a procedure "expandBranch".

ASSIGN lOk =
DYNAMIC-FUNCTION('collapseNodeexpandNode' IN h-4gltreeview,
c-codigo-node, "refresh").
expandNode
isNodeExpanded
ParâmetroTipoDescrição
pcKe (I)CharChave do node
pcOptn (I)CharOpção possível: refresh
pcExpend (O)LogicalIndica se
foi possível expandir
o node informado está expandido.

Expande o node informado.

Obs: Os filhos não serão expandidos. Para isto, utilize a procedure "expandBranch".

Retorno YES ou NO indicando se o node está expandido.

IFASSIGN lOk =
DYNAMIC-FUNCTION('expandNodeisNodeExpanded' IN h-4gltreeview,
c-codigo-node, "refresh")) THEN
 MESSAGE "O NÓ ESTÁ EXPANDIDO"
VIEW-AS ALERT-BOX.
ELSE
  MESSAGE "O NÓ NÃO ESTÁ EXPANDIDO"
VIEW-AS ALERT-BOX.
setNodeTag
ParâmetroTipoDescrição
pcKe (I)CharChave do node
pcTag (I)CharUma informação qualquer
pcOk (O)LogicalIndica se foi possível gravar a Tag no node.
Atualiza a TAG do node. A TAG é um campo "coringa", onde pode ser gravada qualquer informação para recuperar depois.
ASSIGN lOk =
DYNAMIC-FUNCTION('setNodeTag' IN h-4gltreeview,
c-codigo-node, "minha informação").
getNodeTag
ParâmetroTipoDescrição
pcKe (I)CharChave do node
pcTag (O)CharA informação gravada na Tag do node.
Retornar a TAG gravada no node.
ASSIGN cNodeTag = 
DYNAMIC-FUNCTION('getNodeTag' IN h-4gltreeview,
c-codigo-node).
MESSAGE "TAG do Nó: " + cNodeTag
VIEW-AS ALERT-BOX.

...