;
;              Compound Widget pour saisie d'un nombre
;              ---------------------------------------
;
;   s_nombre = rh_cw_nombre(parent, MINIMUM = 1, MAXIMUM = 100,$ 
;              VALUE = 1, UVALUE = 'nombre', TITLE = 'toto')
;


Function rh_strnb, tx
  return, strcompress(STRING(FORMAT='(i9)', tx))
end


PRO rh_nb_set_value, id, value

  ON_ERROR, 2 
  stash = WIDGET_INFO(id, /CHILD)
  WIDGET_CONTROL, stash, GET_UVALUE=state
  WIDGET_CONTROL, state.slideid, SET_SLIDER_MAX = state.top
  WIDGET_CONTROL, state.slideid, SET_SLIDER_MIN = state.bot
  WIDGET_CONTROL, state.slideid, SET_VALUE = value
  widget_control, state.nbid, set_VALUE = rh_strnb(value)
  WIDGET_CONTROL, stash, SET_UVALUE=state, /NO_COPY

END


FUNCTION rh_nb_get_value, id

  ON_ERROR, 2  
  stash = WIDGET_INFO(id, /CHILD)
  WIDGET_CONTROL, stash, GET_UVALUE=state, /NO_COPY
  WIDGET_CONTROL, state.slideid, GET_VALUE = value
  WIDGET_CONTROL, stash, SET_UVALUE=state, /NO_COPY
  return, value

END 

FUNCTION rh_nb_event, ev

  parent=ev.handler
  stash = WIDGET_INFO(parent, /CHILD)
  WIDGET_CONTROL, stash, GET_UVALUE=state, /NO_COPY

;Modif Slider
  if (ev.id eq state.slideid) then begin
     WIDGET_CONTROL, state.slideid, GET_VALUE = value
     widget_control, state.nbid, set_VALUE = rh_strnb(value)
  endif 

;Modif Texte
  if (ev.id eq state.nbid) then begin
     WIDGET_CONTROL, state.nbid, GET_VALUE = tmp
     value=long(tmp(0))
     IF value LT state.bot THEN value = state.bot
     IF value GT state.top THEN value = state.top
     WIDGET_CONTROL, state.nbid,  SET_VALUE = rh_strnb(value)
     WIDGET_CONTROL, state.slideid, SET_VALUE = value
  endif 

  WIDGET_CONTROL, stash, SET_UVALUE=state, /NO_COPY
  RETURN, { ID:parent, TOP:ev.top, HANDLER:0L, VALUE:value }
END


; -------------------------------------------------------------------
;
; -------------------------------------------------------------------

FUNCTION rh_cw_nombre, parent, MINIMUM = nbmin, MAXIMUM = nbmax, $
                    VALUE = nombre, UVALUE = uval, TITLE=title

state = {slideid:0L, nbid:1L, BOT:long(nbmin), TOP:long(nbmax)}
 
mainbase = widget_base(parent,/column,/align_center,space=0)

b1 = widget_base(mainbase,/row,/align_center,space=0)
l  = widget_label(b1, value=title,/ALIGN_CENTER)
state.nbid = WIDGET_TEXT(mainbase, UVALUE='L_NB', XSIZE= 9, /EDIT, $
               VALUE = rh_strnb(nombre))
state.slideid = WIDGET_SLIDER(mainbase, /SUPPRESS_VALUE, SCROLL = 1, $
                UVALUE='NB',MINIMUM = nbmin, MAXIMUM = nbmax, $
                VALUE = nombre, /drag)

WIDGET_CONTROL, mainbase, SET_UVALUE = uval, $
                EVENT_FUNC     = 'rh_nb_event', $
	        PRO_SET_VALUE  = 'rh_nb_SET_VALUE', $
                FUNC_GET_VALUE = 'rh_nb_GET_VALUE' 

WIDGET_CONTROL, WIDGET_INFO(mainbase, /CHILD), $
                SET_UVALUE=state, /NO_COPY

RETURN, mainbase
END
