pro mg_widget_window_example_event, event
compile_opt strictarr
on_error, 2
widget_control, event.top, get_uvalue=pstate
uname = widget_info(event.id, /uname)
case uname of
'linestyle': (*pstate).plot.linestyle = event.index
'color': (*pstate).plot.color = !color.(event.index)
'graphic': begin
statusbar = widget_info(event.top, find_by_uname='statusbar')
msg = ''
case event.type of
0: msg = string(event.x, event.y, format='(%"Button press at %d, %d")')
1: msg = string(event.x, event.y, format='(%"Button release at %d, %d")')
2: msg = string(event.x, event.y, format='(%"Mouse moved to %d, %d")')
5: msg = string(string(event.ch), format='(%"Key pressed: %s")')
6: begin
keys = ['none', 'shift', 'control', 'caps lock', 'alt', $
'left', 'right', 'up', 'down', 'page up', $
'page down', 'home', 'end']
msg = string(keys[event.key], format='(%"Key pressed: %s")')
end
endcase
widget_control, statusbar, set_value=msg
end
else: message, 'unknown widget generating events'
endcase
end
pro mg_widget_window_example_cleanup, tlb
compile_opt strictarr
widget_control, tlb, get_uvalue=pstate
ptr_free, pstate
end
pro mg_widget_window_example
compile_opt strictarr
tlb = widget_base(/column, $
title='Example of using function graphics in a widget program')
toolbar = widget_base(tlb, /row)
linestyles = ['solid', 'dot', 'dash', 'dash dot', 'dash dot dot dot', $
'long dash', 'none']
linestyleDrop = widget_droplist(toolbar, value=linestyles, uname='linestyle')
colors = strlowcase(tag_names(!color))
colorsDrop = widget_droplist(toolbar, value=colors, uname='color')
widget_control, colorsDrop, set_droplist_select=7
graphic = widget_window(tlb, xsize=600, ysize=300, uname='graphic', $
/button_events, /keyboard_events, /motion_events)
statusbar = widget_text(tlb, scr_xsize=600, uname='statusbar')
widget_control, tlb, /realize
widget_control, graphic, get_value=win
p = plot(sin(findgen(360) * !dtor), /current, thick=2., font_size=11)
state = { tlb: tlb, plot: p }
pstate = ptr_new(state, /no_copy)
widget_control, tlb, set_uvalue=pstate
xmanager, 'mg_widget_window_example', tlb, /no_block, $
cleanup='mg_widget_window_example_cleanup', $
event_handler='mg_widget_window_example_event'
end