/* zoom/pan related controls */ #include #include #include #include #include #include #include #include #include #include #include #include #include "robot.h" Frame zoom_frame; int i; Server_image pan_image[4]; unsigned short pan_right_bits[] = { #include "pan_right.h" }; unsigned short pan_left_bits[] = { #include "pan_left.h" }; unsigned short pan_up_bits[] = { #include "pan_up.h" }; unsigned short pan_down_bits[] = { #include "pan_down.h" }; #define N_SWITCHES 6 Panel_item zoom_control[N_SWITCHES]; Panel_item zoom_range; Panel_item pan_range; /* Panel_item reset_button; Panel_item cursor_button; */ static char *labels[] = { "Zoom In", "Zoom Out", "Pan Left", "Pan Right", "Pan Down", "Pan Up" }; static char *instructions[] = { "ZoomIn", "ZoomOut", "PanLeft", "PanRight", "PanDown", "PanUp" }; void zoom_proc(item, value, event) Panel_item item; int value; Event *event; { i = (int) xv_get(item, PANEL_CLIENT_DATA); strcpy(inst, instructions[i]); to_robot(); } void zoom_range_proc(item, value, event) Panel_item item; int value; Event *event; { sprintf(inst, "ZOOMVALUE %d", (int) xv_get(zoom_range, PANEL_VALUE)); to_robot(); } void pan_range_proc(item, value, event) Panel_item item; int value; Event *event; { sprintf(inst, "PANVALUE %d", (int) xv_get(pan_range, PANEL_VALUE)); to_robot(); } void reset_proc(item, value, event) Panel_item item; int value; Event *event; { sprintf(inst, "RESCALE; N; G"); to_robot(); } void cursor_proc(item, value, event) Panel_item item; int value; Event *event; { sprintf(inst, "DFLIMITS; N; G"); to_robot(); } void make_zoom_frame(frame) Frame frame; { pan_image[0] = (Server_image) xv_create(XV_NULL, SERVER_IMAGE, XV_WIDTH, 16, XV_HEIGHT, 16, SERVER_IMAGE_BITS, pan_left_bits, NULL); pan_image[1] = (Server_image) xv_create(XV_NULL, SERVER_IMAGE, XV_WIDTH, 16, XV_HEIGHT, 16, SERVER_IMAGE_BITS, pan_right_bits, NULL); pan_image[2] = (Server_image) xv_create(XV_NULL, SERVER_IMAGE, XV_WIDTH, 16, XV_HEIGHT, 16, SERVER_IMAGE_BITS, pan_down_bits, NULL); pan_image[3] = (Server_image) xv_create(XV_NULL, SERVER_IMAGE, XV_WIDTH, 16, XV_HEIGHT, 16, SERVER_IMAGE_BITS, pan_up_bits, NULL); zoom_frame = xv_create(frame, FRAME_CMD, FRAME_LABEL, "Robot: Zoom/Pan Controls", FRAME_CMD_PUSHPIN_IN, TRUE, /* FRAME_SHOW_FOOTER, TRUE, */ NULL); zoom_panel = xv_get(zoom_frame, FRAME_CMD_PANEL); xv_set(zoom_panel, PANEL_LAYOUT, PANEL_HORIZONTAL, NULL); /* Do zoom stuff first */ for (i = 0; i < 2; i++){ zoom_control[i] = xv_create(zoom_panel, PANEL_BUTTON, XV_HELP_DATA, helper(labels[i]), PANEL_LABEL_STRING, labels[i], PANEL_NOTIFY_PROC, zoom_proc, PANEL_CLIENT_DATA, i, NULL); } xv_set(zoom_panel, PANEL_LAYOUT, PANEL_VERTICAL, NULL); zoom_range = xv_create(zoom_panel, PANEL_SLIDER, PANEL_VALUE_DISPLAY_LENGTH, 6, PANEL_LABEL_STRING, "Zoom Value (%)", PANEL_SLIDER_END_BOXES, TRUE, PANEL_MAX_VALUE, 50, PANEL_NOTIFY_PROC, zoom_range_proc, XV_HELP_DATA, "robot:zoom_range", PANEL_TICKS, 6, /* PANEL_NEXT_COL, -1, */ NULL); /* Now for pan controls */ for (i = 2; i < N_SWITCHES; i++){ if(i > 2) xv_set(zoom_panel, PANEL_LAYOUT, PANEL_HORIZONTAL, NULL); zoom_control[i] = xv_create(zoom_panel, PANEL_BUTTON, XV_HELP_DATA, helper(labels[i]), PANEL_LABEL_STRING, labels[i], PANEL_NOTIFY_PROC, zoom_proc, PANEL_CLIENT_DATA, i, NULL); /* for this loop i always > 2, however, once combined all zoom_controls * into one loop and might even do that again one day */ if(i >= 2){ xv_set(zoom_control[i], PANEL_LABEL_IMAGE, pan_image[i-2], NULL); } } xv_set(zoom_panel, PANEL_LAYOUT, PANEL_VERTICAL, NULL); pan_range = xv_create(zoom_panel, PANEL_SLIDER, PANEL_VALUE_DISPLAY_LENGTH, 6, PANEL_LABEL_STRING, "Pan Value (%)", PANEL_SLIDER_END_BOXES, TRUE, PANEL_MAX_VALUE, 50, PANEL_NOTIFY_PROC, pan_range_proc, XV_HELP_DATA, "robot:pan_range", PANEL_TICKS, 6, /* XV_Y, xv_get(zoom_control[2], XV_Y), */ PANEL_VALUE_X, xv_get(zoom_range, PANEL_VALUE_X), NULL); /* Buttons for cursor selection (dflimits) and reset */ xv_create(zoom_panel, PANEL_BUTTON, XV_HELP_DATA, "robot:cursor_button", PANEL_LABEL_STRING, "Use Cursor", PANEL_NOTIFY_PROC, cursor_proc, NULL); xv_set(zoom_panel, PANEL_LAYOUT, PANEL_HORIZONTAL, NULL); xv_create(zoom_panel, PANEL_BUTTON, XV_HELP_DATA, "robot:reset_button", PANEL_LABEL_STRING, "Full Range", PANEL_NOTIFY_PROC, reset_proc, NULL); if(not_open_look){ xv_create(zoom_panel, PANEL_BUTTON, XV_HELP_DATA, "robot:dismiss", PANEL_LABEL_STRING, DISMISS, PANEL_NOTIFY_PROC, hide_me, NULL); } window_fit(zoom_panel); window_fit(zoom_frame); } void show_zoom() { xv_set(zoom_frame, XV_SHOW, TRUE, FRAME_CMD_PUSHPIN_IN, TRUE, NULL); } /* routines to make sure sliders have correct values */ void spr_(value) double *value; { i = (int) *value; if(i != (int) xv_get(pan_range, PANEL_VALUE)) xv_set(pan_range, PANEL_VALUE, i, NULL); } void szr_(value) double *value; { i = (int) *value; if(i != (int) xv_get(zoom_range, PANEL_VALUE)) xv_set(zoom_range, PANEL_VALUE, i, NULL); }