📄 usercmds.c
字号:
ucd->winInpBtn = XtVaCreateManagedWidget("winInpBtn", xmToggleButtonWidgetClass, inpBox, XmNlabelString, s1=MKSTRING("window"), XmNmnemonic, 'w', XmNalignment, XmALIGNMENT_BEGINNING, XmNmarginHeight, 0, XmNset, False, NULL); XmStringFree(s1); ucd->eitherInpBtn = XtVaCreateManagedWidget("eitherInpBtn", xmToggleButtonWidgetClass, inpBox, XmNlabelString, s1=MKSTRING("either"), XmNmnemonic, 't', XmNalignment, XmALIGNMENT_BEGINNING, XmNmarginHeight, 0, XmNset, False, NULL); XmStringFree(s1); ucd->noInpBtn = XtVaCreateManagedWidget("noInpBtn", xmToggleButtonWidgetClass, inpBox, XmNlabelString, s1=MKSTRING("none"), XmNmnemonic, 'o', XmNalignment, XmALIGNMENT_BEGINNING, XmNmarginHeight, 0, XmNset, False, NULL); XmStringFree(s1); inpLabel = XtVaCreateManagedWidget("inpLabel", xmLabelGadgetClass, form, XmNlabelString, s1=MKSTRING("Command Input:"), XmNalignment, XmALIGNMENT_BEGINNING, XmNmarginTop, 5, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, LIST_RIGHT, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, RIGHT_MARGIN_POS, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomWidget, inpBox, NULL); XmStringFree(s1); ucd->mneTextW = XtVaCreateManagedWidget("mne", xmTextWidgetClass, form, XmNcolumns, 1, XmNmaxLength, 1, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, RIGHT_MARGIN_POS-10, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, RIGHT_MARGIN_POS, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomWidget, inpLabel, NULL); RemapDeleteKey(ucd->mneTextW); ucd->accTextW = XtVaCreateManagedWidget("acc", xmTextWidgetClass, form, XmNcolumns, 12, XmNmaxLength, MAX_ACCEL_LEN-1, XmNcursorPositionVisible, False, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, LIST_RIGHT, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, RIGHT_MARGIN_POS-15, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomWidget, inpLabel, NULL); XtAddEventHandler(ucd->accTextW, KeyPressMask, False, (XtEventHandler)accKeyCB, ucd); XtAddCallback(ucd->accTextW, XmNfocusCallback, accFocusCB, ucd); XtAddCallback(ucd->accTextW, XmNlosingFocusCallback, accLoseFocusCB, ucd); accLabel = XtVaCreateManagedWidget("accLabel", xmLabelGadgetClass, form, XmNlabelString, s1=MKSTRING("Accelerator"), XmNmnemonic, 'l', XmNuserData, ucd->accTextW, XmNalignment, XmALIGNMENT_BEGINNING, XmNmarginTop, 5, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, LIST_RIGHT, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, LIST_RIGHT + 24, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomWidget, ucd->mneTextW, NULL); XmStringFree(s1); XtVaCreateManagedWidget("mneLabel", xmLabelGadgetClass, form, XmNlabelString, s1=MKSTRING("Mnemonic"), XmNmnemonic, 'i', XmNuserData, ucd->mneTextW, XmNalignment, XmALIGNMENT_END, XmNmarginTop, 5, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, LIST_RIGHT + 24, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, RIGHT_MARGIN_POS, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomWidget, ucd->mneTextW, NULL); XmStringFree(s1); ucd->nameTextW = XtVaCreateManagedWidget("name", xmTextWidgetClass, form, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, LIST_RIGHT, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, RIGHT_MARGIN_POS, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomWidget, accLabel, NULL); RemapDeleteKey(ucd->nameTextW); nameLabel = XtVaCreateManagedWidget("nameLabel", xmLabelGadgetClass, form, XmNlabelString, s1=MKSTRING("Menu Entry"), XmNmnemonic, 'y', XmNuserData, ucd->nameTextW, XmNalignment, XmALIGNMENT_BEGINNING, XmNmarginTop, 5, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, LIST_RIGHT, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomWidget, ucd->nameTextW, NULL); XmStringFree(s1); XtVaCreateManagedWidget("nameNotes", xmLabelGadgetClass, form, XmNlabelString, s1=MKSTRING("(> for sub-menu, @ language mode)"), XmNalignment, XmALIGNMENT_END, XmNmarginTop, 5, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, nameLabel, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, RIGHT_MARGIN_POS, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomWidget, ucd->nameTextW, NULL); XmStringFree(s1); XtVaCreateManagedWidget("topLabel", xmLabelGadgetClass, form, XmNlabelString, s1=MKSTRING("Select a shell menu item from the list at left.\n\Select \"New\" to add a new command to the menu."), XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 2, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, LIST_RIGHT, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, RIGHT_MARGIN_POS, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomWidget, nameLabel, NULL); XmStringFree(s1); cmdLabel = XtVaCreateManagedWidget("cmdLabel", xmLabelGadgetClass, form, XmNlabelString, s1=MKSTRING("Shell Command to Execute"), XmNmnemonic, 'x', XmNalignment, XmALIGNMENT_BEGINNING, XmNmarginTop, 5, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, SHELL_CMD_TOP, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, LEFT_MARGIN_POS, NULL); XmStringFree(s1); XtVaCreateManagedWidget("cmdLabel", xmLabelGadgetClass, form, XmNlabelString, s1=MKSTRING("(% expands to current filename, # to line number)"), XmNalignment, XmALIGNMENT_END, XmNmarginTop, 5, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, SHELL_CMD_TOP, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, cmdLabel, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, RIGHT_MARGIN_POS, NULL); XmStringFree(s1); okBtn = XtVaCreateManagedWidget("ok",xmPushButtonWidgetClass,form, XmNlabelString, s1=MKSTRING("OK"), XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 13, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 29, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 99, NULL); XtAddCallback(okBtn, XmNactivateCallback, okCB, ucd); XmStringFree(s1); applyBtn = XtVaCreateManagedWidget("apply",xmPushButtonWidgetClass,form, XmNlabelString, s1=MKSTRING("Apply"), XmNmnemonic, 'A', XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 42, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 58, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 99, NULL); XtAddCallback(applyBtn, XmNactivateCallback, applyCB, ucd); XmStringFree(s1); dismissBtn = XtVaCreateManagedWidget("dismiss",xmPushButtonWidgetClass,form, XmNlabelString, s1=MKSTRING("Dismiss"), XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 71, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 87, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 99, NULL); XtAddCallback(dismissBtn, XmNactivateCallback, dismissCB, ucd); XmStringFree(s1); ac = 0; XtSetArg(args[ac], XmNeditMode, XmMULTI_LINE_EDIT); ac++; XtSetArg(args[ac], XmNscrollHorizontal, False); ac++; XtSetArg(args[ac], XmNwordWrap, True); ac++; XtSetArg(args[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++; XtSetArg(args[ac], XmNtopWidget, cmdLabel); ac++; XtSetArg(args[ac], XmNleftAttachment, XmATTACH_POSITION); ac++; XtSetArg(args[ac], XmNleftPosition, LEFT_MARGIN_POS); ac++; XtSetArg(args[ac], XmNrightAttachment, XmATTACH_POSITION); ac++; XtSetArg(args[ac], XmNrightPosition, RIGHT_MARGIN_POS); ac++; XtSetArg(args[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; XtSetArg(args[ac], XmNbottomWidget, okBtn); ac++; XtSetArg(args[ac], XmNbottomOffset, 5); ac++; ucd->cmdTextW = XmCreateScrolledText(form, "name", args, ac); AddMouseWheelSupport(ucd->cmdTextW); XtManageChild(ucd->cmdTextW); MakeSingleLineTextW(ucd->cmdTextW); RemapDeleteKey(ucd->cmdTextW); XtVaSetValues(cmdLabel, XmNuserData, ucd->cmdTextW, NULL); /* for mnemonic */ /* Disable text input for the accelerator key widget, let the event handler manage it instead */ disableTextW(ucd->accTextW); /* initializs the dialog fields to match "New" list item */ updateDialogFields(NULL, ucd); /* Set initial default button */ XtVaSetValues(form, XmNdefaultButton, okBtn, NULL); XtVaSetValues(form, XmNcancelButton, dismissBtn, NULL); /* Handle mnemonic selection of buttons and focus to dialog */ AddDialogMnemonicHandler(form, FALSE); /* realize all of the widgets in the new window */ RealizeWithoutForcingPosition(ucd->dlogShell);}/*** Present a dialogs for editing the user specified commands in the Macro** and background menus*/void EditMacroMenu(WindowInfo *window){ editMacroOrBGMenu(window, MACRO_CMDS);}void EditBGMenu(WindowInfo *window){ editMacroOrBGMenu(window, BG_MENU_CMDS);}static void editMacroOrBGMenu(WindowInfo *window, int dialogType){ Widget form, accLabel, pasteReplayBtn; Widget nameLabel, cmdLabel, okBtn, applyBtn, dismissBtn; userCmdDialog *ucd; char *title; XmString s1; int ac, i; Arg args[20]; /* if the dialog is already displayed, just pop it to the top and return */ if (dialogType == MACRO_CMDS && MacroCmdDialog != NULL) { RaiseShellWindow(MacroCmdDialog); return; } if (dialogType == BG_MENU_CMDS && BGMenuCmdDialog != NULL) { RaiseShellWindow(BGMenuCmdDialog); return; } /* Create a structure for keeping track of dialog state */ ucd = (userCmdDialog *)XtMalloc(sizeof(userCmdDialog)); ucd->window = window; /* Set the dialog to operate on the Macro menu */ ucd->menuItemsList = (menuItemRec **)XtMalloc(sizeof(menuItemRec **) * MAX_ITEMS_PER_MENU); if (dialogType == MACRO_CMDS) { for (i=0; i<NMacroMenuItems; i++) ucd->menuItemsList[i] = copyMenuItemRec(MacroMenuItems[i]); ucd->nMenuItems = NMacroMenuItems; } else { /* BG_MENU_CMDS */ for (i=0; i<NBGMenuItems; i++) ucd->menuItemsList[i] = copyMenuItemRec(BGMenuItems[i]); ucd->nMenuItems = NBGMenuItems; } ucd->dialogType = dialogType; title = dialogType == MACRO_CMDS ? "Macro Commands" : "Window Background Menu"; ac = 0; XtSetArg(args[ac], XmNdeleteResponse, XmDO_NOTHING); ac++; XtSetArg(args[ac], XmNiconName, title); ac++; XtSetArg(args[ac], XmNtitle, title); ac++; ucd->dlogShell = CreateShellWithBestVis(APP_NAME, APP_CLASS, applicationShellWidgetClass, TheDisplay, args, ac); AddSmallIcon(ucd->dlogShell); form = XtVaCreateManagedWidget("editMacroCommands", xmFormWidgetClass, ucd->dlogShell, XmNautoUnmanage, False, XmNresizePolicy, XmRESIZE_NONE, NULL); XtAddCallback(form, XmNdestroyCallback, destroyCB, ucd); AddMotifCloseCallback(ucd->dlogShell, dismissCB, ucd); ac = 0; XtSetArg(args[ac], XmNtopAttachment, XmATTACH_POSITION); ac++; XtSetArg(args[ac], XmNtopPosition, 2); ac++; XtSetArg(args[ac], XmNleftAttachment, XmATTACH_POSITION); ac++; XtSetArg(args[ac], XmNleftPosition, LEFT_MARGIN_POS); ac++; XtSetArg(args[ac], XmNrightAttachment, XmATTACH_POSITION); ac++; XtSetArg(args[ac], XmNrightPosition, LIST_RIGHT-1); ac++; XtSetArg(args[ac], XmNbottomAttachment, XmATTACH_POSITION); ac++; XtSetArg(args[ac], XmNbottomPosition, MACRO_CMD_TOP); ac++; ucd->managedList = CreateManagedList(form, "list", args, ac, (void **)ucd->menuItemsList, &ucd->nMenuItems, MAX_ITEMS_PER_MENU, 20, getDialogDataCB, ucd, setDialogDataCB, ucd, freeItemCB); ucd->selInpBtn = XtVaCreateManagedWidget("selInpBtn", xmToggleButtonWidgetClass, form, XmNlabelString, s1=MKSTRING("Requires Selection"), XmNmnemonic, 'R', XmNalignment, XmALIGNMENT_BEGINNING, XmNmarginHeight, 0, XmNset, False, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, LIST_RIGHT, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, MACRO_CMD_TOP, NULL); XmStringFree(s1); ucd->mneTextW = XtVaCreateManagedWidget("mne", xmTextWidgetClass, form, XmNcolumns, 1, XmNmaxLength, 1, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, RIGHT_MARGIN_POS-21-5, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, RIGHT_MARGIN_POS-21, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomWidget, ucd->selInpBtn, XmNbottomOffset, 5, NULL); RemapDeleteKey(ucd->mneTextW); ucd->accTextW = XtVaCreateManagedWidget("acc", xmTextWidgetClass, form, XmNcolumns, 12, XmNmaxLength, MAX_ACCEL_LEN-1, XmNcursorPositionVisible, False, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, LIST_RIGHT, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, RIGHT_MARGIN_POS-20-10, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomWidget, ucd->selInpBtn, XmNbottomOffset, 5, NULL); XtAddEventHandler(ucd->accTextW, KeyPressMask, False, (XtEventHandler)accKeyCB, ucd); XtAddCallback(ucd->accTextW, XmNfocusCallback, accFocusCB, ucd); XtAddCallback(ucd->accTextW, XmNlosingFocusCallback, accLoseFocusCB, ucd); accLabel = XtVaCreateManagedWidget("accLabel", xmLabelGadgetClass, form, XmNlabelString, s1=MKSTRING("Accelerator"), XmNmnemonic, 'l', XmNuserData, ucd->accTextW, XmNalignment, XmALIGNMENT_BEGINNING, XmNmarginTop, 5, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, LIST_RIGHT, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, LIST_RIGHT + 22, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomWidget, ucd->mneTextW, NULL); XmStringFree(s1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -