; ;------------------------------------------------------------------ ; pro map_event, ev @pltdat.h common mapcom, wfsl_clat,wfsl_clon,wfsl_perimlat,ids_mapopt,wtxt_xlab,$ wtxt_ylab,wlab_xlab,wlab_ylab ; ; Check for cw_fsliders: ; case ev.id of ; ; Center latitude: wfsl_clat: begin map.projcen(0) = ev.value print,'Center latitude =',map.projcen(0) return end ; ; Center longitude: wfsl_clon: begin map.projcen(1) = ev.value print,'Center longitude =',map.projcen(1) return end ; ; Perimeter latitude: wfsl_perimlat: begin map.stperim = ev.value print,'Perimeter latitude =',map.stperim return end else: endcase ; ; Check user values: ; widget_control,ev.id,get_uvalue=uval case uval of "DONE": begin widget_control,/destroy,ev.top widget_control,/destroy,vecbase,bad_id=badid for i=0,2 do widget_control,wb_types(i),set_button=0 return end ; ; bases_projopt(0-4): ; 0 = center latitude ; 1 = center longitude ; 2 = limb resolution ; 3 = hemisphere (n or s) ; 4 = perimeter latitude ; "PDM_PROJ": begin case ev.value of "GLOBAL CYLINDRICAL EQUIDISTANT": begin map.proj = "GLOBAL CYLINDRICAL EQUIDISTANT" print,'Will make cylindrical equidistant projection' widget_control,bases_projopt(0),map=0 widget_control,bases_projopt(1),/map for i=2,4 do widget_control,bases_projopt(i),map=0 widget_control,ids_mapopt(1),sensitive=1 ; turn on slt option end "POLAR STEREOGRAPHIC": begin map.proj = "POLAR STEREOGRAPHIC" map.projcen(0)=90. & if map.stperim lt 0. then map.projcen(0)=-90. map.projcen(1) = fslt(12.,ut,dum,3) if (map.projcen(0) gt 0.) then map.projcen(1) = fslt(0.,ut,dum,3) widget_control,bases_projopt(0),map=0 widget_control,bases_projopt(1),map=0 widget_control,bases_projopt(2),/map widget_control,bases_projopt(3),/map widget_control,bases_projopt(4),/map widget_control,ids_mapopt(1),sensitive=0 ; turn off slt option print,'Will make polar stereographic projection' end "SATELLITE VIEW": begin map.proj = "SATELLITE VIEW" widget_control,bases_projopt(0),/map widget_control,bases_projopt(1),/map widget_control,bases_projopt(2),/map widget_control,bases_projopt(3),map=0 widget_control,bases_projopt(4),map=0 widget_control,ids_mapopt(1),sensitive=0 ; turn off slt option print,'Will make satellite view projection' end "MOLLWEIDE": begin map.proj = "MOLLWEIDE" widget_control,bases_projopt(0),/map widget_control,bases_projopt(1),/map widget_control,bases_projopt(2),/map widget_control,bases_projopt(3),map=0 widget_control,bases_projopt(4),map=0 widget_control,ids_mapopt(1),sensitive=0 ; turn off slt option print,'Will make mollweide projection' end else: begin print,'>>> Unknown button from projection menu <<<' return end endcase if map.proj eq "POLAR STEREOGRAPHIC" or $ map.proj eq "SATELLITE VIEW" or $ map.proj eq "MOLLWEIDE" then begin ; no x or y axis labeling widget_control,wlab_xlab,sensitive=0 widget_control,wtxt_xlab,sensitive=0 widget_control,wlab_ylab,sensitive=0 widget_control,wtxt_ylab,sensitive=0 endif else begin widget_control,wlab_xlab,sensitive=1 widget_control,wtxt_xlab,sensitive=1 widget_control,wlab_ylab,sensitive=1 widget_control,wtxt_ylab,sensitive=1 endelse return end "PDM_OUTLINES": begin case ev.value of "MAP OUTLINES (WHITE)": begin print,'Selected white continental outlines' map.continents = white return end "MAP OUTLINES (BLACK)": begin print,'Selected black continental outlines' map.continents = black return end "NO MAP OUTLINES": begin print,'Selected NO continental outlines' map.continents = -1 return end else: begin print,'>>> Unknown button from continental outlines menu' return end endcase end "PDM_GRID": begin case ev.value of "MAP GRID (WHITE)": begin print,'Selected white map grid' map.grid = white return end "MAP GRID (BLACK)": begin print,'Selected black map grid' map.grid = black return end "NO MAP GRID": begin print,'Selected NO map grid' map.grid = -1 return end else: begin print,'>>> Unknown button from map grid menu <<<' return end endcase end "BGP_MAPOPT": begin case ev.value of "ADD SLT AXIS": begin if map.sltxax le 0 then begin print,'Will add x-axis with solar local time' map.sltxax = 1 endif else begin print,'Will NOT add x-axis with solar local time' map.sltxax = 0 endelse return end "PLOT LOG10": begin if map.log10 le 0 then begin map.log10 = 1 print,'Will plot log10 of field' endif else begin map.log10 = 0 print,'Will NOT plot log10 of field' endelse return end else: print,'unknown uvalue=',ev.value,' for map options' endcase return end "TXT_UT": begin widget_control,ev.id,get_value=value utrd = 0. istat = readstr(value(0),utrd,'ut for map with slt axis') if istat lt 0 then begin widget_control,ev.id,set_value=string(format="(f5.1)",ut) return endif if utrd lt 0. or utrd gt 23. then begin print,format="('>>> Bad ut = ',f8.2,' (must be decimal hrs) <<<')",utrd widget_control,ev.id,set_value=string(format="(f5.1)",ut) return endif else begin ut = utrd print,'Will use ut = ',ut if map.proj eq "POLAR STEREOGRAPHIC" then begin map.projcen(1) = fslt(12.,ut,dum,3) if (map.projcen(0) gt 0.) then map.projcen(1) = fslt(0.,ut,dum,3) endif endelse end "SL_LIMBCOMP": begin widget_control,ev.id,get_value=value map.imcompress = value print,'Set limb resolution to ',map.imcompress return end "BGP_HEM": begin case ev.value of "SOUTH": begin print,'Will plot polar SOUTH' map.projcen(0) = -90. end "NORTH": begin print,'Will plot polar NORTH' map.projcen(0) = 90. end else: endcase if (map.projcen(0) lt 0. and map.stperim gt 0.) or $ (map.projcen(0) gt 0. and map.stperim lt 0.) then begin map.stperim = -map.stperim widget_control,wfsl_perimlat,/destroy if map.stperim lt 0. then $ wfsl_perimlat = cw_fslide(bases_projopt(4),minimum=frame.yy(1),$ maximum=frame.yy(frame.ny/2-1),delta=dlat,xsize=350,$ format='(f5.1)',value=map.stperim,title=string(format=$ "('Perimeter Latitude (',f5.1, ' to ',f5.1,')')",$ frame.yy(1),frame.yy(frame.ny/2-1))) $ else $ wfsl_perimlat = cw_fslide(bases_projopt(4),$ minimum=frame.yy(frame.ny/2),$ maximum=frame.yy(frame.ny-2),delta=dlat,xsize=350,$ format='(f4.1)',value=map.stperim,title=string(format=$ "('Perimeter Latitude (',f5.1, ' to ',f5.1,')')",$ frame.yy(frame.ny/2),frame.yy(frame.ny-2))) endif map.projcen(1) = fslt(12.,ut,dum,3) if (map.projcen(0) gt 0.) then map.projcen(1) = fslt(0.,ut,dum,3) return end "TXT_TOPLAB": begin widget_control,ev.id,get_value=value frame.toplab = value(0) print,'Will use top label: ',frame.toplab end "TXT_XLAB": begin widget_control,ev.id,get_value=value frame.xlab = value(0) print,'Will use x-axis label: ',frame.xlab end "TXT_YLAB": begin widget_control,ev.id,get_value=value frame.ylab = value(0) print,'Will use y-axis label: ',frame.ylab end "TXT_BOTLAB": begin widget_control,ev.id,get_value=value frame.botlab = value(0) print,'Will use bottom label: ',frame.botlab end "MAKEFRAME": begin widget_control,/hourglass erase if vec.ivec eq 1 then vec.ivec = 2 case map.proj of "GLOBAL CYLINDRICAL EQUIDISTANT": pltce "POLAR STEREOGRAPHIC": pltst "SATELLITE VIEW": print,'Sat view projection not yet available' "MOLLWEIDE": print,'Mollweide projection not yet available' else: print,'Unknown map projection: ',proj endcase if writecgm then wrcgm,'map' if psdev.writeps then wrps,'map' return end "VEC": begin widget_control,/hourglass widget_control,vecbase,show=1,bad_id=badid if badid eq 0 then begin print,'>>> there is already a vectors window on your screen' return endif popup_vec return end else: print,'Unknown user value (maps) = ',uval endcase return end ; ;------------------------------------------------------------------- ; pro popup_map @pltdat.h common mapcom, wfsl_clat,wfsl_clon,wfsl_perimlat,ids_mapopt,wtxt_xlab,$ wtxt_ylab,wlab_xlab,wlab_ylab ; mapbase = widget_base(title='MAP PROJECTIONS',/column) ; ; Base for continental outlines, map grid, projections, and track lat,lon: ; menubase = widget_base(mapbase,/frame,/row) junk = {CW_PDMENU_S, flags:0, name:''} ; ; Projections menu: ; desc = $ [{CW_PDMENU_S,1,"PROJECTION"},$ {CW_PDMENU_S,0,"GLOBAL CYLINDRICAL EQUIDISTANT"},$ {CW_PDMENU_S,0,"POLAR STEREOGRAPHIC"},$ {CW_PDMENU_S,0,"SATELLITE VIEW"},$ {CW_PDMENU_S,0,"MOLLWEIDE"}] projmenu = cw_pdmenu(menubase,desc,/return_name,uvalue="PDM_PROJ") ; ; Continental outlines menu: ; desc = $ [{CW_PDMENU_S,1,"MAP OUTLINES"},$ {CW_PDMENU_S,0,"MAP OUTLINES (WHITE)"},$ {CW_PDMENU_S,0,"MAP OUTLINES (BLACK)"},$ {CW_PDMENU_S,0,"NO MAP OUTLINES"}] outlinesmenu = cw_pdmenu(menubase,desc,/return_name,uvalue="PDM_OUTLINES") ; ; Map grid option: ; desc = $ [{CW_PDMENU_S,1,"MAP GRID"},$ {CW_PDMENU_S,0,"MAP GRID (WHITE)"},$ {CW_PDMENU_S,0,"MAP GRID (BLACK)"},$ {CW_PDMENU_S,0,"NO MAP GRID"}] gridmenu = cw_pdmenu(menubase,desc,/return_name,uvalue="PDM_GRID") ; ; Space to get ut via text widget when sltxax is set: ; utbase = widget_base(mapbase,/column,/frame) wlab0 = widget_label(utbase,value='Enter ut (hrs) of this data:') wlab1 = widget_label(utbase,value='(IMPORTANT FOR LOCAL TIME CALCULATIONS)') wtxt_ut = widget_text(utbase,/editable,value=string(ut),uvalue='TXT_UT') ; ; Options attendant to the different projections: ; (these will be mapped according to selected projection) ; ; bases_projopt(0): center latitude (float slider) ; bases_projopt(1): center longitude (float slider) ; bases_projopt(2): limb resolution (int slider) ; bases_projopt(3): hemisphere (2 exclusive buttons) ; bases_projopt(4): perimeter latitude (float slider dependent on hem) ; base0 = widget_base(mapbase,/frame,/column) ; parent of bases_projopt(1) base1 = widget_base(base0,/column) ; parent of bases_projopt(2,3,4) bases_projopt = lonarr(5) ; ; Center latitude: bases_projopt(0) = widget_base(base0) dlat = frame.yy(1)-frame.yy(0) wfsl_clat = cw_fslide(bases_projopt(0),minimum=frame.yy(0),$ maximum=frame.yy(frame.ny-1),delta=dlat,xsize=350,format="(f5.1)",$ value=map.projcen(0),title="Center Latitude (deg)") ; ; Center longitude: bases_projopt(1) = widget_base(base0) dlon = frame.xx(1)-frame.xx(0) wfsl_clon = cw_fslide(bases_projopt(1),minimum=frame.xx(0),$ maximum=frame.xx(frame.nx-1),delta=dlon,xsize=350,format="(f6.1)",$ value=map.projcen(1),title="Center Longitude (deg)") ; ; Limb resolution (for elliptical projs): bases_projopt(2) = widget_base(base1) wsl_imcomp = widget_slider(bases_projopt(2),$ title="Limb Resolution (1=best, but takes longest):",$ minimum=1,maximum=4,value=4,scroll=10,uvalue="SL_LIMBCOMP") ; ; Hemisphere (polar st only) bases_projopt(3) = widget_base(base1) wbgp_hem = cw_bgroup(bases_projopt(3),/exclusive,uvalue="BGP_HEM",$ set_value=0,["SOUTH","NORTH"],/return_name,/row) ; ; Perimeter latitude (polar st only): bases_projopt(4) = widget_base(base1) if map.stperim lt 0. then $ wfsl_perimlat = cw_fslide(bases_projopt(4),minimum=frame.yy(1),$ maximum=frame.yy(frame.ny/2-1),delta=dlat,xsize=350,$ format='(f5.1)',value=map.stperim,title=string(format=$ "('Perimeter Latitude (',f5.1, ' to ',f5.1,')')",$ frame.yy(1),frame.yy(frame.ny/2-1))) $ else $ wfsl_perimlat = cw_fslide(bases_projopt(4),minimum=frame.yy(frame.ny/2),$ maximum=frame.yy(frame.ny-2),delta=dlat,xsize=350,$ format='(f4.1)',value=map.stperim,title=string(format=$ "('Perimeter Latitude (',f5.1, ' to ',f5.1,')')",$ frame.yy(frame.ny/2),frame.yy(frame.ny-2))) ; ; Map proj options according to current projection: ; for i=0,4 do widget_control,bases_projopt(i),map=0 case map.proj of "GLOBAL CYLINDRICAL EQUIDISTANT": begin widget_control,bases_projopt(1),/map end "POLAR STEREOGRAPHIC": begin widget_control,bases_projopt(2),/map widget_control,bases_projopt(3),/map widget_control,bases_projopt(4),/map end "SATELLITE VIEW": begin widget_control,bases_projopt(0),/map widget_control,bases_projopt(1),/map widget_control,bases_projopt(2),/map end "MOLLWEIDE": begin widget_control,bases_projopt(0),/map widget_control,bases_projopt(1),/map widget_control,bases_projopt(2),/map end else: endcase ; ; Nonexclusive options: ; log10, sltxax: ; base = widget_base(mapbase,/row,/frame) wbgp_mapopt = cw_bgroup(base,/nonexclusive,uvalue='BGP_MAPOPT',$ ["PLOT LOG10","ADD SLT AXIS"],/return_name,/row,ids=ids_mapopt) ; ; Change xlab,ylab,toplab,botlab base = widget_base(mapbase,/column,/frame) wlab_toplab = widget_label(base,value='Top Label') wtxt_toplab = widget_text(base,/editable,value=frame.toplab,$ uvalue='TXT_TOPLAB') wlab_xlab = widget_label(base,value='X-axis Label') wtxt_xlab = widget_text(base,/editable,value=frame.xlab,uvalue='TXT_XLAB') wlab_ylab = widget_label(base,value='Y-axis Label') wtxt_ylab = widget_text(base,/editable,value=frame.ylab,uvalue='TXT_YLAB') wlab_botlab = widget_label(base,value='Bottom Label') wtxt_botlab = widget_text(base,/editable,value=frame.botlab,$ uvalue='TXT_BOTLAB') if map.proj eq "POLAR STEREOGRAPHIC" then begin widget_control,wlab_xlab,sensitive=0 widget_control,wtxt_xlab,sensitive=0 widget_control,wlab_ylab,sensitive=0 widget_control,wtxt_ylab,sensitive=0 endif ; ; Button controls (quit, make frame, help(maps)): ; base = widget_base(mapbase,/frame,row=1) quit = widget_button(base,value="DONE",uvalue="DONE") wbut_vec = widget_button(base,value="VECTORS",uvalue="VEC") mkmap = widget_button(base,value="MAKE FRAME",uvalue="MAKEFRAME") ; widget_control,mapbase,/realize offxy = offset(appbase,mapbase) widget_control,mapbase,tlb_set_xoffset=offxy(0),tlb_set_yoffset=offxy(1) xmanager,'map',mapbase return end