TreeView.mod: Translation to XDS Modula-2

Last updated: 17. 2.1998, 20:53

<* +M2EXTENSIONS *>
IMPLEMENTATION MODULE TreeView;
(*----------------------------------------------
   TREEVIEW.C      --- Functions to support tree view
                   (c) Paul Yao, 1996
   TreeView.mod    --- Translation to XDS Modula-2
                   (c) Peter Stadler 1997
  ----------------------------------------------*)
IMPORT resource;
IMPORT Windows;
IMPORT CommCtrl;
IMPORT MemUtils;
IMPORT SYSTEM;
IMPORT Str;

IMPORT TreeData;

(*-------------------------------------------------------------------          *)
PROCEDURE tv_BuildRootFolder (hwndLV : Windows.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 + CommCtrl.TVIF_PARAM + CommCtrl.TVIF_CHILDREN +
                      CommCtrl.TVIF_IMAGE + 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(Windows.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 : Windows.HWND; lParam : Windows.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 + CommCtrl.TVIF_PARAM +
                      CommCtrl.TVIF_IMAGE + 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(Windows.LPARAM,pItem);
		    (* Fehler in C-Text ???    
		    tvis.item.lParam := SYSTEM.CAST(Windows.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 + CommCtrl.TVIF_PARAM + CommCtrl.TVIF_CHILDREN +
                                CommCtrl.TVIF_IMAGE + CommCtrl.TVIF_SELECTEDIMAGE;
               tvis.item.iImage := 0;
               tvis.item.iSelectedImage := 0;
               LOOP 
                    tvis.item.pszText := pFldr^.pName;
                    tvis.item.lParam := SYSTEM.CAST(Windows.LPARAM,pFldr);
		    (* Fehler in C-Text ???      
		    tvis.item.lParam := SYSTEM.CAST(Windows.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 : Windows.LPARAM; hwndCtrl : Windows.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.