source: trunk/third/xmh/viewfuncs.c @ 9661

Revision 9661, 6.4 KB checked in by ghudson, 28 years ago (diff)
MsgSaveChanges takes an extra argument now; no change in behavior.
Line 
1/*
2 * $XConsortium: viewfuncs.c,v 2.22 91/07/17 21:25:48 converse Exp $
3 *
4 *
5 *                     COPYRIGHT 1987, 1989
6 *                 DIGITAL EQUIPMENT CORPORATION
7 *                     MAYNARD, MASSACHUSETTS
8 *                      ALL RIGHTS RESERVED.
9 *
10 * THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND
11 * SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
12 * DIGITAL MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE FOR
13 * ANY PURPOSE.  IT IS SUPPLIED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
14 *
15 * IF THE SOFTWARE IS MODIFIED IN A MANNER CREATING DERIVATIVE COPYRIGHT
16 * RIGHTS, APPROPRIATE LEGENDS MAY BE PLACED ON THE DERIVATIVE WORK IN
17 * ADDITION TO THAT SET FORTH ABOVE.
18 *
19 * Permission to use, copy, modify, and distribute this software and its
20 * documentation for any purpose and without fee is hereby granted, provided
21 * that the above copyright notice appear in all copies and that both that
22 * copyright notice and this permission notice appear in supporting
23 * documentation, and that the name of Digital Equipment Corporation not be
24 * used in advertising or publicity pertaining to distribution of the software
25 * without specific, written prior permission.
26 */
27
28/* view.c -- action procedures to handle viewing of a message */
29
30#include "xmh.h"
31
32
33/*ARGSUSED*/
34void DoCloseView(widget, client_data, call_data)
35    Widget      widget;         /* unused */
36    XtPointer   client_data;
37    XtPointer   call_data;      /* unused */
38{
39    Scrn scrn = (Scrn) client_data;
40    XtCallbackRec       confirms[2];
41
42    confirms[0].callback = DoCloseView;
43    confirms[0].closure = (XtPointer) scrn;
44    confirms[1].callback = (XtCallbackProc) NULL;
45    confirms[1].closure = (XtPointer) NULL;
46   
47    if (MsgSetScrn((Msg) NULL, scrn, confirms, (XtCallbackList) NULL) ==
48        NEEDS_CONFIRMATION)
49        return;
50    DestroyScrn(scrn);
51}
52   
53
54/*ARGSUSED*/
55void XmhCloseView(w, event, params, num_params)
56    Widget      w;
57    XEvent      *event;
58    String      *params;
59    Cardinal    *num_params;
60{
61    Scrn scrn = ScrnFromWidget(w);
62    DoCloseView(w, (XtPointer) scrn, (XtPointer) NULL);
63}
64
65
66/*ARGSUSED*/
67void DoViewReply(w, client_data, call_data)
68    Widget      w;
69    XtPointer   client_data;
70    XtPointer   call_data;
71{
72    Scrn        scrn = (Scrn) client_data;
73    Msg         msg;
74    Scrn        nscrn;
75
76    if (scrn->msg == NULL) return;
77    nscrn = NewCompScrn();
78    ScreenSetAssocMsg(nscrn, scrn->msg);
79    msg = TocMakeNewMsg(DraftsFolder);
80    MsgSetTemporary(msg);
81    MsgLoadReply(msg, scrn->msg);
82    MsgSetScrnForComp(msg, nscrn);
83    MapScrn(nscrn);
84}
85
86
87
88/*ARGSUSED*/
89void XmhViewReply(w, event, params, num_params)
90    Widget      w;
91    XEvent      *event;
92    String      *params;
93    Cardinal    *num_params;
94{
95    Scrn scrn = ScrnFromWidget(w);
96    DoViewReply(w, (XtPointer) scrn, (XtPointer) NULL);
97}
98
99
100/*ARGSUSED*/
101void DoViewForward(w, client_data, call_data)
102    Widget      w;
103    XtPointer   client_data;
104    XtPointer   call_data;
105{
106    Scrn        scrn = (Scrn) client_data;
107    MsgList     mlist;
108
109    if (scrn->msg == NULL) return;
110    mlist = MakeSingleMsgList(scrn->msg);
111    CreateForward(mlist);
112    FreeMsgList(mlist);
113}
114
115/*ARGSUSED*/
116void XmhViewForward(w, event, params, num_params)
117    Widget      w;
118    XEvent      *event;
119    String      *params;
120    Cardinal    *num_params;
121{
122    Scrn scrn = ScrnFromWidget(w);
123    DoViewForward(w, (XtPointer) scrn, (XtPointer) NULL);
124}
125
126
127/*ARGSUSED*/
128void DoViewUseAsComposition(w, client_data, call_data)
129    Widget      w;
130    XtPointer   client_data;
131    XtPointer   call_data;
132{
133    Scrn        scrn = (Scrn) client_data;
134    Msg         msg;
135    Scrn        nscrn;
136
137    if (scrn->msg == NULL) return;
138    nscrn = NewCompScrn();
139    if (MsgGetToc(scrn->msg) == DraftsFolder)
140        msg = scrn->msg;
141    else {
142        msg = TocMakeNewMsg(DraftsFolder);
143        MsgLoadCopy(msg, scrn->msg);
144        MsgSetTemporary(msg);
145    }
146    MsgSetScrnForComp(msg, nscrn);
147    MapScrn(nscrn);
148}
149   
150
151/*ARGSUSED*/
152void XmhViewUseAsComposition(w, event, params, num_params)
153    Widget      w;
154    XEvent      *event;
155    String      *params;
156    Cardinal    *num_params;
157{
158    Scrn        scrn = ScrnFromWidget(w);
159    DoViewUseAsComposition(w, (XtPointer) scrn, (XtPointer) NULL);
160}
161
162
163/*ARGSUSED*/
164void DoEditView(w, client_data, call_data)
165    Widget      w;
166    XtPointer   client_data;
167    XtPointer   call_data;
168{
169    Scrn        scrn = (Scrn) client_data;
170    Arg         args[1];
171    XtTranslations editTranslations = scrn->edit_translations;
172
173    if (scrn->msg == NULL) return;
174    XtSetArg(args[0], XtNtranslations, editTranslations);
175    XtSetValues(scrn->viewwidget, args, (Cardinal) 1);
176    MsgSetEditable(scrn->msg);
177}
178
179
180/*ARGSUSED*/
181void XmhEditView(w, event, params, num_params)
182    Widget      w;
183    XEvent      *event;
184    String      *params;
185    Cardinal    *num_params;
186{
187    Scrn        scrn = ScrnFromWidget(w);
188    if (scrn->msg != NULL && ! MsgGetEditable(scrn->msg))
189        DoEditView(w, (XtPointer) scrn, (XtPointer) NULL);
190}
191
192
193/*ARGSUSED*/
194void DoSaveView(w, client_data, call_data)
195    Widget      w;
196    XtPointer   client_data;
197    XtPointer   call_data;
198{
199    Scrn        scrn = (Scrn) client_data;
200    Arg         args[2];
201
202    if (scrn->msg == NULL) return;
203    if (MsgSaveChanges(scrn->msg, 1)) {
204        XtSetArg(args[0], XtNtranslations, scrn->read_translations);
205        XtSetValues(scrn->viewwidget, args, (Cardinal) 1);
206        MsgClearEditable(scrn->msg);
207    }
208}
209
210
211/*ARGSUSED*/
212void XmhSaveView(w, event, params, num_params)
213    Widget      w;
214    XEvent      *event;
215    String      *params;
216    Cardinal    *num_params;
217{
218    Scrn        scrn = ScrnFromWidget(w);
219    if (MsgChanged(scrn->msg) || MsgGetReapable(scrn->msg))
220        DoSaveView(w, (XtPointer) scrn, (XtPointer) NULL);
221}
222
223
224/*ARGSUSED*/
225void DoPrintView(w, client_data, call_data)
226    Widget      w;
227    XtPointer   client_data;
228    XtPointer   call_data;
229{
230    Scrn        scrn = (Scrn) client_data;
231    char        **argv;
232    char        str[200];
233
234    if (! scrn->msg) return;
235    (void) sprintf(str, "%s %s", app_resources.print_command,
236                   MsgFileName(scrn->msg));
237    argv = MakeArgv(3);
238    argv[0] = "/bin/sh";
239    argv[1] = "-c";     /* commands are read from the next argument */
240    argv[2] = str;
241    (void) DoCommand(argv, (char*)NULL, (char*)NULL);
242    /* a "notice" popup should appear with any stderr output */
243    XtFree((char*)argv);
244}
245
246
247/*ARGSUSED*/
248void XmhPrintView(w, event, params, num_params)
249    Widget      w;
250    XEvent      *event;
251    String      *params;
252    Cardinal    *num_params;
253{
254    Scrn scrn = ScrnFromWidget(w);
255    DoPrintView(w, (XtPointer) scrn, (XtPointer) NULL);
256}
257
258
259/*ARGSUSED*/
260void XmhViewMarkDelete(w, event, params, num_params)
261    Widget      w;
262    XEvent      *event;
263    String      *params;
264    Cardinal    *num_params;
265{
266    Scrn scrn = ScrnFromWidget(w);
267    if (scrn->msg == NULL) return;
268    MsgSetFate(scrn->msg, Fdelete, (Toc)NULL);
269}
270
271
Note: See TracBrowser for help on using the repository browser.