(****************************************************************************

$RCSfile: GuideExample.mod $

$Revision: 1.1 $
    $Date: 1994/07/19 20:21:29 $

    GUIEnvironment example: Menu help function

    Oberon-A Oberon-2 Compiler V4.5ß (Release 1.3)

  Copyright © 1994, Carsten Ziegeler
                    Augustin-Wibbelt-Str.7, 33106 Paderborn, Germany

****************************************************************************)
MODULE GuideExample;

(* This example open's a window with a menu. If the user presses the
   help key over a menu item, the AmigaGuide is called with the
   belonging help text ! *)

(* GuideExample uses the following catalog strings 101.. : menus
                                                    50.. : misc (NotifyExample)
                                                   200   : END       *)

(* $P- Allow non-portable code *)

IMPORT SYS := SYSTEM, GUI := GUIEnv, I := Intuition, GS := GUIEnvSupport,
       GT := GadTools;

CONST ver = "$VER: GuideExample 1.1 (19.07.94)\n";

VAR W : I.WindowPtr;
    G : GUI.GUIInfoPtr;


  (* The menu functions: *)

  PROCEDURE MenuAbout() : BOOLEAN;
  BEGIN
    IF GUI.base.GUIRequest(G, GUI.base.GetCatStr(G, 51,
                           SYS.ADR("GUIEnvironment example for version 37.0\n© 1994 C. Ziegeler")),
                           GUI.gerOKKind, NIL) = 0 THEN END;
    RETURN TRUE;
  END MenuAbout;

  PROCEDURE MenuQuit() : BOOLEAN;
  BEGIN
    RETURN GUI.base.GUIRequest(G, GUI.base.GetCatStr(G, 52, SYS.ADR("Really quit example ?")),
                               GUI.gerDoItKind,
                               GUI.gerGadgets, GUI.base.GetCatStr(G, 53, SYS.ADR("YES|NO")), NIL) # GUI.gerYes;
  END MenuQuit;

  PROCEDURE MenuGUIEnv() : BOOLEAN;
  BEGIN
    IF GUI.base.GUIRequest(G, SYS.ADR("GUIEnvironment !"), GUI.gerOKKind, NIL) = 0 THEN END;
    RETURN TRUE;
  END MenuGUIEnv;

  PROCEDURE MenuAmiga() : BOOLEAN;
  BEGIN
    IF GUI.base.GUIRequest(G, SYS.ADR("Amiga !"), GUI.gerOKKind, NIL) = 0 THEN END;
    RETURN TRUE;
  END MenuAmiga;

BEGIN

  W := GUI.base.OpenGUIWindow(100, 70, 300, 100, SYS.ADR("GUIEnvironment : GuideExample"),
                              {I.idcmpCloseWindow, I.idcmpMenuPick,
                               I.idcmpMenuHelp},
                              {I.wflgCloseGadget, I.wflgActivate}, NIL,
                              I.waMenuHelp, 1, NIL);
  IF W # NIL THEN
    (* create GUIInfo *)

    G := GUI.base.CreateGUIInfo(W,
                          GUI.guiCatalogFile, SYS.ADR("GUIEnvExamples.catalog"),
                          GUI.guiMenuCatalogOffset, 101,
                          GUI.guiMenuGuide, SYS.ADR("GUIEnvExamples.guide"), NIL);
    IF G # NIL THEN

      GUI.base.CreateGUIMenuEntry(G, GT.nmTitle, SYS.ADR("Project"), NIL);
      GUI.base.CreateGUIMenuEntry(G, GT.nmItem, SYS.ADR("About"),
                                  GUI.gemFunction, SYS.ADR(MenuAbout),
                                  GUI.gemShortCut, SYS.ADR("A\o"), NIL);
      GUI.base.CreateGUIMenuEntry(G, GT.nmItem, SYS.ADR("Quit"),
                                  GUI.gemFunction, SYS.ADR(MenuQuit),
                                  GUI.gemShortCut, SYS.ADR("Q\o"), NIL);
      GUI.base.CreateGUIMenuEntry(G, GT.nmTitle, SYS.ADR("Help"), NIL);
      GUI.base.CreateGUIMenuEntry(G, GT.nmItem, SYS.ADR("GUIEnv"),
                                  GUI.gemFunction, SYS.ADR(MenuGUIEnv),
                                  GUI.gemShortCut, SYS.ADR("G\o"), NIL);
      GUI.base.CreateGUIMenuEntry(G, GT.nmItem, SYS.ADR("Amiga"),
                                  GUI.gemFunction, SYS.ADR(MenuAmiga),
                                  GUI.gemShortCut, SYS.ADR("A\o"), NIL);

      IF GUI.base.DrawGUI(G, NIL) = GUI.geDone THEN
        LOOP (* Input-Loop *)
          GUI.base.WaitGUIMsg(G);
          IF    I.idcmpCloseWindow IN G^.msgClass THEN
            EXIT;
          ELSIF I.idcmpMenuPick    IN G^.msgClass THEN
            EXIT;
          END;
        END;
      END;
    END;
  END;

  IF W # NIL THEN
    GUI.base.CloseGUIWindow(W);
    W := NIL;
  END;
END GuideExample.
