1 /*
2 * popup.c - Xpipeman
3 *
4 * Send Constructive comments, bug reports, etc. to either
5 *
6 * JANET: pavern@uk.ac.man.cs
7 *
8 * or INER : pavern%cs.man.ac.uk@nsfnet-relay.ac.uk
9 *
10 * All other comments > /dev/null !!
11 *
12 * Copyright 1991 Nigel Paver
13 *
14 * Permission to use, copy, modify, distribute, and sell this software and its
15 * documentation for any purpose is hereby granted without fee, provided that
16 * the above copyright notice appear in all copies and that both that
17 * copyright notice and this permission notice appear in supporting
18 * documentation, and that the author's name not be used in advertising or
19 * publicity pertaining to distribution of the software without specific,
20 * written prior permission. The author makes no representations about the
21 * suitability of this software for any purpose. It is provided "as is"
22 * without express or implied warranty.
23 *
24 * THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
25 * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE
26 * AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
27 * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
28 * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
29 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
30 *
31 */
32
33 #include <X11/Intrinsic.h>
34 #include <X11/StringDefs.h>
35 #include <X11/Shell.h>
36
37 #ifdef R3
38 #include <X11/Box.h>
39 #include <X11/Command.h>
40 #include <X11/Label.h>
41 #else
42 #include <X11/Xaw/Box.h>
43 #include <X11/Xaw/Command.h>
44 #include <X11/Xaw/Label.h>
45 #endif
46
47 #include "xpipeman.h"
48
49
50
51 Widget game_over_popup,level_over_popup,nomore_popup;
52 int game_over_visible,level_over_visible,nomore_visible;
53
54 void
show_level_over_popup()55 show_level_over_popup()
56 {
57 level_over_visible=1;
58 XtPopup(level_over_popup, XtGrabNone);
59 }
60
61 void
level_over_popdown()62 level_over_popdown()
63 {
64 if (level_over_visible) XtPopdown(level_over_popup);
65 level_over_visible=0;
66
67 }
68
69 void
show_game_over_popup()70 show_game_over_popup()
71 {
72 game_over_visible=1;
73 XtPopup(game_over_popup, XtGrabNone);
74 }
75
76 void
game_over_popdown()77 game_over_popdown()
78 {
79 if (game_over_visible ) XtPopdown(game_over_popup);
80 game_over_visible=0;
81 }
82
83 void
show_nomore_popup()84 show_nomore_popup()
85 {
86 nomore_visible=1;
87 XtPopup(nomore_popup, XtGrabNone);
88 }
89
90 void
nomore_popdown()91 nomore_popdown()
92 {
93 if (nomore_visible) XtPopdown(nomore_popup);
94 nomore_visible=0;
95 }
96
97 void
all_popdown()98 all_popdown()
99 { /* remove all popups */
100 nomore_popdown();
101 game_over_popdown();
102 level_over_popdown();
103 }
104
105 static Arg arglist_game_over_label[] = {
106 { XtNborderWidth, (XtArgVal) 0 },
107 { XtNresize, (XtArgVal) False },
108 { XtNwidth, (XtArgVal) 320 },
109 { XtNheight, (XtArgVal) 50 },
110 { XtNlabel, (XtArgVal) "Game Over" },
111 { XtNjustify, (XtArgVal) XtJustifyCenter },
112 };
113
114 static Arg arglist_level_over_label[] = {
115 { XtNborderWidth, (XtArgVal) 0 },
116 { XtNresize, (XtArgVal) False },
117 { XtNwidth, (XtArgVal) 320 },
118 { XtNheight, (XtArgVal) 50 },
119 { XtNlabel, (XtArgVal) "Level Over" },
120 { XtNjustify, (XtArgVal) XtJustifyCenter },
121 };
122
123 static Arg arglist_nomore_label[] = {
124 { XtNborderWidth, (XtArgVal) 0 },
125 { XtNresize, (XtArgVal) False },
126 { XtNwidth, (XtArgVal) 320 },
127 { XtNheight, (XtArgVal) 50 },
128 { XtNlabel, (XtArgVal) "Sorry, No More Levels.." },
129 { XtNjustify, (XtArgVal) XtJustifyCenter },
130 };
131
132 static Arg arglist_continue_button[] = {
133 { XtNresize, (XtArgVal) False },
134 { XtNwidth, (XtArgVal) 320 },
135 { XtNlabel, (XtArgVal) "Press to Continue" },
136 { XtNjustify, (XtArgVal) XtJustifyCenter },
137 };
138
139 /*ARGSUSED*/
140 static XtCallbackProc
continue_callback(w,closure,call_data)141 continue_callback(w, closure, call_data)
142 Widget w;
143 caddr_t closure;
144 caddr_t call_data;
145 {
146 level_over_popdown();
147 start_new_level();
148 }
149
150 void
create_general_popups(parent)151 create_general_popups(parent)
152 Widget parent;
153 {
154 int i;
155 Widget info_msg, game_over_box,level_over_box,continue_button,nomore_box;
156 Arg wargs[1];
157 char *message;
158
159 game_over_popup = XtCreatePopupShell(
160 "game_over",
161 transientShellWidgetClass,
162 parent, 0,0);
163
164 game_over_box = XtCreateManagedWidget(
165 "game_over_box",
166 boxWidgetClass,
167 game_over_popup,
168 0,0);
169
170 (void)XtCreateManagedWidget(
171 "game_over_label",
172 labelWidgetClass,
173 game_over_box,
174 arglist_game_over_label,
175 XtNumber(arglist_game_over_label));
176
177
178
179 nomore_popup = XtCreatePopupShell(
180 "nomore",
181 transientShellWidgetClass,
182 parent, 0,0);
183
184 nomore_box = XtCreateManagedWidget(
185 "nomore_box",
186 boxWidgetClass,
187 nomore_popup,
188 0,0);
189
190 (void)XtCreateManagedWidget(
191 "nomore_label",
192 labelWidgetClass,
193 nomore_box,
194 arglist_nomore_label,
195 XtNumber(arglist_nomore_label));
196
197
198 level_over_popup = XtCreatePopupShell(
199 "level_over",
200 transientShellWidgetClass,
201 parent, 0,0);
202
203 level_over_box = XtCreateManagedWidget(
204 "level_over_box",
205 boxWidgetClass,
206 level_over_popup,
207 0,0);
208
209 (void)XtCreateManagedWidget(
210 "level_over_label",
211 labelWidgetClass,
212 level_over_box,
213 arglist_level_over_label,
214 XtNumber(arglist_level_over_label));
215
216 continue_button = XtCreateManagedWidget(
217 "Continue",
218 commandWidgetClass,
219 level_over_box,
220 arglist_continue_button,
221 XtNumber(arglist_continue_button));
222
223 XtAddCallback(continue_button,XtNcallback,continue_callback,0);
224
225 nomore_visible=0;
226 game_over_visible=0;
227 level_over_visible=0;
228
229 }
230
231
232