{$if not def AP_BLÄTTERN_H}
   
CONST
  AP_BLÄTTERN_H = 0;
  
PROCEDURE Blättern(VAR aktanzeig : p_Person);
{ -- Zwischen den Datensätzen umherspringen -- }

CONST
  BWIN_WIDTH = 598;
  BWIN_HEIGHT = 125;
VAR
  bgad 		: ARRAY[1..4] OF p_Gadget;
  dummy 		: BOOLEAN;
  t 			: ARRAY[1..15] OF TagItem;
  displist 	: p_List;
  btattr 	: TextAttr;

  PROCEDURE RahmenZeichnen;
  BEGIN
    Rahmen(blätterwp,2,103,590,18,TRUE);
  END;

  PROCEDURE DelDispList;
  VAR n,next : p_Node;
  BEGIN
    n := displist^.lh_head;
    WHILE n^.ln_succ<>NIL DO
    BEGIN
		next := n^.ln_succ;
		FreeVec(PTR(n^.ln_name));
		Remove(n);
		Dispose(n);
      n := next;
    END;
    Dispose(displist);
    displist := NIL;
  END;

  PROCEDURE NewLine(VAR l : p_List; VAR x : STR);
  VAR
    n : p_Node;
  BEGIN
	 New(n);
	 n^.ln_name := AllocVec(length(x)+1,MEMF_ANY OR MEMF_CLEAR);
	 CopyMem(PTR(x),PTR(n^.ln_name), length(x)+1);
	 AddTail(l, n);
  END;
  
  PROCEDURE BDisplay(VAR p : p_Person);
  VAR
    rp : p_RastPort;
    x  : STR;
	 y,c  : STRING;
    it : IntuiText;
  BEGIN
	 IF displist <> NIL THEN DelDispList;
	 New(displist);
	 NewList(displist);
	 y := "Anrede      : ";
    CASE p^.anrede OF
      0 : y := y+"Firma";
      1 : y := y+"Herrn";
      2 : y := y+"Frau";
      3 : y := y+p^.anrede_s;
    ELSE END;
	 x := y;
	 NewLine(displist,x);
	 y := "Name        : "+p^.Name; x := y;
	 NewLine(displist,x);
	 y := "Vorname     : "+p^.vorname; x := y;
	 NewLine(displist,x);
	 y := "Strasse     : "+p^.strasse; x := y;
	 NewLine(displist,x);
	 y := "PLZ         : "+p^.plz; x := y;
	 NewLine(displist,x);
	 y := "Wohnort     : "+p^.ort; x := y;
	 NewLine(displist,x);
	 y := "Telefon     : "+p^.tel; x := y;
	 NewLine(displist,x);
	 y := "Telefax     : "+p^.fax; x := y;
 	 NewLine(displist,x);
    y := "Geburtsdatum: "+p^.geb; x := y;
	 NewLine(displist,x);
	 y := "EMail1      : "+p^.email1; x := y;
	 NewLine(displist,x);
	 y := "EMail2      : "+p^.email2; x := y;
	 NewLine(displist,x);
	 y := "Kommentar   : "+p^.kommentar; x := y;
	 NewLine(displist,x);
	 y := "Gruppen     : ";
	 c := "";
	 FOR i := 1 TO 10 DO
	 BEGIN
		IF p^.select[i] THEN
		  IF c <> "" THEN c := c + " / "+SelectTexte[i]
		             ELSE c := SelectTexte[i];
    END;
	 IF c = "" THEN c := "keine";
	 y := y + c; x := y; NewLine(displist,x);
	 t[1] := TagItem(GTLV_Labels, LONG(displist));
	 t[2].ti_Tag := TAG_DONE;
	 GT_SetGadgetAttrsA(bgad[1],blätterwp,NIL,^t);
  END;

  PROCEDURE Minus;
  BEGIN
    IF PNode^.pn.ln_pred^.ln_pred<>NIL THEN
    BEGIN
      PNode := p_Person(PNode^.pn.ln_pred);
      BDisplay(PNode);
    END;
  END;

  PROCEDURE Plus;
  BEGIN
    IF PNode^.pn.ln_succ^.ln_succ<>NIL THEN
    BEGIN
      PNode := p_Person(PNode^.pn.ln_succ);
      BDisplay(PNode);
    END;
  END;


BEGIN
  btattr := TextAttr("topaz.font",8,0,0);
  displist := NIL;
  ComputeFont(BWIN_WIDTH,BWIN_HEIGHT);
  ww := ComputeX(BWIN_WIDTH);
  wh := ComputeY(BWIN_HEIGHT);
  vonmain:=FALSE;
  BlätterGl := NIL;
  BlätterGl := CreateContext(^BlätterGl);

  ng := NewGadget(2,2,590,100,
                  "",^btattr,
						1,0,
						vi,NIL);
  sensitivgadget(ng);
  t[1] := TagItem(GTLV_Labels, LONG(displist));
  t[2] := TagItem(GTLV_ReadOnly, LONG(TRUE));
  t[3].ti_Tag := TAG_DONE;
  bgad[1] := CreateGadgetA(LISTVIEW_KIND,blättergl,^ng,^t);
  
  { **
	 ** PropNewLook einsetzen -> dreidimensionale Gadgets!
	 **
	 ** }
  popigad:=blättergl^.nextgadget^.nextgadget;
  IF NOT OS39
    THEN WHILE (popigad^.Nextgadget<>NIL) DO  popigad:=popigad^.NextGadget;
  POPI:=NIL;
  PopI:=popigad^.SpecialInfo;
  IF POPI<>NIL THEN PopI^.Flags:= PopI^.Flags+PROPNEWLOOK;

  ng := NewGadget(131,105,
                  110,13,
                  "_- blättern",mytattr,
                  2,PLACETEXT_IN,
                  vi,NIL);
  SensitivGadget(ng);
  t[1] := TagItem(GT_Underscore,LONG("_"));
  t[2].ti_Tag := TAG_DONE;
  bgad[2] := CreateGadgetA(BUTTON_KIND,bgad[1],^ng,^t);

  ng := NewGadget(241,105,
                  110,13,
                  "_Edieren...",mytattr,
                  3,PLACETEXT_IN,
                  vi,NIL);
  SensitivGadget(ng);
  bgad[3] := CreateGadgetA(BUTTON_KIND,bgad[2],^ng,^t);

  ng := NewGadget(352,105,
                  110,13,
                  "_+ blättern",mytattr,
                  4,PLACETEXT_IN,
                  vi,NIL);
  SensitivGadget(ng);
  bgad[4] := CreateGadgetA(BUTTON_KIND,bgad[3],^ng,^t);

  t[1] := TagItem(WA_InnerWidth,ww);
  t[2] := TagItem(WA_InnerHeight,wh);
  t[3] := TagItem(WA_Flags, WFLG_DEPTHGADGET+WFLG_CLOSEGADGET+WFLG_DRAGBAR+
                            WFLG_SMART_REFRESH+WFLG_NOCAREREFRESH+WFLG_HASZOOM+
                            WFLG_ACTIVATE+WFLG_RMBTRAP);
  t[4] := TagItem(WA_Idcmp, IDCMP_CLOSEWINDOW+IDCMP_CHANGEWINDOW+IDCMP_GADGETUP+
                            IDCMP_VANILLAKEY);
  t[5] := TagItem(WA_MinWidth, 100);
  t[6] := TagItem(WA_MinHeight, yoff+1);
  t[7] := TagItem(WA_MaxWidth,640);
  t[8] := TagItem(WA_MaxHeight,256);
  t[9].ti_Tag := WA_Title;
  t[9].ti_Data := "Blättern";
  t[10] := TagItem(WA_Gadgets,LONG(BlätterGl));
  t[11] := TagItem(WA_Left, BlätterWinLeft);
  t[12] := TagItem(WA_Top, BlätterWinTop);
  t[13].ti_Tag := TAG_DONE;
  IF pubname <> "" THEN
  BEGIN
    t[13] := TagItem(WA_PubScreenFallBack, 1);
    t[14] := TagItem(WA_PubScreenName, LONG(pubname));
    t[15].ti_Tag := TAG_DONE;
  END;

  blätterwp := OpenWindowTagList(NIL,^t);
  IF blätterwp<>NIL THEN
  BEGIN
    RahmenZeichnen;
    PNode := aktanzeig;
    BDisplay(PNode);
    dummy := FALSE;
    REPEAT
      GetMessage(blätterwp,class,code,qual,GadNum);
      CASE class OF
        IDCMP_CLOSEWINDOW : dummy := TRUE;
        IDCMP_CHANGEWINDOW : BEGIN
                               RahmenZeichnen;
                               BDisplay(PNode);
                             END;
        IDCMP_VANILLAKEY: 
          { -- Hier wird nicht mit ButSelecter operiert, da der User -- }
          { -- auch mal Datensätze ganz schnell durchblättern        -- }
          { -- möchte, indem er seinen Finger auf der +/- - Taste    -- }
          { -- läßt.                                                 -- }
          IF (code = 27) THEN dummy := TRUE
          ELSE
          BEGIN
            CASE CHR(code) OF
              "-" : Minus;
              "+" : Plus;
              "e","E" : BEGIN
                          SetBusyWindow(blätterwp,BlättReq);
                          Edit(PNode,TRUE);
                          BDisplay(PNode);
                          UnBusyWindow(blätterwp,BlättReq);
                        END;
            ELSE END;
          END;
        IDCMP_GADGETUP:
          CASE GadNum OF
            2 : Minus;
            3 : BEGIN
                  SetBusyWindow(blätterwp,BlättReq);
                  Edit(PNode,TRUE);
                  UnBusyWindow(blätterwp,BlättReq);
                  BDisplay(PNode);
                END;
            4 : Plus;
          ELSE END;
      ELSE END;
    UNTIL dummy;
    BlätterWinLeft := blätterwp^.LeftEdge;
    BlätterWinTop := blätterwp^.TopEdge;
    CloseBlätterWin;
  END ELSE DisplayBeep(NIL);
  FreeGadgets(BlätterGl);
  BlätterGl := NIL;
END;

{$endif}
