{
  Programm  : GadtoolsDemo.p
  Autor     : Frank Fenn
  Compiler  : Kickpascal V 2.12
}

PROGRAM GTD;

{$incl "intuition/gadgetclass.h","intuition.lib","gadtools.lib"}

TYPE
  LabelData = Array [1..4] Of Str;     {* Fuer CycleGadgets *}

CONST
  On  = Long(TRUE);
  Off = Long(FALSE);

VAR
  MyWindow     : ^Window;
  MyMessage    : ^IntuiMessage;
  MyImage      : Image;
  MyText       : IntuiText;
  Sysfont      : TextAttr;
  Vinfo        : Ptr;
  Titel        : String[20]; Static;
  MySigs       : Long;
  MyClass      : Long;
  MyCode       : Long;
  GadArray     : Array[0..12] Of ^Gadget;
  GadNew       : NewGadget;
  GadList      : ^Gadget;
  Gad          : ^Gadget;
  GadSel       : ^Gadget;
  GadLabel     : LabelData;
  StrInfo      : ^StringInfo;
  Ende         : Boolean;

  Zeile1       : String;
  Zeile2       : String;

  Cnt          : Byte;

  Unames       : Array[0..10] Of String[50]; Static;
  Unode        : Array[0..10] Of Node;       Static;
  Ulist        : List;
  Uline        : String; Static;

PROCEDURE InitAll;
BEGIN
  OpenLib(IntuitionBase,"intuition.library",0);
  OpenLib(GadtoolsBase,"gadtools.library",0);

  Sysfont:=TextAttr("topaz.font",8,0,0);

  Titel:="GadTools-Pascaldemo";
  Tags[1] :=TagItem(WA_LEFT,70);
  Tags[2] :=TagItem(WA_TOP,33);
  Tags[3] :=TagItem(WA_WIDTH,500);
  Tags[4] :=TagItem(WA_HEIGHT,190);
  Tags[5] :=TagItem(WA_ACTIVATE,ON);
  Tags[6] :=TagItem(WA_DRAGBAR,ON);
  Tags[7] :=TagItem(WA_RMBTRAP,ON);
  Tags[8] :=TagItem(WA_CLOSEGADGET,ON);
  Tags[9] :=TagItem(WA_DEPTHGADGET,ON);
  Tags[10]:=TagItem(WA_TITLE,Long(^Titel));
  Tags[11]:=TagItem(WA_IDCMP,IDCMP_GADGETDOWN+IDCMP_GADGETUP+IDCMP_CLOSEWINDOW);
  Tags[12]:=TagItem(TAG_DONE,0);
  MyWindow:=OpenWindowTagList(NIL,^Tags);
  Vinfo:=GetVisualInfo(MyWindow^.WScreen,NIL);

  Gad:=CreateContext(^GadList);
  GadArray[1]:=Gad;
  GadNew :=NewGadget(20,116,80,12,"Checkbox 1",^Sysfont,1,PLACETEXT_RIGHT,Vinfo,NIL);
  Gad    :=CreateGadget(CHECKBOX_KIND,Gad,^GadNew,NIL);
  GadArray[2]:=Gad;
  GadNew :=NewGadget(20,133,80,12,"Checkbox 2",^Sysfont,2,PLACETEXT_RIGHT,Vinfo,NIL);
  Tags[1]:=TagItem(GTCB_CHECKED,On);
  Tags[2]:=TagItem(TAG_DONE,0);
  Gad    :=CreateGadget(CHECKBOX_KIND,Gad,^GadNew,^Tags);
  GadArray[3]:=Gad;
  Gadnew :=NewGadget(20,150,100,12,"Button 1",^Sysfont,3,0,Vinfo,NIL);
  Gad    :=CreateGadget(BUTTON_KIND,Gad,^GadNew,NIL);
  GadArray[4]:=Gad;
  GadNew :=NewGadget(20,165,100,12,"Button 2",^Sysfont,4,0,Vinfo,NIL);
  Gad    :=CreateGadget(BUTTON_KIND,Gad,^GadNew,NIL);
  GadArray[5]:=Gad;
  Zeile1:="Vorgabestring 1";
  Tags[1]:=TagItem(GTST_STRING,Long(^Zeile1[1]));
  Tags[2]:=TagItem(TAG_DONE,0);
  GadNew :=NewGadget(242,116,240,12,"String 1",^Sysfont,5,0,Vinfo,NIL);
  Gad    :=CreateGadget(STRING_KIND,Gad,^GadNew,^Tags);
  GadArray[6]:=Gad;
  Zeile2:="Vorgabestring 2";
  GadNew :=NewGadget(242,133,240,12,"String 2",^Sysfont,6,0,Vinfo,NIL);
  Tags[1]:=TagItem(GTST_STRING,Long(^Zeile2[1]));
  Tags[2]:=TagItem(TAG_DONE,0);
  Gad    :=CreateGadget(STRING_KIND,Gad,^GadNew,^Tags);
  GadArray[7]:=Gad;

  For Cnt:=0 To 7 Do Begin
    Unames[Cnt]:="Listview-Zeile "+IntStr(Cnt);
    Unode[Cnt+1]:=Node(^Unode[Cnt+2],^Unode[Cnt],0,0,Unames[Cnt]);
  End;
  Unode[0] :=Node(NIL,^Unode[Cnt],0,0,NIL);
  Unode[Cnt]:=Node(^Unode[0],NIL,0,0,Unames[Cnt-1]);
  Ulist:=List(^Unode[1],NIL,^Unode[Cnt],0,0);
  Tags[1]:=TagItem(GTLV_LABELS,Long(^Ulist));
  Tags[2]:=TagItem(TAG_DONE,0);
  GadNew :=NewGadget(10,14,480,50,"",^Sysfont,7,0,Vinfo,NIL);
  Gad    :=CreateGadget(LISTVIEW_KIND,Gad,^GadNew,^Tags);
  GadArray[8]:=Gad;

  GadLabel:=LabelData("Eintrag1","Eintrag2","Eintrag3",NIL);

  Gadnew :=NewGadget(242,150,100,12,"Cycle 1",^Sysfont,8,0,Vinfo,NIL);
  Tags[1]:=TagItem(GTCY_LABELS,Long(^GadLabel[1]));
  Tags[2]:=TagItem(GTCY_ACTIVE,0);
  Tags[3]:=TagItem(TAG_DONE,0);
  Gad    :=CreateGadget(CYCLE_KIND,Gad,^GadNew,^Tags);
  GadArray[8]:=Gad;
  Gadnew :=NewGadget(242,165,100,12,"Cycle 2",^Sysfont,9,0,Vinfo,NIL);
  Tags[1]:=TagItem(GTCY_LABELS,Long(^GadLabel[1]));
  Tags[2]:=TagItem(GTCY_ACTIVE,0);
  Tags[3]:=TagItem(TAG_DONE,0);
  Gad    :=CreateGadget(CYCLE_KIND,Gad,^GadNew,^Tags);
  GadArray[9]:=Gad;

  AddGList(MyWindow,GadList,-1,-1,NIL);
  RefreshGList(GadList,MyWindow,NIL,-1);
  GT_RefreshWindow(MyWindow,NIL);

  Tags[1]:=TagItem(GT_VISUALINFO,Long(Vinfo));
  Tags[2]:=TagItem(TAG_DONE,0);
  DrawBevelBox(MyWindow^.RPort,10,110,480,75,^Tags);
END;

PROCEDURE CloseAll;
BEGIN
  RemoveGList(MyWindow,GadList,-1);
  CloseWindow(MyWindow);
  FreeGadgets(GadList);
  FreeVisualInfo(Vinfo);
  CloseLib(GadtoolsBase);
  CloseLib(IntuitionBase);
END;

PROCEDURE WriteText(X,Y,Col:Integer;Text:Str);
BEGIN
  MyText :=IntuiText(Col,0,JAM2,0,0,^Sysfont,Text,NIL);
  MyImage:=Image(0,0,460,30,1,NIL,1,0,NIL);
  DrawImage (MyWindow^.RPort,^MyImage,15,65);
  PrintIText(MyWindow^.RPort,^MyText,X,Y);
END;

BEGIN
  InitAll;
  Ende:=FALSE;
  Repeat
    Repeat
      MyMessage:=GT_GetIMsg(MyWindow^.UserPort); {* nicht GetMsg benutzen *}
      If MyMessage=NIL Then MySigs:=Wait(Long(1) SHL MyWindow^.UserPort^.mp_Sigbit);
    Until MyMessage<>NIL;
    MyCode :=MyMessage^.Code;
    MyClass:=MyMessage^.Class;
    GadSel :=MyMessage^.IAddress;
    GT_ReplyIMsg(MyMessage);                   {* nicht ReplyMsg benutzen *}
    Case MyClass Of
      CYCLEIDCMP:
      Begin
        Case GadSel^.GadgetID Of
         1  : Begin
                WriteText(20,80,1,"Checkbox 1")
              End
         2  : Begin
                WriteText(20,80,1,"Checkbox 2")
              End
         3  : Begin
                WriteText(20,80,1,"Button 1 gedrueckt")
              End
         4  : Begin
                WriteText(20,80,1,"Button 2 gedrueckt")
              End
         5  : Begin
                StrInfo:=GadSel^.SpecialInfo;
                Zeile1:=StrInfo^.Buffer;
                Zeile2:="Eingabe in Stringgadget 1: "+Zeile1;
                WriteText(20,80,1,Zeile2)
              End;
         6  : Begin
                StrInfo:=GadSel^.SpecialInfo;
                Zeile2:=StrInfo^.Buffer;
                Zeile1:="Eingabe in Stringgadget 2: "+Zeile2;
                WriteText(20,80,1,Zeile1)
              End
         7  : Begin
                Zeile1:="Auswahl im Listviewgadget - Eintrag: "+IntStr(MyCode);
                WriteText(20,80,1,Zeile1)
              End
         8  : Begin
                Zeile1:="Cyclegadget 1 steht auf Eintrag : "+IntStr(MyCode+1);
                WriteText(20,80,1,Zeile1)
              End
         9  : Begin
                Zeile1:="Cyclegadget 1 steht auf Eintrag : "+IntStr(MyCode+1);
                WriteText(20,80,1,Zeile1)
              End
        Otherwise;
        End;
      End;
      IDCMP_CLOSEWINDOW:
      Begin
        Ende:=TRUE;
      End;
      Otherwise;
    End;
  Until Ende;
  MyMessage:=GT_GetIMsg(MyWindow^.UserPort);
  While MyMessage<>NIL Begin
    GT_ReplyIMsg(MyMessage);
    MyMessage:=GT_GetIMsg(MyWindow^.UserPort)
  End;
  CloseAll;
END.



