home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD2.bin / bbs / dev / oberon-a-1.4ß.lha / Oberon-A / examples / GuiEnvironment / ResizingExample.mod < prev   
Text File  |  1994-09-05  |  13KB  |  268 lines

  1. (****************************************************************************
  2.  
  3. $RCSfile: ResizingExample.mod $
  4.  
  5. $Revision: 1.1 $
  6.     $Date: 1994/07/19 20:22:21 $
  7.  
  8.     GUIEnvironment V37.0 example: Resizing, GUIEnvironment gadgets
  9.  
  10.     Oberon-A Oberon-2 Compiler V4.5ß (Release 1.3)
  11.  
  12.   Copyright © 1994, Carsten Ziegeler
  13.                     Augustin-Wibbelt-Str.7, 33106 Paderborn, Germany
  14.  
  15. ****************************************************************************)
  16. MODULE ResizingExample;
  17.  
  18. (* This example shows, how the gadget descriptions can be used for
  19.    resizable gadgets. It also shows the GUIEnvironment gadgets in action ! *)
  20.  
  21. (* $P- Allow non-portable code *)
  22.  
  23. IMPORT SYS := SYSTEM, GUI := GUIEnv, I := Intuition, GS := GUIEnvSupport,
  24.        E := Exec, ES := ExecUtil, GT := GadTools;
  25.  
  26. CONST version = "ResizingExample 1.1 (19.07.94)\n";
  27.  
  28.  
  29. VAR win : I.WindowPtr;
  30.     gui : GUI.GUIInfoPtr;
  31.  
  32.     prg : LONGINT;             (* for the progressIndicatorKind *)
  33.     alist,
  34.     clist  : E.MinList;        (* Lists for ListviewKind gadget *)
  35.  
  36.     listviewCLabs, listviewALabs : ARRAY 10 OF E.STRPTR;
  37.  
  38.  
  39.   (* Creates two exec.lists. One contains some amiga-models and the other
  40.      some cpu-kinds ! *)
  41.   PROCEDURE CreateLists;
  42.   VAR entry  : E.NodePtr;
  43.       i      : INTEGER;
  44.   BEGIN
  45.     listviewALabs[0] := SYS.ADR("Amiga 500");
  46.     listviewALabs[1] := SYS.ADR("Amiga 500+");
  47.     listviewALabs[2] := SYS.ADR("Amiga 600");
  48.     listviewALabs[3] := SYS.ADR("Amiga 1000");
  49.     listviewALabs[4] := SYS.ADR("Amiga 1200");
  50.     listviewALabs[5] := SYS.ADR("Amiga 2000");
  51.     listviewALabs[6] := SYS.ADR("Amiga 3000");
  52.     listviewALabs[7] := SYS.ADR("Amiga 4000/030");
  53.     listviewALabs[8] := SYS.ADR("Amiga 4000/040");
  54.     listviewALabs[9] := SYS.ADR("Amiga XXXX/yyy");
  55.     listviewCLabs[0] := SYS.ADR("2086");
  56.     listviewCLabs[1] := SYS.ADR("80286");
  57.     listviewCLabs[2] := SYS.ADR("80386");
  58.     listviewCLabs[3] := SYS.ADR("80486");
  59.     listviewCLabs[4] := SYS.ADR("Pentium");
  60.     listviewCLabs[5] := SYS.ADR("68000");
  61.     listviewCLabs[6] := SYS.ADR("68020");
  62.     listviewCLabs[7] := SYS.ADR("68030");
  63.     listviewCLabs[8] := SYS.ADR("68040");
  64.     listviewCLabs[9] := SYS.ADR("68060");
  65.  
  66.     ES.NewList(alist);
  67.     ES.NewList(clist);
  68.  
  69.     FOR i := 0 TO 9 DO     (* make the list-entries *)
  70.       entry := E.base.AllocMem(SIZE(E.Node), {E.memClear});
  71.       IF entry # NIL THEN
  72.         entry^.name := listviewALabs[i];
  73.         E.base.Insert(alist, entry, NIL);
  74.       END;
  75.       entry := E.base.AllocMem(SIZE(E.Node), {E.memClear});
  76.       IF entry # NIL THEN
  77.         entry^.name := listviewCLabs[i];
  78.         E.base.Insert(clist, entry, NIL);
  79.       END;
  80.     END;
  81.   END CreateLists;
  82.  
  83. BEGIN
  84.   CreateLists;
  85.  
  86.   win := GUI.base.OpenGUIWindow( 50, 50, 300, 150, SYS.ADR("GUIEnvironment - ResizingExample"),
  87.                                 {I.idcmpGadgetUp, I.idcmpCloseWindow,
  88.                                  I.idcmpNewSize, I.idcmpRefreshWindow,
  89.                                  I.idcmpVanillaKey, I.idcmpGadgetDown},
  90.                                 {I.wflgActivate, I.wflgSizeGadget,
  91.                                  I.wflgDepthGadget, I.wflgCloseGadget,
  92.                                  I.wflgDragBar}, NIL,
  93.                                 I.waMinWidth, 250,
  94.                                 I.waMinHeight,120,
  95.                                 I.waMaxWidth, 500,
  96.                                 I.waMaxHeight,200, NIL);
  97.   IF win # NIL THEN
  98.  
  99.     gui := GUI.base.CreateGUIInfo(win, GUI.guiGadgetFont, GS.TopazAttr(), NIL);
  100.     IF gui # NIL THEN
  101.  
  102.       (* This gadget is always 10 points away from the left, the top and
  103.          the also the right window border. And it is also always 35 points
  104.          away from the bottom window border *)
  105.  
  106.       GUI.base.CreateGUIGadget(gui, 10, 20, -10, -35, GUI.gegProgressIndicatorKind,
  107.                                GUI.gegText, SYS.ADR("Progress"),
  108.                                GUI.gegFlags, {GT.placeTextAbove},
  109.                                GUI.gegDescription, GS.GADDESC(GUI.gegDistAbs+GUI.gegObjBorder+GUI.gegObjLeft,
  110.                                                               GUI.gegDistAbs+GUI.gegObjBorder+GUI.gegObjTop,
  111.                                                               GUI.gegDistAbs+GUI.gegObjBorder+GUI.gegObjRight,
  112.                                                               GUI.gegDistAbs+GUI.gegObjBorder+GUI.gegObjBottom),
  113.                                NIL);
  114.  
  115.       (* This gadget is always 10 points below the progessIndicatorKind
  116.          gadget and always 10 points right of the window border.
  117.          Its size is constant. *)
  118.       GUI.base.CreateGUIGadget(gui, 10, 10, 70, 18, GT.buttonKind,
  119.                                GUI.gegText, SYS.ADR("_Plus"),
  120.                                GUI.gegFlags, {GT.placeTextIn},
  121.                                GUI.gegDescription, GS.GADDESC(GUI.gegDistAbs+GUI.gegObjBorder+GUI.gegObjLeft,
  122.                                                               GUI.gegDistAbs+GUI.gegObjGadget+GUI.gegObjBottom,
  123.                                                               GUI.gegDistNorm,
  124.                                                               GUI.gegDistNorm),
  125.                                NIL);
  126.  
  127.       (* This gadget is always 10 points below the progessIndicatorKind
  128.          gadget and always 10 points left of the window border.
  129.          Its size is constant. Now we need the gegObjects tag,
  130.          because we don't refer to the previous gadget !
  131.          To say, this gadget is 10 points left of the right window border,
  132.          we must say it is 10+width away from the border !*)
  133.       GUI.base.CreateGUIGadget(gui, -80, 10, 70, 18, GT.buttonKind,
  134.                                GUI.gegText, SYS.ADR("_Minus"),
  135.                                GUI.gegDescription, GS.GADDESC(GUI.gegDistAbs+GUI.gegObjBorder+GUI.gegObjRight,
  136.                                                               GUI.gegDistAbs+GUI.gegObjGadget+GUI.gegObjBottom,
  137.                                                               GUI.gegDistNorm,
  138.                                                               GUI.gegDistNorm),
  139.                                GUI.gegObjects, GS.GADOBJS(0, 0, 0, 0),
  140.                                NIL);
  141.  
  142.       IF GUI.base.DrawGUI(gui, NIL) = GUI.geDone THEN
  143.         prg := 0;
  144.         LOOP
  145.           GUI.base.WaitGUIMsg(gui);
  146.  
  147.           IF    I.idcmpCloseWindow IN gui^.msgClass THEN
  148.             EXIT;
  149.           ELSIF (I.idcmpGadgetUp   IN gui^.msgClass) OR
  150.                 (I.idcmpGadgetDown IN gui^.msgClass) THEN
  151.             IF    gui^.msgGadNbr = 1 THEN
  152.               IF prg < 10 THEN INC(prg) END;
  153.               GUI.base.SetGUIGadget(gui, 0, GUI.gegPICurrentValue, prg * 10, NIL);
  154.             ELSIF gui^.msgGadNbr = 2 THEN
  155.               IF prg >  0 THEN DEC(prg) END;
  156.               GUI.base.SetGUIGadget(gui, 0, GUI.gegPICurrentValue, prg * 10, NIL);
  157.             END;
  158.           ELSIF I.idcmpNewSize     IN gui^.msgClass THEN
  159.             (* We only get this message if GUIEnvironment can't resize ! *)
  160.             EXIT;
  161.           END;
  162.         END;
  163.       END;
  164.  
  165.       (* And now a total new GUI: *)
  166.       IF GUI.base.ChangeGUI(gui, GUI.guiRemoveGadgets, 1, NIL) = 0 THEN END;
  167.  
  168.       (* We don't know the actual size of the window now, but our GUI was
  169.         designed for the size 300/150, so we have to say this to GUIEnv *)
  170.       IF GUI.base.ChangeGUI(gui, GUI.guiCreationWidth, 300,
  171.                                  GUI.guiCreationHeight, 150, NIL) = 0 THEN END;
  172.  
  173.       (* This string gadget is for the listview gadget to display the
  174.          selected entry ! To the left and to the right it is 20 points
  175.          away from the window border. *)
  176.       GUI.base.CreateGUIGadget(gui, 20, -45, -20, 13, GT.stringKind,
  177.                                GUI.gegDescription, GS.GADDESC(GUI.gegDistAbs+GUI.gegObjBorder+GUI.gegObjLeft,
  178.                                                               GUI.gegDistAbs+GUI.gegObjBorder+GUI.gegObjBottom,
  179.                                                               GUI.gegDistAbs+GUI.gegObjBorder+GUI.gegObjRight,
  180.                                                               GUI.gegDistNorm),
  181.                                NIL);