PRO xspecifiedessin_event, event widget_control, event.top, get_uvalue = topid widget_control, topid, get_uvalue = top_uvalue widget_control, event.id, get_uvalue = uval if n_elements(uval) EQ 0 then return case uval of 'cancel':widget_control, event.top, /destroy 'default':BEGIN exextra = definedefaultextra(top_uvalue.nomvariable) widget_control, widget_info(event.top,find_by_uname='min'), set_value = strtrim(exextra.min, 1) widget_control, widget_info(event.top,find_by_uname='max'), set_value = strtrim(exextra.max, 1) widget_control, widget_info(event.top,find_by_uname='int'), set_value = strtrim(exextra.inter, 1) widget_control, widget_info(event.top,find_by_uname='palnum'), set_value = strtrim(exextra.lct, 1) widget_control, widget_info(event.top,find_by_uname='autres'), set_value = '' END 'palcol':BEGIN ind = fix(strmid(event.value, 0, strpos(event.value, '-'))) widget_control, widget_info(event.top,find_by_uname='palnum'), set_value = strtrim(ind, 1) END 'pzoom':BEGIN widget_control, widget_info(event.top,find_by_uname='pzoom'), get_value = pzoom pzoom = long(pzoom[0]) pmaxid = widget_info(event.top,find_by_uname='pmax') widget_control, pmaxid, get_value = pmax pmax = long(pmax[0]) if pzoom GT pmax then widget_control, pmaxid, set_value = strtrim(pzoom, 1) END 'ok':BEGIN widget_control, widget_info(event.top,find_by_uname='min'), get_value = min min = float(min[0]) widget_control, widget_info(event.top,find_by_uname='max'), get_value = max max = float(max[0]) widget_control, widget_info(event.top,find_by_uname='int'), get_value = int int = float(int[0]) widget_control, widget_info(event.top,find_by_uname='palnum'), get_value = palnum palnum = long(palnum[0]) widget_control, widget_info(event.top,find_by_uname='autres'), get_value = autres autres = autres[0] ; exextra = {min:min, max:max, inter:int, lct:palnum} if autres NE '' then rien = execute('exextra = get_extra('+autres+', _extra = exextra)') ; ; si on fait un pltz ; if top_uvalue.name EQ 'pltz' then begin widget_control, widget_info(event.top,find_by_uname='pzoom'), get_value = pzoom pzoom = long(pzoom[0]) pmaxid = widget_info(event.top,find_by_uname='pmax') widget_control, pmaxid, get_value = pmax pmax = long(pmax[0]) if pzoom GT pmax then pmax = pzoom ; si pmax n''est pas la valeur par defaut alors il faut changer la ; boite utiliseee ds le pltz if pmax NE 200 then BEGIN commande = top_uvalue.commande ; on recupere la fin de la boite pos2 = strpos(commande, ']', rstrpos(commande, 'boite')) ; on change la derniere valeur de la boite pos1 = rstrpos(commande, ',', pos2) top_uvalue.commande = strmid(commande, 0, pos1+1)+strtrim(pmax, 1)+strmid(commande, pos2) ; ENDELSE ENDIF exextra = mixstru({profmax:pmax, zoom: pzoom}, exextra) ENDIF widget_control, topid, set_uvalue = mixstru({exextra:exextra}, top_uvalue) widget_control, event.top, /destroy widgetdessine, topid, commande = top_uvalue.commande END ELSE: endcase return end ;---------------------------------------------------------------- PRO xspecifiedessin, parent, _extra = ex widget_control, parent, get_uvalue = top_uvalue base = widget_base(/column, title = 'Specification du Dessin', uvalue = parent) ; base1 pour specifier le min, le max et l''intervalle base1 = widget_base(base, /row, /frame) rien = widget_label(base1, value = 'Min') rien = widget_text(base1, value = strtrim(top_uvalue.exextra.min, 1), /editable, xsize = 5, uname = 'min', uvalue = 'min') rien = widget_label(base1, value = 'Max') rien = widget_text(base1, value = strtrim(top_uvalue.exextra.max, 1), /editable, xsize = 5, uname = 'max', uvalue = 'max') rien = widget_label(base1, value = 'Int') rien = widget_text(base1, value = strtrim(top_uvalue.exextra.inter, 1), /editable, xsize = 5, uname = 'int', uvalue = 'int') ; base2 por specifier la palette de couleur (soit par numero soit ds ; un menu deroulant) base2 = widget_base(base, /row, /frame) rien = widget_label(base2, value = 'Pal Number') rien = widget_text(base2, value = strtrim(top_uvalue.exextra.lct, 1), /editable, xsize = 3, uname = 'palnum', uvalue = 'palnum') lct, get_name = nomcouleur nbrligne = 30 nbrlist = n_elements(nomcouleur)/nbrligne nomcouleur = strtrim(sindgen(n_elements(nomcouleur)), 1)+'- '+nomcouleur nomcouleur = '0\'+nomcouleur nomcouleur = ['1\palette de couleur', nomcouleur] if nbrlist GT 1 then for i = 1,nbrlist do $ nomcouleur = [nomcouleur[0:nbrligne*i-1+i], '1\ ', nomcouleur[nbrligne*i+i:n_elements(nomcouleur)-1]] rien = cw_pdmenu(base2,nomcouleur, /RETURN_NAME , uvalue = 'palcol', uname = 'palcol') ; si on est en train de faire un graph pour pltz on raoute un widget ; pour specifier la profmax et la profzoom if top_uvalue.name EQ 'pltz' then BEGIN base4pltz = widget_base(base, /row, /frame) rien = widget_label(base4pltz, value = 'Prof max') ; il faut retrouver la prof max de la boite utiliseee pour faire le pltz posboite = strpos(top_uvalue.commande, '[', rstrpos(top_uvalue.commande, 'boite')) boite = strmid(top_uvalue.commande, posboite $ , strpos(top_uvalue.commande, ']', posboite )-posboite+1) boite = str_sep(boite, ',') if n_elements(boite) EQ 4 then pmax = 200 ELSE pmax = long(boite[n_elements(boite)-1]) pmax = strtrim(pmax, 1) ; on declare le widget: rien = widget_text(base4pltz, value = pmax, /editable, xsize = 4, uname = 'pmax', uvalue = 'pmax') rien = widget_label(base4pltz, value = 'Prof Zoom') if chkstru(top_uvalue.exextra, 'zoom') then pzoom = top_uvalue.exextra.zoom[0] $ ELSE pzoom = pmax rien = widget_text(base4pltz, value = strtrim(pzoom, 1), /editable, xsize = 4, uname = 'pzoom', uvalue = 'pzoom') endif ; baseavantfin pour passer tous les mots cles possibles... ; widget text contennant les autres mots cles passe ds top_uvalue.exextra ; en reste-t-il? si oui, il faut les mettres sous forme de string restekeywd = extractstru(top_uvalue.exextra, ['min', 'max', 'inter', 'lct', 'zoom', 'profmax']) if size(restekeywd, /type) EQ 8 then autres = strkeywd(restekeywd) ELSE autres = '' baseavantfin = widget_base(base, /row, /frame) rien = widget_label(baseavantfin, value = 'Autres mots cles') rien = widget_text(baseavantfin, value = autres, /editable, uname = 'autres', uvalue = 'autres') ; basefin pour en finir, trois boutons: Default/OK/Cancel basefin = widget_base(base, /row, /frame, /align_center) rien = widget_button(basefin,value='Default', uvalue = 'default') rien = widget_button(basefin,value='OK', uvalue = 'ok') rien = widget_button(basefin,value='Cancel', uvalue = 'cancel') ; widget_control,base,/realize xmanager,'xspecifiedessin',base, /no_block ; return end