1 /*
2 * XScrabble - X version of the popular board game, for 1 to 4 players.
3 *
4 * This software comes with NO warranty whatsoever. I therefore take no
5 * responsibility for any damages, losses or problems caused through use
6 * or misuse of this program.
7 *
8 * I hereby grant permission for this program to be freely copied and
9 * distributed by any means, provided no charge is made for it.
10 *
11 * Matthew Chapman, csuoq@csv.warwick.ac.uk
12 * Oct 1994.
13 */
14
15 /* popup.c - functions for creating and managing the popups */
16
17 #include "scrab.h"
18 #include "globals.h"
19
20 extern char app_def_file[256];
21
22 /*********************************
23 * Letter Scores and Frequencies *
24 *********************************/
25
LettValuesPopdown(Widget w,XtPointer client_data,XtPointer call_data)26 void LettValuesPopdown(Widget w, XtPointer client_data, XtPointer call_data)
27 {
28 int dnum;
29
30 for (dnum=0;lvdismiss[dnum]!=w; dnum++)
31 ;
32 XtUnmapWidget(lvtop[dnum]);
33
34 XtVaSetValues(menu_item[dnum][LETTVAL],XtNleftBitmap,None,NULL);
35 menu_status[dnum][LETTVAL]= !menu_status[dnum][LETTVAL];
36 }
37
CreateLettValuesPopup(int dnum)38 void CreateLettValuesPopup(int dnum)
39 {
40 Widget lvform,lvmain,lvtitle;
41 char lvlabel[1024], lvstr[1024], formatstr[80];
42 int i,d;
43
44 lvtop[dnum] = XtVaAppCreateShell("lvtop",app_def_file,
45 applicationShellWidgetClass,dpy[dnum],XtNmappedWhenManaged,False,NULL);
46 lvform = XtVaCreateManagedWidget("lvform",formWidgetClass,lvtop[dnum],
47 NULL);
48 lvtitle = XtVaCreateManagedWidget("lvtitle",labelWidgetClass,lvform,
49 NULL);
50 lvmain = XtVaCreateManagedWidget("lvmain",labelWidgetClass,lvform,NULL);
51 strcpy(lvlabel,"\n");
52 strcat(lvlabel,PROMPT[LABLVMAIN]);
53 strcat(lvlabel,"\n\n");
54
55 d=(NUMLETTERS+1)/2;
56 for (i=1 ; i<=d; i++)
57 {
58 sprintf(lvstr," %c %2d %2d %c %2d %2d \n",
59 letterchar[i], letterscore[letterchar[i]], freq[letterchar[i]],
60 letterchar[i+d], letterscore[letterchar[i+d]], freq[letterchar[i+d]]);
61 strcat(lvlabel, lvstr);
62 }
63
64 sprintf(formatstr, "%s%d%s", "\n%s%", 26-strlen(PROMPT[LABJOKER]),
65 "s%c %2d %2d\n\n");
66 sprintf(lvstr, formatstr, PROMPT[LABJOKER], "",
67 letterchar[0], letterscore[letterchar[0]],
68 freq[letterchar[0]]);
69 strcat(lvlabel,lvstr);
70
71 XtVaSetValues(lvmain,XtNlabel,&lvlabel,NULL);
72
73 lvdismiss[dnum] = XtVaCreateManagedWidget("lvdismiss",commandWidgetClass,
74 lvform,NULL);
75 bg_pixmap(lvform);
76 XtRealizeWidget(lvtop[dnum]);
77 XtAddCallback(lvdismiss[dnum],XtNcallback,LettValuesPopdown,lvtop[dnum]);
78 }
79
LettValuesPopup(int dnum)80 void LettValuesPopup(int dnum)
81 {
82 if (menu_status[dnum][LETTVAL]==False)
83 /* popup is already up */
84 XtUnmapWidget(lvtop[dnum]);
85 else
86 XtMapWidget(lvtop[dnum]);
87 }
88
89
90 /*******************
91 * Rules Popup *
92 *******************/
93
RulesPopdown(Widget w,XtPointer client_data,XtPointer call_data)94 void RulesPopdown(Widget w, XtPointer client_data, XtPointer call_data)
95 {
96 int dnum;
97
98 for (dnum=0;rulesdismiss[dnum]!=w; dnum++) ;
99 XtUnmapWidget(rulestop[dnum]);
100
101 XtVaSetValues(menu_item[dnum][RULES],XtNleftBitmap,None,NULL);
102 menu_status[dnum][RULES]= !menu_status[dnum][RULES];
103 }
104
CreateRulesPopup(int dnum)105 void CreateRulesPopup(int dnum)
106 {
107 Widget rulesform,rulestitle;
108
109 rulestop[dnum] = XtVaAppCreateShell("rulesshell",app_def_file,
110 applicationShellWidgetClass,dpy[dnum],XtNmappedWhenManaged,False,NULL);
111 rulesform = XtVaCreateManagedWidget("rulesform",formWidgetClass,
112 rulestop[dnum],NULL);
113 rulestitle = XtVaCreateManagedWidget("rulestitle",labelWidgetClass,
114 rulesform,NULL);
115 rulesmain[dnum] = XtVaCreateManagedWidget("rulesmain",asciiTextWidgetClass,
116 rulesform,NULL);
117 rulesdismiss[dnum] = XtVaCreateManagedWidget("rulesdismiss",
118 commandWidgetClass, rulesform,NULL);
119 XtVaSetValues(rulesmain[dnum],
120 XtNscrollVertical, XawtextScrollWhenNeeded, NULL);
121
122 bg_pixmap(rulesform);
123 bg_pixmap(rulestitle);
124 XtRealizeWidget(rulestop[dnum]);
125 XtAddCallback(rulesdismiss[dnum],XtNcallback,RulesPopdown,rulestop[dnum]);
126 }
127
RulesPopup(int dnum)128 void RulesPopup(int dnum)
129 {
130 if (menu_status[dnum][RULES]==False)
131 XtUnmapWidget(rulestop[dnum]);
132 else
133 {
134 FILE *fr;
135 char linestr[255];
136 char *rules_str;
137 int nlength = 10;
138
139 fr = fopen(app_data.rulesfile,"r");
140 if (fr==NULL)
141 {
142 fprintf(stderr,"Couldn't open the game rules file %s\n",
143 app_data.rulesfile);
144 return;
145 }
146
147 rules_str = malloc(8);
148 *rules_str = '\0';
149
150 while (!feof(fr))
151 {
152 fgets(linestr, 255, fr);
153 nlength += strlen(linestr)*sizeof(char);
154 rules_str = realloc(rules_str, nlength);
155 strcat(rules_str, linestr);
156 }
157
158 fclose(fr);
159
160 XtVaSetValues(rulesmain[dnum], XtNstring, rules_str, NULL);
161 free(rules_str);
162 XtMapWidget(rulestop[dnum]);
163 }
164 }
165
166 /*****************
167 * Showbag Popup *
168 *****************/
169
ShowBagUpdate(Widget w,XtPointer client_data,XtPointer call_data)170 void ShowBagUpdate(Widget w, XtPointer client_data, XtPointer call_data)
171 {
172 char numletters[30];
173
174 char listbag[256] = "\n", descr[12];
175 int i,j, dnum;
176
177 for (dnum=0;showbagupdate[dnum]!=w; dnum++) ;
178
179 for (i=0; i<27; i++) numletters[i] = 0;
180 for (i=0; i <= bagptr; i++)
181 {
182 j = bag[i] - 'A';
183 if (j<0) j = 26;
184 numletters[j]++;
185 }
186
187 for (j=0; j <= 26; j++)
188 {
189 sprintf(descr, " %c %2d ", (j==26)? '*':('A'+j), numletters[j]);
190 if ((j+1)%7 == 0) strcat(descr, "\n\n");
191 strcat(listbag, descr);
192 }
193 sprintf(descr, " = %d\n\n", bagptr+1);
194 strcat(listbag, descr);
195
196 XtVaSetValues(showbagmain[dnum], XtNstring, listbag,
197 XtNscrollVertical, XawtextScrollWhenNeeded, NULL);
198 }
199
ShowBagPopdown(Widget w,XtPointer client_data,XtPointer call_data)200 void ShowBagPopdown(Widget w, XtPointer client_data, XtPointer call_data)
201 {
202 int dnum;
203
204 for (dnum=0;showbagdismiss[dnum]!=w; dnum++) ;
205 XtUnmapWidget(showbagtop[dnum]);
206
207 XtVaSetValues(helpgame_item[dnum][BAG],XtNleftBitmap,None,NULL);
208 helpgame_status[dnum][BAG]= !helpgame_status[dnum][BAG];
209 }
210
CreateShowBagPopup(int dnum)211 void CreateShowBagPopup(int dnum)
212 {
213 Widget showbagform, showbagtitle;
214
215 showbagtop[dnum] = XtVaAppCreateShell("showbagshell",app_def_file,
216 applicationShellWidgetClass,dpy[dnum],XtNmappedWhenManaged,False,NULL);
217 showbagform = XtVaCreateManagedWidget("showbagform",formWidgetClass,
218 showbagtop[dnum],NULL);
219 showbagtitle = XtVaCreateManagedWidget("showbagtitle",labelWidgetClass,
220 showbagform,NULL);
221 showbagmain[dnum] = XtVaCreateManagedWidget("showbagmain",asciiTextWidgetClass,
222 showbagform,NULL);
223 showbagupdate[dnum] = XtVaCreateManagedWidget("showbagupdate",
224 commandWidgetClass, showbagform,NULL);
225 showbagdismiss[dnum] = XtVaCreateManagedWidget("showbagdismiss",
226 commandWidgetClass, showbagform,NULL);
227
228 bg_pixmap(showbagform);
229 bg_pixmap(showbagtitle);
230 XtRealizeWidget(showbagtop[dnum]);
231 XtAddCallback(showbagupdate[dnum],XtNcallback,
232 ShowBagUpdate,showbagtop[dnum]);
233 XtAddCallback(showbagdismiss[dnum],XtNcallback,
234 ShowBagPopdown,showbagtop[dnum]);
235 }
236
ShowBagPopup(int dnum)237 void ShowBagPopup(int dnum)
238 {
239 if (helpgame_status[dnum][BAG]==False)
240 XtUnmapWidget(showbagtop[dnum]);
241 else
242 {
243 ShowBagUpdate(showbagupdate[dnum], NULL, NULL);
244 XtMapWidget(showbagtop[dnum]);
245 }
246 }
247
248 /*******************
249 * Selectbag Popup *
250 *******************/
251
SelectBagUpdate(Widget w,XtPointer client_data,XtPointer call_data)252 void SelectBagUpdate(Widget w, XtPointer client_data, XtPointer call_data)
253 {
254 char numletters[30];
255
256 char listbag[256] = "\n", descr[12];
257 int i,j, dnum;
258
259 for (dnum=0;selectbagupdate[dnum]!=w; dnum++) ;
260
261 for (i=0; i<27; i++) numletters[i] = 0;
262 for (i=0; i <= bagptr; i++)
263 {
264 j = bag[i] - 'A';
265 if (j<0) j = 26;
266 numletters[j]++;
267 }
268
269 for (j=0; j <= 26; j++)
270 {
271 sprintf(descr, " %c %2d ", (j==26)? '*':('A'+j), numletters[j]);
272 if ((j+1)%7 == 0) strcat(descr, "\n\n");
273 strcat(listbag, descr);
274 }
275 sprintf(descr, " = %d\n\n", bagptr+1);
276 strcat(listbag, descr);
277
278 XtVaSetValues(selectbagmain[dnum], XtNstring, listbag,
279 XtNscrollVertical, XawtextScrollWhenNeeded, NULL);
280 }
281
SelectBagPopdown(Widget w,XtPointer client_data,XtPointer call_data)282 void SelectBagPopdown(Widget w, XtPointer client_data, XtPointer call_data)
283 {
284 int dnum;
285
286 for (dnum=0;selectbagdismiss[dnum]!=w; dnum++) ;
287 XtUnmapWidget(selectbagtop[dnum]);
288
289 XtVaSetValues(helpgame_item[dnum][MANUAL],XtNleftBitmap,None,NULL);
290 helpgame_status[dnum][MANUAL]= !helpgame_status[dnum][MANUAL];
291 }
292
CreateSelectBagPopup(int dnum)293 void CreateSelectBagPopup(int dnum)
294 {
295 Widget selectbagform, selectbagtitle;
296
297 selectbagtop[dnum] = XtVaAppCreateShell("selectbagshell",app_def_file,
298 applicationShellWidgetClass,dpy[dnum],XtNmappedWhenManaged,False,NULL);
299 selectbagform = XtVaCreateManagedWidget("selectbagform",formWidgetClass,
300 selectbagtop[dnum],NULL);
301 selectbagtitle = XtVaCreateManagedWidget("selectbagtitle",labelWidgetClass,
302 selectbagform,NULL);
303 selectbagmain[dnum] = XtVaCreateManagedWidget("selectbagmain",asciiTextWidgetClass,
304 selectbagform,NULL);
305 selectbagupdate[dnum] = XtVaCreateManagedWidget("selectbagupdate",
306 commandWidgetClass, selectbagform,NULL);
307 selectbagdismiss[dnum] = XtVaCreateManagedWidget("selectbagdismiss",
308 commandWidgetClass, selectbagform,NULL);
309
310 bg_pixmap(selectbagform);
311 bg_pixmap(selectbagtitle);
312 XtRealizeWidget(selectbagtop[dnum]);
313 XtAddCallback(selectbagupdate[dnum],XtNcallback,
314 SelectBagUpdate,selectbagtop[dnum]);
315 XtAddCallback(selectbagdismiss[dnum],XtNcallback,
316 SelectBagPopdown,selectbagtop[dnum]);
317 }
318
SelectBagPopup(int dnum)319 void SelectBagPopup(int dnum)
320 {
321 if (helpgame_status[dnum][MANUAL]==False)
322 XtUnmapWidget(selectbagtop[dnum]);
323 else
324 {
325 SelectBagUpdate(selectbagupdate[dnum], NULL, NULL);
326 XtMapWidget(selectbagtop[dnum]);
327 }
328 }
329
330 /*******************
331 * Checkword Popup *
332 *******************/
333
CheckwordUpdate(Widget w,XtPointer client_data,XtPointer call_data)334 void CheckwordUpdate(Widget w, XtPointer client_data, XtPointer call_data)
335 {
336 int dnum, i;
337 char *word;
338 char upword[256];
339
340 for (dnum=0;checkwordupdate[dnum]!=w; dnum++) ;
341
342 XtVaGetValues(checkwordmain[dnum], XtNstring, &word, NULL);
343
344 for(i=0; i<=strlen(word) && i<255; i++) upword[i] = toupper(word[i]);
345 upword[255] = '0';
346
347 XtVaSetValues(checkwordresult[dnum], XtNlabel,
348 wordsearch(upword)? PROMPT[VALIDWORD] : PROMPT[INVALIDWORD], NULL);
349 }
350
CheckwordReset(Widget w,XtPointer client_data,XtPointer call_data)351 void CheckwordReset(Widget w, XtPointer client_data, XtPointer call_data)
352 {
353 int dnum;
354 char *word;
355 char newword[256];
356 int i, j = 0, ret = 0;
357 Widget source;
358
359 for (dnum=0; w != XawTextGetSource(checkwordmain[dnum]); dnum++) ;
360
361 XtVaGetValues(checkwordmain[dnum], XtNstring, &word, NULL);
362
363 for(i=0; i < strlen(word) ; i++)
364 {
365 if (word[i]!=' ' && word[i]!='\n' && word[i]!='\t' && word[i]!='\r')
366 {
367 newword[j] = word[i];
368 if (j<254) j++;
369 }
370 else
371 ret = 1;
372 }
373
374 newword[j] = '\0';
375
376 if (ret)
377 {
378 XtVaSetValues(checkwordmain[dnum], XtNstring, newword, NULL);
379 CheckwordUpdate(checkwordupdate[dnum], NULL, NULL);
380 }
381 }
382
CheckwordPopdown(Widget w,XtPointer client_data,XtPointer call_data)383 void CheckwordPopdown(Widget w, XtPointer client_data, XtPointer call_data)
384 {
385 int dnum;
386
387 for (dnum=0;checkworddismiss[dnum]!=w; dnum++) ;
388 XtUnmapWidget(checkwordtop[dnum]);
389
390 XtVaSetValues(helpgame_item[dnum][CHECK],XtNleftBitmap,None,NULL);
391 helpgame_status[dnum][CHECK]= !helpgame_status[dnum][CHECK];
392 }
393
CreateCheckwordPopup(int dnum)394 void CreateCheckwordPopup(int dnum)
395 {
396 Widget checkwordform,checkwordtitle,
397 checkwordprompt,checkwordnote, checkwordsource;
398
399 checkwordtop[dnum] = XtVaAppCreateShell("checkwordshell",app_def_file,
400 applicationShellWidgetClass,dpy[dnum],XtNmappedWhenManaged,False,NULL);
401 checkwordform = XtVaCreateManagedWidget("checkwordform",formWidgetClass,
402 checkwordtop[dnum],NULL);
403 checkwordtitle = XtVaCreateManagedWidget("checkwordtitle",labelWidgetClass,
404 checkwordform,NULL);
405 checkwordprompt = XtVaCreateManagedWidget("checkwordprompt",labelWidgetClass,
406 checkwordform,NULL);
407 checkwordmain[dnum] = XtVaCreateManagedWidget("checkwordmain",asciiTextWidgetClass,
408 checkwordform,NULL);
409 checkwordnote = XtVaCreateManagedWidget("checkwordnote",labelWidgetClass,
410 checkwordform,NULL);
411 checkwordresult[dnum] = XtVaCreateManagedWidget("checkwordresult",labelWidgetClass,
412 checkwordform,NULL);
413 checkwordupdate[dnum] = XtVaCreateManagedWidget("checkwordupdate",
414 commandWidgetClass, checkwordform,NULL);
415 checkworddismiss[dnum] = XtVaCreateManagedWidget("checkworddismiss",
416 commandWidgetClass, checkwordform,NULL);
417
418 XtVaSetValues(checkwordmain[dnum],
419 XtNeditType, XawtextEdit, NULL);
420
421 bg_pixmap(checkwordform);
422 bg_pixmap(checkwordtitle);
423 bg_pixmap(checkwordprompt);
424 bg_pixmap(checkwordnote);
425 bg_pixmap(checkwordresult[dnum]);
426 XtRealizeWidget(checkwordtop[dnum]);
427 XtAddCallback(checkwordupdate[dnum],XtNcallback,
428 CheckwordUpdate,checkwordtop[dnum]);
429 XtAddCallback(checkworddismiss[dnum],XtNcallback,
430 CheckwordPopdown,checkwordtop[dnum]);
431 checkwordsource = XawTextGetSource (checkwordmain[dnum]);
432 XtAddCallback (checkwordsource, XtNcallback, CheckwordReset, (caddr_t) NULL);
433 }
434
CheckwordPopup(int dnum)435 void CheckwordPopup(int dnum)
436 {
437 if (helpgame_status[dnum][CHECK]==False)
438 XtUnmapWidget(checkwordtop[dnum]);
439 else
440 {
441 XtVaSetValues(checkwordresult[dnum],XtNlabel,"", NULL);
442 XtMapWidget(checkwordtop[dnum]);
443 XtSetKeyboardFocus(checkwordtop[dnum],checkwordmain[dnum]);
444 }
445 }
446
447
448 /*******************
449 * Placeword Popup *
450 *******************/
451
PlacewordUpdate(Widget w,XtPointer client_data,XtPointer call_data)452 void PlacewordUpdate(Widget w, XtPointer client_data, XtPointer call_data)
453 {
454 }
455
PlacewordPopdown(Widget w,XtPointer client_data,XtPointer call_data)456 void PlacewordPopdown(Widget w, XtPointer client_data, XtPointer call_data)
457 {
458 int dnum;
459
460 for (dnum=0;placeworddismiss[dnum]!=w; dnum++) ;
461 XtUnmapWidget(placewordtop[dnum]);
462
463 XtVaSetValues(helpgame_item[dnum][PLACE],XtNleftBitmap,None,NULL);
464 helpgame_status[dnum][PLACE]= !helpgame_status[dnum][PLACE];
465 }
466
CreatePlacewordPopup(int dnum)467 void CreatePlacewordPopup(int dnum)
468 {
469 Widget placewordform,placewordmain,placewordtitle;
470
471 placewordtop[dnum] = XtVaAppCreateShell("placewordshell",app_def_file,
472 applicationShellWidgetClass,dpy[dnum],XtNmappedWhenManaged,False,NULL);
473 placewordform = XtVaCreateManagedWidget("placewordform",formWidgetClass,
474 placewordtop[dnum],NULL);
475 placewordtitle = XtVaCreateManagedWidget("placewordtitle",labelWidgetClass,
476 placewordform,NULL);
477 placewordmain = XtVaCreateManagedWidget("placewordmain",asciiTextWidgetClass,
478 placewordform,NULL);
479 placewordupdate[dnum] = XtVaCreateManagedWidget("placewordupdate",
480 commandWidgetClass, placewordform,NULL);
481 placeworddismiss[dnum] = XtVaCreateManagedWidget("placeworddismiss",
482 commandWidgetClass, placewordform,NULL);
483
484 XtVaSetValues(placewordmain, XtNscrollVertical, XawtextScrollWhenNeeded, NULL);
485
486 bg_pixmap(placewordform);
487 bg_pixmap(placewordtitle);
488 XtRealizeWidget(placewordtop[dnum]);
489 XtAddCallback(placewordupdate[dnum],XtNcallback,
490 PlacewordUpdate,placewordtop[dnum]);
491 XtAddCallback(placeworddismiss[dnum],XtNcallback,
492 PlacewordPopdown,placewordtop[dnum]);
493 }
494
PlacewordPopup(int dnum)495 void PlacewordPopup(int dnum)
496 {
497 if (helpgame_status[dnum][PLACE]==False)
498 XtUnmapWidget(placewordtop[dnum]);
499 else
500 {
501 PlacewordUpdate(placewordupdate[dnum], NULL, NULL);
502 XtMapWidget(placewordtop[dnum]);
503 }
504 }
505
506 /******************
507 * Listword Popup *
508 ******************/
509
ListwordUpdate(Widget w,XtPointer client_data,XtPointer call_data)510 void ListwordUpdate(Widget w, XtPointer client_data, XtPointer call_data)
511 {
512 }
513
ListwordPopdown(Widget w,XtPointer client_data,XtPointer call_data)514 void ListwordPopdown(Widget w, XtPointer client_data, XtPointer call_data)
515 {
516 int dnum;
517
518 for (dnum=0;listworddismiss[dnum]!=w; dnum++) ;
519 XtUnmapWidget(listwordtop[dnum]);
520
521 XtVaSetValues(helpgame_item[dnum][LIST],XtNleftBitmap,None,NULL);
522 helpgame_status[dnum][LIST]= !helpgame_status[dnum][LIST];
523 }
524
CreateListwordPopup(int dnum)525 void CreateListwordPopup(int dnum)
526 {
527 Widget listwordform,listwordmain,listwordtitle;
528
529 listwordtop[dnum] = XtVaAppCreateShell("listwordshell",app_def_file,
530 applicationShellWidgetClass,dpy[dnum],XtNmappedWhenManaged,False,NULL);
531 listwordform = XtVaCreateManagedWidget("listwordform",formWidgetClass,
532 listwordtop[dnum],NULL);
533 listwordtitle = XtVaCreateManagedWidget("listwordtitle",labelWidgetClass,
534 listwordform,NULL);
535 listwordmain = XtVaCreateManagedWidget("listwordmain",asciiTextWidgetClass,
536 listwordform,NULL);
537 listwordupdate[dnum] = XtVaCreateManagedWidget("listwordupdate",
538 commandWidgetClass, listwordform,NULL);
539 listworddismiss[dnum] = XtVaCreateManagedWidget("listworddismiss",
540 commandWidgetClass, listwordform,NULL);
541
542 XtVaSetValues(listwordmain, XtNscrollVertical, XawtextScrollWhenNeeded, NULL);
543
544 bg_pixmap(listwordform);
545 bg_pixmap(listwordtitle);
546 XtRealizeWidget(listwordtop[dnum]);
547 XtAddCallback(listwordupdate[dnum],XtNcallback,
548 ListwordUpdate,listwordtop[dnum]);
549 XtAddCallback(listworddismiss[dnum],XtNcallback,
550 ListwordPopdown,listwordtop[dnum]);
551 }
552
ListwordPopup(int dnum)553 void ListwordPopup(int dnum)
554 {
555 if (helpgame_status[dnum][LIST]==False)
556 XtUnmapWidget(listwordtop[dnum]);
557 else
558 {
559 ListwordUpdate(listwordupdate[dnum], NULL, NULL);
560 XtMapWidget(listwordtop[dnum]);
561 }
562 }
563
564
565 /********************
566 * Suggestion Popup *
567 ********************/
568
SuggestionUpdate(Widget w,XtPointer client_data,XtPointer call_data)569 void SuggestionUpdate(Widget w, XtPointer client_data, XtPointer call_data)
570 {
571 }
572
SuggestionPopdown(Widget w,XtPointer client_data,XtPointer call_data)573 void SuggestionPopdown(Widget w, XtPointer client_data, XtPointer call_data)
574 {
575 int dnum;
576
577 for (dnum=0;suggestiondismiss[dnum]!=w; dnum++) ;
578 XtUnmapWidget(suggestiontop[dnum]);
579
580 XtVaSetValues(helpgame_item[dnum][SUGGESTION],XtNleftBitmap,None,NULL);
581 helpgame_status[dnum][SUGGESTION]= !helpgame_status[dnum][SUGGESTION];
582 }
583
CreateSuggestionPopup(int dnum)584 void CreateSuggestionPopup(int dnum)
585 {
586 Widget suggestionform,suggestionmain,suggestiontitle;
587
588 suggestiontop[dnum] = XtVaAppCreateShell("suggestionshell",app_def_file,
589 applicationShellWidgetClass,dpy[dnum],XtNmappedWhenManaged,False,NULL);
590 suggestionform = XtVaCreateManagedWidget("suggestionform",formWidgetClass,
591 suggestiontop[dnum],NULL);
592 suggestiontitle = XtVaCreateManagedWidget("suggestiontitle",labelWidgetClass,
593 suggestionform,NULL);
594 suggestionmain = XtVaCreateManagedWidget("suggestionmain",asciiTextWidgetClass,
595 suggestionform,NULL);
596 suggestionupdate[dnum] = XtVaCreateManagedWidget("suggestionupdate",
597 commandWidgetClass, suggestionform,NULL);
598 suggestiondismiss[dnum] = XtVaCreateManagedWidget("suggestiondismiss",
599 commandWidgetClass, suggestionform,NULL);
600
601 XtVaSetValues(suggestionmain, XtNscrollVertical, XawtextScrollWhenNeeded, NULL);
602
603 bg_pixmap(suggestionform);
604 bg_pixmap(suggestiontitle);
605 XtRealizeWidget(suggestiontop[dnum]);
606 XtAddCallback(suggestionupdate[dnum],XtNcallback,
607 SuggestionUpdate,suggestiontop[dnum]);
608 XtAddCallback(suggestiondismiss[dnum],XtNcallback,
609 SuggestionPopdown,suggestiontop[dnum]);
610 }
611
SuggestionPopup(int dnum)612 void SuggestionPopup(int dnum)
613 {
614 if (helpgame_status[dnum][SUGGESTION]==False)
615 XtUnmapWidget(suggestiontop[dnum]);
616 else
617 {
618 SuggestionUpdate(suggestionupdate[dnum], NULL, NULL);
619 XtMapWidget(suggestiontop[dnum]);
620 }
621 }
622
623 /*******************
624 * Highscore Table *
625 *******************/
626
HiScoresPopdown(Widget w,XtPointer client_data,XtPointer call_data)627 void HiScoresPopdown(Widget w, XtPointer client_data, XtPointer call_data)
628 {
629 int dnum;
630
631 for (dnum=0;hi_dismiss[dnum]!=w; dnum++)
632 ;
633 XtUnmapWidget(hi_scoretop[dnum]);
634
635 XtVaSetValues(menu_item[dnum][HISCORES],XtNleftBitmap,None,NULL);
636 menu_status[dnum][HISCORES]= !menu_status[dnum][HISCORES];
637 }
638
CreateHiScoresPopup(int dnum)639 void CreateHiScoresPopup(int dnum)
640 {
641 int j;
642 Widget hi_scoref,hi_scoretitle;
643 Widget subtitle[MAXPLAYERS];
644 char txt[512],wname[6];
645
646 /* only create popup if not computer player */
647 /* if (type[dnum]==0) */
648 {
649
650 hi_scoretop[dnum] = XtVaAppCreateShell("hiscoreshell",app_def_file,
651 applicationShellWidgetClass,dpy[dnum],XtNmappedWhenManaged,False,NULL);
652 hi_scoref = XtVaCreateManagedWidget("hiscoreform",formWidgetClass,
653 hi_scoretop[dnum],NULL);
654 hi_scoretitle = XtVaCreateManagedWidget("hiscoretitle",labelWidgetClass,
655 hi_scoref,NULL);
656 loadscores();
657 for (j=0; j<MAXPLAYERS; j++)
658 {
659 showscores(j+1,txt);
660 sprintf(wname,"sub%d",j);
661 subtitle[j]=XtVaCreateManagedWidget(wname,labelWidgetClass,
662 hi_scoref,NULL);
663 hi_score_ent[dnum][j]=XtVaCreateManagedWidget("hiscoreent",
664 labelWidgetClass,hi_scoref,XtNfromVert,subtitle[j],NULL);
665 XtVaSetValues(hi_score_ent[dnum][j], XtNlabel, txt, NULL);
666 if (j%2==1)
667 {
668 XtVaSetValues(subtitle[j],XtNfromHoriz,hi_score_ent[dnum][j-1],NULL);
669 XtVaSetValues(hi_score_ent[dnum][j],XtNfromHoriz,hi_score_ent[dnum][j-1],NULL);
670 }
671 if (j>1)
672 XtVaSetValues(subtitle[j],XtNfromVert,hi_score_ent[dnum][j-2],
673 XtNvertDistance,10,NULL);
674 else
675 XtVaSetValues(subtitle[j],XtNfromVert,hi_scoretitle,NULL);
676 }
677 hi_dismiss[dnum] = XtVaCreateManagedWidget("hidismiss",commandWidgetClass,
678 hi_scoref,NULL);
679 bg_pixmap(hi_scoref);
680 bg_pixmap(hi_scoretitle);
681 XtRealizeWidget(hi_scoretop[dnum]);
682 XtAddCallback(hi_dismiss[dnum],XtNcallback,HiScoresPopdown,hi_scoretop[dnum]);
683 }
684 }
685
HiScoresPopup(int dnum)686 void HiScoresPopup(int dnum)
687 {
688 int j;
689 char txt[512];
690
691 /* only if not computer */
692 /* if (type[dnum]==0) */
693 {
694 if (menu_status[dnum][HISCORES]==False)
695 /* popup is already up */
696 XtUnmapWidget(hi_scoretop[dnum]);
697 else
698 {
699 loadscores();
700 for (j=0; j<MAXPLAYERS; j++)
701 {
702 showscores(j+1,txt);
703 XtVaSetValues(hi_score_ent[dnum][j], XtNlabel, txt, NULL);
704 }
705 XtMapWidget(hi_scoretop[dnum]);
706 }
707 }
708 }
709
710 /*******************
711 * Best plays list *
712 *******************/
713
BestgoPopdown(Widget w,XtPointer client_data,XtPointer call_data)714 void BestgoPopdown(Widget w, XtPointer client_data, XtPointer call_data)
715 {
716 int dnum;
717
718 for (dnum=0;bestgodismiss[dnum]!=w; dnum++)
719 ;
720 XtUnmapWidget(bestgotop[dnum]);
721
722 XtVaSetValues(menu_item[dnum][BESTGOES],XtNleftBitmap,None,NULL);
723 menu_status[dnum][BESTGOES]= !menu_status[dnum][BESTGOES];
724 }
725
726
CreateBestgoPopup(int dnum)727 void CreateBestgoPopup(int dnum)
728 {
729 char txt[1000];
730 Widget bestgoform,bestgotitle;
731
732 bestgotop[dnum] = XtVaAppCreateShell("bestgoshell",app_def_file,
733 applicationShellWidgetClass,dpy[dnum],XtNmappedWhenManaged,False,NULL);
734 bestgoform = XtVaCreateManagedWidget("bestgoform",formWidgetClass,
735 bestgotop[dnum],NULL);
736 bestgotitle = XtVaCreateManagedWidget("bestgotitle",labelWidgetClass,
737 bestgoform,XtNborderWidth,0,NULL);
738 bestgomain[dnum] = XtVaCreateManagedWidget("bestgomain",labelWidgetClass,
739 bestgoform,XtNfromVert,bestgotitle,NULL);
740
741 showgoscores(txt);
742 XtVaSetValues(bestgomain[dnum],XtNlabel,txt,NULL);
743 bestgodismiss[dnum] = XtVaCreateManagedWidget("bestgodismiss",commandWidgetClass,
744 bestgoform,XtNfromVert,bestgomain[dnum],NULL);
745 bg_pixmap(bestgoform);
746 bg_pixmap(bestgotitle);
747 XtRealizeWidget(bestgotop[dnum]);
748 XtAddCallback(bestgodismiss[dnum],XtNcallback,BestgoPopdown,bestgotop[dnum]);
749 }
750
BestgoPopup(int dnum)751 void BestgoPopup(int dnum)
752 {
753 if (menu_status[dnum][BESTGOES]==False)
754 /* popup is already up */
755 XtUnmapWidget(bestgotop[dnum]);
756 else
757 {
758 char txt[1000];
759 showgoscores(txt);
760 XtVaSetValues(bestgomain[dnum],XtNlabel,txt,NULL);
761 XtMapWidget(bestgotop[dnum]);
762 }
763 }
764
UpdateBestgo()765 void UpdateBestgo()
766 {
767 int j;
768
769 for (j=0; j<num_players; j++)
770 if (menu_status[j][BESTGOES]==True)
771 {
772 /* popup is up - update entry */
773 char txt[1000];
774 showgoscores(txt);
775 /*printf("updating for player %d\n",j);*/
776 XtVaSetValues(bestgomain[j],XtNlabel,txt,NULL);
777 }
778 }
779
780 /*********
781 * About *
782 *********/
783
AboutPopdown(Widget w,XtPointer client_data,XtPointer call_data)784 void AboutPopdown(Widget w, XtPointer client_data, XtPointer call_data)
785 {
786 int dnum;
787
788 for (dnum=0;aboutdismiss[dnum]!=w; dnum++)
789 ;
790 XtUnmapWidget(abouttop[dnum]);
791
792 XtVaSetValues(menu_item[dnum][ABOUT],XtNleftBitmap,None,NULL);
793 menu_status[dnum][ABOUT]= !menu_status[dnum][ABOUT];
794 }
795
CreateAboutPopup(int dnum)796 void CreateAboutPopup(int dnum)
797 {
798 Widget aboutbox,abouttitle,abouttext;
799
800 abouttop[dnum] = XtVaAppCreateShell("abouttop",app_def_file,
801 applicationShellWidgetClass,dpy[dnum],XtNmappedWhenManaged,
802 False,NULL);
803
804 aboutbox = XtVaCreateManagedWidget("aboutbox",formWidgetClass,
805 abouttop[dnum],NULL);
806 abouttitle = XtVaCreateManagedWidget("abouttitle",
807 labelWidgetClass,aboutbox,
808 XtNborderWidth,0,
809 NULL);
810
811 abouttext = XtVaCreateManagedWidget("abouttext",labelWidgetClass,
812 aboutbox,XtNfromVert,abouttitle,
813 NULL);
814
815 aboutdismiss[dnum] = XtVaCreateManagedWidget("aboutdismiss",
816 commandWidgetClass,aboutbox,
817 XtNfromVert,abouttext,NULL);
818 bg_pixmap(aboutbox);
819 bg_pixmap(abouttitle);
820
821 XtRealizeWidget(abouttop[dnum]);
822 XtAddCallback(aboutdismiss[dnum],XtNcallback,AboutPopdown,
823 abouttop[dnum]);
824 }
825
AboutPopup(int dnum)826 void AboutPopup(int dnum)
827 {
828 if (menu_status[dnum][ABOUT]==False)
829 /* popup is already up */
830 XtUnmapWidget(abouttop[dnum]);
831 else
832 XtMapWidget(abouttop[dnum]);
833 }
834
835
836 /***********
837 * The Key *
838 ***********/
839
KeyPopdown(Widget w,XtPointer client_data,XtPointer call_data)840 void KeyPopdown(Widget w, XtPointer client_data, XtPointer call_data)
841 {
842 int dnum;
843
844 for (dnum=0;keydismiss[dnum]!=w; dnum++)
845 ;
846 XtUnmapWidget(keytop[dnum]);
847
848 XtVaSetValues(menu_item[dnum][KEY],XtNleftBitmap,None,NULL);
849 menu_status[dnum][KEY]= !menu_status[dnum][KEY];
850 }
851
CreateKeyPopup(int dnum)852 void CreateKeyPopup(int dnum)
853 {
854 Widget keybox,keytitle,keysq[4],keylb[4];
855 int i;
856 char wname[6];
857
858 keytop[dnum] = XtVaAppCreateShell("keytop",app_def_file,
859 applicationShellWidgetClass,dpy[dnum],XtNmappedWhenManaged,False,NULL);
860
861 keybox = XtVaCreateManagedWidget("keybox",formWidgetClass,keytop[dnum],NULL);
862 keytitle = XtVaCreateManagedWidget("keytitle",labelWidgetClass,keybox,
863 NULL);
864
865 for (i=0; i<4; i++)
866 {
867 sprintf(wname,"ksq%d",i);
868 keysq[i] = XtVaCreateManagedWidget(wname, labelWidgetClass, keybox,
869 XtNlabel," ",SETBG(colours[i+1]),NULL);
870 sprintf(wname,"klb%d",i);
871 keylb[i] = XtVaCreateManagedWidget(wname, labelWidgetClass, keybox,
872 XtNfromHoriz,keysq[i],NULL);
873 if (i>0)
874 {
875 XtVaSetValues(keysq[i],XtNfromVert,keysq[i-1],NULL);
876 XtVaSetValues(keylb[i],XtNfromVert,keylb[i-1],NULL);
877 }
878 }
879 keydismiss[dnum] = XtVaCreateManagedWidget("keydismiss",commandWidgetClass,
880 keybox,NULL);
881 bg_pixmap(keybox);
882
883 XtRealizeWidget(keytop[dnum]);
884 XtAddCallback(keydismiss[dnum],XtNcallback,KeyPopdown,keytop[dnum]);
885 }
886
KeyPopup(int dnum)887 void KeyPopup(int dnum)
888 {
889 if (menu_status[dnum][KEY]==False)
890 /* popup is already up */
891 XtUnmapWidget(keytop[dnum]);
892 else
893 XtMapWidget(keytop[dnum]);
894 }
895