Page1.mod: Translation to Stony Brook Modula-2

Last updated: 5. 3.1998, 7:38

<*/NOWARN:F*>
(*----------------------------------
   PAGE1.C         --- Property sheet page 1
                   (c) Paul Yao,      1996
   Page1.mod       --- Translation to Stony Brook Modula-2
                   (c) Peter Stadler, 1997
  ----------------------------------*)
IMPLEMENTATION MODULE Page1;
IMPORT SYSTEM;
IMPORT WIN32;
IMPORT WINUSER;
IMPORT COMMCTRL;
IMPORT h2d_property;
IMPORT Notify;
IMPORT Helper;
(*-------------------------------------------------------------------          *)
<*/PUSH*>
%IF WIN32 %THEN
    <*/CALLS:WIN32SYSTEM*>
%ELSE
    <*/CALLS:WINSYSTEM*>
%END
(*++++*****************************************************************)
PROCEDURE StylePageProc (hwnd        : WIN32.HWND;
(**********************************************************************)
          uMsg        : WIN32.UINT;
          ppsp        : COMMCTRL.LPPROPSHEETPAGE): WIN32.UINT [EXPORT];
BEGIN
     CASE (uMsg) OF
          | COMMCTRL.PSPCB_CREATE :
               (* Store pointer to style data                                  *)
               pTheStyles := SYSTEM.CAST(WIN32.LPDWORD,ppsp^.lParam);
               RETURN 1;

          | COMMCTRL.PSPCB_RELEASE :
               RETURN 0;
      ELSE

      RETURN 0;
      END;
END StylePageProc;
<*/POP*>

(*******************************************************************-          *)
<*/PUSH*>
%IF WIN32 %THEN
    <*/CALLS:WIN32SYSTEM*>
%ELSE
    <*/CALLS:WINSYSTEM*>
%END
(*++++*****************************************************************)
PROCEDURE StyleDlgProc (hwndDlg     : WIN32.HWND;
(**********************************************************************)
          msg         : WIN32.UINT;
          ppsp        : COMMCTRL.LPPROPSHEETPAGE;
          wParam      : WIN32.WPARAM;
          lParam      : WIN32.LPARAM) : WIn32.BOOL [EXPORT];
VAR
  bCheck       :  BOOLEAN;
  dwOrigStyle  :  WIN32.DWORD;
  wNotifyCode  :  WIN32.WORD;
  wID          :  WIN32.WORD;
  hwndSheet    :  WIN32.HWND;
  pnmh         :  WINUSER.LPNMHDR;
  hwndPS       :  WIN32.HWND;
  hwndActive   :  WIN32.HWND;
  psh          :  COMMCTRL.LPPSHNOTIFY;
  hwndPropSheet:  WIN32.HWND;
BEGIN
     CASE (msg) OF
          | WINUSER.WM_INITDIALOG :
               dwOrigStyle := pTheStyles^;

               bCheck := SYSTEM.CAST(BOOLEAN,(dwOrigStyle BAND WINUSER.WS_VISIBLE));
               Helper.SetButtonCheck (hwndDlg, h2d_property.IDC_VISIBLE, bCheck);

               bCheck := SYSTEM.CAST(BOOLEAN,(dwOrigStyle BAND WINUSER.WS_DISABLED));
               Helper.SetButtonCheck (hwndDlg, h2d_property.IDC_DISABLED, bCheck);

               bCheck := SYSTEM.CAST(BOOLEAN,(dwOrigStyle BAND WINUSER.WS_MINIMIZE));
               Helper.SetButtonCheck (hwndDlg, h2d_property.IDC_MINIMIZE, bCheck);

               bCheck := SYSTEM.CAST(BOOLEAN,(dwOrigStyle BAND WINUSER.WS_MAXIMIZE));
               Helper.SetButtonCheck (hwndDlg, h2d_property.IDC_MAXIMIZE, bCheck);

               bCheck := SYSTEM.CAST(BOOLEAN,(dwOrigStyle BAND WINUSER.WS_CLIPCHILDREN));
               Helper.SetButtonCheck (hwndDlg, h2d_property.IDC_CLIPCHILDREN, bCheck);

               bCheck := SYSTEM.CAST(BOOLEAN,(dwOrigStyle BAND WINUSER.WS_CLIPSIBLINGS));
               Helper.SetButtonCheck (hwndDlg, h2d_property.IDC_CLIPSIBLINGS, bCheck);

               bCheck := SYSTEM.CAST(BOOLEAN,(dwOrigStyle BAND WINUSER.WS_BORDER));
               Helper.SetButtonCheck (hwndDlg, h2d_property.IDC_BORDER, bCheck);

               bCheck := SYSTEM.CAST(BOOLEAN,(dwOrigStyle BAND WINUSER.WS_CAPTION));
               Helper.SetButtonCheck (hwndDlg, h2d_property.IDC_CAPTION, bCheck);

               bCheck := SYSTEM.CAST(BOOLEAN,(dwOrigStyle BAND WINUSER.WS_DLGFRAME));
               Helper.SetButtonCheck (hwndDlg, h2d_property.IDC_DLGFRAME, bCheck);

               bCheck := SYSTEM.CAST(BOOLEAN,(dwOrigStyle BAND WINUSER.WS_HSCROLL));
               Helper.SetButtonCheck (hwndDlg, h2d_property.IDC_HSCROLL, bCheck);

               bCheck := SYSTEM.CAST(BOOLEAN,(dwOrigStyle BAND WINUSER.WS_MAXIMIZEBOX));
               Helper.SetButtonCheck (hwndDlg, h2d_property.IDC_MAXIMIZEBOX, bCheck);

               bCheck := SYSTEM.CAST(BOOLEAN,(dwOrigStyle BAND WINUSER.WS_MINIMIZEBOX));
               Helper.SetButtonCheck (hwndDlg, h2d_property.IDC_MINIMIZEBOX, bCheck);

               bCheck := SYSTEM.CAST(BOOLEAN,(dwOrigStyle BAND WINUSER.WS_SYSMENU));
               Helper.SetButtonCheck (hwndDlg, h2d_property.IDC_SYSMENU, bCheck);

               bCheck := SYSTEM.CAST(BOOLEAN,(dwOrigStyle BAND WINUSER.WS_THICKFRAME));
               Helper.SetButtonCheck (hwndDlg, h2d_property.IDC_THICKFRAME, bCheck);

               bCheck := SYSTEM.CAST(BOOLEAN,(dwOrigStyle BAND WINUSER.WS_VSCROLL));
               Helper.SetButtonCheck (hwndDlg, h2d_property.IDC_VSCROLL, bCheck);

               RETURN TRUE;

          | WINUSER.WM_COMMAND :
               wNotifyCode := WINUSER.HIWORD (wParam);
               wID := WINUSER.LOWORD (wParam);

               CASE (wID) OF
                    | h2d_property.IDC_VISIBLE :
                         hwndSheet := WINUSER.GetParent (hwndDlg);
                         COMMCTRL.PropSheet_Changed (hwndSheet, hwndDlg);
                    | h2d_property.IDC_DISABLED :
                         hwndSheet := WINUSER.GetParent (hwndDlg);
                         COMMCTRL.PropSheet_Changed (hwndSheet, hwndDlg);
                    | h2d_property.IDC_MINIMIZE :
                         hwndSheet := WINUSER.GetParent (hwndDlg);
                         COMMCTRL.PropSheet_Changed (hwndSheet, hwndDlg);
                    | h2d_property.IDC_MAXIMIZE :
                         hwndSheet := WINUSER.GetParent (hwndDlg);
                         COMMCTRL.PropSheet_Changed (hwndSheet, hwndDlg);
                    | h2d_property.IDC_CLIPCHILDREN :
                         hwndSheet := WINUSER.GetParent (hwndDlg);
                         COMMCTRL.PropSheet_Changed (hwndSheet, hwndDlg);
                    | h2d_property.IDC_CLIPSIBLINGS :
                         hwndSheet := WINUSER.GetParent (hwndDlg);
                         COMMCTRL.PropSheet_Changed (hwndSheet, hwndDlg);
                    | h2d_property.IDC_BORDER :
                         hwndSheet := WINUSER.GetParent (hwndDlg);
                         COMMCTRL.PropSheet_Changed (hwndSheet, hwndDlg);
                    | h2d_property.IDC_CAPTION :
                         hwndSheet := WINUSER.GetParent (hwndDlg);
                         COMMCTRL.PropSheet_Changed (hwndSheet, hwndDlg);
                    | h2d_property.IDC_DLGFRAME :
                         hwndSheet := WINUSER.GetParent (hwndDlg);
                         COMMCTRL.PropSheet_Changed (hwndSheet, hwndDlg);
                    | h2d_property.IDC_HSCROLL :
                         hwndSheet := WINUSER.GetParent (hwndDlg);
                         COMMCTRL.PropSheet_Changed (hwndSheet, hwndDlg);
                    | h2d_property.IDC_MAXIMIZEBOX :
                         hwndSheet := WINUSER.GetParent (hwndDlg);
                         COMMCTRL.PropSheet_Changed (hwndSheet, hwndDlg);
                    | h2d_property.IDC_MINIMIZEBOX :
                         hwndSheet := WINUSER.GetParent (hwndDlg);
                         COMMCTRL.PropSheet_Changed (hwndSheet, hwndDlg);
                    | h2d_property.IDC_SYSMENU :
                         hwndSheet := WINUSER.GetParent (hwndDlg);
                         COMMCTRL.PropSheet_Changed (hwndSheet, hwndDlg);
                    | h2d_property.IDC_THICKFRAME :
                         hwndSheet := WINUSER.GetParent (hwndDlg);
                         COMMCTRL.PropSheet_Changed (hwndSheet, hwndDlg);
                    | h2d_property.IDC_VSCROLL :
                         hwndSheet := WINUSER.GetParent (hwndDlg);
                         COMMCTRL.PropSheet_Changed (hwndSheet, hwndDlg);
               ELSE
                  RETURN TRUE;
               END;

          | WINUSER.WM_HELP :
               (* Catch F1 key strike                                          *)
               WINUSER.MessageBox (hwndDlg, "WM_HELP Message Received",
                           "StyleDlgProc", WINUSER.MB_OK);
               RETURN TRUE;

          | WINUSER.WM_NOTIFY :
               pnmh := SYSTEM.CAST(WINUSER.LPNMHDR,lParam);

               (* Handle OK and Apply buttons                                  *)
               IF (pnmh^.code = COMMCTRL.PSN_APPLY) THEN

                    (* Overwrite current style value                           *)
                    pTheStyles^ := FetchStyles (hwndDlg);

                    (* Tell main window to re-create child window              *)
                    hwndPS := WINUSER.GetParent (hwndDlg);
                    hwndActive := COMMCTRL.PropSheet_GetCurrentPageHwnd (hwndPS);

                    (* Only re-create if we're the active page                 *)
                    IF (hwndDlg = hwndActive) THEN
                         WINUSER.PostMessage (hwndMain, h2d_property.PM_CREATEWINDOW, 0, 0h);
                    END;

               (* Destroy modeless dialog on OK or Cancel                      *)
               IF (WINUSER.IsWindowEnabled (hwndMain)  AND
                   ((pnmh^.code = COMMCTRL.PSN_APPLY) OR (pnmh^.code = COMMCTRL.PSN_RESET))) THEN
                    psh := SYSTEM.CAST(COMMCTRL.LPPSHNOTIFY,lParam);

                    (* Ignore Apply button                                     *)
                    IF (pnmh^.code = COMMCTRL.PSN_APPLY) AND (psh^.lParam = 0) THEN
                         RETURN TRUE;
                    END;
                    (* Clicking OK or Cancel, destroy property sheet           *)
                    hwndPropSheet := WINUSER.GetParent (hwndDlg);
                    WINUSER.DestroyWindow (hwndPropSheet);
                    hwndModeless := NIL;
               END;

               (* Enable Next button on wizard page                            *)
               IF (bWizard) AND (pnmh^.code = COMMCTRL.PSN_SETACTIVE) THEN
                    hwndSheet := WINUSER.GetParent (hwndDlg);
                    COMMCTRL.PropSheet_SetWizButtons (hwndSheet, COMMCTRL.PSWIZB_NEXT);
               END;
               RETURN TRUE;
          ELSE
               RETURN FALSE;
          END;
     ELSE
     END;
END StyleDlgProc;
<*/POP*>
(*+++***************************************************************-          *)
PROCEDURE FetchStyles (hwndDlg  :  WIN32.HWND) : WIN32.DWORD;
(*******************************************************************-          *)
VAR
  dwStyle   :  WIN32.DWORD;
BEGIN
     dwStyle := WINUSER.WS_CHILD;

     IF (Helper.QueryButtonCheck (hwndDlg, h2d_property.IDC_VISIBLE)) THEN
          dwStyle := dwStyle BOR WINUSER.WS_VISIBLE;
     END;

     IF (Helper.QueryButtonCheck (hwndDlg, h2d_property.IDC_DISABLED)) THEN
          dwStyle := dwStyle BOR WINUSER.WS_DISABLED;
     END;

     IF (Helper.QueryButtonCheck (hwndDlg, h2d_property.IDC_MINIMIZE)) THEN
          dwStyle := dwStyle BOR WINUSER.WS_MINIMIZE;
     END;

     IF (Helper.QueryButtonCheck (hwndDlg, h2d_property.IDC_MAXIMIZE)) THEN
          dwStyle := dwStyle BOR WINUSER.WS_MAXIMIZE;
     END;

     IF (Helper.QueryButtonCheck (hwndDlg, h2d_property.IDC_CLIPCHILDREN)) THEN
          dwStyle := dwStyle BOR WINUSER.WS_CLIPCHILDREN;
     END;

     IF (Helper.QueryButtonCheck (hwndDlg, h2d_property.IDC_CLIPSIBLINGS)) THEN
          dwStyle := dwStyle BOR WINUSER.WS_CLIPSIBLINGS;
     END;

     IF (Helper.QueryButtonCheck (hwndDlg, h2d_property.IDC_BORDER)) THEN
          dwStyle := dwStyle BOR WINUSER.WS_BORDER;
     END;

     IF (Helper.QueryButtonCheck (hwndDlg, h2d_property.IDC_CAPTION)) THEN
          dwStyle := dwStyle BOR WINUSER.WS_CAPTION;
     END;

     IF (Helper.QueryButtonCheck (hwndDlg, h2d_property.IDC_DLGFRAME)) THEN
          dwStyle := dwStyle BOR WINUSER.WS_DLGFRAME;
     END;

     IF (Helper.QueryButtonCheck (hwndDlg, h2d_property.IDC_HSCROLL)) THEN
          dwStyle := dwStyle BOR WINUSER.WS_HSCROLL;
     END;

     IF (Helper.QueryButtonCheck (hwndDlg, h2d_property.IDC_MAXIMIZEBOX)) THEN
          dwStyle := dwStyle BOR WINUSER.WS_MAXIMIZEBOX;
     END;

     IF (Helper.QueryButtonCheck (hwndDlg, h2d_property.IDC_MINIMIZEBOX)) THEN
          dwStyle := dwStyle BOR WINUSER.WS_MINIMIZEBOX;
     END;

     IF (Helper.QueryButtonCheck (hwndDlg, h2d_property.IDC_SYSMENU)) THEN
          dwStyle := dwStyle BOR WINUSER.WS_SYSMENU;
     END;

     IF (Helper.QueryButtonCheck (hwndDlg, h2d_property.IDC_THICKFRAME)) THEN
          dwStyle := dwStyle BOR WINUSER.WS_THICKFRAME;
     END;

     IF (Helper.QueryButtonCheck (hwndDlg, h2d_property.IDC_VSCROLL)) THEN
          dwStyle := dwStyle BOR WINUSER.WS_VSCROLL;
     END;

     RETURN dwStyle;
END FetchStyles;
BEGIN
END Page1.