#include "xmh.h"
#include "actions.h"
void DoCloseView(
Widget widget,
XtPointer client_data,
XtPointer call_data)
{
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);
}
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);
}
void DoViewReply(
Widget w,
XtPointer client_data,
XtPointer call_data)
{
DoViewReplyMsg((Scrn) client_data, (String *)NULL, (Cardinal)0);
}
void XmhViewReply(
Widget w,
XEvent *event,
String *params,
Cardinal *num_params)
{
Scrn scrn = ScrnFromWidget(w);
DoViewReplyMsg(scrn, params, *num_params);
}
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);
}
void DoViewForward(
Widget w,
XtPointer client_data,
XtPointer call_data)
{
DoViewForwardMsg((Scrn) client_data, (String *)NULL, (Cardinal)0);
}
void XmhViewForward(
Widget w,
XEvent *event,
String *params,
Cardinal *num_params)
{
DoViewForwardMsg(ScrnFromWidget(w), params, *num_params);
}
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);
}
void XmhViewUseAsComposition(
Widget w,
XEvent *event,
String *params,
Cardinal *num_params)
{
Scrn scrn = ScrnFromWidget(w);
DoViewUseAsComposition(w, (XtPointer) scrn, (XtPointer) NULL);
}
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);
}
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);
}
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);
}
}
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);
}
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";
argv[2] = str;
(void) DoCommand(argv, (char*)NULL, (char*)NULL);
XtFree((char*)argv);
}
void XmhPrintView(
Widget w,
XEvent *event,
String *params,
Cardinal *num_params)
{
Scrn scrn = ScrnFromWidget(w);
DoPrintView(w, (XtPointer) scrn, (XtPointer) NULL);
}
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);
}