1 /*
2 * Create and destroy the calendar view config menu, which shows global,
3 * month, and week options. It's all called "week range" for historical
4 * reasons, guess what this file did originally. This is called from the
5 * Config pulldown.
6 *
7 * destroy_calconfig_popup()
8 * create_calconfig_popup()
9 */
10
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <time.h>
14 #include <Xm/Xm.h>
15 #include <Xm/DialogS.h>
16 #include <Xm/Form.h>
17 #include <Xm/Frame.h>
18 #include <Xm/RowColumn.h>
19 #include <Xm/LabelP.h>
20 #include <Xm/LabelG.h>
21 #include <Xm/PushBP.h>
22 #include <Xm/PushBG.h>
23 #include <Xm/ToggleB.h>
24 #include <Xm/TextF.h>
25 #include <Xm/ScrolledW.h>
26 #include <Xm/Protocols.h>
27 #include "cal.h"
28
29 static void flag_callback (Widget, int, XmToggleButtonCallbackStruct *);
30 static void done_callback (Widget, int, XmToggleButtonCallbackStruct *);
31
32 extern Display *display; /* everybody uses the same server */
33 extern Widget toplevel; /* top-level shell for icon name */
34 extern struct config config; /* global configuration data */
35 extern Pixel color[NCOLS]; /* colors: COL_* */
36 extern struct plist *mainlist; /* list of all schedule entries */
37 extern struct mainmenu mainmenu; /* all important main window widgets */
38
39 static BOOL have_shell; /* message popup exists if TRUE */
40 static Widget shell; /* popup menu shell */
41 static Widget ndays; /* # of days in week text widgets */
42 static Widget defwarn; /* default warning string */
43 static Widget min, max; /* min and max hour text widgets */
44
45
46 /*
47 * destroy a popup. Remove it from the screen, and destroy its widgets.
48 * It's too much trouble to keep them for next time.
49 */
50
destroy_calconfig_popup(void)51 void destroy_calconfig_popup(void)
52 {
53 char *string; /* contents of text widget */
54 int n, b, e;
55 BOOL dummy;
56
57 if (have_shell) {
58 string = XmTextFieldGetString(ndays);
59 n = atoi(string);
60 XtFree(string);
61
62 string = XmTextFieldGetString(defwarn);
63 parse_warnstring(string, &config.early_time,
64 &config.late_time, &dummy);
65 XtFree(string);
66
67 string = XmTextFieldGetString(min);
68 b = atoi(string);
69 XtFree(string);
70
71 string = XmTextFieldGetString(max);
72 e = atoi(string);
73 XtFree(string);
74
75 if (e == 0) e = 24;
76 if (e <= b) e = e+1;
77 if (e > 24) e = 24;
78 if (e <= b) b = e-1;
79
80 config.week_ndays = n < 1 ? 1 : n > NDAYS ? NDAYS : n;
81 config.week_minhour = b;
82 config.week_maxhour = e;
83
84 XtPopdown(shell);
85 XTDESTROYWIDGET(shell);
86 have_shell = FALSE;
87 mainlist->modified = TRUE;
88 write_mainlist();
89 draw_week_calendar(NULL);
90 draw_day_calendar(NULL);
91 }
92 }
93
94
95 /*
96 * create a week view range popup as a separate application shell. The
97 * popup is initialized with data from config.
98 */
99
create_calconfig_popup(void)100 void create_calconfig_popup(void)
101 {
102 Widget root, scroll, form, frame, form2, w, w2, help;
103 Arg args[20];
104 int n, a, b;
105 Atom closewindow;
106 Dimension xs=0, ys=0;
107
108 destroy_calconfig_popup();
109
110 n = 0;
111 XtSetArg(args[n], XmNdeleteResponse, XmDO_NOTHING); n++;
112 XtSetArg(args[n], XmNiconic, False); n++;
113 shell = XtCreatePopupShell(_("Calendar view configuration"),
114 applicationShellWidgetClass, toplevel, args, n);
115 # ifdef EDITRES
116 XtAddEventHandler(shell, (EventMask)0, TRUE,
117 _XEditResCheckMessages, NULL);
118 # endif
119 set_icon(shell, 1);
120 root = XtCreateManagedWidget("rangeform0", xmFormWidgetClass,
121 shell, NULL, 0);
122 n = 0;
123 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
124 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
125 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
126 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
127 XtSetArg(args[n], XmNshadowThickness, 0); n++;
128 XtSetArg(args[n], XmNscrollingPolicy, XmVARIABLE); n++;
129 scroll = XtCreateManagedWidget("scroll", xmScrolledWindowWidgetClass,
130 root, args, n);
131 XtAddCallback(scroll, XmNhelpCallback, (XtCallbackProc)help_callback,
132 (XtPointer)"calconfig");
133 form = XtCreateManagedWidget("rangeform0", xmFormWidgetClass,
134 scroll, NULL, 0);
135
136 /*-- buttons --*/
137 n = 0;
138 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
139 XtSetArg(args[n], XmNbottomOffset, 8); n++;
140 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
141 XtSetArg(args[n], XmNrightOffset, 8); n++;
142 XtSetArg(args[n], XmNwidth, 80); n++;
143 w = XtCreateManagedWidget(_("Done"), xmPushButtonWidgetClass,
144 form, args, n);
145 XtAddCallback(w, XmNactivateCallback, (XtCallbackProc)
146 done_callback, (XtPointer)0);
147 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
148 help_callback, (XtPointer) "range_done");
149
150 n = 0;
151 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
152 XtSetArg(args[n], XmNbottomOffset, 8); n++;
153 XtSetArg(args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
154 XtSetArg(args[n], XmNrightWidget, w); n++;
155 XtSetArg(args[n], XmNrightOffset, 8); n++;
156 XtSetArg(args[n], XmNwidth, 80); n++;
157 help = XtCreateManagedWidget(_("Help"), xmPushButtonWidgetClass,
158 form, args, n);
159 XtAddCallback(help, XmNactivateCallback, (XtCallbackProc)
160 help_callback, (XtPointer)"calconfig");
161 XtAddCallback(help, XmNhelpCallback, (XtCallbackProc)
162 help_callback, (XtPointer)"calconfig");
163
164 /*------------- global ------*/
165 n = 0;
166 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
167 XtSetArg(args[n], XmNtopOffset, 8); n++;
168 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
169 XtSetArg(args[n], XmNleftOffset, 8); n++;
170 XtSetArg(args[n], XmNhighlightThickness,0); n++;
171 w = XtCreateManagedWidget(_("Global options:"),
172 xmLabelWidgetClass, form, args, n);
173
174 /*-- frame --*/
175 n = 0;
176 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
177 XtSetArg(args[n], XmNtopWidget, w); n++;
178 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
179 XtSetArg(args[n], XmNleftOffset, 8); n++;
180 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
181 XtSetArg(args[n], XmNrightOffset, 8); n++;
182 XtSetArg(args[n], XmNshadowType, XmSHADOW_ETCHED_IN); n++;
183 frame = XtCreateManagedWidget("", xmFrameWidgetClass,
184 form, args, n);
185 form2 = XtCreateManagedWidget("rangeform2", xmFormWidgetClass,
186 frame, NULL, 0);
187 /*-- share mainwin --*/
188 n = 0;
189 XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
190 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
191 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
192 XtSetArg(args[n], XmNleftOffset, 8); n++;
193 XtSetArg(args[n], XmNhighlightThickness,0); n++;
194 XtSetArg(args[n], XmNset, config.share_mainwin); n++;
195 w = XtCreateManagedWidget(_("Use main window for all views"),
196 xmToggleButtonWidgetClass, form2, args, n);
197 XtAddCallback(w, XmNvalueChangedCallback, (XtCallbackProc)
198 flag_callback, (XtPointer)14);
199 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
200 help_callback, (XtPointer)"global_flags");
201
202 /*-- sunday 1st --*/
203 n = 0;
204 XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
205 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
206 XtSetArg(args[n], XmNtopWidget, w); n++;
207 XtSetArg(args[n], XmNtopOffset, 4); n++;
208 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
209 XtSetArg(args[n], XmNleftOffset, 8); n++;
210 XtSetArg(args[n], XmNhighlightThickness,0); n++;
211 XtSetArg(args[n], XmNset, config.sunday_first); n++;
212 w = XtCreateManagedWidget(_("Week begins with Sunday"),
213 xmToggleButtonWidgetClass, form2, args, n);
214 XtAddCallback(w, XmNvalueChangedCallback, (XtCallbackProc)
215 flag_callback, (XtPointer)0);
216 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
217 help_callback, (XtPointer)"global_flags");
218
219 /*-- m/d/y --*/
220 n = 0;
221 XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
222 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
223 XtSetArg(args[n], XmNtopWidget, w); n++;
224 XtSetArg(args[n], XmNtopOffset, 4); n++;
225 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
226 XtSetArg(args[n], XmNleftOffset, 8); n++;
227 XtSetArg(args[n], XmNhighlightThickness,0); n++;
228 XtSetArg(args[n], XmNset, config.mmddyy); n++;
229 w = XtCreateManagedWidget(_("Month/day/year date format"),
230 xmToggleButtonWidgetClass, form2, args, n);
231 XtAddCallback(w, XmNvalueChangedCallback, (XtCallbackProc)
232 flag_callback, (XtPointer)1);
233 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
234 help_callback, (XtPointer)"global_flags");
235
236 /*-- am/pm --*/
237 n = 0;
238 XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
239 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
240 XtSetArg(args[n], XmNtopWidget, w); n++;
241 XtSetArg(args[n], XmNtopOffset, 4); n++;
242 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
243 XtSetArg(args[n], XmNleftOffset, 8); n++;
244 XtSetArg(args[n], XmNhighlightThickness,0); n++;
245 XtSetArg(args[n], XmNset, config.ampm); n++;
246 w = XtCreateManagedWidget(_("12-hour am/pm time format"),
247 xmToggleButtonWidgetClass, form2, args, n);
248 XtAddCallback(w, XmNvalueChangedCallback, (XtCallbackProc)
249 flag_callback, (XtPointer)2);
250 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
251 help_callback, (XtPointer)"global_flags");
252
253 /*-- autodelete --*/
254 n = 0;
255 XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
256 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
257 XtSetArg(args[n], XmNtopWidget, w); n++;
258 XtSetArg(args[n], XmNtopOffset, 4); n++;
259 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
260 XtSetArg(args[n], XmNleftOffset, 8); n++;
261 XtSetArg(args[n], XmNhighlightThickness,0); n++;
262 XtSetArg(args[n], XmNset, config.autodel); n++;
263 w = XtCreateManagedWidget(_("Auto-delete past entries"),
264 xmToggleButtonWidgetClass, form2, args, n);
265 XtAddCallback(w, XmNvalueChangedCallback, (XtCallbackProc)
266 flag_callback, (XtPointer)3);
267 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
268 help_callback, (XtPointer)"global_flags");
269
270 /*-- insecure script */
271 n = 0;
272 XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
273 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
274 XtSetArg(args[n], XmNtopWidget, w); n++;
275 XtSetArg(args[n], XmNtopOffset, 4); n++;
276 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
277 XtSetArg(args[n], XmNleftOffset, 8); n++;
278 XtSetArg(args[n], XmNhighlightThickness,0); n++;
279 XtSetArg(args[n], XmNset, config.insecure_script);n++;
280 w = XtCreateManagedWidget(_("Run netplan scripts (security risk!)"),
281 xmToggleButtonWidgetClass, form2, args, n);
282 XtAddCallback(w, XmNvalueChangedCallback, (XtCallbackProc)
283 flag_callback, (XtPointer)15);
284 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
285 help_callback, (XtPointer)"global_flags");
286
287 /*-- owner only --*/
288 n = 0;
289 XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
290 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
291 XtSetArg(args[n], XmNtopWidget, w); n++;
292 XtSetArg(args[n], XmNtopOffset, 4); n++;
293 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
294 XtSetArg(args[n], XmNleftOffset, 8); n++;
295 XtSetArg(args[n], XmNhighlightThickness,0); n++;
296 XtSetArg(args[n], XmNset, config.owner_only); n++;
297 XtSetArg(args[n], XmNsensitive, !all_files_served()); n++;
298 w = w2 = XtCreateManagedWidget(_("Only owner can write appt files"),
299 xmToggleButtonWidgetClass, form2, args, n);
300 XtAddCallback(w, XmNvalueChangedCallback, (XtCallbackProc)
301 flag_callback,(XtPointer)11);
302 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
303 help_callback, (XtPointer)"global_flags");
304
305 /*-- default warn --*/
306 n = 0;
307 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
308 XtSetArg(args[n], XmNtopWidget, w2); n++;
309 XtSetArg(args[n], XmNtopOffset, 8); n++;
310 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
311 XtSetArg(args[n], XmNleftOffset, 8); n++;
312 XtSetArg(args[n], XmNhighlightThickness,0); n++;
313 w = XtCreateManagedWidget(_("Default warnings:"),
314 xmLabelWidgetClass, form2, args, n);
315 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
316 help_callback, (XtPointer)"range_defwarn");
317 n = 0;
318 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
319 XtSetArg(args[n], XmNtopWidget, w2); n++;
320 XtSetArg(args[n], XmNtopOffset, 4); n++;
321 XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
322 XtSetArg(args[n], XmNleftWidget, w); n++;
323 XtSetArg(args[n], XmNleftOffset, 16); n++;
324 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
325 XtSetArg(args[n], XmNbottomOffset, 4); n++;
326 XtSetArg(args[n], XmNwidth, 120); n++;
327 XtSetArg(args[n], XmNrecomputeSize, False); n++;
328 XtSetArg(args[n], XmNpendingDelete, True); n++;
329 XtSetArg(args[n], XmNhighlightThickness,0); n++;
330 XtSetArg(args[n], XmNbackground, color[COL_TEXTBACK]); n++;
331 defwarn = XtCreateManagedWidget(" ", xmTextFieldWidgetClass,
332 form2, args, n);
333 XtAddCallback(defwarn, XmNhelpCallback, (XtCallbackProc)
334 help_callback, (XtPointer)"range_defwarn");
335
336 /*------------- month -------*/
337 n = 0;
338 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
339 XtSetArg(args[n], XmNtopWidget, frame); n++;
340 XtSetArg(args[n], XmNtopOffset, 8); n++;
341 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
342 XtSetArg(args[n], XmNleftOffset, 8); n++;
343 XtSetArg(args[n], XmNhighlightThickness,0); n++;
344 w = XtCreateManagedWidget(_("Month view options:"),
345 xmLabelWidgetClass, form, args, n);
346
347 /*-- frame --*/
348 n = 0;
349 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
350 XtSetArg(args[n], XmNtopWidget, w); n++;
351 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
352 XtSetArg(args[n], XmNleftOffset, 8); n++;
353 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
354 XtSetArg(args[n], XmNrightOffset, 8); n++;
355 XtSetArg(args[n], XmNshadowType, XmSHADOW_ETCHED_IN); n++;
356 frame = XtCreateManagedWidget("", xmFrameWidgetClass,
357 form, args, n);
358 form2 = XtCreateManagedWidget("rangeform2", xmFormWidgetClass,
359 frame, NULL, 0);
360 /*-- julian --*/
361 n = 0;
362 XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
363 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
364 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
365 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
366 XtSetArg(args[n], XmNleftOffset, 8); n++;
367 XtSetArg(args[n], XmNhighlightThickness,0); n++;
368 XtSetArg(args[n], XmNset, config.julian); n++;
369 w = XtCreateManagedWidget(_("Show Julian dates"),
370 xmToggleButtonWidgetClass, form2, args, n);
371 XtAddCallback(w, XmNvalueChangedCallback, (XtCallbackProc)
372 flag_callback, (XtPointer)4);
373 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
374 help_callback, (XtPointer)"month_flags");
375
376 /*-- week num --*/
377 n = 0;
378 XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
379 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
380 XtSetArg(args[n], XmNtopWidget, w); n++;
381 XtSetArg(args[n], XmNtopOffset, 4); n++;
382 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
383 XtSetArg(args[n], XmNleftOffset, 8); n++;
384 XtSetArg(args[n], XmNhighlightThickness,0); n++;
385 XtSetArg(args[n], XmNset, config.weeknum); n++;
386 w = XtCreateManagedWidget(_("Show week numbers"),
387 xmToggleButtonWidgetClass, form2, args, n);
388 XtAddCallback(w, XmNvalueChangedCallback, (XtCallbackProc)
389 flag_callback, (XtPointer)5);
390 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
391 help_callback, (XtPointer)"month_flags");
392
393 /*-- gps week --*/
394 n = 0;
395 XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
396 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
397 XtSetArg(args[n], XmNtopWidget, w); n++;
398 XtSetArg(args[n], XmNtopOffset, 4); n++;
399 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
400 XtSetArg(args[n], XmNleftOffset, 8); n++;
401 XtSetArg(args[n], XmNhighlightThickness,0); n++;
402 XtSetArg(args[n], XmNset, config.gpsweek); n++;
403 w = XtCreateManagedWidget(_("Use GPS week numbers"),
404 xmToggleButtonWidgetClass, form2, args, n);
405 XtAddCallback(w, XmNvalueChangedCallback, (XtCallbackProc)
406 flag_callback,(XtPointer)13);
407 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
408 help_callback, (XtPointer)"month_flags");
409
410 /*-- full week --*/
411 n = 0;
412 XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
413 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
414 XtSetArg(args[n], XmNtopWidget, w); n++;
415 XtSetArg(args[n], XmNtopOffset, 4); n++;
416 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
417 XtSetArg(args[n], XmNleftOffset, 8); n++;
418 XtSetArg(args[n], XmNhighlightThickness,0); n++;
419 XtSetArg(args[n], XmNset, config.fullweek); n++;
420 w = XtCreateManagedWidget(_("First week is first full week"),
421 xmToggleButtonWidgetClass, form2, args, n);
422 XtAddCallback(w, XmNvalueChangedCallback, (XtCallbackProc)
423 flag_callback, (XtPointer)6);
424 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
425 help_callback, (XtPointer)"month_flags");
426
427 /*-- Thu week --*/
428 n = 0;
429 XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
430 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
431 XtSetArg(args[n], XmNtopWidget, w); n++;
432 XtSetArg(args[n], XmNtopOffset, 4); n++;
433 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
434 XtSetArg(args[n], XmNleftOffset, 8); n++;
435 XtSetArg(args[n], XmNhighlightThickness,0); n++;
436 XtSetArg(args[n], XmNset, config.thu_week); n++;
437 w = XtCreateManagedWidget(_("First week is first week with Thursday"),
438 xmToggleButtonWidgetClass, form2, args, n);
439 XtAddCallback(w, XmNvalueChangedCallback, (XtCallbackProc)
440 flag_callback,(XtPointer)16);
441 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
442 help_callback, (XtPointer)"month_flags");
443
444 /*-- color code --*/
445 n = 0;
446 XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
447 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
448 XtSetArg(args[n], XmNtopWidget, w); n++;
449 XtSetArg(args[n], XmNtopOffset, 4); n++;
450 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
451 XtSetArg(args[n], XmNleftOffset, 8); n++;
452 XtSetArg(args[n], XmNhighlightThickness,0); n++;
453 XtSetArg(args[n], XmNset, config.colorcode_m); n++;
454 w = XtCreateManagedWidget(_("Colored background for other files"),
455 xmToggleButtonWidgetClass, form2, args, n);
456 XtAddCallback(w, XmNvalueChangedCallback, (XtCallbackProc)
457 flag_callback, (XtPointer)7);
458 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
459 help_callback, (XtPointer)"month_flags");
460
461 /*-- no past --*/
462 n = 0;
463 XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
464 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
465 XtSetArg(args[n], XmNtopWidget, w); n++;
466 XtSetArg(args[n], XmNtopOffset, 4); n++;
467 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
468 XtSetArg(args[n], XmNleftOffset, 8); n++;
469 XtSetArg(args[n], XmNhighlightThickness,0); n++;
470 XtSetArg(args[n], XmNset, config.nopast); n++;
471 w = XtCreateManagedWidget(_("Don't show past entries in today's box"),
472 xmToggleButtonWidgetClass, form2, args, n);
473 XtAddCallback(w, XmNvalueChangedCallback, (XtCallbackProc)
474 flag_callback, (XtPointer)8);
475 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
476 help_callback, (XtPointer)"month_flags");
477
478
479 /*------------- week --------*/
480 n = 0;
481 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
482 XtSetArg(args[n], XmNtopWidget, frame); n++;
483 XtSetArg(args[n], XmNtopOffset, 8); n++;
484 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
485 XtSetArg(args[n], XmNleftOffset, 8); n++;
486 XtSetArg(args[n], XmNhighlightThickness,0); n++;
487 w = XtCreateManagedWidget(_("Week and Day view options:"),
488 xmLabelWidgetClass, form, args, n);
489
490 /*-- frame --*/
491 n = 0;
492 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
493 XtSetArg(args[n], XmNtopWidget, w); n++;
494 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
495 XtSetArg(args[n], XmNbottomWidget, help); n++;
496 XtSetArg(args[n], XmNbottomOffset, 16); n++;
497 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
498 XtSetArg(args[n], XmNleftOffset, 8); n++;
499 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
500 XtSetArg(args[n], XmNrightOffset, 8); n++;
501 XtSetArg(args[n], XmNshadowType, XmSHADOW_ETCHED_IN); n++;
502 w = XtCreateManagedWidget("", xmFrameWidgetClass,
503 form, args, n);
504 form2 = XtCreateManagedWidget("rangeform2", xmFormWidgetClass,
505 w, NULL, 0);
506 /*-- # of days --*/
507 n = 0;
508 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
509 XtSetArg(args[n], XmNtopOffset, 10); n++;
510 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
511 XtSetArg(args[n], XmNleftOffset, 8); n++;
512 XtSetArg(args[n], XmNhighlightThickness,0); n++;
513 w = XtCreateManagedWidget(_("Week view contains"),
514 xmLabelWidgetClass, form2, args, n);
515 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
516 help_callback, (XtPointer)"range_ndays");
517 n = 0;
518 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
519 XtSetArg(args[n], XmNtopOffset, 8); n++;
520 XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
521 XtSetArg(args[n], XmNleftWidget, w); n++;
522 XtSetArg(args[n], XmNleftOffset, 16); n++;
523 XtSetArg(args[n], XmNwidth, 80); n++;
524 XtSetArg(args[n], XmNrecomputeSize, False); n++;
525 XtSetArg(args[n], XmNpendingDelete, True); n++;
526 XtSetArg(args[n], XmNhighlightThickness,0); n++;
527 XtSetArg(args[n], XmNbackground, color[COL_TEXTBACK]); n++;
528 ndays = XtCreateManagedWidget(" ", xmTextFieldWidgetClass,
529 form2, args, n);
530 XtAddCallback(ndays, XmNhelpCallback, (XtCallbackProc)
531 help_callback, (XtPointer)"range_ndays");
532 n = 0;
533 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
534 XtSetArg(args[n], XmNtopOffset, 10); n++;
535 XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
536 XtSetArg(args[n], XmNleftWidget, ndays); n++;
537 XtSetArg(args[n], XmNleftOffset, 16); n++;
538 XtSetArg(args[n], XmNhighlightThickness,0); n++;
539 XtCreateManagedWidget(_("days"), xmLabelWidgetClass,
540 form2, args, n);
541 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
542 help_callback, (XtPointer)"range_ndays");
543
544 /*-- min --*/
545 n = 0;
546 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
547 XtSetArg(args[n], XmNtopWidget, ndays); n++;
548 XtSetArg(args[n], XmNtopOffset, 6); n++;
549 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
550 XtSetArg(args[n], XmNleftOffset, 8); n++;
551 XtSetArg(args[n], XmNhighlightThickness,0); n++;
552 w = XtCreateManagedWidget(_("Begin view at"),
553 xmLabelWidgetClass, form2, args, n);
554 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
555 help_callback, (XtPointer)"range_min");
556 n = 0;
557 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
558 XtSetArg(args[n], XmNtopWidget, ndays); n++;
559 XtSetArg(args[n], XmNtopOffset, 4); n++;
560 XtSetArg(args[n], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
561 XtSetArg(args[n], XmNleftWidget, ndays); n++;
562 XtSetArg(args[n], XmNwidth, 80); n++;
563 XtSetArg(args[n], XmNrecomputeSize, False); n++;
564 XtSetArg(args[n], XmNpendingDelete, True); n++;
565 XtSetArg(args[n], XmNhighlightThickness,0); n++;
566 XtSetArg(args[n], XmNbackground, color[COL_TEXTBACK]); n++;
567 min = XtCreateManagedWidget(" ", xmTextFieldWidgetClass,
568 form2, args, n);
569 XtAddCallback(min, XmNhelpCallback, (XtCallbackProc)
570 help_callback, (XtPointer)"range_min");
571 n = 0;
572 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
573 XtSetArg(args[n], XmNtopWidget, ndays); n++;
574 XtSetArg(args[n], XmNtopOffset, 6); n++;
575 XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
576 XtSetArg(args[n], XmNleftWidget, min); n++;
577 XtSetArg(args[n], XmNleftOffset, 16); n++;
578 XtSetArg(args[n], XmNhighlightThickness,0); n++;
579 XtCreateManagedWidget(_("o'clock"), xmLabelWidgetClass,
580 form2, args, n);
581 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
582 help_callback, (XtPointer)"range_min");
583
584 /*-- max --*/
585 n = 0;
586 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
587 XtSetArg(args[n], XmNtopWidget, min); n++;
588 XtSetArg(args[n], XmNtopOffset, 6); n++;
589 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
590 XtSetArg(args[n], XmNleftOffset, 8); n++;
591 XtSetArg(args[n], XmNhighlightThickness,0); n++;
592 w = XtCreateManagedWidget(_("End view at"),
593 xmLabelWidgetClass, form2, args, n);
594 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
595 help_callback, (XtPointer)"range_max");
596 n = 0;
597 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
598 XtSetArg(args[n], XmNtopWidget, min); n++;
599 XtSetArg(args[n], XmNtopOffset, 4); n++;
600 XtSetArg(args[n], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
601 XtSetArg(args[n], XmNleftWidget, ndays); n++;
602 XtSetArg(args[n], XmNwidth, 80); n++;
603 XtSetArg(args[n], XmNrecomputeSize, False); n++;
604 XtSetArg(args[n], XmNpendingDelete, True); n++;
605 XtSetArg(args[n], XmNhighlightThickness,0); n++;
606 XtSetArg(args[n], XmNbackground, color[COL_TEXTBACK]); n++;
607 max = XtCreateManagedWidget("", xmTextFieldWidgetClass,
608 form2, args, n);
609 XtAddCallback(max, XmNhelpCallback, (XtCallbackProc)
610 help_callback, (XtPointer)"range_max");
611 n = 0;
612 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
613 XtSetArg(args[n], XmNtopWidget, min); n++;
614 XtSetArg(args[n], XmNtopOffset, 6); n++;
615 XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
616 XtSetArg(args[n], XmNleftWidget, min); n++;
617 XtSetArg(args[n], XmNleftOffset, 16); n++;
618 XtSetArg(args[n], XmNhighlightThickness,0); n++;
619 XtCreateManagedWidget(_("o'clock"), xmLabelWidgetClass,
620 form2, args, n);
621 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
622 help_callback, (XtPointer)"range_max");
623
624 /*-- show warnings --*/
625 n = 0;
626 XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
627 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
628 XtSetArg(args[n], XmNtopWidget, max); n++;
629 XtSetArg(args[n], XmNtopOffset, 8); n++;
630 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
631 XtSetArg(args[n], XmNleftOffset, 8); n++;
632 XtSetArg(args[n], XmNhighlightThickness,0); n++;
633 XtSetArg(args[n], XmNset, config.weekwarn); n++;
634 w = XtCreateManagedWidget(_("Show advance-warning times"),
635 xmToggleButtonWidgetClass,
636 form2, args, n);
637 XtAddCallback(w, XmNvalueChangedCallback, (XtCallbackProc)
638 flag_callback,(XtPointer)9);
639 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
640 help_callback, (XtPointer)"range_warn");
641
642 /*-- show filename --*/
643 n = 0;
644 XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
645 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
646 XtSetArg(args[n], XmNtopWidget, w); n++;
647 XtSetArg(args[n], XmNtopOffset, 4); n++;
648 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
649 XtSetArg(args[n], XmNleftOffset, 8); n++;
650 XtSetArg(args[n], XmNhighlightThickness,0); n++;
651 XtSetArg(args[n], XmNset, config.weekuser); n++;
652 w = XtCreateManagedWidget(_("Show file names in bar labels"),
653 xmToggleButtonWidgetClass,
654 form2, args, n);
655 XtAddCallback(w, XmNvalueChangedCallback, (XtCallbackProc)
656 flag_callback,(XtPointer)10);
657 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
658 help_callback, (XtPointer)"range_user");
659
660 /*-- notime bars --*/
661 n = 0;
662 XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
663 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
664 XtSetArg(args[n], XmNtopWidget, w); n++;
665 XtSetArg(args[n], XmNtopOffset, 4); n++;
666 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
667 XtSetArg(args[n], XmNleftOffset, 8); n++;
668 XtSetArg(args[n], XmNhighlightThickness,0); n++;
669 XtSetArg(args[n], XmNset, config.week_bignotime); n++;
670 w = XtCreateManagedWidget(_("Large bars for week entries without time"),
671 xmToggleButtonWidgetClass,
672 form2, args, n);
673 XtAddCallback(w, XmNvalueChangedCallback, (XtCallbackProc)
674 flag_callback, (XtPointer)12);
675 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
676 help_callback, (XtPointer)"range_user");
677
678 /*-- extra times --*/
679 n = 0;
680 XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
681 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
682 XtSetArg(args[n], XmNtopWidget, w); n++;
683 XtSetArg(args[n], XmNtopOffset, 4); n++;
684 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
685 XtSetArg(args[n], XmNleftOffset, 8); n++;
686 XtSetArg(args[n], XmNhighlightThickness,0); n++;
687 XtSetArg(args[n], XmNset, config.moretimecols); n++;
688 w = XtCreateManagedWidget(_("Insert extra time columns and rows"),
689 xmToggleButtonWidgetClass,
690 form2, args, n);
691 XtAddCallback(w, XmNvalueChangedCallback, (XtCallbackProc)
692 flag_callback, (XtPointer)17);
693 XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)
694 help_callback, (XtPointer)"range_user");
695
696 XtRealizeWidget(shell);
697 closewindow = XmInternAtom(display, "WM_DELETE_WINDOW", False);
698 XmAddWMProtocolCallback(shell, closewindow, (XtCallbackProc)
699 done_callback, (XtPointer)shell);
700 XtSetArg(args[0], XmNwidth, &xs);
701 XtSetArg(args[1], XmNheight, &ys);
702 XtGetValues(form, args, 2);
703 XtSetArg(args[0], XmNwidth, xs+8);
704 XtSetArg(args[1], XmNheight, ys+8);
705 XtSetValues(shell, args, 2);
706 XtPopup(shell, XtGrabNone);
707
708 a = config.early_time / 60;
709 b = config.late_time / 60;
710 print_text_button(defwarn, a&&b ? "%d, %d" : a ? "%d" : "", a?a:b, b);
711 print_text_button(ndays, "%d", config.week_ndays);
712 print_text_button(min, "%d", config.week_minhour);
713 print_text_button(max, "%d", config.week_maxhour);
714
715 have_shell = TRUE;
716 }
717
718
719 /*-------------------------------------------------- callbacks --------------*/
720 /*
721 * All of these routines are direct X callbacks.
722 */
723
724 /*ARGSUSED*/
done_callback(UNUSED Widget widget,UNUSED int item,UNUSED XmToggleButtonCallbackStruct * data)725 static void done_callback(
726 UNUSED Widget widget,
727 UNUSED int item,
728 UNUSED XmToggleButtonCallbackStruct*data)
729 {
730 destroy_calconfig_popup();
731 }
732
733
734 static BOOL *flagptr[] = {
735 &config.sunday_first, &config.mmddyy, &config.ampm, &config.autodel,
736 &config.julian, &config.weeknum, &config.fullweek, &config.colorcode_m,
737 &config.nopast, &config.weekwarn,&config.weekuser, &config.owner_only,
738 &config.week_bignotime, &config.gpsweek, &config.share_mainwin,
739 &config.insecure_script, &config.thu_week, &config.moretimecols
740 };
741
742 /*ARGSUSED*/
flag_callback(Widget widget,int item,XmToggleButtonCallbackStruct * data)743 static void flag_callback(
744 Widget widget,
745 int item,
746 XmToggleButtonCallbackStruct *data)
747 {
748 *flagptr[item] = data->set;
749 if (flagptr[item] == &config.owner_only) {
750 read_mainlist();
751 if (!config.owner_only)
752 multiple_writer_warning_popup(widget);
753 }
754 if (flagptr[item] == &config.share_mainwin && !config.share_mainwin) {
755 destroy_year_menu();
756 destroy_week_menu();
757 destroy_yov_menu();
758 destroy_day_menu();
759 create_view('m');
760 }
761 mainlist->modified = TRUE;
762 update_all_listmenus(TRUE);
763 redraw_all_views();
764 print_icon_name();
765 if (config.smallmonth)
766 print_button(mainmenu.time, mktimestring(get_time(), FALSE));
767 else
768 print_button(mainmenu.time, "%s %s",
769 mkdatestring(get_time()),
770 mktimestring(get_time(), FALSE));
771 }
772