1 #include "body.h"
2
3 void
PopDownTO(XtPointer data,XtIntervalId * id)4 PopDownTO(XtPointer data, XtIntervalId *id)
5 {
6 Widget w = (Widget)data;
7 XtUnmanageChild(w);
8 bd->Shuffle();
9 tm->ResetTimer();
10 bd->DrawAll();
11 }
12
13 void
ScoreRegisterCB(Widget w,int index)14 ScoreRegisterCB(Widget w, int index)
15 {
16 #if DEBUG
17 fprintf(stderr, "ScoreRegisterCB\n");
18 #endif
19 sc->Register();
20 #if USE_MOTIF
21 XtRemoveCallback(w, XmNokCallback, (XtCallbackProc)ScoreRegisterCB, NULL);
22 #else /* USE_MOTIF */
23 XtRemoveCallback(w, XtNcallback, (XtCallbackProc)ScoreRegisterCB, NULL);
24 #endif /* USE_MOTIF */
25 }
26
27 void
ResizeCB(void)28 ResizeCB(void)
29 {
30 int wid, hei;
31
32 if (bd->GetGeometry(wid, hei))
33 bd->SetSize(wid, hei);
34 #if DEBUG
35 fprintf(stderr, "ResizeCB: (%d,%d)\n", wid, hei);
36 #endif
37 }
38
39 void
ExposeCB(Widget w,XtPointer tag,XtPointer p)40 ExposeCB(Widget w, XtPointer tag, XtPointer p)
41 {
42 #if USE_MOTIF
43 XExposeEvent *e = &(((XmDrawingAreaCallbackStruct *)p)->event->xexpose);
44 #else /* USE_MOTIF */
45 XExposeEvent *e = &(((XEvent *)p)->xexpose);
46 #endif /* USE_MOTIF */
47 #if DEBUG
48 fprintf(stderr, "ExposeCB: (%d,%d) -> (%d,%d)\n", e->x, e->y, e->width, e->height);
49 #endif
50 bd->DrawRegion(e->x, e->y, e->width, e->height);
51 }
52
53 void
GameCB(Widget w,int index)54 GameCB(Widget w, int index)
55 {
56 static long pausedTime;
57 int pauseStatus;
58 #if DEBUG
59 fprintf(stderr, "GameCB: %d\n", index);
60 #endif
61 switch(index) {
62 case 0: /* Start */
63 bd->LogGiveUp();
64 bd->Shuffle();
65 bd->DrawAll();
66 mb->Sensitive();
67 tm->ResetTimer();
68 break;
69 case 1: /* Restart */
70 bd->LogGiveUp();
71 bd->Restart();
72 bd->DrawAll();
73 mb->Sensitive();
74 tm->ResetTimer();
75 break;
76 case 2: /* Pause */
77 pauseStatus = bd->TogglePause();
78 if (pauseStatus == 1) { // Paused
79 mb->PauseOn();
80 pausedTime = tm->GetTimer();
81 } else if (pauseStatus == 0) { // Pause cancelled
82 mb->PauseOff();
83 tm->SetTimer(pausedTime);
84 }
85 break;
86 case 3: /* Score */
87 sc->DisplayScore(bd->game);
88 break;
89 case 4: /* Personal Score */
90 sc->PersonalStat(bd->game);
91 break;
92 case 5: /* About */
93 Message(MESSAGE_SYMBOL, globRes.aboutString);
94 break;
95 case 6: /* Exit */
96 exit(0);
97 }
98 }
99
100 void
SuppCB(Widget w,int index)101 SuppCB(Widget w, int index)
102 {
103 #if DEBUG
104 fprintf(stderr, "SuppCB: %d\n", index);
105 #endif
106 switch(index) {
107 case 0: /* Hint */
108 bd->Hint();
109 break;
110 case 1: /* Back */
111 bd->Back();
112 break;
113 }
114 }
115
116 void
ChangeGameCB(Widget w,int index,XtPointer p)117 ChangeGameCB(Widget w, int index, XtPointer p)
118 {
119 int xsize, ysize;
120 int trial;
121
122 #if DEBUG
123 fprintf(stderr, "ChangeGameCB: %d\n", index);
124 #endif
125 if (index >= NUM_GAME) {
126 if (index == NUM_GAME) {
127 bd->ToggleClickTrial();
128 } else {
129 bd->ToggleGravity();
130 }
131 SetGameStart();
132 bd->DrawAll();
133 } else {
134 mb->CheckGame(index);
135 trial = bd->game / NUM_GAME;
136 if (index == bd->game % NUM_GAME)
137 return;
138 index += trial * NUM_GAME;
139 GetGameSize(index, xsize, ysize);
140 bd->ChangeGame(index, xsize, ysize);
141 GetBoardSizeFromGameSize(xsize, ysize, globRes.Width, globRes.Height);
142 bd->SetGeometry(globRes.Width, globRes.Height);
143 SetGameStart();
144 }
145 bd->WriteRcFile();
146 }
147
148 void
ChangePixmapCB(Widget w,int index,XtPointer p)149 ChangePixmapCB(Widget w, int index, XtPointer p)
150 {
151 char subdir[16];
152 extern Widget toplevel;
153
154 #if DEBUG
155 fprintf(stderr, "ChangePixmapCB: %d\n", index);
156 #endif
157 mb->CheckPixmap(index);
158 if (globRes.imageSet != index + 1) {
159 int xsize, ysize;
160 globRes.imageSet = index + 1;
161 InitPicture();
162 GetGameSize(bd->game%NUM_GAME, xsize, ysize);
163 GetBoardSizeFromGameSize(xsize, ysize, globRes.Width, globRes.Height);
164 bd->SetGeometry(globRes.Width, globRes.Height);
165 bd->WriteRcFile();
166 SetGameStart();
167 }
168 }
169
170 void
AutoDemoCB(void)171 AutoDemoCB(void)
172 {
173 bd->Robot();
174 XtAppAddTimeOut(app_context, 2000,
175 (XtTimerCallbackProc)AutoDemoCB, NULL);
176 }
177
178 void
ExitCB(void)179 ExitCB(void)
180 {
181 exit(0);
182 }
183