#include "mdp.h" Widget open_button, quit_button; Widget add_item( Widget pane, /* el menu */ char *label, /* su nombre */ char *atext, /* texto que aparecera en el boton para ejecutarlo desde teclado */ char *acc, /* definicion de la combinacion de teclas ('acelerador') que ejecuta el menu */ XtCallbackProc callback /* lo que hace si se pulsa el boton de menu o la combinacion de teclas */ ) { Widget button; Arg al[10]; Cardinal ac; if (label == NULL) { /* Esto pone un separador */ button = XmCreateSeparator(pane,"separator",NULL,0); } else { ac = 0; /* Etiqueta con el nombre */ XtSetArg(al[ac],XmNfontList, fontlist); ac++; XtSetArg(al[ac],XmNlabelString, XmStringCreateLtoR(label,charset)); ac++; /* Texto y teclas del acelerador */ if (atext != NULL) { XtSetArg(al[ac],XmNacceleratorText, XmStringCreateLtoR(atext, charset)); ac++; XtSetArg(al[ac],XmNaccelerator,acc); ac++; } /* Creamos el boton */ button = XmCreatePushButtonGadget(pane,label,al,ac); /* Le decimos lo que ha de hacer cuando lo pulsen */ if (callback != NULL) { XtAddCallback(button,XmNactivateCallback,callback,NULL); XtSetSensitive(button,True); } else { XtSetSensitive(button,False); } /* Ya esta listo */ XtManageChild(button); } return button; } Widget create_menu(Widget parent) { Widget menu_bar; Widget menu_pane; Widget cascade; Widget button; Arg al[10]; Cardinal ac; /* Barra de Menu */ ac = 0; menu_bar = XmCreateMenuBar(parent,"menu_bar",al,ac); /* Menu 'File' */ ac = 0; menu_pane = XmCreatePulldownMenu(menu_bar,"filemenu",al,ac); open_button = add_item(menu_pane,"Open","Alt-O","MetaO:",open_cb); add_item(menu_pane,NULL,NULL,NULL,NULL); add_item(menu_pane,NULL,NULL,NULL,NULL); quit_button = add_item(menu_pane,"Quit","Alt-Q","MetaQ:",quit_cb); ac = 0; XtSetArg(al[ac],XmNsubMenuId,menu_pane); ac++; XtSetArg(al[ac],XmNlabelString, XmStringCreateLtoR("File",charset)); ac++; XtSetArg(al[ac],XmNfontList,fontlist); ac++; cascade = XmCreateCascadeButton(menu_bar,"File",al,ac); XtManageChild(cascade); /* Barra de menu completa */ XtManageChild(menu_bar); return (menu_bar); } /* Calbacks para los menus */ void set_buttons(int file_loaded) { if (file_loaded) { XtSetSensitive(open_button,True); XtSetSensitive(quit_button,True); } else { XtSetSensitive(open_button,True); XtSetSensitive(quit_button,True); } } void open_cb(Widget w,XtPointer client,XtPointer app) { XtManageChild(open_dialog); } void quit_cb(Widget w,XtPointer client,XtPointer app) { exit(0); }