/* Example of GadTools ListView Gadget  */

x = addlib("apig.library",0,-30,0)          /* make the lib avaiable */

call SET_APIG_GLOBALS()

scr          = LOCKPUBSCREEN("Workbench")   /* gonna put our window  */
                                            /* Workbench screen      */

scrvinfo     = GETVISUALINFO(scr)           /* NewGadgets need this  */

scrfont      = GETVALUE(scr,40,4,'p')       /* NewGadgets need this  */
                                            /* points to TextAttr    */

glistpointer = ALLOCVEC(4,MEMF_CLEAR)       /* a pointer for context */

conxgad      = CREATECONTEXT(glistpointer)  

previousgadget = conxgad

myid = 10


/* we now create and initialize a NewGadget structure */

newgadx = MAKENEWGADGET(scrvinfo,scrfont,65,32,185,120,"YOUR LISTVIEW GADGET",
                        ,PLACETEXT_ABOVE,myid,null())

/* before doing the gadget creation we need an Exec List */

myexeclist = build_me_a_list()


/* we now create the gadget, a LISTVIEW gadget */

previousgadget = CREATEGADGET(LISTVIEW_KIND,previousgadget,newgadx,
                                 ,GTLV_LABELS,myexeclist,
                                 ,LAYOUTA_SPACING,1,
                                 ,TAG_DONE,0)


wintitle = "APIG v3.1 GadTools LISTVIEW Gadget Example"
winidcmp = CLOSEWINDOW+GADGETUP+GADGETDOWN+MOUSEMOVE
winflags = WINDOWCLOSE+WINDOWDRAG+WINDOWSIZING+WINDOWDEPTH+GIMMEZEROZERO,
           +ACTIVATE

portname = "apiggadt3_port"

p = openport(portname)


/* open window, last parm in OPENWINDOW call points to our gadgets  */
w1  = OPENWINDOW(portname,0,30,640,200,2,4,winidcmp,winflags,wintitle,
                 ,scr,0,null(),null(),conxgad)

call GT_REFRESHWINDOW(w1,null())  /* need after opening window */

rpw1 = GETWINDOWRASTPORT(w1) 

exitme = 0
do while exitme = 0

     x = waitpkt(portname)
     do forever 
        msg = getpkt(portname)
        if msg = '0000 0000'x then leave

        msgclass  = getarg(msg,0)
        msgcode   = getarg(msg,1)
        x = reply(msg,0)  
        select
           when msgclass = CLOSEWINDOW then exitme = 1
           when msgclass = GADGETUP then 
             do   
                call cleareol(rpw1,290,50)
                call pitext(rpw1,290,50,("You clicked line" msgcode),1,2,JAM2,null())
             end
           otherwise nop
        end
     end
end

call CLOSEWINDOW(w1)

call UNLOCKPUBSCREEN(null(),scr)

call FREEVISUALINFO(scrvinfo)

call FREEGADGETS(conxgad)

call FREETHIS(newgadx)

call FREEVEC(glistpointer)

call FREE_EXEC_LIST(myexeclist,,1)

exit

build_me_a_list:

   mylist = ALLOCMEM(14,MEMF_CLEAR)  /* our list structure  */
                                     /* always use ALLOCMEM */
                                     /* so it can be freed  */
                                     /* properly.           */

   call NEWLIST(mylist)

   do x = 1 to 30
      txt = "This is Line " x
      ptr_to_node_added = ADD_LIST_NODE(mylist,txt)
   end

return mylist
