! © 2000 Compaq Computer Corporation ! ! COMPAQ Registered in U.S. Patent and Trademark Office. ! ! Confidential computer software. Valid license from Compaq required for ! possession, use or copying. Consistent with FAR 12.211 and 12.212, Commercial ! Computer Software, Computer Software Documentation, and Technical Data for ! Commercial Items are licensed to the U.S. Government under vendor's standard ! commercial license. ! !******************************************************************************* !* © 2000 Compaq Computer Corporation !* !* COMPAQ Registered in U.S. Patent and Trademark Office. !* !* Confidential computer software. Valid license from Compaq required for !* possession, use or copying. Consistent with FAR 12.211 and 12.212, Commercial !* Computer Software, Computer Software Documentation, and Technical Data for !* Commercial Items are licensed to the U.S. Government under vendor's standard !* commercial license. !* !* !* (c) Copyright 1989, 1990, 1991 OPEN SOFTWARE FOUNDATION, INC. !* !* THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED !* AND COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND !* WITH THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR !* ANY OTHER COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE !* AVAILABLE TO ANY OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE !* SOFTWARE IS HEREBY TRANSFERRED. !* !* THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT !* NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY OPEN SOFTWARE !* FOUNDATION, INC. OR ITS THIRD PARTY SUPPLIERS !* !* OPEN SOFTWARE FOUNDATION, INC. AND ITS THIRD PARTY SUPPLIERS, !* ASSUME NO RESPONSIBILITY FOR THE USE OR INABILITY TO USE ANY OF ITS !* SOFTWARE . OSF SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY !* KIND, AND OSF EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES, INCLUDING !* BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND !* FITNESS FOR A PARTICULAR PURPOSE. !* !* Notice: Notwithstanding any other lease or license that may pertain to, !* or accompany the delivery of, this computer software, the rights of the !* Government regarding its use, reproduction and disclosure are as set !* forth in Section 52.227-19 of the FARS Computer Software-Restricted !* Rights clause. !* !* (c) Copyright 1989, 1990, 1991 Open Software Foundation, Inc. Unpublished - all !* rights reserved under the Copyright laws of the United States. !* !* RESTRICTED RIGHTS NOTICE: Use, duplication, or disclosure by the !* Government is subject to the restrictions as set forth in subparagraph !* (c)(1)(ii) of the Rights in Technical Data and Computer Software clause !* at DFARS 52.227-7013. !* !* Open Software Foundation, Inc. !* 11 Cambridge Center !* Cambridge, MA 02142 !* (617)621-8700 !* !* RESTRICTED RIGHTS LEGEND: This computer software is submitted with !* "restricted rights." Use, duplication or disclosure is subject to the !* restrictions as set forth in NASA FAR SUP 18-52.227-79 (April 1985) !* "Commercial Computer Software- Restricted Rights (April 1985)." Open !* Software Foundation, Inc., 11 Cambridge Center, Cambridge, MA 02142. If !* the contract contains the Clause at 18-52.227-74 "Rights in Data General" !* then the "Alternate III" clause applies. !* !* (c) Copyright 1989, 1990, 1991 Open Software Foundation, Inc. !* ALL RIGHTS RESERVED !* !* !* Open Software Foundation is a trademark of The Open Software Foundation, Inc. !* OSF is a trademark of Open Software Foundation, Inc. !* OSF/Motif is a trademark of Open Software Foundation, Inc. !* Motif is a trademark of Open Software Foundation, Inc. !* X Window System is a trademark of the Massachusetts Institute of Technology !* !******************************************************************************* !module DECburger_demo module decburger version = 'V1.1.1' names = case_sensitive objects = { XmSeparator = gadget ; XmLabel = gadget ; XmPushButton = gadget ; XmToggleButton = gadget ; } procedure toggle_proc (integer); activate_proc (integer); create_proc (integer); scale_proc (integer); list_proc (integer); exit_proc (string); show_hide_proc (integer); pull_proc (integer); sens_help_proc (compound_string); help_system_proc (string); ok_color_proc (); apply_color_proc (); cancel_color_proc (); value k_create_order : 1; k_order_pdme : 2; k_file_pdme : 3; k_edit_pdme : 4; k_nyi : 5; k_ok : 6; ! NOTE: ok, apply, reset, cancel k_apply : 7; ! must be sequential k_reset : 8; k_cancel : 9; k_cancel_order : 10; k_submit_order : 11; k_order_box : 12; k_burger_min : 13; k_burger_rare : 13; k_burger_medium : 14; k_burger_well : 15; k_burger_ketchup : 16; k_burger_mustard : 17; k_burger_onion : 18; k_burger_mayo : 19; k_burger_pickle : 20; k_burger_max : 20; k_burger_quantity : 21; k_fries_tiny : 22; k_fries_small : 23; k_fries_medium : 24; k_fries_large : 25; k_fries_huge : 26; k_fries_quantity : 27; k_drink_list : 28; k_drink_add : 29; k_drink_sub : 30; k_drink_quantity : 31; k_total_order : 32; k_burger_label : 33; k_fries_label : 34; k_drink_label : 35; k_menu_bar : 36; k_file_menu : 37; k_edit_menu : 38; k_order_menu : 39; k_help_pdme : 40; k_help_menu : 41; k_help_overview : 42; k_help_about : 43; k_help_onhelp : 44; k_help_sensitive : 45; k_print : 46; k_options_pdme : 47; k_options_menu : 48; k_create_options : 49; k_fries_optionmenu : 50; value k_decburger_title : 'DECburger: Order Entry Box'; k_nyi_label_text : 'This feature is not yet implemented.'; k_file_label_text : 'File'; k_print_label_text : 'Print Order..'; k_exit_label_text : 'Exit'; k_edit_label_text : 'Edit'; k_cut_dot_label_text : 'Cut'; k_copy_dot_label_text : 'Copy'; k_paste_dot_label_text : 'Paste'; k_clear_dot_label_text : 'Clear'; k_select_all_label_text : 'Select All'; k_order_label_text : 'Order'; k_cancel_order_label_text : 'Cancel Order'; k_submit_order_label_text : 'Submit Order'; k_options_label_text : 'Options'; k_options_color_label_text : 'Background Color...'; k_help_label_text : 'Help'; k_sensitive_label_text : 'On Context'; k_overview_label_text : 'On Window'; k_about_label_text : 'On Version'; k_onhelp_label_text : 'On Help'; k_hamburgers_label_text : 'Hamburgers'; k_rare_label_text : 'Rare'; k_medium_label_text : 'Medium'; k_well_done_label_text : 'Well Done'; k_ketchup_label_text : 'Ketchup'; k_mustard_label_text : 'Mustard'; k_onion_label_text : 'Onion'; k_mayonnaise_label_text : 'Mayonnaise'; k_pickle_label_text : 'Pickle'; k_quantity_label_text : 'Quantity'; k_fries_label_text : 'Fries'; k_size_label_text : 'Size'; k_tiny_label_text : 'Tiny'; k_small_label_text : 'Small'; k_large_label_text : 'Large'; k_huge_label_text : 'Huge'; k_drinks_label_text : 'Drinks'; k_0_label_text : ' 0'; k_drink_list_text : string_table ( 'Apple Juice', 'Orange Juice', 'Grape Juice', 'Cola', 'Punch', 'Root beer', 'Water', 'Ginger Ale', 'Milk', 'Coffee', 'Tea' ); k_drink_list_select : string_table('Apple Juice'); k_drink_init : exported compound_string('Apple Juice'); k_ok_label_text : 'OK'; k_apply_label_text : 'Apply'; k_reset_label_text : 'Reset'; k_cancel_label_text : 'Cancel'; k_create_init : exported compound_string('Create Order Box...'); k_dismiss_init : exported compound_string('Close Order Box'); k_fries_init : exported compound_string('Medium'); !Compound strings to use for context-sensitive help callbacks value k_order_help : compound_string ("order"); k_print_help : compound_string ("print"); k_options_help : compound_string ("options"); k_menu_bar_help : compound_string ("menu_bar"); k_file_help : compound_string ("file_menu"); k_edit_help : compound_string ("edit_menu"); k_order_menu_help : compound_string ("order_menu"); k_help_help : compound_string ("help"); k_sensitive_help : compound_string ("sensitive"); k_onhelp_help : compound_string ("onhelp"); k_about_help : compound_string ("about"); k_overview_help : compound_string ("overview"); k_nyi_help : compound_string ("not_implemented"); !String value to use for the Help System callback value helpsys_order_help : 'order'; ! substitute another font name if this font is not available on your system value k_button_font : font('-Adobe-Times-Bold-R-Normal--*-180-*-*-P-*-ISO8859-1'); ! k_button_font : font('variable'); value k_exit_accelerator : "Ctrlz:"; k_exit_accelerator_text : "Ctrl/Z"; ! Colors, color tables, and icons. value yellow : color('yellow', foreground); red : color('red', background); green : color('green', foreground); magenta : color('magenta', background); gold : color('gold', foreground); lightblue : color('lightblue', background); value button_ct : color_table( yellow='o' ,red='.' ,background color=' '); value drink_up_icon: icon(color_table=button_ct, ' ', ' ..........oo.......... ', ' .........oooo......... ', ' ........oooooo........ ', ' .......oo....oo....... ', ' ......oo......oo...... ', ' .....oo........oo..... ', ' ....oo..........oo.... ', ' ...oo............oo... ', ' ..oo..............oo.. ', ' .oo................oo. ', ' oooooooooooooooooooooo ', ' oooooooooooooooooooooo ', ' .........oooo......... ', ' .........oooo......... ', ' .........oooo......... ', ' .........oooo......... ', ' .........oooo......... ', ' .........oooo......... ', ' '); ! First declare the 'top level' widgets. These are not controlled by ! any other widgets. They are each fetched individually as needed. object ! The main window widget. ! This displays the current order ! as it is taken. S_MAIN_WINDOW : XmMainWindow { controls { ! S_MAIN_WINDOW has two children. XmMenuBar s_menu_bar; XmScrolledList total_order; }; }; object ! A popup dialog box, called by any nyi : XmInformationDialog { ! code that is not finished. Useful ! for prototyping. arguments { XmNdialogTitle = "DECburger: Information"; XmNmessageString = k_nyi_label_text; XmNdefaultPosition = true; XmNautoUnmanage = true; XmNnoResize = true; }; callbacks { MrmNcreateCallback = procedure create_proc (k_nyi); }; }; !The help widget object object main_help : DXmHelpDialog { arguments { DXmNapplicationName = compound_string("Help Example"); DXmNglossaryTopic = compound_string("glossary"); DXmNoverviewTopic = compound_string("overview"); DXmNlibrarySpec = compound_string("decburger.hlb"); }; }; !The print widget object object main_print : DXmPrintDialog { arguments { XmNdialogTitle = "DECburger: Print"; DXmNoptionsDialogTitle = "DECburger: Print Options"; DXmNnumberCopies = 2; DXmNunmanageOnOk = true; DXmNunmanageOnCancel = true; }; callbacks { XmNhelpCallback = procedure sens_help_proc(k_print_help); }; }; !The colormix widget object object main_color : DXmColorMixDialog { arguments { XmNdialogTitle = "DECburger: Background Color"; DXmNmainLabel = compound_string("Colormix Example"); }; callbacks { XmNhelpCallback = procedure sens_help_proc(k_options_help); XmNcancelCallback = procedure cancel_color_proc(); XmNokCallback = procedure ok_color_proc(); XmNapplyCallback = procedure apply_color_proc(); }; }; ! Now define all remaining widgets alluded to in the definition of the top ! level widgets. ! The main window has a list box for displaying the order as it is built. object total_order : XmScrolledList { arguments { XmNvisibleItemCount = 15; XmNunitType = XmPIXELS; XmNlistSizePolicy = XmCONSTANT; }; callbacks { MrmNcreateCallback = procedure create_proc (k_total_order); XmNhelpCallback = procedure sens_help_proc(k_order_help); }; }; ! Now define the menu bar and the pulldown widgets in the menu bar. object s_menu_bar : XmMenuBar { arguments { XmNorientation = XmHORIZONTAL; XmNmenuHelpWidget = XmCascadeButton help_menu_entry; }; controls { XmCascadeButton file_menu_entry; XmCascadeButton edit_menu_entry; XmCascadeButton order_menu_entry; XmCascadeButton options_menu_entry; XmCascadeButton help_menu_entry; }; callbacks { MrmNcreateCallback = procedure create_proc (k_menu_bar); XmNhelpCallback = procedure sens_help_proc(k_menu_bar_help); }; }; ! The file pulldown menu entry widget (what shows up in the menu bar itself). ! All these pulldown entries can be set up to function in one of two ways by ! removing comment characters: ! 1. If the 'controls' clause specifying the pulldown menu is ! commented out, then the pulldown menus are loaded by the ! cascading callback when the entry is first activated. ! 2. If the 'controls' clause is not commented out, then the pulldown ! menu is loaded when its parent is created. ! Method 1 demonstrates deferred menu creation. The pulldown entry ! creates its pulldown menu at a later time, rather than at the ! time the pulldown entry is created. ! Method 2 demonstrates the standard technique -- creating the pulldown menu at ! the time the pulldown entry is created. object file_menu_entry : XmCascadeButton { arguments { XmNlabelString = k_file_label_text; XmNmnemonic = keysym("F"); }; controls { XmPulldownMenu file_menu; }; callbacks { XmNcascadingCallback = procedure pull_proc (k_file_pdme); MrmNcreateCallback = procedure create_proc (k_file_pdme); XmNhelpCallback = procedure sens_help_proc(k_file_help); }; }; ! The file pulldown menu with the push buttons it controls. object file_menu : XmPulldownMenu { controls { XmPushButton m_print_button; XmPushButton m_exit_button; }; callbacks { MrmNcreateCallback = procedure create_proc (k_file_menu); XmNhelpCallback = procedure sens_help_proc(k_file_help); }; }; object m_print_button : XmPushButton { arguments { XmNlabelString = k_print_label_text; XmNmnemonic = keysym("P"); }; callbacks { XmNactivateCallback = procedure activate_proc (k_print); XmNhelpCallback = procedure sens_help_proc(k_print_help); }; }; object m_exit_button : XmPushButton { arguments { XmNlabelString = k_exit_label_text; XmNaccelerator = k_exit_accelerator; XmNacceleratorText = k_exit_accelerator_text; XmNmnemonic = keysym("E"); }; callbacks { XmNactivateCallback = procedure exit_proc('normal demo exit'); }; }; ! The edit pulldown entry and the associated pulldown menu. object edit_menu_entry : XmCascadeButton { arguments { XmNlabelString = k_edit_label_text; XmNmnemonic = keysym("E"); }; controls { XmPulldownMenu edit_menu; }; callbacks { XmNcascadingCallback = procedure pull_proc (k_edit_pdme); MrmNcreateCallback = procedure create_proc (k_edit_pdme); XmNhelpCallback = procedure sens_help_proc(k_edit_help); }; }; object edit_menu : XmPulldownMenu { controls { XmPushButton m_cut_button; XmPushButton m_copy_button; XmPushButton m_paste_button; XmSeparator {}; XmPushButton m_clear_button; XmPushButton m_select_all_button; }; callbacks { MrmNcreateCallback = procedure create_proc (k_edit_menu); XmNhelpCallback = procedure sens_help_proc(k_edit_help); }; }; object m_cut_button : XmPushButton { arguments { XmNlabelString = k_cut_dot_label_text; XmNmnemonic = keysym("t"); XmNaccelerator = "DRemove:"; XmNacceleratorText = "Remove"; }; callbacks { XmNactivateCallback = procedure activate_proc (k_nyi); XmNhelpCallback = procedure sens_help_proc(k_nyi_help); }; }; object m_copy_button : XmPushButton { arguments { XmNlabelString = k_copy_dot_label_text; XmNmnemonic = keysym("C"); XmNaccelerator = "ShiftDRemove:"; XmNacceleratorText = compound_string("Shift+Remove"); }; callbacks { XmNactivateCallback = procedure activate_proc (k_nyi); XmNhelpCallback = procedure sens_help_proc(k_nyi_help); }; }; object m_paste_button : XmPushButton { arguments { XmNlabelString = k_paste_dot_label_text; XmNmnemonic = keysym("P"); XmNaccelerator = "Insert:"; XmNacceleratorText = compound_string("Insert"); }; callbacks { XmNactivateCallback = procedure activate_proc (k_nyi); XmNhelpCallback = procedure sens_help_proc(k_nyi_help); }; }; object m_clear_button : XmPushButton { arguments { XmNlabelString = k_clear_dot_label_text; XmNmnemonic = keysym("r"); }; callbacks { XmNactivateCallback = procedure activate_proc (k_nyi); XmNhelpCallback = procedure sens_help_proc(k_nyi_help); }; }; object m_select_all_button : XmPushButton { arguments { XmNlabelString = k_select_all_label_text; XmNmnemonic = keysym("A"); }; callbacks { XmNactivateCallback = procedure activate_proc (k_nyi); XmNhelpCallback = procedure sens_help_proc(k_nyi_help); }; }; ! The pulldown entry for ordering and its associated pulldown menu. object order_menu_entry : XmCascadeButton { arguments { XmNlabelString = k_order_label_text; XmNmnemonic = keysym("r"); }; controls { XmPulldownMenu order_menu; }; callbacks { XmNcascadingCallback = procedure pull_proc (k_order_pdme); MrmNcreateCallback = procedure create_proc (k_order_pdme); XmNhelpCallback = procedure sens_help_proc(k_order_help); }; }; object order_menu : XmPulldownMenu { controls { XmPushButton m_show_control_button; XmSeparator {}; XmPushButton m_cancel_order_button; XmPushButton m_submit_order_button; }; callbacks { MrmNcreateCallback = procedure create_proc (k_order_menu); XmNhelpCallback = procedure sens_help_proc(k_order_menu_help); }; }; object m_show_control_button : XmPushButton { arguments { XmNmnemonic = keysym("C"); }; callbacks { MrmNcreateCallback = procedure create_proc (k_create_order); XmNactivateCallback = procedure show_hide_proc (k_create_order); XmNhelpCallback = procedure sens_help_proc(k_order_help); }; }; object m_cancel_order_button : XmPushButton { arguments { XmNlabelString = k_cancel_order_label_text; XmNmnemonic = keysym("n"); }; callbacks { XmNactivateCallback = procedure activate_proc (k_cancel_order); XmNhelpCallback = procedure sens_help_proc(k_order_help); }; }; object m_submit_order_button : XmPushButton { arguments { XmNlabelString = k_submit_order_label_text; XmNmnemonic = keysym("S"); }; callbacks { XmNactivateCallback = procedure activate_proc (k_submit_order); XmNhelpCallback = procedure sens_help_proc(k_order_help); }; }; ! The options pulldown entry and its associated pulldown menu. object options_menu_entry : XmCascadeButton { arguments { XmNlabelString = k_options_label_text; XmNmnemonic = keysym("O"); XmNmappedWhenManaged = false; }; controls { XmPulldownMenu options_menu; }; callbacks { MrmNcreateCallback = procedure create_proc (k_options_pdme); XmNhelpCallback = procedure sens_help_proc(k_options_help); }; }; object options_menu : XmPulldownMenu { controls { XmPushButton m_options_control_button; }; callbacks { MrmNcreateCallback = procedure create_proc (k_options_menu); XmNhelpCallback = procedure sens_help_proc(k_options_help); }; }; object m_options_control_button : XmPushButton { arguments { XmNlabelString = k_options_color_label_text; XmNmnemonic = keysym("C"); }; callbacks { MrmNcreateCallback = procedure create_proc (k_create_options); XmNactivateCallback = procedure activate_proc (k_create_options); XmNhelpCallback = procedure sens_help_proc(k_options_help); }; }; ! The help pulldown entry and the associated pulldown menu. object help_menu_entry : XmCascadeButton { arguments { XmNlabelString = k_help_label_text; XmNmnemonic = keysym("H"); }; controls { XmPulldownMenu help_menu; }; callbacks { XmNhelpCallback = procedure sens_help_proc(k_help_help); }; }; object help_menu : XmPulldownMenu { controls { XmPushButton help_sensitive; XmPushButton help_window; XmPushButton help_version; XmPushButton help_onhelp; }; callbacks { XmNhelpCallback = procedure sens_help_proc(k_help_help); }; }; object help_sensitive : XmPushButton { arguments { XmNlabelString = k_sensitive_label_text; XmNmnemonic = keysym("C"); }; callbacks { XmNactivateCallback = procedure activate_proc (k_help_sensitive); XmNhelpCallback = procedure sens_help_proc(k_sensitive_help); }; }; object help_onhelp : XmPushButton { arguments { XmNlabelString = k_onhelp_label_text; XmNmnemonic = keysym("H"); }; callbacks { XmNactivateCallback = procedure activate_proc (k_help_onhelp); XmNhelpCallback = procedure sens_help_proc(k_onhelp_help); }; }; object help_version : XmPushButton { arguments { XmNlabelString = k_about_label_text; XmNmnemonic = keysym("V"); }; callbacks { XmNactivateCallback = procedure activate_proc (k_help_about); XmNhelpCallback = procedure sens_help_proc(k_about_help); }; }; object help_window : XmPushButton { arguments { XmNlabelString = k_overview_label_text; XmNmnemonic = keysym("W"); }; callbacks { XmNactivateCallback = procedure activate_proc (k_help_overview); XmNhelpCallback = procedure sens_help_proc(k_overview_help); }; }; object ! The control panel. All order entry ! is done through this dialog box. control_box : XmFormDialog { arguments { XmNdialogTitle = k_decburger_title; XmNdialogStyle = XmDIALOG_MODELESS; XmNnoResize = true; XmNdefaultPosition = false; XmNx = 375; XmNy = 100; XmNautoUnmanage = false; XmNallowOverlap = false; XmNdefaultButton = XmPushButton ok_button; XmNcancelButton = XmPushButton cancel_button; XmNhorizontalSpacing = 10; XmNverticalSpacing = 10; XmNnavigationType = XmEXCLUSIVE_TAB_GROUP; }; controls { XmForm burger_form; XmForm fries_form; XmForm drinks_form; XmSeparator button_separator; XmPushButton ok_button; XmPushButton apply_button; XmPushButton reset_button; XmPushButton cancel_button; XmSeparator button_separator2; }; callbacks { MrmNcreateCallback = procedure create_proc (k_order_box); XmNhelpCallback = procedure help_system_proc (helpsys_order_help); }; }; object button_separator : XmSeparator { arguments { XmNtopAttachment = XmATTACH_WIDGET; XmNtopWidget = XmForm burger_form; XmNtopOffset = 10; XmNorientation = XmHORIZONTAL; XmNleftAttachment = XmATTACH_FORM; XmNrightAttachment = XmATTACH_FORM; XmNseparatorType = XmNO_LINE; ! invisible }; }; object button_separator2 : XmSeparator { arguments { XmNtopAttachment = XmATTACH_WIDGET; XmNtopWidget = XmPushButton ok_button; XmNtopOffset = 10; XmNorientation = XmHORIZONTAL; XmNleftAttachment = XmATTACH_FORM; XmNrightAttachment = XmATTACH_FORM; XmNseparatorType = XmNO_LINE; ! invisible }; }; ! For the hamburger, fries, and drink entry we use a different mechanism ! to demonstrate various widgets and techniques. object burger_form : XmForm { arguments { XmNshadowType = XmSHADOW_IN; XmNshadowThickness = 3; XmNtopAttachment = XmATTACH_FORM; XmNtopOffset = 10; XmNleftAttachment = XmATTACH_FORM; XmNallowOverlap = false; XmNnavigationType = XmEXCLUSIVE_TAB_GROUP; }; controls { ! Some labels and decoration. XmLabel burger_label; ! Hamburger 'doneness' uses a radio box ! because although it is a '1 of N' type ! of entry, one (and only one) entry ! is allowed. XmRadioBox burger_doneness_box; ! Toppings entry uses a menu with toggle ! buttons since more than one topping ! (M of N selection) is allowed. XmRowColumn burger_toppings_menu; ! Number of burgers uses ! a scale widget. XmScale burger_quantity; }; }; object burger_label : XmLabel { arguments { XmNlabelString = k_hamburgers_label_text; XmNtopAttachment = XmATTACH_FORM; XmNtopOffset = 10; XmNleftAttachment = XmATTACH_POSITION; XmNleftPosition = 20; XmNrightAttachment = XmATTACH_POSITION; XmNrightPosition = 80; XmNalignment = XmALIGNMENT_CENTER; }; callbacks { MrmNcreateCallback = procedure create_proc (k_burger_label); }; }; object burger_doneness_box : XmRadioBox { arguments { XmNorientation = XmVERTICAL; XmNtopAttachment = XmATTACH_WIDGET; XmNtopWidget = XmLabel burger_label; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 10; XmNnavigationType = XmEXCLUSIVE_TAB_GROUP; }; controls { XmToggleButton burger_rare; XmToggleButton burger_medium; XmToggleButton burger_well; }; }; object burger_rare : XmToggleButton { arguments { XmNlabelString = k_rare_label_text; }; callbacks { XmNvalueChangedCallback = procedure toggle_proc (k_burger_rare); MrmNcreateCallback = procedure create_proc (k_burger_rare); }; }; object burger_medium : XmToggleButton { arguments { XmNlabelString = k_medium_label_text; XmNset = on; ! A radio box requires one toggle to be set. }; callbacks { XmNvalueChangedCallback = procedure toggle_proc (k_burger_medium); MrmNcreateCallback = procedure create_proc (k_burger_medium); }; }; object burger_well : XmToggleButton { arguments { XmNlabelString = k_well_done_label_text; }; callbacks { XmNvalueChangedCallback = procedure toggle_proc (k_burger_well); MrmNcreateCallback = procedure create_proc (k_burger_well); }; }; object burger_toppings_menu : XmRowColumn { arguments { XmNorientation = XmVERTICAL; XmNtopAttachment = XmATTACH_WIDGET; XmNtopWidget = XmLabel burger_label; XmNleftAttachment = XmATTACH_WIDGET; XmNleftWidget = XmRadioBox burger_doneness_box; XmNleftOffset = 10; XmNrightAttachment = XmATTACH_FORM; XmNrightOffset = 10; XmNnavigationType = XmEXCLUSIVE_TAB_GROUP; }; controls { XmToggleButton ketchup; XmToggleButton mustard; XmToggleButton pickle; XmToggleButton onion; XmToggleButton mayo; }; }; object ketchup : XmToggleButton { arguments { XmNlabelString = k_ketchup_label_text; }; callbacks { XmNvalueChangedCallback = procedure toggle_proc (k_burger_ketchup); MrmNcreateCallback = procedure create_proc (k_burger_ketchup); }; }; object mustard : XmToggleButton { arguments { XmNlabelString = k_mustard_label_text; }; callbacks { XmNvalueChangedCallback = procedure toggle_proc (k_burger_mustard); MrmNcreateCallback = procedure create_proc (k_burger_mustard); }; }; object onion : XmToggleButton { arguments { XmNlabelString = k_onion_label_text; }; callbacks { XmNvalueChangedCallback = procedure toggle_proc (k_burger_onion); MrmNcreateCallback = procedure create_proc (k_burger_onion); }; }; object mayo : XmToggleButton { arguments { XmNlabelString = k_mayonnaise_label_text; }; callbacks { XmNvalueChangedCallback = procedure toggle_proc (k_burger_mayo); MrmNcreateCallback = procedure create_proc (k_burger_mayo); }; }; object pickle : XmToggleButton { arguments { XmNlabelString = k_pickle_label_text; }; callbacks { XmNvalueChangedCallback = procedure toggle_proc (k_burger_pickle); MrmNcreateCallback = procedure create_proc (k_burger_pickle); }; }; object burger_quantity : XmScale { arguments { XmNorientation = XmHORIZONTAL; XmNminimum = 0; XmNmaximum = 10; XmNtopAttachment = XmATTACH_WIDGET; XmNtopWidget = XmRowColumn burger_toppings_menu; XmNtopOffset = 10; XmNleftAttachment = XmATTACH_POSITION; XmNleftPosition = 20; XmNrightAttachment = XmATTACH_POSITION; XmNrightPosition = 80; XmNbottomAttachment = XmATTACH_FORM; XmNbottomOffset = 10; XmNtitleString = k_quantity_label_text; XmNshowValue = true; XmNnavigationType = XmEXCLUSIVE_TAB_GROUP; }; callbacks { MrmNcreateCallback = procedure create_proc (k_burger_quantity); XmNvalueChangedCallback = procedure scale_proc (k_burger_quantity); }; }; object fries_form : XmForm { arguments { XmNshadowType = XmSHADOW_IN; XmNshadowThickness = 3; XmNtopAttachment = XmATTACH_FORM; XmNtopOffset = 10; XmNleftAttachment = XmATTACH_WIDGET; XmNleftWidget = XmForm burger_form; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmSeparator button_separator; XmNbottomOffset = 10; XmNallowOverlap = false; XmNnavigationType = XmEXCLUSIVE_TAB_GROUP; }; controls { XmLabel fries_label; ! Fries size uses an option ! menu, for '1 of N' selection. XmOptionMenu fries_option_menu; ! Fries quantity uses a label ! and text widget. XmLabel fries_quantity_label; XmText fries_quantity; }; }; object fries_label : XmLabel { arguments { XmNlabelString = k_fries_label_text; XmNtopAttachment = XmATTACH_FORM; XmNtopOffset = 10; XmNleftAttachment = XmATTACH_POSITION; XmNleftPosition = 20; XmNrightAttachment = XmATTACH_POSITION; XmNrightPosition = 80; XmNalignment = XmALIGNMENT_CENTER; }; callbacks { MrmNcreateCallback = procedure create_proc (k_fries_label); }; }; object fries_option_menu : XmOptionMenu { arguments { XmNlabelString = k_size_label_text; XmNmenuHistory = XmPushButton medium_fries; XmNtopAttachment = XmATTACH_WIDGET; XmNtopWidget = XmLabel fries_label; XmNtopOffset = 10; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 10; XmNrightAttachment = XmATTACH_FORM; XmNrightOffset = 10; XmNnavigationType = XmEXCLUSIVE_TAB_GROUP; }; controls { XmPulldownMenu fries_menu; }; callbacks { MrmNcreateCallback = procedure create_proc (k_fries_optionmenu); }; }; object fries_menu : XmPulldownMenu { controls { XmPushButton tiny_fries; XmPushButton small_fries; XmPushButton medium_fries; XmPushButton large_fries; XmPushButton huge_fries; }; }; object tiny_fries : XmPushButton { arguments { XmNlabelString = k_tiny_label_text; }; callbacks { XmNactivateCallback = procedure activate_proc (k_fries_tiny); }; }; object small_fries : XmPushButton { arguments { XmNlabelString = k_small_label_text; }; callbacks { XmNactivateCallback = procedure activate_proc (k_fries_small); }; }; object medium_fries : XmPushButton { arguments { XmNlabelString = k_medium_label_text; }; callbacks { XmNactivateCallback = procedure activate_proc (k_fries_medium); MrmNcreateCallback = procedure create_proc (k_fries_medium); }; }; object large_fries : XmPushButton { arguments { XmNlabelString = k_large_label_text; }; callbacks { XmNactivateCallback = procedure activate_proc (k_fries_large); }; }; object huge_fries : XmPushButton { arguments { XmNlabelString = k_huge_label_text; }; callbacks { XmNactivateCallback = procedure activate_proc (k_fries_huge); }; }; object fries_quantity_label : XmLabel { arguments { XmNlabelString = k_quantity_label_text; XmNbottomAttachment = XmATTACH_POSITION; XmNbottomPosition = 88; XmNleftAttachment = XmATTACH_POSITION; XmNleftOffset = 20; }; }; object fries_quantity : XmText { arguments { XmNcolumns = 2; XmNrows = 1; XmNmaxLength = 2; XmNvalue = k_0_label_text; XmNtopAttachment = XmATTACH_OPPOSITE_WIDGET; XmNtopWidget = XmLabel fries_quantity_label; XmNtopOffset = -5; XmNleftAttachment = XmATTACH_WIDGET; XmNleftWidget = XmLabel fries_quantity_label; XmNleftOffset = 10; XmNnavigationType = XmEXCLUSIVE_TAB_GROUP; }; callbacks { MrmNcreateCallback = procedure create_proc (k_fries_quantity); ! There is no text callback for text. You have to provide ! one in the application code. }; }; object drinks_form : XmForm { arguments { XmNshadowType = XmSHADOW_IN; XmNshadowThickness = 3; XmNtopAttachment = XmATTACH_FORM; XmNtopOffset = 10; XmNleftAttachment = XmATTACH_WIDGET; XmNleftWidget = XmForm fries_form; XmNleftOffset = 10; XmNrightAttachment = XmATTACH_FORM; XmNrightOffset = 10; XmNbottomAttachment = XmATTACH_WIDGET; XmNbottomWidget = XmSeparator button_separator; XmNbottomOffset = 10; XmNallowOverlap = false; XmNnavigationType = XmEXCLUSIVE_TAB_GROUP; }; controls { XmLabel drink_label; ! Drink selection uses a list ! box because this is a '1 of N' ! selection where N is a big number XmScrolledList drink_list_box; ! Drink quantity uses an ! assembly of our own widgets. XmForm drink_quantity; }; }; object drink_label : XmLabel { arguments { XmNlabelString = k_drinks_label_text; XmNtopAttachment = XmATTACH_FORM; XmNtopOffset = 10; XmNleftAttachment = XmATTACH_POSITION; XmNleftPosition = 20; XmNrightAttachment = XmATTACH_POSITION; XmNrightPosition = 80; XmNalignment = XmALIGNMENT_CENTER; }; callbacks { MrmNcreateCallback = procedure create_proc (k_drink_label); }; }; object drink_list_box : XmScrolledList { arguments { XmNvisibleItemCount = 7; XmNitems = k_drink_list_text; XmNselectedItems = k_drink_list_select; XmNselectionPolicy = XmSINGLE_SELECT; XmNtopAttachment = XmATTACH_WIDGET; XmNtopWidget = XmLabel drink_label; XmNleftAttachment = XmATTACH_POSITION; XmNleftPosition = 20; XmNrightAttachment = XmATTACH_POSITION; XmNrightPosition = 80; XmNnavigationType = XmEXCLUSIVE_TAB_GROUP; }; callbacks { XmNsingleSelectionCallback = procedure list_proc (k_drink_list); }; }; object drink_quantity : XmForm { arguments { XmNtopAttachment = XmATTACH_POSITION; XmNtopPosition = 70; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 10; XmNrightAttachment = XmATTACH_FORM; XmNrightOffset = 10; XmNallowOverlap = false; XmNnavigationType = XmEXCLUSIVE_TAB_GROUP; }; controls { XmLabel quantity_label; XmLabel value_label; XmPushButton up_value; XmPushButton down_value; }; }; object quantity_label : XmLabel { arguments { XmNlabelString = k_quantity_label_text; XmNleftAttachment = XmATTACH_FORM; XmNleftOffset = 5; XmNtopAttachment = XmATTACH_POSITION; XmNtopPosition = 40; ! 40/100 of height of form }; }; object value_label : XmLabel widget { arguments { XmNlabelString = ' 0'; XmNleftAttachment = XmATTACH_WIDGET; XmNleftWidget = XmLabel quantity_label ; XmNleftOffset = 10 ; XmNtopAttachment = XmATTACH_POSITION; XmNtopPosition = 40; ! 40/100 of height of form }; callbacks { MrmNcreateCallback = procedure create_proc (k_drink_quantity); }; }; object up_value : XmPushButton widget { arguments { XmNtopAttachment = XmATTACH_FORM; XmNtopOffset = 5; XmNleftAttachment = XmATTACH_WIDGET; XmNleftOffset = 10; XmNleftWidget = XmLabel value_label ; XmNlabelType = XmPIXMAP; XmNlabelPixmap = drink_up_icon; }; callbacks { XmNactivateCallback = procedure activate_proc (k_drink_add); }; }; object down_value : XmPushButton widget { arguments { XmNtopAttachment = XmATTACH_WIDGET; XmNtopWidget = XmPushButton up_value; XmNleftAttachment = XmATTACH_WIDGET; XmNleftOffset = 10; XmNleftWidget = XmLabel value_label ; XmNlabelType = XmPIXMAP; XmNlabelPixmap = xbitmapfile('icon.xbm'); }; callbacks { XmNactivateCallback = procedure activate_proc (k_drink_sub); }; }; object ok_button : XmPushButton widget { arguments { XmNlabelString = k_ok_label_text; XmNfontList = k_button_font ; XmNhighlightColor = red; XmNshowAsDefault = 1; XmNdefaultButtonShadowThickness = 1; XmNtopAttachment = XmATTACH_WIDGET; XmNtopWidget = XmSeparator button_separator; XmNtopOffset = 10; }; callbacks { MrmNcreateCallback = procedure create_proc (k_ok); XmNactivateCallback = procedure activate_proc (k_ok); }; }; object apply_button : XmPushButton widget { arguments { XmNlabelString = k_apply_label_text; XmNfontList = k_button_font ; XmNhighlightColor = red; XmNdefaultButtonShadowThickness = 1; XmNtopAttachment = XmATTACH_WIDGET; XmNtopWidget = XmSeparator button_separator; XmNtopOffset = 10; XmNleftAttachment = XmATTACH_WIDGET; XmNleftWidget = XmPushButton ok_button; }; callbacks { MrmNcreateCallback = procedure create_proc (k_apply); XmNactivateCallback = procedure activate_proc (k_apply); }; }; object reset_button : XmPushButton widget { arguments { XmNlabelString = k_reset_label_text; XmNfontList = k_button_font ; XmNhighlightColor = red; XmNdefaultButtonShadowThickness = 1; XmNtopAttachment = XmATTACH_WIDGET; XmNtopWidget = XmSeparator button_separator; XmNtopOffset = 10; XmNleftAttachment = XmATTACH_WIDGET; XmNleftWidget = XmPushButton apply_button; }; callbacks { MrmNcreateCallback = procedure create_proc (k_reset); XmNactivateCallback = procedure activate_proc (k_reset); }; }; object cancel_button : XmPushButton widget { arguments { XmNlabelString = k_cancel_label_text; XmNfontList = k_button_font ; XmNhighlightColor = red; XmNdefaultButtonShadowThickness = 1; XmNtopAttachment = XmATTACH_WIDGET; XmNtopWidget = XmSeparator button_separator; XmNtopOffset = 10; XmNleftAttachment = XmATTACH_WIDGET; XmNleftWidget = XmPushButton reset_button; }; callbacks { MrmNcreateCallback = procedure create_proc (k_cancel); XmNactivateCallback = procedure activate_proc (k_cancel); }; }; end module;