Last updated: 17. 2.1998, 22:53
<* +M2EXTENSIONS *>
MODULE CtlMacro;
(*--------------------------------------------
CTLMACRO.C --- Control Macro Helper Utility
(c) Paul Yao, 1996
CtlMacro.mod --- Translation to XDS Modula-2
(c) Peter Stadler, 1998
--------------------------------------------*)
IMPORT TreeView;
IMPORT resource;
IMPORT Notify;
IMPORT Windows;
IMPORT WinUser;
IMPORT CommCtrl;
IMPORT SYSTEM;
VAR COL_WHITE : INTEGER;
VAR
hInst : Windows.HINSTANCE;
VAR
bFirstSelection : BOOLEAN; (* static *)
(*++++*****************************************************************)
PROCEDURE [Windows.CALLBACK] DlgProc (hwnd : Windows.HWND;
(**********************************************************************)
mMsg : Windows.UINT;
wParam : Windows.WPARAM;
lParam : Windows.LPARAM) : BOOLEAN;
(*******************************************************************- *)
VAR
hicon : Windows.HICON;
himl : CommCtrl.HIMAGELIST;
hItem : CommCtrl.HTREEITEM;
hwndEdit : Windows.HWND;
hwndCopy : Windows.HWND;
hwndCtrl : Windows.HWND;
hwndButton : Windows.HWND;
wNotifyCode : Windows.WORD;
cb : INTEGER;
idCtrl : INTEGER;
pnmtv : CommCtrl.PNM_TREEVIEW;
pnmh : WinUser.PNMHDR;
lpstr : Windows.PSTR;
ok : BOOLEAN;
BEGIN
CASE (mMsg) OF
| Windows.WM_INITDIALOG :
(* Add listview root items *)
hwndCtrl := Windows.GetDlgItem (hwnd, resource.IDC_MESSAGES);
ok := TreeView.tv_BuildRootFolder (hwndCtrl);
(* Select first item *)
hItem := CommCtrl.TreeView_GetFirstVisible (hwndCtrl);
CommCtrl.TreeView_SelectItem (hwndCtrl, hItem);
(* Create image list & connect to list view *)
lpstr := Windows.MAKEINTRESOURCE (resource.IDR_TVITEMS);
himl :=
CommCtrl.ImageList_LoadBitmap (hInst,
lpstr,
16,
0,
COL_WHITE);
CommCtrl.TreeView_SetImageList (hwndCtrl, himl, CommCtrl.TVSIL_NORMAL);
(* Disable [Copy] button when no macro is present *)
hwndCtrl := Windows.GetDlgItem (hwnd, resource.IDC_COPY);
Windows.EnableWindow (hwndCtrl, FALSE);
(* Install icon *)
lpstr := Windows.MAKEINTRESOURCE (resource.IDI_APP);
hicon := Windows.LoadIcon (hInst,lpstr);
Windows.SendMessage (hwnd, Windows.WM_SETICON, SYSTEM.CAST(Windows.WPARAM,SYSTEM.CAST(BOOLEAN,TRUE)),
SYSTEM.CAST(Windows.LPARAM, hicon));
RETURN TRUE;
| Windows.WM_COMMAND :
CASE (Windows.LOWORD (wParam)) OF
(* Copy macro data to clipboard *)
| resource.IDC_COPY :
hwndEdit := Windows.GetDlgItem (hwnd, resource.IDC_MACROS);
(*
Windowsx.Edit_SetSel (hwndEdit, 0, -1);
*)
Windows.SendMessage (hwndEdit, Windows.WM_COPY, 0, 0h);
(* Close dialog *)
| Windows.IDOK :
Windows.EndDialog (hwnd, 0);
(* Enable & disable [Copy] button when edit changes *)
| resource.IDC_MACROS :
wNotifyCode := Windows.HIWORD (wParam);
IF (wNotifyCode = Windows.EN_CHANGE) THEN
hwndEdit := SYSTEM.CAST(Windows.HWND,lParam);
hwndCopy := Windows.GetDlgItem (hwnd, resource.IDC_COPY);
cb := WINX.Edit_GetTextLength (hwndEdit);
Windows.EnableWindow (hwndCopy, SYSTEM.CAST(BOOLEAN,cb));
END;
ELSE
RETURN TRUE;
END;
RETURN TRUE;
| Windows.WM_NOTIFY :
idCtrl := SYSTEM.CAST(INTEGER,wParam);
pnmh := SYSTEM.CAST(WinUser.PNMHDR, lParam);
(* Expand tree as required *)
IF (pnmh^.code = CommCtrl.TVN_ITEMEXPANDING) THEN
pnmtv := SYSTEM.CAST(CommCtrl.PNM_TREEVIEW,lParam);
TreeView.tv_ExpandChild (pnmh^.hwndFrom, pnmtv^.itemNew.lParam);
END;
(* Respond to selection of items *)
IF (pnmh^.code = CommCtrl.TVN_SELCHANGED) THEN
pnmtv := SYSTEM.CAST(CommCtrl.PNM_TREEVIEW, lParam);
hwndEdit := Windows.GetDlgItem (hwnd, resource.IDC_MACROS);
(* Ignore first selection request *)
IF (bFirstSelection) THEN
bFirstSelection := FALSE;
RETURN TRUE;
END;
(* Fetch macro for leaf nodes *)
IF (TreeView.tv_FetchMacro (pnmtv^.itemNew.lParam, hwndEdit)) THEN
WINX.Edit_SetSel (hwndEdit, 0, -1);
ELSE
(* Expand tree for folder nodes *)
CommCtrl.TreeView_Expand (pnmh^.hwndFrom,
pnmtv^.itemNew.hItem,
CommCtrl.TVE_EXPAND);
WINX.Edit_SetText (hwndEdit, "");
END;
RETURN TRUE;
END;
(* Double-click means copy macro to clipboard *)
IF (pnmh^.code = CommCtrl.NM_DBLCLK) THEN
hwndEdit := Windows.GetDlgItem (hwnd, resource.IDC_MACROS);
hwndButton := Windows.GetDlgItem (hwnd, resource.IDC_COPY);
IF (WINX.Edit_GetTextLength (hwndEdit) > 0) THEN
CommCtrl.FORWARD_WM_COMMAND (hwnd, resource.IDC_COPY,
hwndButton, Windows.BN_CLICKED,
Windows.SendMessage);
END;
END;
RETURN TRUE;
ELSE
RETURN FALSE;
END;
END DlgProc;
(*******************************************************************- *)
VAR
lpstr : Windows.PSTR;
BEGIN
bFirstSelection := TRUE;
COL_WHITE := (Windows.RGB (255, 255, 255));
hInst := Windows.MyInstance();
(* Load common control library *)
CommCtrl.InitCommonControls ();
lpstr := Windows.MAKEINTRESOURCE (resource.IDD_DIALOG);
Windows.DialogBox (hInst,lpstr, NIL, SYSTEM.CAST(Windows.DLGPROC,DlgProc));
END CtlMacro.