; docformat = 'rst' ;+ ; Example of using a `WIDGET_WINDOW` widget in a widget program. ; ; Use the controls to change the linestyle or color of the plot. Moving the ; the mouse, clicking the mouse buttons, or typing in the plot window will ; display messages in the status bar below the plot window. ;- ;+ ; Event handler for all events generated in this widget program. ; ; :Params: ; event : in, required, type=structure ; event structure for droplist or `WIDGET_WINDOW` events ;- 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 ;+ ; Cleanup routine called when widget program is closing down. ; ; :Params: ; tlb : in, required, type=long ; widget identifier for the top-level base ;- pro mg_widget_window_example_cleanup, tlb compile_opt strictarr widget_control, tlb, get_uvalue=pstate ptr_free, pstate end ;+ ; Widget creation routine for example of using `WIDGET_WINDOW` widget. ;- 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 ; black 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 ; we don't need to get the function graphics window reference, but it can be ; obtained as usual if needed widget_control, graphic, get_value=win ; create plot in new graphics window 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