📄 textsw_menu.c
字号:
menu_get(display_cmd, MENU_NTH_ITEM, 6); menu_items[(int)TEXTSW_MENU_NORMALIZE_BOTTOM] = menu_get(display_cmd, MENU_NTH_ITEM, 7); menu_items[(int)TEXTSW_MENU_WRAP_LINES_AT_CHAR] = menu_get(break_mode, MENU_NTH_ITEM, 1); menu_items[(int)TEXTSW_MENU_WRAP_LINES_AT_WORD] = menu_get(break_mode, MENU_NTH_ITEM, 2); menu_items[(int)TEXTSW_MENU_CLIP_LINES] = menu_get(break_mode, MENU_NTH_ITEM, 3); menu_items[(int)TEXTSW_MENU_FIND_AND_REPLACE] = menu_get(find_pattern, MENU_NTH_ITEM, 1); menu_items[(int)TEXTSW_MENU_SHOW_CLIPBOARD_FROM_FIND] = menu_get(find_pattern, MENU_NTH_ITEM, 4); menu_items[(int)TEXTSW_MENU_SEL_MARK_TEXT] = menu_get(find_pattern, MENU_NTH_ITEM, 5); menu_items[(int)TEXTSW_MENU_MATCH_FIELD] = menu_get(find_pattern, MENU_NTH_ITEM, 6); menu_items[(int)TEXTSW_MENU_FIND] = menu_get(find_sel_cmd, MENU_NTH_ITEM, 1); menu_items[(int)TEXTSW_MENU_FIND_BACKWARD] = menu_get(find_sel_cmd, MENU_NTH_ITEM, 2); menu_items[(int)TEXTSW_MENU_FIND_SHELF] = menu_get(find_clip_cmd, MENU_NTH_ITEM, 1); menu_items[(int)TEXTSW_MENU_FIND_SHELF_BACKWARD] = menu_get(find_clip_cmd, MENU_NTH_ITEM, 2); menu_items[(int)TEXTSW_MENU_SEL_ENCLOSE_FIELD] = menu_get(search_field_cmd, MENU_NTH_ITEM, 1); menu_items[(int)TEXTSW_MENU_SEL_NEXT_FIELD] = menu_get(search_field_cmd, MENU_NTH_ITEM, 2); menu_items[(int)TEXTSW_MENU_SEL_PREV_FIELD] = menu_get(search_field_cmd, MENU_NTH_ITEM, 3); } else { menu_items[(int)TEXTSW_MENU_LOAD] = menu_get(top_menu, MENU_NTH_ITEM, 2); menu_items[(int)TEXTSW_MENU_NORMALIZE_LINE] = menu_get(top_menu, MENU_NTH_ITEM, 3); menu_items[(int)TEXTSW_MENU_CREATE_VIEW] = menu_get(top_menu, MENU_NTH_ITEM, 4); menu_items[(int)TEXTSW_MENU_DESTROY_VIEW] = menu_get(top_menu, MENU_NTH_ITEM, 5); menu_items[(int)TEXTSW_MENU_RESET] = menu_get(top_menu, MENU_NTH_ITEM, 6); menu_items[(int)TEXTSW_MENU_COUNT_TO_LINE] = menu_get(top_menu, MENU_NTH_ITEM, 7); menu_items[(int)TEXTSW_MENU_FILE_STUFF] = menu_get(top_menu, MENU_NTH_ITEM, 8); menu_items[(int)TEXTSW_MENU_NORMALIZE_INSERTION] = menu_get(top_menu, MENU_NTH_ITEM, 9); menu_items[(int)TEXTSW_MENU_CD] = menu_get(top_menu, MENU_NTH_ITEM, 11); menu_items[(int)TEXTSW_MENU_PUT_THEN_GET] = menu_get(top_menu, MENU_NTH_ITEM, 13);/* menu_items[(int)TEXTSW_MENU_MATCH_FIELD] = menu_get(top_menu, MENU_NTH_ITEM, 14);*/ menu_item = (Menu_item)menu_get(top_menu, MENU_NTH_ITEM, 1); save_file = (Menu)menu_get(menu_item, MENU_VALUE); menu_item = (Menu_item)menu_get(top_menu, MENU_NTH_ITEM, 10); break_mode = (Menu)menu_get(menu_item, MENU_VALUE); menu_item = (Menu_item)menu_get(top_menu, MENU_NTH_ITEM, 12); find_pattern = (Menu)menu_get(menu_item, MENU_VALUE);/* menu_item = (Menu_item)menu_get(top_menu, MENU_NTH_ITEM, 15); edit_cmd = (Menu)menu_get(menu_item, MENU_VALUE); menu_items[(int)TEXTSW_MENU_AGAIN] = menu_get(edit_cmd, MENU_NTH_ITEM, 1); menu_items[(int)TEXTSW_MENU_UNDO] = menu_get(edit_cmd, MENU_NTH_ITEM, 2); menu_items[(int)TEXTSW_MENU_CUT] = menu_get(edit_cmd, MENU_NTH_ITEM, 3); menu_items[(int)TEXTSW_MENU_COPY] = menu_get(edit_cmd, MENU_NTH_ITEM, 4); menu_items[(int)TEXTSW_MENU_PASTE] = menu_get(edit_cmd, MENU_NTH_ITEM, 5);*/ menu_items[(int)TEXTSW_MENU_SAVE] = menu_get(save_file, MENU_NTH_ITEM, 1); menu_items[(int)TEXTSW_MENU_SAVE_QUIT] = menu_get(save_file, MENU_NTH_ITEM, 2); menu_items[(int)TEXTSW_MENU_SAVE_RESET] = menu_get(save_file, MENU_NTH_ITEM, 3); menu_items[(int)TEXTSW_MENU_SAVE_CLOSE] = menu_get(save_file, MENU_NTH_ITEM, 4); menu_items[(int)TEXTSW_MENU_STORE] = menu_get(save_file, MENU_NTH_ITEM, 5); menu_items[(int)TEXTSW_MENU_STORE_QUIT] = menu_get(save_file, MENU_NTH_ITEM, 6); menu_items[(int)TEXTSW_MENU_STORE_CLOSE] = menu_get(save_file, MENU_NTH_ITEM, 7); menu_items[(int)TEXTSW_MENU_CLIP_LINES] = menu_get(break_mode, MENU_NTH_ITEM, 1); menu_items[(int)TEXTSW_MENU_WRAP_LINES_AT_CHAR] = menu_get(break_mode, MENU_NTH_ITEM, 2); menu_items[(int)TEXTSW_MENU_FIND] = menu_get(find_pattern, MENU_NTH_ITEM, 1); menu_items[(int)TEXTSW_MENU_FIND_BACKWARD] = menu_get(find_pattern, MENU_NTH_ITEM, 2); menu_items[(int)TEXTSW_MENU_FIND_SHELF] = menu_get(find_pattern, MENU_NTH_ITEM, 3); menu_items[(int)TEXTSW_MENU_FIND_SHELF_BACKWARD] = menu_get(find_pattern, MENU_NTH_ITEM, 4); #ifdef _TEXTSW_FIND_RE menu_items[(int)TEXTSW_MENU_FIND_RE] = menu_get(find_pattern, MENU_NTH_ITEM, 5); menu_items[(int)TEXTSW_MENU_FIND_RE_BACKWARD] = menu_get(find_pattern, MENU_NTH_ITEM, 6); menu_items[(int)TEXTSW_MENU_FIND_TAG] = menu_get(find_pattern, MENU_NTH_ITEM, 7); menu_items[(int)TEXTSW_MENU_FIND_TAG_BACKWARD] = menu_get(find_pattern, MENU_NTH_ITEM, 8); #endif } /* end of "if textsw_menu_style != organized" */ for(item = (int)TEXTSW_MENU_NO_CMD; item < (int)TEXTSW_MENU_LAST_CMD; item++) { menu_set(menu_items[item], MENU_ACTION, textsw_do_menu_action, 0); } return menu_items;}static struct pixrect *textsw_init_get_only_pr(menu) Menu menu;{ struct pixrect *pr; struct pixfont *menu_font; struct pr_subregion get_only_bound; struct pr_prpos get_only_prpos; int menu_left_margin; /* compute the size of the pixrect and allocate it */ menu_font = (struct pixfont *)LINT_CAST(menu_get(menu, MENU_FONT)); pf_textbound(&get_only_bound, strlen(put_then_get), menu_font, put_then_get); menu_left_margin = (int)menu_get(menu, MENU_LEFT_MARGIN); pr = (struct pixrect *)mem_create( get_only_bound.size.x + menu_left_margin + (int)menu_get(menu, MENU_RIGHT_MARGIN), get_only_bound.size.y, 1); /* write the text into the pixrect */ get_only_prpos.pr = pr; get_only_prpos.pos.x = menu_left_margin - menu_font->pf_char[put_then_get[0]].pc_home.x; get_only_prpos.pos.y = - menu_font->pf_char[put_then_get[0]].pc_home.y; pf_text(get_only_prpos, PIX_SRC, menu_font, put_then_get); /* gray out "Copy then" */ pf_textbound(&get_only_bound, strlen(put_then), menu_font, put_then); pr_replrop(pr, menu_left_margin, 0, get_only_bound.size.x, get_only_bound.size.y, PIX_SRC & PIX_DST, &menu_gray50_pr, 0, 0); return pr;}extern Menutextsw_menu_init(textsw) Textsw_folio textsw;{ Textsw_enum style; if (textsw_menu != 0) { textsw->menu = (caddr_t)textsw_menu; } else { if (!textsw_menu_style_already_set) { Textsw_enum style = textsw_get_menu_style_internal(); } (Menu)textsw->menu = textsw_menu = textsw_new_menu(textsw); if (textsw_get_only_pr == 0) { textsw_get_only_pr = textsw_init_get_only_pr(textsw_menu); } textsw_menu_items = textsw_new_menu_table(textsw); textsw_menu_refcount = 0; } textsw->menu_table = (caddr_t)textsw_menu_items; textsw_menu_refcount++; return (textsw->menu);}extern Menutextsw_get_unique_menu(textsw) Textsw_folio textsw;{ if (textsw->menu == textsw_menu) { /* refcount == 1 ==> textsw is the only referencer */ if (textsw_menu_refcount == 1) { textsw_menu = 0; textsw_menu_items = 0; textsw_menu_refcount = 0; } else { textsw->menu = (caddr_t)textsw_new_menu(textsw); textsw->menu_table = (caddr_t)textsw_new_menu_table(textsw); textsw_menu_refcount--; } } return (textsw->menu);}extern voidtextsw_set_menu_style_internal(style) Textsw_enum style;{ if (textsw_menu == 0) textsw_menu_style = style; textsw_menu_style_already_set = 1; /* set first time */}extern Textsw_enumtextsw_get_menu_style_internal(){ if (!textsw_menu_style_already_set) { /* not set yet */ if (defaults_get_boolean( "/Compatibility/New_Text_Menu", (Bool)TRUE, (int *)NULL)) { textsw_menu_style = TEXTSW_STYLE_ORGANIZED; } else textsw_menu_style = TEXTSW_STYLE_UNORGANIZED; textsw_menu_style_already_set = 1; } return (textsw_menu_style);}#define MENU_ACTIVE MENU_INACTIVE, FALSEextern voidtextsw_do_menu(view, ie) Textsw_view view; Event *ie;{ Ev_handle current_view; int i; register Textsw_folio textsw = FOLIO_FOR_VIEW(view); Textsw abstract = VIEW_REP_TO_ABS(view); register Menu_item *menu_items; int primary_selection_exists, shelf_isnt_empty; if (textsw->menu == 0) return; primary_selection_exists = textsw_is_seln_nonzero(textsw, EV_SEL_PRIMARY); shelf_isnt_empty = textsw_is_seln_nonzero(textsw, EV_SEL_SHELF); menu_items = (Menu_item *)LINT_CAST(textsw->menu_table); for (i = 0; i < (int)TEXTSW_MENU_LAST_CMD; i++) menu_set(menu_items[i], MENU_INACTIVE, TRUE, MENU_CLIENT_DATA, abstract, 0); /* Construct a menu appropriate to the the view it is invoked over. */ if (((textsw->state & TXTSW_NO_LOAD) == 0) && primary_selection_exists) menu_set(menu_items[(int)TEXTSW_MENU_LOAD], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_SAVE], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_STORE], MENU_ACTIVE, 0); if (textsw->views->first_view != EV_NULL) { Es_handle original; original = (Es_handle)LINT_CAST( es_get(textsw->views->esh, ES_PS_ORIGINAL) ); if ((!TXTSW_IS_READ_ONLY(textsw)) && (original != ES_NULL) && (Es_enum)LINT_CAST(es_get(original, ES_TYPE)) == ES_TYPE_FILE) { menu_set(menu_items[(int)TEXTSW_MENU_SAVE_QUIT], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_SAVE_RESET], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_SAVE_CLOSE], MENU_ACTIVE, 0); } if ((textsw->state & TXTSW_READ_ONLY_SW) == 0) { menu_set(menu_items[(int)TEXTSW_MENU_RESET], MENU_ACTIVE, 0); if (primary_selection_exists) {/* commented out since this item is set to active always * menu_set(menu_items[(int)TEXTSW_MENU_STORE], MENU_ACTIVE, 0);*/ menu_set(menu_items[(int)TEXTSW_MENU_STORE_QUIT], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_STORE_CLOSE], MENU_ACTIVE, 0); } } if (textsw->tool) menu_set(menu_items[(int)TEXTSW_MENU_CREATE_VIEW], MENU_ACTIVE, 0); if (((textsw->state & TXTSW_NO_CD) == 0) && (primary_selection_exists)) menu_set(menu_items[(int)TEXTSW_MENU_CD], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_NORMALIZE_INSERTION], MENU_ACTIVE, 0);/* menu_set(menu_items[(int)TEXTSW_MENU_NORMALIZE_SELECTION], MENU_ACTIVE, 0);*/ menu_set(menu_items[(int)TEXTSW_MENU_NORMALIZE_TOP], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_NORMALIZE_BOTTOM], MENU_ACTIVE, 0); if (!TXTSW_IS_READ_ONLY(textsw)) { if (primary_selection_exists) menu_set(menu_items[(int)TEXTSW_MENU_FILE_STUFF], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_AGAIN], MENU_ACTIVE, 0); if (textsw_has_been_modified(abstract)) { menu_set(menu_items[(int)TEXTSW_MENU_UNDO], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_UNDO_ALL], MENU_ACTIVE, 0); } if (primary_selection_exists) /* if there is a non-zero primary selection, * set string to be put_then_get, and make active; * else if there is a non-zero shelf, * set string to be get_only, and make active; * else set string to be put_then_get, and make inactive. */ if (primary_selection_exists) { menu_set(menu_items[(int)TEXTSW_MENU_PUT_THEN_GET], MENU_ACTIVE, MENU_IMAGE, 0, MENU_STRING, put_then_get, 0); menu_set(menu_items[(int)TEXTSW_MENU_CUT], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_COPY], MENU_ACTIVE, 0); } else if (shelf_isnt_empty) { menu_set(menu_items[(int)TEXTSW_MENU_PUT_THEN_GET], MENU_ACTIVE, MENU_STRING, 0, MENU_IMAGE, textsw_get_only_pr, 0); } else { /* Leave MENU_INACTIVE */ menu_set(menu_items[(int)TEXTSW_MENU_PUT_THEN_GET], MENU_IMAGE, 0, MENU_STRING, put_then_get, 0); } if (shelf_isnt_empty) { menu_set(menu_items[(int)TEXTSW_MENU_PASTE], MENU_ACTIVE, 0); } } if (textsw->views->first_view->next != EV_NULL) menu_set(menu_items[(int)TEXTSW_MENU_DESTROY_VIEW], MENU_ACTIVE, 0); current_view = view->e_view; if (current_view != EV_NULL) { if ((Ev_right_break)ev_get(current_view, EV_RIGHT_BREAK) == EV_CLIP) { menu_set(menu_items[(int)TEXTSW_MENU_WRAP_LINES_AT_CHAR], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_WRAP_LINES_AT_WORD], MENU_ACTIVE, 0); } else if ((Ev_right_break)ev_get(current_view, EV_RIGHT_BREAK) == EV_WRAP_AT_CHAR) { menu_set(menu_items[(int)TEXTSW_MENU_CLIP_LINES], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_WRAP_LINES_AT_WORD], MENU_ACTIVE, 0); } else { menu_set(menu_items[(int)TEXTSW_MENU_CLIP_LINES], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_WRAP_LINES_AT_CHAR], MENU_ACTIVE, 0); } if (primary_selection_exists) { menu_set(menu_items[(int)TEXTSW_MENU_FIND], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_FIND_BACKWARD], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_MATCH_FIELD], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_NORMALIZE_LINE], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_COUNT_TO_LINE], MENU_ACTIVE, 0); } if (shelf_isnt_empty) { menu_set(menu_items[(int)TEXTSW_MENU_SHOW_CLIPBOARD], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_FIND_SHELF], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_FIND_SHELF_BACKWARD], MENU_ACTIVE, 0); } /* should check if there is selection */ menu_set(menu_items[(int)TEXTSW_MENU_FIND_AND_REPLACE], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_SEL_ENCLOSE_FIELD], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_SEL_NEXT_FIELD], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_SEL_PREV_FIELD], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_SEL_MARK_TEXT], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_SHOW_CLIPBOARD_FROM_EDIT], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_SHOW_CLIPBOARD_FROM_FIND], MENU_ACTIVE, 0);#ifdef _TEXTSW_FIND_RE menu_set(menu_items[(int)TEXTSW_MENU_FIND_RE], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_FIND_RE_BACKWARD], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_FIND_TAG], MENU_ACTIVE, 0); menu_set(menu_items[(int)TEXTSW_MENU_FIND_TAG_BACKWARD], MENU_ACTIVE, 0);#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -