Processo | OCX | 4glTreeView |
---|
Definição de Variáveis | DEFINE VARIABLE chTreeView AS COM-HANDLE NO-UNDO. DEFINE VARIABLE CtrlFrame AS WIDGET-HANDLE NO-UNDO. DEFINE VARIABLE chCtrlFrame AS COMPONENT-HANDLE NO-UNDO. | // Definições Treeview {utp/ut-4gltreeview.i} |
Carregar o TreeView | Carrega o OCX através da procedure "control_load". | Criar um procedure como exemplo da "carregaTreeView" apresentada no tópico de exemplo. |
Posicionar a TreeView na tela | CREATE CONTROL-FRAME CtrlFrame ASSIGN FRAME = FRAME fpage0:HANDLE ROW = 2.46 COLUMN = 1 HEIGHT = 13.5 WIDTH = 31 HIDDEN = NO SENSITIVE = YES. | RUN repositionObject IN h-4gltreeview (2.46, 1.00). RUN resizeObject IN h-4gltreeview (13.5, 31.00). |
Menu Popup | DEFINE VARIABLE pop-menu AS WIDGET-HANDLE NO-UNDO. CREATE MENU pop-menu ASSIGN popup-only = TRUE TITLE = "POPUP". CtrlFrame:POPUP-MENU = pop-menu. | Criar a procedure "pi-CtrlPopupTreeview" apresentada no tópico de procedures da include. |
Jogar o foco para o TreeView | APPLY "Entry" TO CtrlFrame. | RUN applyEntry IN h-4gltreeview (INPUT ""). |
Apagar todos os nós do TreeView | ChTreeView:Nodes:Clear(). | RUN emptyTree IN h-4gltreeview. |
Expandir o node e seus filhos | DO i-cont = 1 TO chTreeView:Nodes:Count: ASSIGN chTreeView:Nodes(i-cont):Expanded = TRUE. END. | RUN expandBranch IN h-4gltreeview (c-codigo-node). RUN pi-atualizaTreeview. |
Selecionar um node | ASSIGN chTreeView:SelectedItem = chTreeView:Nodes(cNodeId). IF NOT ERROR-STATUS:ERROR THEN RUN CtrlFrame.TreeView.NodeClick (INPUT chTreeView:Nodes:Item(cNodeId)). | ASSIGN lOk = DYNAMIC-FUNCTION('selectNode' IN h-4gltreeview, c-codigo-node). |
Verificar se existem nodes | IF chTreeView:Nodes:COUNT > 0 THEN DO: ... END. | IF DYNAMIC-FUNCTION('hasNodes' IN h-4gltreeview) THEN DO: ... END. |
Verificar se o node está expandido | IF chTreeView:SelectedItem:Expanded THEN DO: ... END. | IF DYNAMIC-FUNCTION('isNodeExpanded' IN h-4gltreeview, c-codigo-node) THEN DO: ... END. |
Pegar a chave do nó node selecionado | ASSIGN cNodeId = chTreeView:SelectedItem:key(). | ASSIGN cNodeId = c-codigo-node. |
Monitorar o evento de click | PROCEDURE CtrlFrame.TreeView.NodeClick : ... END PROCEDURE. | Criar a procedure "pi-ClickTreeView" apresentada no tópico de procedures da include. |
Incluir um node | chTreeView:Nodes:Add (cNodeIdPai, 4, cNodeId, cNodeLabel, iNodeimage). | RUN pi-create-node (cNodeId, cNodeIdPai, cNodeLabel, cNodeImage, cNodeOptn). |
Gravar e recuperar a TAG | // Gravar TAG ASSIGN chTreeView:Nodes:Item(cNodeId):Tag = STRING(ROWID(ttDados)).
// Recuperar TAG ASSIGN rRowid = TO-ROWID(hTreeView:Nodes:Item(cNodeId):Tag). | // Gravar TAG ASSIGN lOk = DYNAMIC-FUNCTION('setNodeTag' IN h-4gltreeview, cNodeId, STRING(ROWID(ttDados)).
// Recuperar TAG ASSIGN rRowid = TO-ROWID(DYNAMIC-FUNCTION('getNodeTag' IN h-4gltreeview, cNodeId))). |
Criar um relacionamento entre a TreeView e a TempTable de Negócio | De preferencia por utilizar o Rowid como chave do Node, desta forma, fica mais fácil de achar o Node a partir da Temp-Table. Mas, também é possível utilizar a TAG para armazenar o Rowid. | De preferencia por utilizar o Rowid como chave do Node, desta forma, fica mais fácil de achar o Node a partir da Temp-Table. Mas, também é possível utilizar a TAG para armazenar o Rowid. |
Definir um ícone para o node | Utiliza o componente ImageList para determinar o ícone do node, informando o arquivo de imagem e associando a um índice numérico. No momento de criar o node, envia este índice:
FILE-INFO:FILE-NAME = SUBSTRING(SEARCH("image\conecta.ico"),1, R-INDEX(SEARCH("image\conecta.ico"),"~\")). chImageList:ListImages:Add(5,, LOAD-PICTURE(FILE-INFO:PATHNAME + "/" + "conecta.ico")). chTreeView:Nodes:Add(,, cNodeId, cNodeLabel, 5). | Os arquivos de imagem, utilizados pelo componente para determinar o ícone do node, estão disponíveis na pasta: image\treeview\tvpics
Sendo que, para cada ícone, existe um conjunto de 4 arquivos de imagem. Por exemplo, para o ícone "user", são utilizados os seguintes arquivos de imagens: user.bmp - Somente ícone (raiz) userMinus.bmp - Símbolo de menos e ícone (expandido com filhos) usersNoSign.bmp - Ícone com deslocamento p/ direita (sem filhos) usersPlus.bmp - Símbolo de mais e ícone (contraído com filhos)
No momento de criar o node, deve-se sempre informar o arquivo raiz, desta forma o componente irá carregar os demais arquivos conforme a necessidade: RUN pi-create-node (cNodeId, "", cNodeLabel, "image/treeview/tvpics/user.bmp", "").
Caso o ícone necessário não exista, deverão ser criados os arquivos de imagem, na pasta descrita acima, e seguindo o mesmo padrão de nomenclatura de ícone e sufixos (Minus, NoSign e Plus). |