/* * dialogs.c -- Dialog box 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 */ #include #include #include #include #include #include #include #include #include "gv.h" static String okay_accelerators = "#override\n\ Return: set() notify() unset()\n"; /* Create a dialog widget */ /* It is just a form widget with * a label prompt * a text response * an oky button * a cancel button */ Widget CreateDialog(parent, name, okay_callback, cancel_callback) Widget parent; String name; XtCallbackProc okay_callback; XtCallbackProc cancel_callback; { Widget form, prompt, response, okay, cancel; Arg args[20]; Cardinal num_args; form = XtCreateManagedWidget(name, formWidgetClass, parent, NULL, ZERO); num_args = 0; XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++; XtSetArg(args[num_args], XtNbottom, XtChainTop); num_args++; XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++; XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++; XtSetArg(args[num_args], XtNresizable, True); num_args++; XtSetArg(args[num_args], XtNborderWidth, 0); num_args++; prompt = XtCreateManagedWidget("prompt", labelWidgetClass, form, args, num_args); num_args = 0; XtSetArg(args[num_args], XtNfromVert, prompt); num_args++; XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++; XtSetArg(args[num_args], XtNbottom, XtChainTop); num_args++; XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++; XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++; XtSetArg(args[num_args], XtNresizable, True); num_args++; XtSetArg(args[num_args], XtNeditType, XawtextEdit); num_args++; XtSetArg(args[num_args], XtNresize, XawtextResizeWidth); num_args++; XtSetArg(args[num_args], XtNstring, ""); num_args++; response = XtCreateManagedWidget("response", asciiTextWidgetClass, form, args, num_args); num_args = 0; XtSetArg(args[num_args], XtNfromVert, response); num_args++; XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++; XtSetArg(args[num_args], XtNbottom, XtChainTop); num_args++; XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++; XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++; XtSetArg(args[num_args], XtNresizable, True); num_args++; XtSetArg(args[num_args], XtNaccelerators, XtParseAcceleratorTable(okay_accelerators)); num_args++; okay = XtCreateManagedWidget("okay", commandWidgetClass, form, args, num_args); XtAddCallback(okay, XtNcallback, okay_callback, form); num_args = 0; XtSetArg(args[num_args], XtNfromVert, response); num_args++; XtSetArg(args[num_args], XtNfromHoriz, okay); num_args++; XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++; XtSetArg(args[num_args], XtNbottom, XtChainTop); num_args++; XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++; XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++; XtSetArg(args[num_args], XtNresizable, True); num_args++; cancel = XtCreateManagedWidget("cancel", commandWidgetClass, form, args, num_args); XtAddCallback(cancel, XtNcallback, cancel_callback, parent); XtInstallAccelerators(response, okay); XtSetKeyboardFocus(form, response); return form; } /* get the prompt from the dialog box. Used a startup time to * save away the initial prompt */ String GetDialogPrompt(w) Widget w; { Arg args[1]; Widget label; String s; label = XtNameToWidget(w, "prompt"); XtSetArg(args[0], XtNlabel, &s); XtGetValues(label, args, ONE); return XtNewString(s); } /* set the prompt. This is used to put error information in the prompt */ void SetDialogPrompt(w, newprompt) Widget w; String newprompt; { Arg args[1]; Widget label; label = XtNameToWidget(w, "prompt"); XtSetArg(args[0], XtNlabel, newprompt); XtSetValues(label, args, ONE); } /* get what the user typed */ String GetDialogResponse(w) Widget w; { Arg args[1]; Widget response; String s; response = XtNameToWidget(w, "response"); XtSetArg(args[0], XtNstring, &s); XtGetValues(response, args, ONE); return XtNewString(s); } /* set the default reponse */ void SetDialogResponse(w, s) Widget w; String s; { Arg args[3]; Widget response; XFontStruct *font; Dimension width, leftMargin, rightMargin; response = XtNameToWidget(w, "response"); XtSetArg(args[0], XtNfont, &font); XtSetArg(args[1], XtNleftMargin, &leftMargin); XtSetArg(args[2], XtNrightMargin, &rightMargin); XtGetValues(response, args, THREE); width = font->max_bounds.width * strlen(s) + leftMargin + rightMargin; XtSetArg(args[0], XtNstring, s); XtSetArg(args[1], XtNwidth, width); XtSetValues(response, args, TWO); XawTextSetInsertionPoint(response, strlen(s)); } /* clear the response */ void ClearDialogResponse(w) Widget w; { Arg args[2]; Widget response; response = XtNameToWidget(w, "response"); XtSetArg(args[0], XtNstring, ""); XtSetArg(args[1], XtNwidth, 100); XtSetValues(response, args, TWO); }