;********************************************************************************* FUNCTION cw_fourparameter_get_value, id widget_control, widget_info(id, find_by_uname = 'glo'), get_value = glo widget_control, widget_info(id, find_by_uname = 'used'), get_value = used widget_control, widget_info(id, find_by_uname = 'min'), get_value = min widget_control, widget_info(id, find_by_uname = 'max'), get_value = max return, fix([glo[0], used[0], min[0], max[0]]) end ;********************************************************************************* FUNCTION cw_fourparameter_event, event widget_control, event.id, get_uvalue=uval value = cw_fourparameter_get_value(event.handler) case uval of 'glo': 'used':BEGIN widget_control, event.id, get_value = used value[1] = fix(used[0]) if value[1] GT value[0] then begin value[1] = value[0] widget_control, event.id, set_value = strtrim(value[1], 1) value[2] = 0 widget_control, widget_info(event.handler, find_by_uname = 'min'), set_value = strtrim(value[2], 1) value[3] = value[0]-1 widget_control, widget_info(event.handler, find_by_uname = 'max'),set_value=strtrim(value[3], 1) ENDIF if value[1] GT value[3]-value[2] then begin value[2] = 0 widget_control, widget_info(event.handler, find_by_uname = 'min'), set_value = strtrim(value[2], 1) value[3] = value[1]-1 widget_control, widget_info(event.handler, find_by_uname = 'max'),set_value=strtrim(value[3], 1) ENDIF END 'min':BEGIN widget_control, event.id, get_value = minv value[2] = 0 > fix(minv[0]) < (value[3]-1) widget_control, event.id, set_value = strtrim(value[2], 1) value[1] = fix(value[3]-value[2]+1) widget_control, widget_info(event.handler, find_by_uname = 'used'), set_value = strtrim(value[1], 1) END 'max':BEGIN widget_control, event.id, get_value = maxv value[3] = (value[2]+1) > fix(maxv[0]) < (value[0]-1) widget_control, event.id, set_value = strtrim(value[3], 1) value[1] = fix(value[3]-value[2]+1) widget_control, widget_info(event.handler, find_by_uname = 'used'), set_value = strtrim(value[1], 1) END endcase return, {ID:event.handler, TOP:event.top, HANDLER:0L $ , VALUE:value} end ;********************************************************************************* FUNCTION cw_fourparameter, parent, xgloin, xin, xminin, xmaxin, direction, type, CLEAR = clear, EDITABLE = editable, UVALUE = uvalue, UNAME = uname ; @common ; xglo = xgloin x = xin xmin = xminin xmax = xmaxin ; if keyword_set(clear) then begin x = 0 xmin = 0 xmax = 0 ENDIF ; if NOT keyword_set(uvalue) then uvalue = '' if NOT keyword_set(uname) then uname = '' base = widget_base(parent, /column, UVALUE = uvalue, UNAME = uname $ , EVENT_FUNC = 'cw_fourparameter_event' $ , FUNC_GET_VALUE='cw_fourparameter_get_value' $ , PRO_SET_VALUE='cw_fourparameter_set_value' ) ; ; case type of ; 'mesh':nothing = widget_label(base, value = 'parametres de position de la grille par rapport') ; 'dta':nothing = widget_label(base, value = 'parametres de position des donnees par rapport') ; endcase ; nothing = widget_label(base, value = 'au domaine de calcul suivant '+direction) baserow = widget_base(base, /row) case direction of 'x':letter = 'i' 'y':letter = 'j' 'z':letter = 'k' ENDCASE case type of 'mesh':used = '' 'dta':used = 'dta' endcase ; nothing = widget_label(baserow, value = 'jp'+letter+'glo') nothing = widget_text(baserow, value = strtrim(xglo, 1), uname = 'glo', uvalue = 'glo', xsize = 4, EDITABLE = editable) nothing = widget_label(baserow, value = 'jp'+letter+used) nothing = widget_text(baserow, value = strtrim(x, 1), uname = 'used', uvalue = 'used', xsize = 4, EDITABLE = editable) nothing = widget_label(baserow, value = 'i'+direction+'min'+type) rien = execute('value = strtrim(i'+direction+'min'+type+'*(1-keyword_set(editable)), 1)') nothing = widget_text(baserow, value = strtrim(xmin, 1), uname = 'min', uvalue = 'min', xsize = 4, EDITABLE = editable) nothing = widget_label(baserow, value = 'i'+direction+'max'+type) nothing = widget_text(baserow, value = strtrim(xmax, 1), uname = 'max', uvalue = 'max', xsize = 4, EDITABLE = editable) return, base end