Files
xsrc/external/mit/xmh/dist/viewfuncs.c

287 lines
6.3 KiB
C

/*
* $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.
*/
/* $XFree86$ */
/* view.c -- action procedures to handle viewing of a message */
#include "xmh.h"
#include "actions.h"
/*ARGSUSED*/
void DoCloseView(
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(
Widget w,
XEvent *event,
String *params,
Cardinal *num_params)
{
Scrn scrn = ScrnFromWidget(w);
DoCloseView(w, (XtPointer) scrn, (XtPointer) NULL);
}
static void DoViewReplyMsg(
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(
Widget w,
XtPointer client_data,
XtPointer call_data)
{
DoViewReplyMsg((Scrn) client_data, (String *)NULL, (Cardinal)0);
}
/*ARGSUSED*/
void XmhViewReply(
Widget w,
XEvent *event,
String *params,
Cardinal *num_params)
{
Scrn scrn = ScrnFromWidget(w);
DoViewReplyMsg(scrn, params, *num_params);
}
/*ARGSUSED*/
static void DoViewForwardMsg(
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(
Widget w,
XtPointer client_data,
XtPointer call_data)
{
DoViewForwardMsg((Scrn) client_data, (String *)NULL, (Cardinal)0);
}
/*ARGSUSED*/
void XmhViewForward(
Widget w,
XEvent *event,
String *params,
Cardinal *num_params)
{
DoViewForwardMsg(ScrnFromWidget(w), params, *num_params);
}
/*ARGSUSED*/
void DoViewUseAsComposition(
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(
Widget w,
XEvent *event,
String *params,
Cardinal *num_params)
{
Scrn scrn = ScrnFromWidget(w);
DoViewUseAsComposition(w, (XtPointer) scrn, (XtPointer) NULL);
}
/*ARGSUSED*/
void DoEditView(
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(
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(
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(
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(
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(
Widget w,
XEvent *event,
String *params,
Cardinal *num_params)
{
Scrn scrn = ScrnFromWidget(w);
DoPrintView(w, (XtPointer) scrn, (XtPointer) NULL);
}
/*ARGSUSED*/
void XmhViewMarkDelete(
Widget w,
XEvent *event,
String *params,
Cardinal *num_params)
{
Scrn scrn = ScrnFromWidget(w);
if (scrn->msg == NULL) return;
MsgSetFate(scrn->msg, Fdelete, (Toc)NULL);
}