TreeView.mod: Translation to Stony Brook Modula-2

Last updated: 6. 3.1998, 23:25

<*/NOWARN:F*>
IMPLEMENTATION MODULE TreeView;
(*----------------------------------------------
   TREEVIEW.C      --- Functions to support tree view
                   (c) Paul Yao, 1996
   TreeView.mod    --- Translation to Stony Brook Modula-2
                   (c) Peter Stadler 1997
  ----------------------------------------------*)
IMPORT resource;
IMPORT WIN32;
IMPORT COMMCTRL;
IMPORT MemUtils;
IMPORT SYSTEM;
IMPORT Str;
IMPORT WINX;
IMPORT TreeData;

(*-------------------------------------------------------------------          *)
PROCEDURE tv_BuildRootFolder (hwndLV : WIN32.HWND) : BOOLEAN;
VAR
  i     : INTEGER;
  tvis  : COMMCTRL.TV_INSERTSTRUCT;
BEGIN

     (* Initialize list view item structure                                    *)
     MemUtils.FillMemBYTE (tvis, SIZE (COMMCTRL.TV_INSERTSTRUCT),0);
     tvis.hParent := NIL;
     tvis.hInsertAfter := COMMCTRL.TVI_LAST;
     tvis.item.mask := COMMCTRL.TVIF_TEXT BOR COMMCTRL.TVIF_PARAM BOR COMMCTRL.TVIF_CHILDREN BOR
                      COMMCTRL.TVIF_IMAGE BOR COMMCTRL.TVIF_SELECTEDIMAGE;
     tvis.item.iImage := 0;
     tvis.item.iSelectedImage := 0;
     tvis.item.cchTextMax := 256;

     FOR i := 0 TO TreeData.cRootFolders-1 DO
          tvis.item.pszText := TreeData.fldRoot[i].pName;
          tvis.item.lParam := SYSTEM.CAST(WIN32.LPARAM,SYSTEM.ADR(TreeData.fldRoot[i]));
          tvis.item.cChildren := 1;
          TreeData.fldRoot[i].hItem := COMMCTRL.TreeView_InsertItem (hwndLV, tvis);
     END;

     RETURN TRUE;
END tv_BuildRootFolder;

(*******************************************************************-          *)
PROCEDURE tv_ExpandChild (hwndLV : WIN32.HWND; lParam : WIN32.LPARAM);
VAR
  pFolder  :  TreeData.LPFOLDER;
  pItem    :  TreeData.LPITEM;
  pFldr    :  TreeData.LPFOLDER;
  tvis     :  COMMCTRL.TV_INSERTSTRUCT;
BEGIN
     pFolder := SYSTEM.CAST(TreeData.LPFOLDER,lParam);
     pItem := pFolder^.piChild;

     (* Initialize list view item structure                                    *)
     MemUtils.FillMemBYTE (tvis, SIZE (COMMCTRL.TV_INSERTSTRUCT),0);
     tvis.hParent := pFolder^.hItem;
     tvis.hInsertAfter := COMMCTRL.TVI_LAST;
     tvis.item.mask := COMMCTRL.TVIF_TEXT BOR COMMCTRL.TVIF_PARAM BOR
                      COMMCTRL.TVIF_IMAGE BOR COMMCTRL.TVIF_SELECTEDIMAGE;
     tvis.item.iImage := 1;
     tvis.item.iSelectedImage := 1;
     tvis.item.cchTextMax := 256;

     IF (pItem^.hItem = NIL) THEN
          IF (pItem^.nType = TreeData.TYPE_ITEM) THEN        (* Add macro items             *)
               LOOP     
                    tvis.item.pszText :=  pItem^.pName;
                    tvis.item.lParam := SYSTEM.CAST(WIN32.LPARAM,pItem);
		    (*Error in Petzold-Text ???    
		    tvis.item.lParam := SYSTEM.CAST(WIN32.LPARAM,SYSTEM.ADR(pItem));
		    *)
                    pItem^.hItem := COMMCTRL.TreeView_InsertItem (hwndLV, tvis);
		    pItem := SYSTEM.ADDADR(pItem,SIZE(TreeData.ITEM));
                    IF(pItem^.hItem = TreeData.LASTITEM) THEN
                      EXIT;
                    END;
               END;
          ELSE (* (pItem^.nType = TYPE_FOLDER)  Add folder items            *)
               pFldr := SYSTEM.CAST(TreeData.LPFOLDER,pFolder^.piChild);
               tvis.item.mask := COMMCTRL.TVIF_TEXT BOR COMMCTRL.TVIF_PARAM BOR COMMCTRL.TVIF_CHILDREN BOR
                                COMMCTRL.TVIF_IMAGE BOR COMMCTRL.TVIF_SELECTEDIMAGE;
               tvis.item.iImage := 0;
               tvis.item.iSelectedImage := 0;
               LOOP 
                    tvis.item.pszText := pFldr^.pName;
                    tvis.item.lParam := SYSTEM.CAST(WIN32.LPARAM,pFldr);
		    (* Fehler in C-Text ???      
		    tvis.item.lParam := SYSTEM.CAST(WIN32.LPARAM,SYSTEM.ADR(pFldr));
		    *)
                    tvis.item.cChildren := 1;
                    
                    pFldr^.hItem := COMMCTRL.TreeView_InsertItem (hwndLV, tvis);
		    pFldr := SYSTEM.ADDADR(pFldr,SIZE(TreeData.FOLDER));
                    IF(pFldr^.hItem = TreeData.LASTITEM) THEN
                      EXIT;
                    END;
               END;
          END;
      END;
END tv_ExpandChild;

(*******************************************************************-          *)
PROCEDURE tv_FetchMacro (lParam : WIN32.LPARAM; hwndCtrl : WIN32.HWND): BOOLEAN;
VAR
   pItem  : TreeData.LPITEM;
BEGIN
     pItem := SYSTEM.CAST(TreeData.LPITEM,lParam);

     IF (pItem^.nType = TreeData.TYPE_FOLDER) THEN
          RETURN FALSE;
     END;
     WINX.Edit_SetText (hwndCtrl, pItem^.pMacro^);
     RETURN TRUE;
END tv_FetchMacro;
END TreeView.