/* * $XConsortium: viewfuncs.c,v 2.23 92/04/08 12:18:41 rws Exp $ * * * COPYRIGHT 1987, 1989 * DIGITAL EQUIPMENT CORPORATION * MAYNARD, MASSACHUSETTS * ALL RIGHTS RESERVED. * * THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND * SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. * DIGITAL MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE FOR * ANY PURPOSE. IT IS SUPPLIED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. * * IF THE SOFTWARE IS MODIFIED IN A MANNER CREATING DERIVATIVE COPYRIGHT * RIGHTS, APPROPRIATE LEGENDS MAY BE PLACED ON THE DERIVATIVE WORK IN * ADDITION TO THAT SET FORTH ABOVE. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Digital Equipment Corporation not be * used in advertising or publicity pertaining to distribution of the software * without specific, written prior permission. */ /* view.c -- action procedures to handle viewing of a message */ #include "xmh.h" /*ARGSUSED*/ void DoCloseView(widget, client_data, call_data) Widget widget; /* unused */ XtPointer client_data; XtPointer call_data; /* unused */ { Scrn scrn = (Scrn) client_data; XtCallbackRec confirms[2]; confirms[0].callback = DoCloseView; confirms[0].closure = (XtPointer) scrn; confirms[1].callback = (XtCallbackProc) NULL; confirms[1].closure = (XtPointer) NULL; if (MsgSetScrn((Msg) NULL, scrn, confirms, (XtCallbackList) NULL) == NEEDS_CONFIRMATION) return; DestroyScrn(scrn); } /*ARGSUSED*/ void XmhCloseView(w, event, params, num_params) Widget w; XEvent *event; String *params; Cardinal *num_params; { Scrn scrn = ScrnFromWidget(w); DoCloseView(w, (XtPointer) scrn, (XtPointer) NULL); } void DoViewReplyMsg(scrn, params, num_params) Scrn scrn; String *params; Cardinal num_params; { Msg msg; Scrn nscrn; if (scrn->msg == NULL) return; nscrn = NewCompScrn(); ScreenSetAssocMsg(nscrn, scrn->msg); msg = TocMakeNewMsg(DraftsFolder); MsgSetTemporary(msg); MsgLoadReply(msg, scrn->msg, params, num_params); MsgSetScrnForComp(msg, nscrn); MapScrn(nscrn); } /*ARGSUSED*/ void DoViewReply(w, client_data, call_data) Widget w; XtPointer client_data; XtPointer call_data; { DoViewReplyMsg((Scrn) client_data, (String *)NULL, (Cardinal)0); } /*ARGSUSED*/ void XmhViewReply(w, event, params, num_params) Widget w; XEvent *event; String *params; Cardinal *num_params; { Scrn scrn = ScrnFromWidget(w); DoViewReplyMsg(scrn, params, *num_params); } /*ARGSUSED*/ void DoViewForwardMsg(scrn, params, num_params) Scrn scrn; String *params; Cardinal num_params; { MsgList mlist; if (scrn->msg == NULL) return; mlist = MakeSingleMsgList(scrn->msg); CreateForward(mlist, params, num_params); FreeMsgList(mlist); } /*ARGSUSED*/ void DoViewForward(w, client_data, call_data) Widget w; XtPointer client_data; XtPointer call_data; { DoViewForwardMsg((Scrn) client_data, (String *)NULL, (Cardinal)0); } /*ARGSUSED*/ void XmhViewForward(w, event, params, num_params) Widget w; XEvent *event; String *params; Cardinal *num_params; { DoViewForwardMsg(ScrnFromWidget(w), params, *num_params); } /*ARGSUSED*/ void DoViewUseAsComposition(w, client_data, call_data) Widget w; XtPointer client_data; XtPointer call_data; { Scrn scrn = (Scrn) client_data; Msg msg; Scrn nscrn; if (scrn->msg == NULL) return; nscrn = NewCompScrn(); if (MsgGetToc(scrn->msg) == DraftsFolder) msg = scrn->msg; else { msg = TocMakeNewMsg(DraftsFolder); MsgLoadCopy(msg, scrn->msg); MsgSetTemporary(msg); } MsgSetScrnForComp(msg, nscrn); MapScrn(nscrn); } /*ARGSUSED*/ void XmhViewUseAsComposition(w, event, params, num_params) Widget w; XEvent *event; String *params; Cardinal *num_params; { Scrn scrn = ScrnFromWidget(w); DoViewUseAsComposition(w, (XtPointer) scrn, (XtPointer) NULL); } /*ARGSUSED*/ void DoEditView(w, client_data, call_data) Widget w; XtPointer client_data; XtPointer call_data; { Scrn scrn = (Scrn) client_data; Arg args[1]; XtTranslations editTranslations = scrn->edit_translations; if (scrn->msg == NULL) return; XtSetArg(args[0], XtNtranslations, editTranslations); XtSetValues(scrn->viewwidget, args, (Cardinal) 1); MsgSetEditable(scrn->msg); } /*ARGSUSED*/ void XmhEditView(w, event, params, num_params) Widget w; XEvent *event; String *params; Cardinal *num_params; { Scrn scrn = ScrnFromWidget(w); if (scrn->msg != NULL && ! MsgGetEditable(scrn->msg)) DoEditView(w, (XtPointer) scrn, (XtPointer) NULL); } /*ARGSUSED*/ void DoSaveView(w, client_data, call_data) Widget w; XtPointer client_data; XtPointer call_data; { Scrn scrn = (Scrn) client_data; Arg args[2]; if (scrn->msg == NULL) return; if (MsgSaveChanges(scrn->msg)) { XtSetArg(args[0], XtNtranslations, scrn->read_translations); XtSetValues(scrn->viewwidget, args, (Cardinal) 1); MsgClearEditable(scrn->msg); } } /*ARGSUSED*/ void XmhSaveView(w, event, params, num_params) Widget w; XEvent *event; String *params; Cardinal *num_params; { Scrn scrn = ScrnFromWidget(w); if (MsgChanged(scrn->msg) || MsgGetReapable(scrn->msg)) DoSaveView(w, (XtPointer) scrn, (XtPointer) NULL); } /*ARGSUSED*/ void DoPrintView(w, client_data, call_data) Widget w; XtPointer client_data; XtPointer call_data; { Scrn scrn = (Scrn) client_data; char **argv; char str[200]; if (! scrn->msg) return; (void) sprintf(str, "%s %s", app_resources.print_command, MsgFileName(scrn->msg)); argv = MakeArgv(3); argv[0] = "/bin/sh"; argv[1] = "-c"; /* commands are read from the next argument */ argv[2] = str; (void) DoCommand(argv, (char*)NULL, (char*)NULL); /* a "notice" popup should appear with any stderr output */ XtFree((char*)argv); } /*ARGSUSED*/ void XmhPrintView(w, event, params, num_params) Widget w; XEvent *event; String *params; Cardinal *num_params; { Scrn scrn = ScrnFromWidget(w); DoPrintView(w, (XtPointer) scrn, (XtPointer) NULL); } /*ARGSUSED*/ void XmhViewMarkDelete(w, event, params, num_params) Widget w; XEvent *event; String *params; Cardinal *num_params; { Scrn scrn = ScrnFromWidget(w); if (scrn->msg == NULL) return; MsgSetFate(scrn->msg, Fdelete, (Toc)NULL); }