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.