diff options
Diffstat (limited to 'support/hypertex/tanmoy/ghostview-1.5-hacked/actions.c')
-rw-r--r-- | support/hypertex/tanmoy/ghostview-1.5-hacked/actions.c | 512 |
1 files changed, 512 insertions, 0 deletions
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/actions.c b/support/hypertex/tanmoy/ghostview-1.5-hacked/actions.c new file mode 100644 index 0000000000..1cdf1af728 --- /dev/null +++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/actions.c @@ -0,0 +1,512 @@ +/* + * actions.c -- X11 actions for ghostview. + * Copyright (C) 1992 Timothy O. Theisen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Author: Tim Theisen Systems Programmer + * Internet: tim@cs.wisc.edu Department of Computer Sciences + * UUCP: uwvax!tim University of Wisconsin-Madison + * Phone: (608)262-0438 1210 West Dayton Street + * FAX: (608)262-9777 Madison, WI 53706 + */ +/* This file is part of the hacked version of the ghostview package */ +/* which is distributed under the terms of the gnu license. The */ +/* modification referred to above is by Tanmoy Bhattacharya, */ +/* <tanmoy@qcd.lanl.gov> on Nov 17, 1994. Neither the modification, */ +/* nor the original program provides any warranty. */ + +#include <X11/Intrinsic.h> +#include <X11/StringDefs.h> +#include <X11/Xaw/Cardinals.h> +#include <X11/Xaw/Scrollbar.h> +#include "gv.h" +#include "ps.h" + +/* Popup the copyright window */ +void +gv_copyright(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + popup(w, (XtPointer)copyrightpopup, NULL); +} + +/* Call the quit callback to stop ghostview */ +void +gv_quit(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + quit_ghostview(w, NULL, NULL); +} + +/* Popup the open file dialog box. */ +void +gv_open(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + popup_dialog(w, (XtPointer)OPEN, NULL); +} + +/* Popup the open file dialog box. */ +void +gv_reopen(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + if (!XtIsSensitive(reopenbutton)) return; + reopen_file(w, NULL, NULL); +} + +/* Popup the save file dialog box. */ +void +gv_save(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + if (!XtIsSensitive(savebutton)) return; + popup_dialog(w, (XtPointer)SAVE, NULL); +} + +/* Popup the print file dialog box. */ +void +gv_print_whole(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + if (!XtIsSensitive(printwholebutton)) return; + popup_dialog(w, (XtPointer)PRINT_WHOLE, NULL); +} + +/* Popup the print file dialog box. */ +void +gv_print_marked(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + if (!XtIsSensitive(printmarkedbutton)) return; + popup_dialog(w, (XtPointer)PRINT_MARKED, NULL); +} + +/* Call the prev_page callback */ +void +gv_prev(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + if (!XtIsSensitive(prevbutton)) return; + prev_page(w, NULL, NULL); +} + +/* Call the this_page callback */ +void +gv_show(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + if (!XtIsSensitive(showbutton)) return; + this_page(w, NULL, NULL); +} + +/* Call the next_page callback */ +void +gv_next(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + if (!XtIsSensitive(nextbutton)) return; + next_page(w, NULL, NULL); +} + +/* Call the center_page callback */ +void +gv_center(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + if (!XtIsSensitive(centerbutton)) return; + center_page(w, NULL, NULL); +} + +/* Call the mark_page callback */ +void +gv_mark(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + if (!XtIsSensitive(markbutton)) return; + mark_page(w, NULL, NULL); +} + +/* Call the unmark_page callback */ +void +gv_unmark(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + if (!XtIsSensitive(unmarkbutton)) return; + unmark_page(w, NULL, NULL); +} + +/* Get the magstep from the parameter string and + * call the set_magstep callback with that magstep */ +void +gv_set_magstep(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + int i; + + if (*num_params < 1) return; + i = atoi(params[0]); + set_magstep(w, (XtPointer)i, NULL); +} + +/* Increment the magstep and + * call the set_magstep callback with that magstep */ +void +gv_increase_magstep(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + int i; + + i = app_res.magstep + 1; + if (i <= app_res.maximum_magstep) + set_magstep(w, (XtPointer)i, NULL); +} + +/* Decrement the magstep and + * call the set_magstep callback with that magstep */ +void +gv_decrease_magstep(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + int i; + + i = app_res.magstep - 1; + if (i >= app_res.minimum_magstep) + set_magstep(w, (XtPointer)i, NULL); +} + +/* Set orientation action routine. Converts text parameter + * to XtPageOrientation and all set_orientation callback */ +void +gv_set_orientation(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + XrmValue from, to; + XtPageOrientation orient; + + if (*num_params < 1) return; + from.size = sizeof(String); + from.addr = params[0]; + to.size = 0; + to.addr = NULL; + if (XmuCvtStringToPageOrientation(XtDisplay(w), NULL, ZERO, + &from, &to, NULL)) { + orient = *(XtPageOrientation *)(to.addr); + set_orientation(w, (XtPointer)orient, NULL); + } +} + +/* Call the swap_landscape callback */ +void +gv_swap_landscape(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + swap_landscape(w, NULL, NULL); +} + +/* Set pagemedia action routine. Converts text parameter + * to index into the pagemedia widgets and calls the set_pagemedia + * callback. */ +void +gv_set_pagemedia(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + int i; + + if (*num_params < 1) return; + + /* First check pagemedia defined within the document */ + if (doc && doc->nummedia) { + for (i = 0; i < doc->nummedia; i++) { + if (!strcmp(params[0], doc->media[i].name)) { + set_pagemedia(w, (XtPointer)i, NULL); + break; + } + } + } + + /* Then check the standard ones */ + for (i = 0; papersizes[i].name; i++) { + if (!strcmp(params[0], papersizes[i].name)) { + set_pagemedia(w, (XtPointer)(base_papersize+i), NULL); + break; + } + } +} + + +/* Reset the force flag. */ +/* (force flag is checked when setting orientaion and pagemedia) */ +void +gv_default(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + force_setting = False; +} + +/* Set the force flag. */ +/* (force flag is checked when setting orientaion and pagemedia) */ +void +gv_force(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + force_setting = True; +} + +/* Implement WM_DELETE_WINDOW protocol */ +void +gv_delete_window(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + if (event->type == ClientMessage && + event->xclient.data.l[0] != wm_delete_window) return; + XtDestroyWidget(w); +} + + +/* Destroy popup zoom window */ +void +gv_delete_zoom(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + XtDestroyWidget(XtParent(w)); +} + +/* dismiss a popup window */ +void +gv_dismiss(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + XtPopdown(w); + if (w == infopopup) info_up = False; +} + +/* scroll main viewport up */ +void +gv_scroll_up(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + Arg args[2]; + Widget scroll; + float top, shown; + + scroll = XtNameToWidget(pageview, "vertical"); + if (scroll) { + XtSetArg(args[0], XtNshown, &shown); + XtSetArg(args[1], XtNtopOfThumb, &top); + XtGetValues(scroll, args, TWO); + + top = top - shown; + if (top < 0.0) top = 0.0; + XtCallCallbacks(scroll, XtNjumpProc, &top); + } +} + +/* scroll main viewport down */ +void +gv_scroll_down(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + Arg args[2]; + Widget scroll; + float top, shown; + + scroll = XtNameToWidget(pageview, "vertical"); + if (scroll) { + XtSetArg(args[0], XtNshown, &shown); + XtSetArg(args[1], XtNtopOfThumb, &top); + XtGetValues(scroll, args, TWO); + + top = top + shown; + if (top > (1.0 - shown)) top = (1.0 - shown); + XtCallCallbacks(scroll, XtNjumpProc, &top); + } +} + +/* scroll main viewport left */ +void +gv_scroll_left(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + Arg args[2]; + Widget scroll; + float top, shown; + + scroll = XtNameToWidget(pageview, "horizontal"); + if (scroll) { + XtSetArg(args[0], XtNshown, &shown); + XtSetArg(args[1], XtNtopOfThumb, &top); + XtGetValues(scroll, args, TWO); + + top = top - shown; + if (top < 0.0) top = 0.0; + XtCallCallbacks(scroll, XtNjumpProc, &top); + } +} + +/* scroll main viewport right */ +void +gv_scroll_right(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + Arg args[2]; + Widget scroll; + float top, shown; + + scroll = XtNameToWidget(pageview, "horizontal"); + if (scroll) { + XtSetArg(args[0], XtNshown, &shown); + XtSetArg(args[1], XtNtopOfThumb, &top); + XtGetValues(scroll, args, TWO); + + top = top + shown; + if (top > (1.0 - shown)) top = (1.0 - shown); + XtCallCallbacks(scroll, XtNjumpProc, &top); + } +} + +/* Pop down locator window */ +void +gv_erase_locator(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + Arg args[1]; + + if (!app_res.show_locator) return; + XtSetArg(args[0], XtNlabel, ""); + XtSetValues(locator, args, ONE); +} + +/* Check to see if file was updated */ +void +gv_check_file(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + struct stat sbuf; + + if (psfile) { + if (!stat(filename, &sbuf) && mtime != sbuf.st_mtime) { + show_page(current_page); + } + } +} + +void +gv_back(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; +{ + extern int pagehistory[], pageindex; + if (pageindex>0) + show_page(pagehistory[--pageindex]); + else + gv_prev(w, event, params, num_params); + + XtSetSensitive(backbutton, pageindex>0); + return; +} |