📄 browser.c
字号:
show_notice(1,"Can't generate listing display in select_from_alternatives"); free(p->path_prefix); if(!p->next) input_pending = NULL; else { input_pending = p->next; input_pending->prev = NULL; } free(p); } } return;}/*********************************************************************/void menu_redoit(canvas, pwi, repaint_area) Canvas canvas; Pixwin *pwi; Rectlist *repaint_area;{ Pixwin *pw; Menu_list *l; Rect *rect; static int fhi; register int y, xloc; Pending_input *p; extern Frame daddy; p = (Pending_input*)xv_get(canvas, WIN_CLIENT_DATA); if (!p) return; l = (Menu_list*)p->list; pw = (Pixwin *)canvas_pixwin(canvas); rect = (Rect*)xv_get(canvas, WIN_RECT); fhi = def_font_height + 2; while(l && (! l->active)) l = l->next; /* find top of displayed section */ if(l) { pw_write((Xv_opaque)pw,0,0,rect->r_width,rect->r_height, PIX_COLOR(0)|PIX_SRC,NULL,0,0); y = fhi; while(l && (y < rect->r_height)) { if(l->tapped) pw_text((Xv_opaque)pw, 0, y, PIX_COLOR(1)|PIX_SRC, def_font, "*"); pw_text((Xv_opaque)pw, 10, y, PIX_COLOR(1)|PIX_SRC, def_font, l->str); y += fhi; l = l->next; } } if(p->item) { /* print label of panel item awaiting input */ xloc = (int)xv_get(canvas, WIN_X); pw = (Pixwin*)xv_get(daddy, WIN_PIXWIN); if(!p->banner) pw_text((Xv_opaque)pw, xloc, 11, PIX_COLOR(FOREGROUND_COLOR)|PIX_SRC, def_font, (char *) xv_get(p->item, PANEL_LABEL_STRING)); else pw_text((Xv_opaque)pw, xloc, 11, PIX_COLOR(FOREGROUND_COLOR)|PIX_SRC, def_font, p->banner); }}/*********************************************************************/static void menu_doit(pw, event, arg) Pixwin *pw; Event *event; caddr_t arg;{ Canvas canvas = xv_get((Xv_opaque)pw, CANVAS_PAINT_CANVAS_WINDOW); Menu_list *l, *l2; Rect *rect; static int fhi; register int y, x, height, locy, entry, ndis; Pending_input *p; Panel_item item; void (*proc)(); char *result; Menu me; extern char *cleaned_for_input(); switch (event_id(event)) { case MS_LEFT: case MS_RIGHT: case LOC_DRAG: case LOC_MOVE: break; default: return; } p = (Pending_input*)xv_get(canvas, WIN_CLIENT_DATA); if (!p) return; l2 = l = (Menu_list*)p->list; rect = (Rect*)xv_get(canvas, WIN_RECT); x = event_x(event); y = event_y(event); fhi = def_font_height + 2; entry = (y - (fhi >> 2))/fhi; while(l && (! l->active)) l = l->next; /* find top of displayed section */ if (l){ switch(event_id(event)) { case MS_LEFT: if (event_is_up(event)) { while(entry-- && l) l = l->next; if(l && p->results_to) { result = p->results_to; item = p->item; proc = p->proc; if(p->path_prefix) strcpy(result,remove_reg_exp(p->path_prefix)); else *result = 0; strcat(result,cleaned_for_input(l->str)); if (item) xv_set(item, PANEL_VALUE, result, 0); if(p->destroy_on_select) { xv_set(canvas, WIN_CLIENT_DATA, (caddr_t) NULL, 0); destroy_pending_input(p); } proc(item, NULL); /* assumes it's a PANEL_NOTIFY_PROC */ return; } } break; case MS_RIGHT: if (debug_level) fprintf(stderr, "event_y %d. entry %d.\n", y, entry); while(entry-- && l) l = l->next; if(l && p->results_to) { result = p->results_to; if(p->path_prefix) strcpy(result,remove_reg_exp(p->path_prefix)); else *result = 0; strcat(result,cleaned_for_input(l->str)); if(event_is_down(event)) { me = (Menu)xv_get(canvas, WIN_MENU); xv_set(canvas, XV_KEY_DATA, file_name_key, result, 0); xv_set(canvas, XV_KEY_DATA, list_elem_key, l, 0); menu_show(me, canvas, event, 0); return; } } break; case LOC_DRAG: case LOC_MOVE: ndis = rect->r_height/(fhi << 1); if(y < fhi) { /* if it`s near the top */ if(l->prev) { l->active = FALSE; while(ndis-- && l->prev) l = l->prev; l->active = TRUE; xv_set(canvas, WIN_MOUSE_XY, x, y+fhi, 0); menu_redoit(canvas,NULL,NULL); return; } } else { if((rect->r_height - y) < fhi) { /* if it's near the bottom */ l2 = l; while(entry-- && l) l = l->next; if(l && l->next) { l2->active = FALSE; while(ndis-- && l2->next) l2 = l2->next; l2->active = TRUE; xv_set(canvas, WIN_MOUSE_XY, x, y - fhi, 0); menu_redoit(canvas,NULL,NULL); return; } } } default: return; } }}/*********************************************************************/void m_play_file(canvas, name, le) Canvas canvas; char *name; Menu_list *le;{ char play_command[125]; name = (char *) xv_get(canvas, XV_KEY_DATA, file_name_key); (void) sprintf(play_command, "%s -r1:", play_program); (void) call_external_play_prog(play_command, name, "", 0, 0, NULL); return;}/*********************************************************************/void m_print_file(canvas, name, le) Canvas canvas; char *name; Menu_list *le;{ Frame fr; Textsw help; char head[200]; register int n; char command[500]; char label[500]; Textsw espsout; int ret; name = (char *) xv_get(canvas, XV_KEY_DATA, file_name_key); if(name && *name) { if(*name == '@') name++; n = strlen(name); if(name[n-1] == '/') m_pass_in_name(canvas, name, NULL); else { if (is_esps_file(name)) { /* is an ESPS file (or NIST) */ run_esps_prog("xtext epsps -l",name,"",0,0,NULL); return; } else { /* not an ESPS file, just pop up in text window*/ sprintf(head,"File: %s",name); fr = xv_create(XV_NULL,FRAME, XV_LABEL, head, 0); if(!window_check_return(fr)) return; help = xv_create(fr, TEXTSW, TEXTSW_FILE, name, 0); if(!window_check_return(help)) { dt_xv_destroy_safe(2,fr); return; } xv_set(fr,WIN_SHOW, TRUE, FRAME_NO_CONFIRM, TRUE, 0); } } return; }}/*********************************************************************/void m_kill_display(canvas, name, le) Canvas canvas; char *name; Menu_list *le;{ Pending_input *p; if((p = (Pending_input*)xv_get(canvas,WIN_CLIENT_DATA))) { p->canvas = (Canvas)0; reshuffle_and_kill(canvas); } return;}/*********************************************************************/void m_pass_in_name(canvas, name, le) Canvas canvas; char *name; Menu_list *le;{ Pending_input *p; name = (char *) xv_get(canvas, XV_KEY_DATA, file_name_key); p = (Pending_input*)xv_get(canvas,WIN_CLIENT_DATA); if(p && p->item && p->proc && p->results_to) { strcpy(p->results_to,name); xv_set(p->item, PANEL_VALUE, name, 0); p->proc(p->item,name); }}/*********************************************************************/void m_remove_list_element(canvas, name, le) Canvas canvas; char *name; Menu_list *le;{ char *cp; Menu_list *l; Pending_input *p; if ((l = (Menu_list *) xv_get(canvas, XV_KEY_DATA, list_elem_key)) && (p = (Pending_input*)xv_get(canvas,WIN_CLIENT_DATA))) { if(l->active) { if(l->prev) l->prev->active = TRUE; else if(l->next) l->next->active = TRUE; } if(l == (Menu_list*)p->list) { if(! l->next) { if(p->destroy_on_select) { xv_set(canvas, WIN_CLIENT_DATA, (caddr_t) NULL, 0); destroy_pending_input(p); } return; } p->list = (caddr_t)l->next; l->next->prev = NULL; } else { if(l->next) l->next->prev = l->prev; if(l->prev) l->prev->next = l->next; } if(l->str) free(l->str); if(l->data) free(l->data); free(l); menu_redoit(canvas, NULL, NULL); return; }/*!*//* What's the point? */ l = l->next;}/*********************************************************************/void m_designate_source(canvas, name, le) Canvas canvas; char *name; Menu_list *le;{ char *cp; Menu_list *l; Pending_input *p, *get_designated_source(); le = (Menu_list *) xv_get(canvas, XV_KEY_DATA, list_elem_key); /* First, see if another designee should be turned off. */ if((p = get_designated_source(&l,NULL))) { l->tapped = FALSE; if(p->canvas) menu_redoit(p->canvas,NULL,NULL); } if ((l = le) && (p = (Pending_input*)xv_get(canvas,WIN_CLIENT_DATA))) { l->tapped = TRUE; menu_redoit(canvas, NULL, NULL); return; }}/*********************************************************************/void show_output_proc(item, event) Panel_item item; Event *event;{ extern Panel_item outputFile_item, newFile_item; extern Pending_input new_files; extern void newText_proc(); if(new_files.list && (item == outputFile_item)) { switch(event_id(event)) { case MS_RIGHT: if(event_is_down(event)) { if(!new_files.canvas) { if((new_files.canvas = file_selection_window(&new_files))) { new_files.item = newFile_item; new_files.proc = newText_proc; } else show_notice(1,"Problems creating output file browser window"); } } return; default: panel_default_handle_event(item,event); return; } } else panel_default_handle_event(item,event); return;}/*********************************************************************/free_menu_list(l) Menu_list *l;{ Menu_list *l2; while((l2 = l)) { if(l->str) free(l->str); if(l->data) free(l->data); l = l->next; free(l2); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -