PRO checked_menu_ex_event, ev ; Not relevant for this example END ; Handler for just the checkable menu items PRO menu_event, ev widget_control, ev.top, get_uvalue=info ; Uncheck the current checked button widget_control, info.current_checked, set_button=0 ; Check the latest selection widget_control, ev.id, /set_button ; Update the info structure info.current_checked = ev.id widget_control, ev.top, set_uvalue=info END PRO checked_menu_ex tlb = widget_base(/column, xsize=300 , ysize=200, $ title='Checked Menu Example', mbar=wMenuBase) wMenuBase = widget_base(tlb) wTopMenu = widget_button(wMenuBase, /menu, value='&TopMenu1') wSubMenu1 = widget_button(wTopMenu, /menu, value='SubMenu1') wCheckable1 = widget_button(wSubMenu1, value='Checkable1', /CHECKED_MENU, $ event_pro='menu_event') wCheckable2 = widget_button(wSubMenu1, value='Checkable2', /CHECKED_MENU, $ event_pro='menu_event') wCheckable3 = widget_button(wSubMenu1, value='Checkable3', /CHECKED_MENU, $ event_pro='menu_event') wNoncheckable1 = widget_button(wTopMenu, value='NonCheckable1') wNoncheckable2 = widget_button(wTopMenu, value='Noncheckable2') wLabelBase = widget_base(tlb, /column, /align_center, /base_align_left, $ ypad=80) wLabel1 = widget_label(wLabelBase, value='To view this demonstration') wLabel2 = widget_label(wLabelBase, value='click on any button in') wLabel3 = widget_label(wLabelBase, value="'SubMenu1', then open the") wLabel4 = widget_label(wLabelBase, value='menu and view your selection') wLabel5 = widget_label(wLabelBase, value='again') widget_control, /realize, tlb ; For demonstration purposes, let the 'tlb's UVALUE carry only the currently ; checked button. 'current_checked' is initialized to 'wCheckable1' only so the ; correct datatype gets stored there - nothing is actually checked until the ; first 'menu_event' is called. widget_control, tlb, set_uvalue={ wCheckable1:wCheckable1, wCheckable2:wCheckable2, $ wCheckable3:wCheckable3, current_checked:wCheckable1 } xmanager, 'checked_menu_ex', tlb END