📄 menu.c
字号:
/************************************************************************* **** menu.c **** **** Doodle -- Menubar Module **** *************************************************************************/#include <string.h>#include <Xm/RowColumn.h>#include <Xm/CascadeB.h>#include <Xm/Label.h>#include <Xm/PushB.h>#include <Xm/Separator.h>#include "doodle.h"/************************************************************************* **** F O R W A R D D E F I N I T I O N S **** *************************************************************************/static void InitFileMenu();static void InitPenMenu();static void InitPenColorMenu();static void InitPenSizeMenu();static void InitHelpMenu();static void FileMenuCB();/************************************************************************* **** InitMenuBar() **** **** This function creates the menu bar and all pulldown menus. The **** menu bar is created as the child of the main window. **** **** This function modifies the global "menubar", and accesses the **** global "mainwin". **** *************************************************************************/void InitMenuBar(){ menubar = XmCreateMenuBar( mainwin, "MenuBar", NULL, 0 ); XtManageChild( menubar ); InitFileMenu(); InitPenMenu(); InitHelpMenu();}/************************************************************************* **** InitFileMenu() **** **** Creates the File menu: cascade button, pull-down menu pane, and **** all menu-pane choices. Attaches callbacks to menu-pane choices. **** *************************************************************************/static void InitFileMenu(){ Widget topic, pane, choices[3]; pane = XmCreatePulldownMenu( menubar, "FilePane", NULL, 0 ); choices[0] = XmCreatePushButton( pane, "File_Clear", NULL, 0 ); choices[1] = XmCreateSeparator( pane, "File_Sep", NULL, 0 ); choices[2] = XmCreatePushButton( pane, "File_Exit", NULL, 0 ); XtManageChildren( choices, 3 ); XtSetArg( arglist[0], XmNsubMenuId, pane ); topic = XmCreateCascadeButton( menubar, "FileTopic", arglist, 1 ); XtManageChild( topic ); XtAddCallback( choices[0], XmNactivateCallback, FileMenuCB, "New" ); XtAddCallback( choices[2], XmNactivateCallback, FileMenuCB, "Ext" );}/************************************************************************* **** InitPenMenu() **** **** Creates the Pen menu: cascade button, pull-down menu pane, and **** all menu-pane choices. Attaches callbacks to menu-pane choices. **** *************************************************************************/static void InitPenMenu(){ Widget topic, pane, choices[2]; pane = XmCreatePulldownMenu( menubar, "Pen_Pane", NULL, 0 ); choices[0] = XmCreateCascadeButton( pane, "Pen_Color", NULL, 0 ); choices[1] = XmCreateCascadeButton( pane, "Pen_Size", NULL, 0 ); XtManageChildren( choices, 2 ); XtSetArg( arglist[0], XmNsubMenuId, pane ); topic = XmCreateCascadeButton( menubar, "PenTopic", arglist, 1 ); XtManageChild( topic ); InitPenColorMenu( pane, choices[0] ); InitPenSizeMenu( pane, choices[1] );}/************************************************************************* **** InitPenColorMenu() **** **** Creates the cascading pull-down for pen colors. **** The attached callback is in the file "mainwin.c" **** *************************************************************************/static void InitPenColorMenu( parent, button ) Widget parent; Widget button;{ Widget pane, choices[6]; pane = XmCreatePulldownMenu( parent, "PenColor_Pane", NULL, 0 ); choices[0] = XmCreatePushButton( pane, "PenColor_0", NULL, 0 ); choices[1] = XmCreatePushButton( pane, "PenColor_1", NULL, 0 ); choices[2] = XmCreatePushButton( pane, "PenColor_2", NULL, 0 ); choices[3] = XmCreatePushButton( pane, "PenColor_3", NULL, 0 ); choices[4] = XmCreatePushButton( pane, "PenColor_4", NULL, 0 ); choices[5] = XmCreatePushButton( pane, "PenColor_5", NULL, 0 ); XtManageChildren( choices, 6 ); XtSetArg( arglist[0], XmNsubMenuId, pane ); XtSetValues( button, arglist, 1 ); XtAddCallback( choices[0], XmNactivateCallback, PenColorCB, NULL ); XtAddCallback( choices[1], XmNactivateCallback, PenColorCB, NULL ); XtAddCallback( choices[2], XmNactivateCallback, PenColorCB, NULL ); XtAddCallback( choices[3], XmNactivateCallback, PenColorCB, NULL ); XtAddCallback( choices[4], XmNactivateCallback, PenColorCB, NULL ); XtAddCallback( choices[5], XmNactivateCallback, PenColorCB, NULL );}/************************************************************************* **** InitPenSizeMenu() **** **** Creates the cascading pull-down for pen sizes. **** The attached callback is in the file "mainwin.c" **** *************************************************************************/static void InitPenSizeMenu( parent, button ) Widget parent; Widget button;{ Widget pane, choices[5]; pane = XmCreatePulldownMenu( parent, "PenSize_Pane", NULL, 0 ); choices[0] = XmCreatePushButton( pane, "PenSize_1", NULL, 0 ); choices[1] = XmCreatePushButton( pane, "PenSize_2", NULL, 0 ); choices[2] = XmCreatePushButton( pane, "PenSize_3", NULL, 0 ); choices[3] = XmCreatePushButton( pane, "PenSize_4", NULL, 0 ); choices[4] = XmCreatePushButton( pane, "PenSize_8", NULL, 0 ); XtManageChildren( choices, 5 ); XtSetArg( arglist[0], XmNsubMenuId, pane ); XtSetValues( button, arglist, 1 ); XtAddCallback( choices[0], XmNactivateCallback, PenSizeCB, "1" ); XtAddCallback( choices[1], XmNactivateCallback, PenSizeCB, "2" ); XtAddCallback( choices[2], XmNactivateCallback, PenSizeCB, "3" ); XtAddCallback( choices[3], XmNactivateCallback, PenSizeCB, "4" ); XtAddCallback( choices[4], XmNactivateCallback, PenSizeCB, "8" );}/************************************************************************* **** InitHelpMenu() **** **** Creates the Help menu: cascade button, pull-down menu pane, and **** all menu-pane choices. Attaches callbacks to menu-pane choices. **** *************************************************************************/static void InitHelpMenu(){ Widget topic, pane, choices[1]; pane = XmCreatePulldownMenu( menubar, "Help_Pane", NULL, 0 ); choices[0] = XmCreateLabel( pane, "Help_Lbl", NULL, 0 ); XtManageChildren( choices, 1 ); XtSetArg( arglist[0], XmNsubMenuId, pane ); topic = XmCreateCascadeButton( menubar, "HelpTopic", arglist, 1 ); XtManageChild( topic ); XtSetArg( arglist[0], XmNmenuHelpWidget, topic ); XtSetValues( menubar, arglist, 1 );}/************************************************************************* **** FileMenuCB( w, client_data, call_data ) **** **** Callback procedure for the "File" pull-down. This function is **** called when any of the file menu buttons are activated. The **** particular operation is identified by a string accessed by the **** "client_data" param. **** **** Note: This callback is only invoked on Activate, so the call **** data (which describes the reason) is superfluous. It is **** therefore not declared as a specific type in the func hdr. **** *************************************************************************/static void FileMenuCB( w, client_data, call_data ) Widget w; char *client_data; caddr_t call_data;{ if (!strcmp(client_data, "New")) ClearWin(); else if (!strcmp(client_data, "Ext")) exit( 0 );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -