📄 xaddop.c
字号:
XV_WIDTH, 431, XV_HEIGHT, WIN_EXTEND_TO_EDGE, WIN_BORDER, TRUE, NULL); varlist = xv_create(lpanel, PANEL_LIST, XV_X, 16, XV_Y, 8, PANEL_LIST_WIDTH, 175, PANEL_LIST_DISPLAY_ROWS, 7, PANEL_LABEL_STRING, savestring("Global Variables:"), PANEL_LAYOUT, PANEL_VERTICAL, PANEL_READ_ONLY, TRUE, PANEL_CHOOSE_ONE, TRUE, PANEL_CHOOSE_NONE, TRUE, PANEL_NOTIFY_PROC, insert_var, NULL); for (i=0; params->global_vars[i] != NULL; i++) { xv_set(varlist, PANEL_LIST_STRING, i, savestring(params->global_vars[i]), NULL); } varlist = xv_create(lpanel, PANEL_LIST, XV_X, 224, XV_Y, 8, PANEL_LIST_WIDTH, 175, PANEL_LIST_DISPLAY_ROWS, 7, PANEL_LABEL_STRING, savestring("View-Specific Variables:"), PANEL_LAYOUT, PANEL_VERTICAL, PANEL_READ_ONLY, TRUE, PANEL_CHOOSE_ONE, TRUE, PANEL_CHOOSE_NONE, TRUE, PANEL_NOTIFY_PROC, insert_var, NULL); for (i=0; params->view_vars[i] != NULL; i++) { xv_set(varlist, PANEL_LIST_STRING, i, savestring(params->view_vars[i]), NULL); } rpanel = (Panel) xv_create(vars_win, PANEL, XV_X, (int)xv_get(lpanel, XV_X) + (int)xv_get(lpanel, XV_WIDTH) + 2, XV_Y, 0, XV_WIDTH, WIN_EXTEND_TO_EDGE, XV_HEIGHT, WIN_EXTEND_TO_EDGE, WIN_BORDER, TRUE, NULL); (void) xv_create(rpanel, PANEL_MESSAGE, XV_X, 24, XV_Y, 24, PANEL_LABEL_STRING, savestring("Output Files:"), PANEL_LABEL_BOLD, TRUE, NULL); (void) xv_create(rpanel, PANEL_BUTTON, XV_X, 24, XV_Y, 54, PANEL_LABEL_STRING, savestring("Output File (display graphics)"), PANEL_NOTIFY_PROC, insert_gOut, NULL); gOutExt = xv_create(rpanel, PANEL_TEXT, XV_X, 237, XV_Y, 58, PANEL_VALUE_DISPLAY_LENGTH, 8, PANEL_VALUE_STORED_LENGTH, 80, PANEL_LABEL_STRING, savestring(".ext:"), PANEL_VALUE, "out", PANEL_LAYOUT, PANEL_HORIZONTAL, PANEL_READ_ONLY, FALSE, NULL); (void) xv_create(rpanel, PANEL_BUTTON, XV_X, 24, XV_Y, 93, PANEL_LABEL_STRING, savestring("Output File (display text)"), PANEL_NOTIFY_PROC, insert_tOut, NULL); tOutExt = xv_create(rpanel, PANEL_TEXT, XV_X, 237, XV_Y, 97, PANEL_VALUE_DISPLAY_LENGTH, 8, PANEL_VALUE_STORED_LENGTH, 80, PANEL_LABEL_STRING, savestring(".ext:"), PANEL_VALUE, "out", PANEL_LAYOUT, PANEL_HORIZONTAL, PANEL_READ_ONLY, FALSE, NULL); (void) xv_create(rpanel, PANEL_BUTTON, XV_X, 24, XV_Y, 132, PANEL_LABEL_STRING, savestring("Output File (don't display)"), PANEL_NOTIFY_PROC, insert_nOut, NULL); nOutExt = xv_create(rpanel, PANEL_TEXT, XV_X, 237, XV_Y, 136, PANEL_VALUE_DISPLAY_LENGTH, 8, PANEL_VALUE_STORED_LENGTH, 80, PANEL_LABEL_STRING, savestring(".ext:"), PANEL_VALUE, "out", PANEL_LAYOUT, PANEL_HORIZONTAL, PANEL_READ_ONLY, FALSE, NULL);}/*quit_proc(item)*/static voiddismiss_proc(item)Panel_item item;{ /* erase text to avoid popup asking about discarding edits */ textsw_reset(textwin, 0,0); xv_set(addop_win, XV_SHOW, FALSE, NULL);/* dt_xv_destroy_safe(4,addop_win);*/ xv_set(vars_win, FRAME_CMD_PUSHPIN_IN, FALSE, NULL); xv_set(vars_win, XV_SHOW, FALSE, NULL); xv_set(ops_win, FRAME_CMD_PUSHPIN_IN, FALSE, NULL); xv_set(ops_win, XV_SHOW, FALSE, NULL);/* addop_win = NULL; vars_win = ops_win = NULL;*/}static void show_ops(item, event)Panel_item item;Event *event;{ int ax, ay; int oh = xv_get(ops_win, XV_HEIGHT); if (xv_get(ops_win, XV_SHOW) == TRUE) return; if (debug_level) Fprintf(stderr, "Pop up operations panel.\n"); if ((Gparams->ops_x_pos >= 0) && (Gparams->ops_y_pos >= 0)) { xv_set(ops_win, XV_X, Gparams->ops_x_pos, XV_Y, Gparams->ops_y_pos, NULL); } else { int oy; if (Gparams->owner == XV_NULL) { ax = xv_get(addop_win, XV_X); ay = xv_get(addop_win, XV_Y); } else { ax = xv_get(xv_get(addop_win, XV_OWNER), XV_X) + xv_get(addop_win, XV_X); ay = xv_get(xv_get(addop_win, XV_OWNER), XV_Y) + xv_get(addop_win, XV_Y); } oy = ay - oh - 50; /* subtract two window title bars */ if (debug_level > 1) Fprintf(stderr, "ax = %d, ay = %d, oh = %d, oy = %d\n", ax, ay, oh, oy); if (oy > 0) xv_set(ops_win, XV_X, ax, XV_Y, oy, NULL); else xv_set(ops_win, XV_X, ax, NULL); } xv_set(ops_win, XV_SHOW, TRUE, NULL);}static void show_vars(item, event)Panel_item item;Event *event;{ int ax, ay; int ah = xv_get(addop_win, XV_HEIGHT); if (xv_get(vars_win, XV_SHOW) == TRUE) return; if (debug_level) Fprintf(stderr, "Pop up variables panel.\n"); if ((Gparams->vars_x_pos >= 0) && (Gparams->vars_y_pos >= 0)) { xv_set(vars_win, XV_X, Gparams->vars_x_pos, XV_Y, Gparams->vars_y_pos, NULL); } else { if (Gparams->owner == XV_NULL) { ax = xv_get(addop_win, XV_X); ay = xv_get(addop_win, XV_Y); } else { ax = xv_get(xv_get(addop_win, XV_OWNER), XV_X) + xv_get(addop_win, XV_X); ay = xv_get(xv_get(addop_win, XV_OWNER), XV_Y) + xv_get(addop_win, XV_Y); } if (debug_level > 1) Fprintf(stderr, "ax = %d, ay = %d\n", ax, ay); xv_set(vars_win, XV_X, ax, XV_Y, ay + ah, NULL); } xv_set(vars_win, XV_SHOW, TRUE, NULL);}static void insert_var(item, string, client_data, op, event, row)Panel_item item;char *string;Xv_opaque client_data;Panel_list_op op;Event *event;int row;{ char *insert; if (op != 1) /* only operate on select */ return; insert = (char *)malloc(strlen(string) + 5); sprintf(insert, "_%s ", string); if (debug_level) Fprintf(stderr, "Inserting var string: %s\n", insert); textsw_insert(textwin, insert, strlen(string) + 2);}static void insert_op(item, string, client_data, op, event, row)Panel_item item;char *string;Xv_opaque client_data;Panel_list_op op;Event *event;int row;{ char *insert; int obtype = xv_get(objNameType, PANEL_VALUE); if (op != 1) /* only operate on select */ return; if (obtype == 0) { insert = (char *) malloc(strlen(string) + 10); sprintf(insert, "#%s ", string); } else if (obtype == 1) { insert = (char *) malloc(strlen("_name") + strlen(string) + 10); sprintf(insert, "#_name %s ", string); } else { char *objname = (char *) xv_get(objNameStr, PANEL_VALUE); insert = (char *) malloc(strlen(objname) + strlen(string) + 10); sprintf(insert, "#%s %s ", objname, string); } if (debug_level) Fprintf(stderr, "Inserting %s\n", insert); textsw_insert(textwin, insert, strlen(insert)); free(insert); /* rewrite the op attributes */ revise_op_attr(string);}static void revise_op_attr(operation) char *operation;{ static int last_attr = 0; /* row number of last attribute */ int i; char **new_attr = NULL; xv_set(attrlist, XV_SHOW, FALSE, NULL); for (i = last_attr; i > 0; i--) { xv_set(attrlist, PANEL_LIST_DELETE, i, NULL); } if (Gparams->get_attr_list != NULL) { if((new_attr = (Gparams->get_attr_list)(operation))) { for (last_attr=0; new_attr[last_attr] != NULL; last_attr++) { xv_set(attrlist, PANEL_LIST_STRING, last_attr, savestring(new_attr[last_attr]), NULL); } } xv_set(attrlist, XV_SHOW, TRUE, NULL); free_string_list(new_attr); }}static void insert_attr(item, string, client_data, op, event, row)Panel_item item;char *string;Xv_opaque client_data;Panel_list_op op;Event *event;int row;{ char *insert; if (op != 1) /* only operate on select */ return; insert = (char *)malloc(strlen(string) + 5); sprintf(insert, "%s ", string); if (debug_level) Fprintf(stderr, "Inserting attribute string: %s\n", insert); textsw_insert(textwin, insert, strlen(string) + 1);}static void insert_gOut(item, event)Panel_item item;Event *event;{ char *base = "out.g."; char *ext = (char *) xv_get(gOutExt, PANEL_VALUE); char *insert = (char *) malloc(strlen(base) + strlen(ext) + 10); sprintf(insert, "_%s%s ", base, ext); if (debug_level) Fprintf(stderr, "Inserting %s\n", insert); textsw_insert(textwin, insert, strlen(insert));}static void insert_tOut(item, event)Panel_item item;Event *event;{ char *base = "out.t."; char *ext = (char *) xv_get(tOutExt, PANEL_VALUE); char *insert = (char *) malloc(strlen(base) + strlen(ext) + 10); sprintf(insert, "_%s%s ", base, ext); if (debug_level) Fprintf(stderr, "Inserting %s\n", insert); textsw_insert(textwin, insert, strlen(insert));}static void insert_nOut(item, event)Panel_item item;Event *event;{ char *base = "out.n."; char *ext = (char *) xv_get(gOutExt, PANEL_VALUE); char *insert = (char *) malloc(strlen(base) + strlen(ext) + 10); sprintf(insert, "_%s%s ", base, ext); if (debug_level) Fprintf(stderr, "Inserting %s\n", insert); textsw_insert(textwin, insert, strlen(insert));}static void apply_addop(item, event)Panel_item item;Event *event;{ char *menu; int menu_type = xv_get(windows, PANEL_VALUE); int ncom_char = xv_get(textwin, TEXTSW_LENGTH); char *command = (char *)malloc(ncom_char + 10); char *op = (char *) xv_get(opName, PANEL_VALUE); char *full_command; if (ncom_char == 0) { (void) notice_prompt(addop_win, (Event *) NULL, NOTICE_BLOCK_THREAD, FALSE, NOTICE_MESSAGE_STRINGS, savestring("The command window has nothing in it!"), NULL,/* NOTICE_FOCUS_XY, xv_get(addop_win, XV_X), xv_get(addop_win, XV_Y),*/ NOTICE_BUTTON_YES, "Continue", NULL); return; } if (strlen(op) == 0) { (void) notice_prompt(addop_win, (Event *) NULL, NOTICE_BLOCK_THREAD, FALSE, NOTICE_MESSAGE_STRINGS, savestring("There's no operation name!"), NULL,/* NOTICE_FOCUS_XY, xv_get(addop_win, XV_X), xv_get(addop_win, XV_Y),*/ NOTICE_BUTTON_YES, "Continue", NULL); return; } if(debug_level) Fprintf(stderr, "menu_type = %d\n", menu_type); switch(menu_type) { case 0: /* none (not on a menu) */ menu = "none"; break; case 1: /* waveform only */ menu = "wave"; break; case 2: /* image only */ menu = "spect"; break; case 3: menu = "all"; break; } if ((Textsw_index) xv_get(textwin, TEXTSW_CONTENTS, 0, command, ncom_char) != ncom_char) { Fprintf(stderr, "Error getting textsw contents.\n"); } else command[ncom_char] = '\0'; full_command = (char *) malloc(ncom_char + strlen(op) + 100); if (strchr(op, ' ') == NULL) sprintf(full_command, "%add_op name %s menu %s command %s\n", op, menu, command); else sprintf(full_command, "%add_op name \"%s\" menu %s command %s\n", op, menu, command); if (debug_level) Fprintf(stderr, "Applying the command:\n%s\n", full_command); if (Gparams->apply_add_op) { if (Gparams->apply_add_op(full_command) != 1) (void) notice_prompt(addop_win, (Event *) NULL, NOTICE_BLOCK_THREAD, FALSE, NOTICE_MESSAGE_STRINGS, savestring("add_op failed."), NULL,/* NOTICE_FOCUS_XY, xv_get(addop_win, XV_X), xv_get(addop_win, XV_Y),*/ NOTICE_BUTTON_YES, "Continue", NULL); } free(full_command); free(command);}static void add_op_help(item, event)Panel_item item;Event *event;{ if (debug_level) Fprintf(stderr, "Getting help.\n"); exv_make_text_window(addop_win, "Help for add_op op", "Help", helpfile, 1, 0);}static void select_object_name(item, value, event)Panel_item item;int value;Event *event;{ if (value < 2) { xv_set(objNameStr, PANEL_INACTIVE, TRUE, NULL); } else { xv_set(objNameStr, PANEL_INACTIVE, FALSE, NULL); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -