;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ ;+ ; NAME:widgetdessine ; ; PURPOSE: c'est la procedure qui lance le dessin. Si on ne le lui ; donne pas de commande, elle appelle construitcommande pour savoir ; quoi tracer. ; ; CATEGORY: ; ; CALLING SEQUENCE:widgetdessine, base ; ; INPUTS:base: l''id du widget ou appliquer le dessin ; ; KEYWORD PARAMETERS: ; COMMANDE: un string du style: read_data('sst'...),.... ; ; OUTPUTS: ; ; COMMON BLOCKS:common.pro ; ; SIDE EFFECTS: ; ; RESTRICTIONS: ; ; EXAMPLE: ; ; MODIFICATION HISTORY:Sebastien Masson (smasson@lodyc.jussieu.fr) ; ;- ;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ PRO widgetdessine, base, COMMANDE = commande, FORPLTH = forplth, FORPLTZ = forpltz, FORPLTT = forpltt, _extra = ex @common ; on recupere la uvalue de base widget_control,base, get_uvalue = top_uvalue ; on determine quelle procedure on va etre appeler pour faire le dessin procedure = top_uvalue.name if keyword_set(forplth) then procedure = 'plt' if keyword_set(forpltz) then procedure = 'pltz' if keyword_set(forpltt) then procedure = 'pltt' ; print, '*****************' ; help, top_uvalue, /struct ; help, top_uvalue.exextra, /struct if NOT keyword_set(commande) then $ commande = construitcommande(base, FORPLTH = forplt, FORPLTZ = forpltz, FORPLTT = forpltt, _extra = ex) widget_control,base, get_uvalue = top_uvalue ; print, '*****************' ; help, top_uvalue, /struct ; print, '***..........****' ; help, top_uvalue.exextra, /struct ; help, top_uvalue.extra, /struct ; print, '-*-*-*-*-*-*-*-*-*' ; print, commande ; help,mixstru(top_uvalue.exextra,top_uvalue.extra), /struct ; ; on recuperel''id de la fenetre graphique associee au widget d''id base widget_control,widget_info(base,find_by_uname = 'graph'),get_value=win ; on la selectionne (c''est a elle que sera passe toutes les commandes ; concernant une fenetre) wset, win erase, 255 ; on netoie la fenetre ; on s''assure que si on travaille avec un ecran codant les couleurs ; sur 24 bits la couleur de fond specifiee!p.background est bien ; appliquee if !d.n_colors gt 256 then begin device, decomposed=1 !p.background='ffffff'x plot,[0],[0] device, decomposed=0 ENDIF ; ; on execute la commande pour faire le dessin ; IF chkstru(top_uvalue, 'grille') THEN anciennegrille = top_uvalue.grille $ ELSE anciennegrille = 'T' rien = execute(procedure+', '+Commande) ; if NOT rien then stop ; ; on va accualiser ;a stuture contenue ds la uvalue de base ; ; on doit determiner le type de dessin et eventuellement la nouvelle boite. case procedure OF 'plt':type = 'xy' 'pltt':BEGIN case 1 of strpos(commande, '''xt''') NE -1:type = 'xt' strpos(commande, '''yt''') NE -1:type = 'yt' ELSE:type = 'unknow !' endcase END 'pltz':BEGIN lastboite = rstrpos(commande, 'boite=') ouvrepos = strpos(commande, '[', lastboite+1) boite = strmid(commande,ouvrepos+1,strpos(commande, ']', lastboite+1)-ouvrepos-1) boite = str_sep(boite, ',') & boite = long(boite) if boite[1]-boite[0] LE boite[3]-boite[2] then type = 'yz' ELSE type = 'xz' END ENDCASE ; ; print, '&&&&&&&&&&&&&&&&&&&&&&&&' ; help, top_uvalue, /struct ; help, mixstru({name:procedure, commande:commande, penv:!p, xenv:!x, yenv:!y, type:type}, top_uvalue), /struct ; ; ; widget_control, base, set_uvalue = mixstru({name:procedure, commande:commande, penv:!p, xenv:!x, yenv:!y, type:type, grille:vargrid}, top_uvalue) ; on change d''axe vertical ? if vargrid NE anciennegrille then begin widget_control, widget_info(base, find_by_uname = 'domain'), get_value = value widget_control, widget_info(base, find_by_uname = 'domain'), set_value = value endif ; help, top_uvalue.extra, /struct return end