(*-------------------------------------------------------------------------
:Program.       GadgetDemo.mod
:Contents.      Demo for `IntuiSupport'
:Author.        Christian Stiens
:Address.       Heustiege 2, D-4710 Lüdinghausen
:Phone.         02591/6299
:Copyright.     PD
:Language.      Modula-2
:Translator.    M2Amiga V3.3d, © AMSoft
:Imports.       IntuiSupport V1.1
-------------------------------------------------------------------------*)

MODULE GadgetDemo;

  FROM Terminal IMPORT
    waitCloseGadget;
  FROM InOut IMPORT
    WriteInt,WriteCard,WriteString,WriteLn;
  FROM Intuition IMPORT
    WindowPtr,CloseWindow,IDCMPFlags,IDCMPFlagSet,GadgetFlags,GadgetFlagSet,
    ActivationFlagSet,ActivationFlags,WindowFlags,WindowFlagSet,IntuiTextPtr,
    PropInfoFlags,PropInfoFlagSet,GadgetPtr,AddGadget,RefreshGadgets,
    IntuiMessage,NewModifyProp;
  FROM IntuiSupport IMPORT
    CreateWindow,GetIMes,CreateBoolGadget,VertPot,CreateStrGadget,GadgetVal,
    CreatePropGadget,HorizPot,GadgetText,stdWin,stdGadg,stdActv,autoBorder,
    CreateIntuiText,topaz80,Pot,Body,stdVPrp,stdHPrp,std2Prp;
  FROM Graphics IMPORT
    jam1;
  FROM SYSTEM IMPORT
    LONGSET,ADR,ADDRESS;


  CONST
    center  = ActivationFlagSet{stringCenter};
    right   = ActivationFlagSet{stringRight};
    integer = ActivationFlagSet{longint};


  VAR
    bool1,bool2,bool3 : GadgetPtr;
    str1,str2,str3    : GadgetPtr;
    prp1,prp2,prp3    : GadgetPtr;
    win               : WindowPtr;
    id,dummy          : INTEGER;
    selGadg           : GadgetPtr;
    mes               : IntuiMessage;
    s                 : POINTER TO ARRAY [0..29] OF CHAR;
    l                 : LONGINT;
    itex              : IntuiTextPtr;
    x,y               : CARDINAL;


BEGIN
  waitCloseGadget := FALSE;

  win := CreateWindow(ADR("GadgetDemo"),150,0,380,150,NIL,stdWin,
         IDCMPFlagSet{closeWindow,gadgetDown,gadgetUp});

  IF win=NIL THEN HALT END;

  itex := CreateIntuiText(2,0,jam1,6,7,topaz80,ADR("Bool3"),
          CreateIntuiText(1,0,jam1,4,6,topaz80,ADR("Bool3"),NIL));

  prp1:=CreatePropGadget(1, 60,10,100,12, 16, 0, NIL,stdGadg,stdActv,stdHPrp);
  prp2:=CreatePropGadget(2, 20,30, 24,50,  0,16, NIL,stdGadg,stdActv,stdVPrp);
  prp3:=CreatePropGadget(3, 60,30,100,50, 16,16, NIL,stdGadg,stdActv,std2Prp);

  str1 := CreateStrGadget(4,200,12,120,8,30,autoBorder,stdGadg,stdActv+integer);
  str2 := CreateStrGadget(5,200,32,120,8,30,autoBorder,stdGadg,stdActv+center);
  str3 := CreateStrGadget(6,200,52,120,8,30,autoBorder,stdGadg,stdActv+right);

  bool1 := CreateBoolGadget(7, 50,100,50,20,ADR("Bool1"),autoBorder,stdGadg,stdActv);
  bool2 := CreateBoolGadget(8,150,100,50,20,ADR("Bool2"),autoBorder,stdGadg,stdActv+ActivationFlagSet{toggleSelect});
  bool3 := CreateBoolGadget(9,250,100,50,20,itex,autoBorder,GadgetFlagSet{gadgHBox},stdActv);

  s := GadgetText(str1); s^ := "LongInt";
  s := GadgetText(str2); s^ := "Center";
  s := GadgetText(str3); s^ := "Right";

  dummy := AddGadget(win,prp1,-1);
  dummy := AddGadget(win,prp2,-1);
  dummy := AddGadget(win,prp3,-1);
  dummy := AddGadget(win,str1,-1);
  dummy := AddGadget(win,str2,-1);
  dummy := AddGadget(win,str3,-1);
  dummy := AddGadget(win,bool1,-1);
  dummy := AddGadget(win,bool2,-1);
  dummy := AddGadget(win,bool3,-1);

  RefreshGadgets(prp1,win,NIL);

  x:=0; y:=0;

  LOOP
    GetIMes(win,mes,TRUE);
    IF closeWindow IN mes.class THEN EXIT END;
    IF gadgetDown IN mes.class THEN
      selGadg := mes.iAddress;
      WriteString("down "); WriteInt(selGadg^.gadgetID,1); WriteLn;
    END;
    IF gadgetUp IN mes.class THEN
      selGadg := mes.iAddress;
      id := selGadg^.gadgetID;
      WriteString("  up ");
      WriteInt(id,1); WriteString("   ");
      IF id=1 THEN
        x := HorizPot(prp1,16);
        NewModifyProp(prp3,win,NIL,std2Prp,Pot(x,16),Pot(y,16),Body(16),Body(16),1);
        WriteCard(x,3)
      END;
      IF id=2 THEN
        y := VertPot(prp2,16);
        NewModifyProp(prp3,win,NIL,std2Prp,Pot(x,16),Pot(y,16),Body(16),Body(16),1);
        WriteCard(y,3)
      END;
      IF id=3 THEN
        x := HorizPot(prp3,16);
        y := VertPot(prp3,16);
        NewModifyProp(prp1,win,NIL,stdHPrp,Pot(x,16),Pot(y,16),Body(16),Body(16),1);
        NewModifyProp(prp2,win,NIL,stdVPrp,Pot(x,16),Pot(y,16),Body(16),Body(16),1);
        WriteCard(HorizPot(prp3,16),3);
        WriteCard( VertPot(prp3,16),3)
      END;
      IF id=4 THEN l:=GadgetVal(str1);  WriteInt(l,1) END;
      IF id=5 THEN s:=GadgetText(str2); WriteString(s^) END;
      IF id=6 THEN s:=GadgetText(str3); WriteString(s^) END;
      WriteLn;
    END
  END;
  CloseWindow(win);
END GadgetDemo.
