home *** CD-ROM | disk | FTP | other *** search
- /**---------------------------------------------------------------------
- ***
- *** file: xmemenu.c
- *** main: xme.c
- ***
- *** project: Motif Widgets text editor
- ***
- *** (c) Copyright 1989 by Open Software Foundation, Inc.
- *** All Rights Reserved.
- ***
- *** (c) Copyright 1989 by Hewlett-Packard Company.
- ***
- ***
- ***-------------------------------------------------------------------*/
-
- #define MENU_EXIT 201
- #define MENU_OPEN 202
- #define MENU_NEW 203
- #define MENU_CLOSE 204
- #define MENU_SAVE 205
- #define MENU_SAVE_AS 206
- #define MENU_PRINT 207
- #define MENU_CUT 208
- #define MENU_COPY 209
- #define MENU_PASTE 210
- #define MENU_CLEAR 211
- #define MENU_GOTO 212
- #define MENU_FINDA 213
- #define MENU_FIND 214
- #define MENU_UNDO 215
- #define MENU_REPLACE 216
- #define MENU_WRAP 217
- #define MENU_PREF 218
-
- #define DISABLE_INDENT 300
- #define SMART_INDENT 301
- #define SYNTAX_INDENT 302
-
- #define REAL_TAB 303
- #define FOUR_TAB 304
-
- #include "xme.h"
-
-
- void CutItem(w,event)
- Widget w;
- XKeyEvent *event;
- {
- #ifdef Motif1.0
- CopyItemToClipboard(event->time);
- DeletePrimarySelection();
- #else
- XmTextCut(w, event->time+1);
- #endif
- }
-
- void CopyItem(w,event)
- Widget w;
- XKeyEvent *event;
- {
- #ifdef Motif1.0
- CopyItemToClipboard(event->time);
- #else
- XmTextCopy(w, event->time+1);
- #endif
- }
-
- void PasteItem(w,event)
- Widget w;
- XKeyEvent *event;
- {
- #ifdef Motif1.0
- PasteItemFromClipboard();
- #else
- XmTextPaste (w);
- #endif
- }
-
- /* ClearItem will only be called if Clear is selected from the menu.
- Otherwise, the text widgets already handle the delete key correctly. */
- void ClearItem(w,event)
- Widget w;
- XKeyEvent *event;
- {
- #ifdef Motif1.0
- DeletePrimarySelection();
- #else
- XmTextRemove(w);
- #endif
- }
-
- /*-------------------------------------------------------------
- ** MenuCB
- ** Process callback from PushButtons in PulldownMenus.
- */
- void MenuCB (w, client_data, call_data)
- Widget w; /* widget id */
- caddr_t client_data; /* data from application */
- caddr_t call_data; /* data from widget class */
- {
- Cardinal ac; /* arg count */
- Arg al[10]; /* arg list */
- char *command; /* command used in printing */
- Boolean Wrap;
-
- XmAnyCallbackStruct *cb = (XmAnyCallbackStruct *) call_data;
-
- switch ((int)client_data)
- {
- case MENU_OPEN:
- /* display the file selection dialog */
- XtManageChild (open_dialog);
- if (!file_saved) /* display the 'save' message dialog */
- XtManageChild (open_warning);
- break;
-
- case MENU_NEW:
- /* display the prompt dialog */
- if (thefile) {
- XtSetArg(al[0], XmNtextString, XmStringCreateLtoR
- (thefile, charset));
- XtSetValues (new_dialog, al, 1);
- }
- XtManageChild (new_dialog);
- if (!file_saved) /* display the 'save' message dialog */
- XtManageChild (new_warning);
- break;
-
- case MENU_CLOSE:
- if (!file_saved) /* display the 'save' message dialog */
- XtManageChild (close_warning);
- else {
- CloseFile();
- sprintf (message_string, " Editing:");
- XtSetArg(al[0], XmNlabelString,
- XmStringCreateLtoR(message_string, charset));
- XtSetValues(message, al, 1);
- }
- break;
-
- case MENU_SAVE:
- SaveFile();
- break;
-
- case MENU_SAVE_AS:
- /* Display the 'save as' dialog with the
- present thefile displayed in it. */
- ac = 0;
- XtSetArg(al[ac], XmNtextString,
- XmStringCreateLtoR (thefile, charset)); ac++;
- XtSetValues(save_as_dialog, al, ac);
- XtManageChild (save_as_dialog);
- break;
-
- case MENU_PRINT:
- /* if (!file_saved)
- XtManageChild(print_warning);
- else if (thefile != NULL) {
- /* malloc space for the command name.
- Note: command = size of the thefile +
- "lp " + null terminator */
- /* command = XtMalloc(sizeof(thefile) + 4);
- sprintf(command, "lp %s", thefile);
- if (system(command) != NULL)
- fprintf(stderr, "\7print failed");
- }
- break;
- */
-
- case MENU_EXIT:
- /* exit if there is no files open */
- if (!file_saved) /* display the 'save' message dialog */
- XtManageChild (exit_warning);
- else {
- /* close up file pointers and descriptors */
- CloseFile();
- CloseUndoBuffer();
-
- /* exit this program */
- exit (0);
- }
- break;
-
- case MENU_UNDO:
- {
- Undo(cb->event);
- }
- break;
-
- case MENU_CUT:
- CutItem(text, cb->event);
- break;
-
- case MENU_COPY:
- CopyItem(text, cb->event);
- break;
-
- case MENU_PASTE:
- PasteItem(text, cb->event);
- break;
-
- case MENU_CLEAR:
- ClearItem(text, cb->event);
- break;
-
- case MENU_FIND:
- XtSetSensitive(findA_button, False);
- XtSetSensitive(replace_button, False);
- XtSetSensitive(replace_pb, False);
- XtSetSensitive(replaceAll_pb, False);
- XtManageChild(find_dialog);
- break;
-
- case MENU_REPLACE:
- ReplaceString();
- case MENU_FINDA:
- if (the_string)
- FindString(cb->event->xbutton.time+1);
- break;
-
- case MENU_GOTO:
- XtManageChild(goto_dialog);
- break;
-
- case MENU_PREF:
- XtManageChild (prefer_dialog);
- break;
-
- default:
- /* unknown client_data was recieved and
- there is no setup to handle this */
- fprintf(stderr, "\7Warning: in menu callback\n");
- break;
- }
-
- }
-
-
-
- /*-------------------------------------------------------------
- ** CreateMenuBar
- ** Create MenuBar in MainWindow
- */
- Widget CreateMenuBar (parent)
- Widget parent;
- {
- Widget menu_bar; /* RowColumn */
- Widget cascade; /* CascadeButton */
- Widget menu_pane; /* RowColumn */
- Widget button; /* PushButton */
- Widget sub_menu;
-
- Arg al[10]; /* arg list */
- Cardinal ac; /* arg count */
-
- /**** Create MenuArea. ****/
- ac = 0;
- menu_bar = XmCreateMenuBar (parent, "menu_bar", al, ac);
-
- /**** Create "File" PulldownMenu. ****/
- ac = 0;
- menu_pane = XmCreatePulldownMenu (menu_bar, "filemenu", al, ac);
-
- ac = 0;
- XtSetArg(al[ac], XmNlabelString,
- XmStringCreateLtoR("Open", charset)); ac++;
- #ifdef HARDCODE
- XtSetArg(al[ac], XmNacceleratorText,
- XmStringCreateLtoR("Ext+O", charset)); ac++;
- XtSetArg(al[ac], XmNaccelerator, "Meta<Key>O:"); ac++;
- XtSetArg (al[ac], XmNfontList, fontlist); ac++;
- #endif
- button = XmCreatePushButtonGadget (menu_pane, "Open", al, ac);
- XtAddCallback (button, XmNactivateCallback, MenuCB, MENU_OPEN);
- XtManageChild (button);
-
- ac = 0;
- XtSetArg(al[ac], XmNlabelString,
- XmStringCreateLtoR("New", charset)); ac++;
- #ifdef HARDCODE
- XtSetArg(al[ac], XmNacceleratorText,
- XmStringCreateLtoR("Ext+N", charset)); ac++;
- XtSetArg(al[ac], XmNaccelerator, "Meta<Key>N:"); ac++;
- XtSetArg (al[ac], XmNfontList, fontlist); ac++;
- #endif
- button = XmCreatePushButtonGadget (menu_pane, "New", al, ac);
- XtAddCallback (button, XmNactivateCallback, MenuCB, MENU_NEW);
- XtManageChild (button);
-
- ac = 0;
- XtSetArg(al[ac], XmNlabelString,
- XmStringCreateLtoR("Close", charset)); ac++;
- #ifdef HARDCODE
- XtSetArg (al[ac], XmNfontList, fontlist); ac++;
- #endif
- button = XmCreatePushButtonGadget (menu_pane, "Close", al, ac);
- XtAddCallback (button, XmNactivateCallback, MenuCB, MENU_CLOSE);
- XtManageChild (button);
-
-
- ac = 0;
- XtSetArg(al[ac], XmNlabelString,
- XmStringCreateLtoR("Save", charset)); ac++;
- #ifdef HARDCODE
- XtSetArg(al[ac], XmNacceleratorText,
- XmStringCreateLtoR("Ext+S", charset)); ac++;
- XtSetArg(al[ac], XmNaccelerator, "Meta<Key>S:"); ac++;
- XtSetArg (al[ac], XmNfontList, fontlist); ac++;
- #endif
- save_button = XmCreatePushButtonGadget (menu_pane, "Save", al, ac);
- XtAddCallback (save_button, XmNactivateCallback, MenuCB, MENU_SAVE);
- XtManageChild (save_button);
- XtSetSensitive(save_button, False);
-
-
- ac = 0;
- XtSetArg(al[ac], XmNlabelString,
- XmStringCreateLtoR("Save As...", charset)); ac++;
- #ifdef HARDCODE
- XtSetArg (al[ac], XmNfontList, fontlist); ac++;
- #endif
- button = XmCreatePushButtonGadget (menu_pane, "Save As...", al, ac);
- XtAddCallback (button, XmNactivateCallback, MenuCB, MENU_SAVE_AS);
- XtManageChild (button);
-
-
- ac = 0;
- separator = XmCreateSeparator (menu_pane, "Sep", al, ac);
- XtManageChild (separator);
-
- ac = 0;
- XtSetArg(al[ac], XmNlabelString,
- XmStringCreateLtoR("Quit", charset)); ac++;
- #ifdef HARDCODE
- XtSetArg(al[ac], XmNacceleratorText,
- XmStringCreateLtoR("Ext+Q", charset)); ac++;
- XtSetArg(al[ac], XmNaccelerator, "Meta<Key>Q:"); ac++;
- XtSetArg (al[ac], XmNfontList, fontlist); ac++;
- #endif
- button = XmCreatePushButtonGadget (menu_pane, "Exit", al, ac);
- XtAddCallback (button, XmNactivateCallback, MenuCB, MENU_EXIT);
- XtManageChild (button);
-
- ac = 0;
- XtSetArg (al[ac], XmNsubMenuId, menu_pane); ac++;
- XtSetArg(al[ac], XmNlabelString,
- XmStringCreateLtoR("File", charset)); ac++;
- #ifdef HARDCODE
- XtSetArg (al[ac], XmNfontList, fontlist); ac++;
- #endif
- cascade = XmCreateCascadeButton (menu_bar, "File", al, ac);
- XtManageChild (cascade);
-
- /**** Create "Edit" PulldownMenu. ****/
- ac = 0;
- menu_pane = XmCreatePulldownMenu (menu_bar, "editmenu", al, ac);
-
- ac = 0;
- XtSetArg(al[ac], XmNlabelString,
- XmStringCreateLtoR("Undo", charset)); ac++;
- #ifdef HARDCODE
- XtSetArg(al[ac], XmNacceleratorText,
- XmStringCreateLtoR("Ext+Z", charset)); ac++;
- XtSetArg(al[ac], XmNaccelerator, "Meta<Key>Z:"); ac++;
- XtSetArg (al[ac], XmNfontList, fontlist); ac++;
- #endif
- undo_button = XmCreatePushButtonGadget (menu_pane, "Undo", al, ac);
- XtAddCallback (undo_button, XmNactivateCallback, MenuCB, MENU_UNDO);
- XtManageChild (undo_button);
- XtSetSensitive(undo_button, False);
-
- ac = 0;
- separator = XmCreateSeparator (menu_pane, "Sep", al, ac);
- XtManageChild (separator);
-
- ac = 0;
- XtSetArg(al[ac], XmNlabelString,
- XmStringCreateLtoR("Cut", charset)); ac++;
- #ifdef HARDCODE
- XtSetArg(al[ac], XmNacceleratorText,
- XmStringCreateLtoR("Ext+X", charset)); ac++;
- XtSetArg(al[ac], XmNaccelerator, "Meta<Key>X:"); ac++;
- XtSetArg (al[ac], XmNfontList, fontlist); ac++;
- #endif
- cut_button = XmCreatePushButtonGadget (menu_pane, "Cut", al, ac);
- XtAddCallback (cut_button, XmNactivateCallback, MenuCB, MENU_CUT);
- XtManageChild (cut_button);
- XtSetSensitive(cut_button, False);
-
- ac = 0;
- XtSetArg(al[ac], XmNlabelString,
- XmStringCreateLtoR("Copy", charset)); ac++;
- #ifdef HARDCODE
- XtSetArg(al[ac], XmNacceleratorText,
- XmStringCreateLtoR("Ext+C", charset)); ac++;
- XtSetArg(al[ac], XmNaccelerator, "Meta<Key>C:"); ac++;
- XtSetArg (al[ac], XmNfontList, fontlist); ac++;
- #endif
- copy_button = XmCreatePushButtonGadget (menu_pane, "Copy", al, ac);
- XtAddCallback (copy_button, XmNactivateCallback, MenuCB, MENU_COPY);
- XtManageChild (copy_button);
- XtSetSensitive(copy_button, False);
-
- ac = 0;
- XtSetArg(al[ac], XmNlabelString,
- XmStringCreateLtoR("Paste", charset)); ac++;
- #ifdef HARDCODE
- XtSetArg(al[ac], XmNacceleratorText,
- XmStringCreateLtoR("Ext+V", charset)); ac++;
- XtSetArg(al[ac], XmNaccelerator, "Meta<Key>V:"); ac++;
- XtSetArg (al[ac], XmNfontList, fontlist); ac++;
- #endif
- paste_button = XmCreatePushButtonGadget (menu_pane, "Paste", al, ac); ac++;
- XtAddCallback (paste_button, XmNactivateCallback, MenuCB, MENU_PASTE);
- XtManageChild (paste_button);
- XtSetSensitive(paste_button, False);
-
- ac = 0;
- XtSetArg(al[ac], XmNlabelString,
- XmStringCreateLtoR("Clear", charset)); ac++;
- #ifdef HARDCODE
- XtSetArg(al[ac], XmNacceleratorText,
- XmStringCreateLtoR("Del", charset)); ac++;
- /* don't need an accelerator - Text already handles
- this action appropriately */
- XtSetArg (al[ac], XmNfontList, fontlist); ac++;
- #endif
- clear_button = XmCreatePushButtonGadget (menu_pane, "Clear", al, ac);
- XtAddCallback (clear_button, XmNactivateCallback, MenuCB, MENU_CLEAR);
- XtManageChild (clear_button);
- XtSetSensitive(clear_button, False);
-
- ac = 0;
- separator = XmCreateSeparator (menu_pane, "Sep", al, ac);
- XtManageChild (separator);
-
- ac = 0;
- XtSetArg (al[ac], XmNvisibleWhenOff, True); ac++;
- #ifdef HARDCODE
- XtSetArg (al[ac], XmNfontList, fontlist); ac++;
- #endif
- button = XmCreatePushButtonGadget (menu_pane, "Preferences", al, ac); ac++;
- XtAddCallback (button, XmNactivateCallback, MenuCB, MENU_PREF);
- XtManageChild (button);
-
- ac = 0;
- XtSetArg (al[ac], XmNsubMenuId, menu_pane); ac++;
- XtSetArg(al[ac], XmNlabelString,
- XmStringCreateLtoR("Edit", charset)); ac++;
- #ifdef HARDCODE
- XtSetArg (al[ac], XmNfontList, fontlist); ac++;
- #endif
- cascade= XmCreateCascadeButton (menu_bar, "Edit", al, ac);
- XtManageChild (cascade);
-
-
- /**** Create "Search" PulldownMenu. ****/
- ac = 0;
- menu_pane = XmCreatePulldownMenu (menu_bar, "searchmenu", al, ac);
-
- ac = 0;
- XtSetArg(al[ac], XmNlabelString,
- XmStringCreateLtoR("Find", charset)); ac++;
- #ifdef HARDCODE
- XtSetArg(al[ac], XmNacceleratorText,
- XmStringCreateLtoR("Ext+F", charset)); ac++;
- XtSetArg(al[ac], XmNaccelerator, "Meta<Key>F:"); ac++;
- XtSetArg (al[ac], XmNfontList, fontlist); ac++;
- #endif
- find_button = XmCreatePushButtonGadget (menu_pane, "Find", al, ac);
- XtAddCallback (find_button, XmNactivateCallback, MenuCB, MENU_FIND);
- XtManageChild (find_button);
- XtSetSensitive(find_button, False);
-
- ac = 0;
- XtSetArg(al[ac], XmNlabelString,
- XmStringCreateLtoR("Find again", charset)); ac++;
- #ifdef HARDCODE
- XtSetArg(al[ac], XmNacceleratorText,
- XmStringCreateLtoR("Ext+A", charset)); ac++;
- XtSetArg(al[ac], XmNaccelerator, "Meta<Key>A:"); ac++;
- XtSetArg (al[ac], XmNfontList, fontlist); ac++;
- #endif
- findA_button = XmCreatePushButtonGadget (menu_pane, "FindA", al, ac);
- XtAddCallback (findA_button, XmNactivateCallback, MenuCB, MENU_FINDA);
- XtManageChild (findA_button);
- XtSetSensitive(findA_button, False);
-
- ac = 0;
- XtSetArg(al[ac], XmNlabelString,
- XmStringCreateLtoR("Replace", charset)); ac++;
- #ifdef HARDCODE
- XtSetArg(al[ac], XmNacceleratorText,
- XmStringCreateLtoR("Ext+R", charset)); ac++;
- XtSetArg(al[ac], XmNaccelerator, "Meta<Key>R:"); ac++;
- XtSetArg (al[ac], XmNfontList, fontlist); ac++;
- #endif
- replace_button = XmCreatePushButtonGadget (menu_pane, "Replace", al, ac);
- XtAddCallback (replace_button, XmNactivateCallback, MenuCB, MENU_REPLACE);
- XtManageChild (replace_button);
- XtSetSensitive(replace_button, False);
-
- ac = 0;
- XtSetArg(al[ac], XmNlabelString,
- XmStringCreateLtoR("Go to", charset)); ac++;
- #ifdef HARDCODE
- XtSetArg(al[ac], XmNacceleratorText,
- XmStringCreateLtoR("Ext+G", charset)); ac++;
- XtSetArg(al[ac], XmNaccelerator, "Meta<Key>G:"); ac++;
- XtSetArg (al[ac], XmNfontList, fontlist); ac++;
- #endif
- goto_button = XmCreatePushButtonGadget (menu_pane, "GoTo", al, ac);
- XtAddCallback (goto_button, XmNactivateCallback, MenuCB, MENU_GOTO);
- XtManageChild (goto_button);
- XtSetSensitive(goto_button, False);
-
- ac = 0;
- XtSetArg (al[ac], XmNsubMenuId, menu_pane); ac++;
- XtSetArg(al[ac], XmNlabelString,
- XmStringCreateLtoR("Search", charset)); ac++;
- #ifdef HARDCODE
- XtSetArg (al[ac], XmNfontList, fontlist); ac++;
- #endif
- cascade= XmCreateCascadeButton (menu_bar, "Search", al, ac);
- XtManageChild (cascade);
-
- return (menu_bar);
- }
-
-