PRO wid1_own_event,event

   IF WIDGET_INFO(event.top,/active) THEN $
   a=WIDGET_EVENT(WIDGET_INFO(event.top,find_by_uname='wid1_DOWN'),/nowait,bad_id=bad)
   IF WIDGET_INFO(event.top,/active) THEN $
   a=WIDGET_EVENT(WIDGET_INFO(event.top,find_by_uname='wid1_UP'),/nowait,bad_id=bad)
   IF WIDGET_INFO(event.top,/active) THEN $
   a=WIDGET_EVENT(WIDGET_INFO(event.top,find_by_uname='wid1_QUIT'),/nowait,bad_id=bad)

END


PRO wid1_event, Event
   WIDGET_CONTROL,event.top,get_uvalue=values
   CASE event.id OF
      WIDGET_INFO(event.top,find_by_uname='wid1_QUIT'): BEGIN
         (*values).is_up =0
         (*values).is_down =0
         WIDGET_CONTROL, event.top,/destroy
      END
      WIDGET_INFO(event.top,find_by_uname='wid1_UP'):  BEGIN
         (*values).is_up =1
         (*values).is_down =0
         IF event.select EQ 1 THEN BEGIN
            WIDGET_CONTROL,WIDGET_INFO(event.top,find_by_uname='wid1_DRAW'),get_uvalue=WINDOW
            WSET,WINDOW
            WHILE (*values).counter LE (*values).max AND $
            (*values).is_up EQ 1 DO BEGIN
            ERASE
            XYOUTS,0.5,0.5,/NORM,'UP',alignment=0.5, $
                   charsize=(*values).counter/100.
            (*values).counter=(*values).counter+1
            wid1_own_event,event
         ENDWHILE
      ENDIF
   END

   WIDGET_INFO(event.top,find_by_uname='wid1_DOWN'): BEGIN
      (*values).is_up =0
      (*values).is_down =1
      IF event.select EQ 1 THEN BEGIN
         WIDGET_CONTROL,WIDGET_INFO(event.top,find_by_uname='wid1_DRAW'),get_uvalue=WINDOW
         WSET,WINDOW
         WHILE (*values).counter GT (*values).min AND $
         (*values).is_down EQ 1 DO BEGIN
         ERASE
         XYOUTS,0.5,0.5,/NORM,'DOWN',alignment=0.5, $
                charsize=(*values).counter/100.
         (*values).counter=(*values).counter-1
         wid1_own_event,event
      ENDWHILE
   ENDIF
END
ELSE:
ENDCASE
END

PRO wid1, GROUP_LEADER=wGroup, _EXTRA=_VWBExtra_
   ID_BASE_0=WIDGET_BASE( GROUP_LEADER=wGroup,$
             SCR_XSIZE=300 ,SCR_YSIZE=200,TITLE='IDL',$
             SPACE=3 ,XPAD=3,YPAD=3)


   ID_DRAW_0=WIDGET_DRAW(id_base_0,$
             XOFFSET=100 ,YOFFSET=7, SCR_XSIZE=185 ,$
             SCR_YSIZE=160,uname='wid1_DRAW')


   ID_UP=WIDGET_BUTTON(id_base_0, $
         XOFFSET=44 ,YOFFSET=60,XSIZE=50,/ALIGN_CENTER ,$
         VALUE='UP',event_pro='wid1_event',uname='wid1_UP')


   ID_DOWN=WIDGET_BUTTON(id_base_0, $
           XOFFSET=44, YOFFSET=83,  XSIZE=50, $
           /ALIGN_CENTER, VALUE='DOWN',$
           event_pro='wid1_event',uname='wid1_DOWN')


   ID_QUIT=WIDGET_BUTTON(id_base_0, $
           /ALIGN_CENTER ,VALUE='QUIT', $
           event_pro='wid1_event',uname='wid1_QUIT')

   WIDGET_CONTROL, /REALIZE, id_BASE_0

   WIDGET_CONTROL,id_draw_0,get_value=window_no
   WIDGET_CONTROL,id_draw_0,set_uvalue=window_no
   WSET,window_no
   ERASE

   values=PTR_NEW(CREATE_STRUCT('counter',0L,'min',1L,'max',10000L,'is_up',0,$
          'is_down',0))


   WIDGET_CONTROL, /REALIZE, id_BASE_0,set_uvalue=values

   XMANAGER, 'wid1', id_BASE_0
   PTR_FREE,values
END

