ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT OPTIONAL TREE-FILE
ASSIGN TO "TREE.DB"
ORGANIZATION INDEXED
ACCESS MODE DYNAMIC
RECORD KEY IS TRE-ID
FILE STATUS IS SW-FS.
DATA DIVISION.
FILE SECTION.
FD TREE-FILE.
01 TRE-REC.
05 TRE-ID PIC S9(4) COMP-5.
05 TRE-ID-PADRE PIC S9(4) COMP-5.
05 TRE-NIVEL PIC S9(4) COMP-5.
05 TRE-NODE OBJECT REFERENCE POW-CNODE.
05 TRE-NODE-N REDEFINES TRE-NODE PIC S9(9) COMP-5.
05 TRE-TEXT PIC X(50).
05 TRE-ImageIndex PIC S9(9) COMP-5.
05 TRE-SelectedImageIndex PIC S9(9) COMP-5.
05 TRE-ExpandedImageIndex PIC S9(9) COMP-5.
WORKING-STORAGE SECTION.
01 SW-FS PIC X(2).
88 SW-FS-EOF VALUE "10".
01 SV-NIVEL PIC S9(4) COMP-5.
01 SV-N PIC S9(4) COMP-5.
01 SV-COUNT PIC S9(4) COMP-5.
01 IDX-MAX PIC S9(4) COMP-5.
01 IDX-1 PIC S9(4) COMP-5.
01 IDX-2 PIC S9(4) COMP-5.
01 IDX-3 PIC S9(4) COMP-5.
01 IDX-T PIC S9(4) COMP-5.
01 TBL-TREE.
05 TB-TREE OCCURS 0 TO 5000 TIMES DEPENDING ON IDX-T.
10 TB-ID PIC S9(4) COMP-5.
10 TB-ID-PADRE PIC S9(4) COMP-5.
10 TB-NIVEL PIC S9(4) COMP-5.
10 TB-NODE OBJECT REFERENCE POW-CNODE.
10 TB-NODE-N REDEFINES TB-NODE PIC S9(9) COMP-5.
10 TB-TEXT PIC X(50).
10 TB-ImageIndex PIC S9(9) COMP-5.
10 TB-SelectedImageIndex PIC S9(9) COMP-5.
10 TB-ExpandedImageIndex PIC S9(9) COMP-5.
01 SW-CHILDS PIC X.
88 SW-CHILDS-SI VALUE "S".
88 SW-CHILDS-NO VALUE "N".
PROCEDURE DIVISION.
CALL "CBL_DELETE_FILE2" USING BY CONTENT "TREE.DB"
OPEN I-O TREE-FILE
MOVE ZEROS TO IDX-T
MOVE "Count" OF CmTreeView1 TO IDX-MAX
MOVE 1 TO IDX-1, SV-NIVEL
PERFORM UNTIL IDX-1 > IDX-MAX
ADD 1 TO IDX-T
MOVE IDX-T TO TB-ID(IDX-T)
MOVE ZEROS TO TB-ID-PADRE(IDX-T)
MOVE SV-NIVEL TO TB-NIVEL(IDX-T)
MOVE "Root"(IDX-1) OF CmTreeView1 TO TB-NODE(IDX-T)
MOVE "Text" OF TB-NODE(IDX-T) TO TB-TEXT(IDX-T)
MOVE "ImageIndex" OF TB-NODE(IDX-T) TO TB-ImageIndex(IDX-T)
MOVE "SelectedImageIndex" OF TB-NODE(IDX-T) TO TB-SelectedImageIndex(IDX-T)
MOVE "ExpandedImageIndex" OF TB-NODE(IDX-T) TO TB-ExpandedImageIndex(IDX-T)
PERFORM WRITE-TRE-REC
ADD 1 TO IDX-1
END-PERFORM
SET SW-CHILDS-SI TO TRUE
PERFORM UNTIL SW-CHILDS-NO
SET SW-CHILDS-NO TO TRUE
MOVE 1 TO IDX-2
MOVE IDX-T TO SV-N
PERFORM UNTIL IDX-2 > SV-N
IF TB-NIVEL(IDX-2) = SV-NIVEL
PERFORM CHILDS
END-IF
ADD 1 TO IDX-2
END-PERFORM
ADD 1 TO SV-NIVEL
END-PERFORM
CLOSE TREE-FILE
GOBACK
.
CHILDS.
IF "Count" OF TB-NODE(IDX-2) > 0
SET SW-CHILDS-SI TO TRUE
MOVE 1 TO IDX-3
MOVE "Count" OF TB-NODE(IDX-2) TO SV-COUNT
PERFORM UNTIL IDX-3 > SV-COUNT
ADD 1 TO IDX-T
MOVE IDX-T TO TB-ID(IDX-T)
MOVE IDX-2 TO TB-ID-PADRE(IDX-T)
ADD 1 TO SV-NIVEL GIVING TB-NIVEL(IDX-T)
MOVE "Child"(IDX-3) OF TB-NODE(IDX-2) TO TB-NODE-N(IDX-T)
MOVE "Text" OF TB-NODE(IDX-T) TO TB-TEXT(IDX-T)
MOVE "ImageIndex" OF TB-NODE(IDX-T) TO TB-ImageIndex(IDX-T)
MOVE "SelectedImageIndex" OF TB-NODE(IDX-T) TO TB-SelectedImageIndex(IDX-T)
MOVE "ExpandedImageIndex" OF TB-NODE(IDX-T) TO TB-ExpandedImageIndex(IDX-T)
PERFORM WRITE-TRE-REC
ADD 1 TO IDX-3
END-PERFORM
END-IF
.
WRITE-TRE-REC.
WRITE TRE-REC FROM TB-TREE(IDX-T)
IF SW-FS NOT = "00"
INVOKE POW-SELF "DisplayMessage" USING "Error" SW-FS 48
CLOSE TREE-FILE
GOBACK
END-IF
.