1 /********************************************************************
2 This file is part of the abs 0.907 distribution. abs is a spreadsheet
3 with graphical user interface.
4
5 Copyright (C) 1998-2001 Andr� Bertin (Andre.Bertin@ping.be)
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version if in the same spirit as version 2.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20
21 Concact: abs@pi.be
22 http://home.pi.be/bertin/abs.shtml
23
24 *********************************************************************/
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 #include <stdio.h>
52
53 #include "mydialog.h"
54 #include "button.h"
55
56 #include "celldialog.h"
57
58 #include "justleft.xpm"
59 #include "justcenter.xpm"
60 #include "justright.xpm"
61 #include "topline.xpm"
62 #include "vertline.xpm"
63 #include "colchoice.xpm"
64
65 #include "main.h"
66
67 extern Widget gettop ();
68
69 static ThumbDialog *td1;
70 static char *cate;
71 static int type;
72 static int fontnum, fonts, fontw;
73 static char fontname[256];
74
75 static Widget decimal;
76 static Widget botline;
77 static Widget rigline;
78 static Widget lefline;
79 static Widget topline, midvline, midhline;
80 static Widget justleft, justcenter, justright;
81 static Widget fgval, bgval, fgbutton, bgbutton, colchoice;
82 static Widget fontlist, fontlistw, fontlists;
83
84 static char *format_cat[] =
85 {
86 "Standard ",
87 "Number ",
88 "Scientific ",
89 "Percent ",
90 "Date ",
91 " ",
92 };
93
94 static char *format_font[] =
95 {
96 "Fixed ",
97 "Courier ",
98 "Helvetica ",
99 "Times ",
100 "Symbol ",
101 };
102
103
104 static char *format_fontw[] =
105 {
106 "Normal ",
107 "Bold ",
108 "Italic ",
109 "Bold Italic ",
110 };
111
112 static char *format_fonts[] =
113 {
114 "6 ",
115 "8 ",
116 "10 ",
117 "12 ",
118 "14 ",
119 "18 ",
120 "24 ",
121 };
122
123
124
125 static char *formatpane[] =
126 {
127 "number",
128 "justif",
129 "font",
130 "border",
131 "color",
132 };
133
134
135
136
137
138
139
140 void
X11m_formatnumber()141 X11m_formatnumber ()
142 {
143 display_prompt (td1, (Widget) gettop ());
144
145 }
146
147 void
initformatdial()148 initformatdial ()
149 {
150 fontnum = fontw = fonts = -1;
151 }
152
153 void
formatcell()154 formatcell ()
155 {
156 char *str;
157 Arg arglist[1];
158 int deci;
159
160 Boolean on;
161 int *touched_pane = get_touched_pane (td1);
162 int fg, bg;
163
164
165
166
167
168 if (touched_pane[0])
169 {
170 XtSetArg (arglist[0], XtNstring, &str);
171 XtGetValues (decimal, arglist, 1);
172 sscanf (str, "%d", &deci);
173 makeformat (type, deci);
174 }
175 if (touched_pane[1])
176 {
177 XtSetArg (arglist[0], XtNstate, &on);
178 XtGetValues (justleft, arglist, 1);
179 if (on)
180 makejust (0);
181 XtGetValues (justcenter, arglist, 1);
182 if (on)
183 makejust (1);
184 XtGetValues (justright, arglist, 1);
185 if (on)
186 makejust (2);
187 }
188 if (touched_pane[2])
189 {
190 makefont (fontnum, fontw, fonts);
191 }
192 if (touched_pane[3])
193 {
194 XtSetArg (arglist[0], XtNstate, &on);
195 XtGetValues (topline, arglist, 1);
196 if (on)
197 border (8, 1);
198 else
199 border (8, 0);
200 XtGetValues (botline, arglist, 1);
201 if (on)
202 border (9, 1);
203 else
204 border (9, 0);
205 XtGetValues (rigline, arglist, 1);
206 if (on)
207 border (10, 1);
208 else
209 border (10, 0);
210 XtGetValues (lefline, arglist, 1);
211 if (on)
212 border (7, 1);
213 else
214 border (7, 0);
215 XtGetValues (midvline, arglist, 1);
216 if (on)
217 border (1, 1);
218 else
219 border (1, 0);
220 XtGetValues (midhline, arglist, 1);
221 if (on)
222 border (2, 1);
223 else
224 border (2, 0);
225
226 }
227
228 if (touched_pane[4])
229 {
230 XtSetArg (arglist[0], XtNstring, &str);
231 XtGetValues (fgval, arglist, 1);
232 sscanf (str, "%d", &fg);
233 XtGetValues (bgval, arglist, 1);
234 sscanf (str, "%d", &bg);
235 if (fg < 1 || fg > 40)
236 fg = 1;
237 if (bg < 1 || bg > 40)
238 bg = 40;
239 makecolor (fg, bg);
240 }
241 }
242
243 void
set_cat(Widget w,XtPointer closure,XtPointer call_data)244 set_cat (Widget w, XtPointer closure, XtPointer call_data)
245 {
246
247 XawListReturnStruct *item = (XawListReturnStruct *) call_data;
248 cate = item->string;
249 type = item->list_index + 1;
250 }
251
252 void
set_fon(Widget w,XtPointer closure,XtPointer call_data)253 set_fon (Widget w, XtPointer closure, XtPointer call_data)
254 {
255
256 XawListReturnStruct *item = (XawListReturnStruct *) call_data;
257 fontnum = item->list_index;
258 sprintf (fontname, "%s", item->string);
259
260 }
261
262 void
set_fonw(Widget w,XtPointer closure,XtPointer call_data)263 set_fonw (Widget w, XtPointer closure, XtPointer call_data)
264 {
265
266 XawListReturnStruct *item = (XawListReturnStruct *) call_data;
267 fontw = item->list_index;
268
269 }
270
271 void
set_fons(Widget w,XtPointer closure,XtPointer call_data)272 set_fons (Widget w, XtPointer closure, XtPointer call_data)
273 {
274
275 XawListReturnStruct *item = (XawListReturnStruct *) call_data;
276 fonts = item->list_index;
277 }
278
279
280
281
282 void
set_col(Widget w,XtPointer pointer,XEvent * event,Boolean * ctd)283 set_col (Widget w, XtPointer pointer, XEvent * event, Boolean * ctd)
284 {
285
286 int x, y;
287 Boolean on;
288 char str[10];
289 Arg arglist[1];
290
291 x = event->xbutton.x;
292 y = event->xbutton.y;
293 sprintf (str, "%d", (y / 18) * 8 + x / 18 + 1);
294
295 XtSetArg (arglist[0], XtNstate, &on);
296 XtGetValues (fgbutton, arglist, 1);
297
298 if (on)
299 {
300 XtSetArg (arglist[0], XtNstring, &str);
301 XtSetValues (fgval, arglist, 1);
302 }
303 XtSetArg (arglist[0], XtNstate, &on);
304 XtGetValues (bgbutton, arglist, 1);
305
306 if (on)
307 {
308 XtSetArg (arglist[0], XtNstring, &str);
309 XtSetValues (bgval, arglist, 1);
310 }
311 }
312
313 int
make_format_dial()314 make_format_dial ()
315 {
316 Widget viewport, viewport2, viewport3, viewport4, list;
317 Widget base;
318
319 td1 = CreateThumbDialog ((Widget) gettop (), XtNumber (formatpane), formatpane, formatcell, initformatdial);
320
321 base = get_base (td1);
322
323 w_n = 0;
324 w_bord (0);
325 w_dim (140, 150);
326 w_rel (NULL, 10, 40);
327 XtSetArg (w_args[w_n], XtNuseRight, True);
328 w_n++;
329 XtSetArg (w_args[w_n], XtNallowVert, True);
330 w_n++;
331
332
333 viewport = XtCreateManagedWidget ("viewport",
334 viewportWidgetClass, base, w_args, w_n);
335 addshadow (viewport, 6);
336 addpanechild (td1, 0, viewport);
337
338 w_n = 0;
339 w_bONw ();
340 list = XtCreateManagedWidget ("list", listWidgetClass,
341 viewport, w_args, w_n);
342 XtAddCallback (list, XtNcallback, set_cat, NULL);
343 XawListChange (list, format_cat, 5, 0, 1);
344
345 addpanechild (td1, 0, CreateLabel (base, "Decimal", 160, 35, 80, 20));
346 decimal = CreateEntry (base, "text", 200, 60, 40, 20, "2");
347 w_n = 0;
348 w_bONw ();
349 w_set (decimal);
350 XtAddEventHandler (decimal,
351 ExposureMask,
352 FALSE,
353 shadow3,
354 (XtPointer) decimal);
355
356 addpanechild (td1, 0, decimal);
357
358
359 w_n = 0;
360 w_rel (NULL, 90, 55);
361 XtSetArg (w_args[w_n], XtNhighlightThickness, 3);
362 w_n++;
363 XtSetArg (w_args[w_n], XtNstate, True);
364 w_n++;
365 justleft = (Widget) make_toggle_pixmap (base, "justleft", justleft_xpm, NULL, NULL
366 );
367 XtSetValues (justleft, w_args, w_n);
368 addpanechild (td1, 1, justleft);
369
370 w_n = 0;
371 w_rel (NULL, 90, 85);
372 XtSetArg (w_args[w_n], XtNhighlightThickness, 3);
373 w_n++;
374 XtSetArg (w_args[w_n], XtNradioGroup, justleft);
375 w_n++;
376 justcenter = (Widget) make_toggle_pixmap (base, "justcenter", justcenter_xpm, NULL, NULL);
377 XtSetValues (justcenter, w_args, w_n);
378 addpanechild (td1, 1, justcenter);
379
380 w_n = 0;
381 w_rel (NULL, 90, 115);
382 XtSetArg (w_args[w_n], XtNhighlightThickness, 3);
383 w_n++;
384 XtSetArg (w_args[w_n], XtNradioGroup, justleft);
385 w_n++;
386 justright = (Widget) make_toggle_pixmap (base, "justright", justright_xpm, NULL, NULL);
387 XtSetValues (justright, w_args, w_n);
388 addpanechild (td1, 1, justright);
389
390
391
392
393 w_n = 0;
394 w_bord (0);
395 w_dim (120, 150);
396 w_rel (NULL, 10, 40);
397 XtSetArg (w_args[w_n], XtNuseRight, True);
398 w_n++;
399 XtSetArg (w_args[w_n], XtNallowVert, True);
400 w_n++;
401
402
403 viewport2 = XtCreateManagedWidget ("viewport2",
404 viewportWidgetClass, base, w_args, w_n);
405
406 addshadow (viewport2, 6);
407 addpanechild (td1, 2, viewport2);
408
409 w_n = 0;
410 w_bONw ();
411 fontlist = XtCreateManagedWidget ("list", listWidgetClass,
412 viewport2, w_args, w_n);
413 XtAddCallback (fontlist, XtNcallback, set_fon, NULL);
414 XawListChange (fontlist, format_font, 5, 0, 1);
415
416 w_n = 0;
417 w_bord (0);
418 w_dim (120, 150);
419 w_rel (NULL, 150, 40);
420 XtSetArg (w_args[w_n], XtNuseRight, True);
421 w_n++;
422 XtSetArg (w_args[w_n], XtNallowVert, True);
423 w_n++;
424
425
426 viewport3 = XtCreateManagedWidget ("viewport3",
427 viewportWidgetClass, base, w_args, w_n);
428
429 addshadow (viewport3, 6);
430 addpanechild (td1, 2, viewport3);
431
432 w_n = 0;
433 w_bONw ();
434 fontlistw = XtCreateManagedWidget ("listw", listWidgetClass,
435 viewport3, w_args, w_n);
436 XtAddCallback (fontlistw, XtNcallback, set_fonw, NULL);
437 XawListChange (fontlistw, format_fontw, 4, 0, 1);
438
439 w_n = 0;
440 w_bord (0);
441 w_dim (60, 150);
442 w_rel (NULL, 290, 40);
443 XtSetArg (w_args[w_n], XtNuseRight, True);
444 w_n++;
445 XtSetArg (w_args[w_n], XtNallowVert, True);
446 w_n++;
447
448
449 viewport4 = XtCreateManagedWidget ("viewport4",
450 viewportWidgetClass, base, w_args, w_n);
451
452 addshadow (viewport4, 6);
453 addpanechild (td1, 2, viewport4);
454
455 w_n = 0;
456 XtSetArg (w_args[w_n], XtNdefaultColumns, 1);
457 w_n++;
458 XtSetArg (w_args[w_n], XtNforceColumns, True);
459 w_n++;
460 w_bONw ();
461 fontlists = XtCreateManagedWidget ("lists", listWidgetClass,
462 viewport4, w_args, w_n);
463
464 XtAddCallback (fontlists, XtNcallback, set_fons, NULL);
465 XawListChange (fontlists, format_fonts, 7, 0, 1);
466
467
468
469
470
471
472 addpanechild (td1, 3, CreateLabel (base, "Top:", 5, 55, 80, 20));
473
474 w_n = 0;
475 w_rel (NULL, 90, 55);
476 XtSetArg (w_args[w_n], XtNhighlightThickness, 0);
477 w_n++;
478 topline = (Widget) make_toggle_pixmap (base, "topline", topline_xpm, NULL, NULL);
479
480 XtSetValues (topline, w_args, w_n);
481 addpanechild (td1, 3, topline);
482
483 addpanechild (td1, 3, CreateLabel (base, "Internal:", 5, 100, 80, 20));
484 w_n = 0;
485 w_rel (NULL, 90, 100);
486 XtSetArg (w_args[w_n], XtNhighlightThickness, 0);
487 w_n++;
488 midhline = (Widget) make_toggle_pixmap (base, "topline", topline_xpm, NULL, NULL);
489 XtSetValues (midhline, w_args, w_n);
490 addpanechild (td1, 3, midhline);
491
492
493 addpanechild (td1, 3, CreateLabel (base, "Bottom:", 5, 145, 80, 20));
494 w_n = 0;
495 w_rel (NULL, 90, 145);
496 XtSetArg (w_args[w_n], XtNhighlightThickness, 0);
497 w_n++;
498 botline = (Widget) make_toggle_pixmap (base, "topline", topline_xpm, NULL, NULL);
499 XtSetValues (botline, w_args, w_n);
500 addpanechild (td1, 3, botline);
501
502
503
504
505
506
507
508 addpanechild (td1, 3, CreateLabel (base, "Left", 160, 185, 80, 20));
509 w_n = 0;
510 w_rel (NULL, 165, 165);
511 XtSetArg (w_args[w_n], XtNhighlightThickness, 0);
512 w_n++;
513
514 lefline = (Widget) make_toggle_pixmap (base, "leline", vertline_xpm, NULL, NULL);
515 XtSetValues (lefline, w_args, w_n);
516 addpanechild (td1, 3, lefline);
517
518
519 addpanechild (td1, 3, CreateLabel (base, "Internal", 225, 185, 80, 20));
520
521 w_n = 0;
522 w_rel (NULL, 245, 165);
523 XtSetArg (w_args[w_n], XtNhighlightThickness, 0);
524 w_n++;
525 midvline = (Widget) make_toggle_pixmap (base, "topline", vertline_xpm, NULL, NULL);
526 XtSetValues (midvline, w_args, w_n);
527 addpanechild (td1, 3, midvline);
528
529
530 addpanechild (td1, 3, CreateLabel (base, "Right", 320, 185, 80, 20));
531
532 w_n = 0;
533 w_rel (NULL, 325, 165);
534 XtSetArg (w_args[w_n], XtNhighlightThickness, 0);
535 w_n++;
536 rigline = (Widget) make_toggle_pixmap (base, "topline", vertline_xpm, NULL, NULL);
537 XtSetValues (rigline, w_args, w_n);
538 addpanechild (td1, 3, rigline);
539
540
541
542 w_n = 0;
543 w_dim (110, 20);
544 w_rel (NULL, 10, 55);
545 XtSetArg (w_args[w_n], XtNborderWidth, 1);
546 w_n++;
547 XtSetArg (w_args[w_n], XtNlabel, "Foreground:");
548 w_n++;
549 XtSetArg (w_args[w_n], XtNjustify, XtJustifyLeft);
550 w_n++;
551 XtSetArg (w_args[w_n], XtNstate, True);
552 w_n++;
553 fgbutton = XtCreateManagedWidget ("fgbutton", toggleWidgetClass, base, w_args, w_n);
554 addpanechild (td1, 4, fgbutton);
555
556 fgval = CreateEntry (base, "fgval", 130, 55, 40, 20, "1");
557 w_n = 0;
558 w_bONw ();
559 w_set (fgval);
560 XtAddEventHandler (fgval,
561 ExposureMask,
562 FALSE,
563 shadow3,
564 (XtPointer) fgval);
565
566 addpanechild (td1, 4, fgval);
567
568 w_n = 0;
569 w_dim (110, 20);
570 w_rel (NULL, 10, 85);
571 XtSetArg (w_args[w_n], XtNborderWidth, 1);
572 w_n++;
573 XtSetArg (w_args[w_n], XtNlabel, "Background:");
574 w_n++;
575 XtSetArg (w_args[w_n], XtNjustify, XtJustifyLeft);
576 w_n++;
577 XtSetArg (w_args[w_n], XtNradioGroup, fgbutton);
578 w_n++;
579 bgbutton = XtCreateManagedWidget ("bgbutton", toggleWidgetClass, base, w_args, w_n);
580
581 addpanechild (td1, 4, bgbutton);
582
583 bgval = CreateEntry (base, "bgval", 130, 85, 40, 20, "40");
584 w_n = 0;
585 w_bONw ();
586 w_set (bgval);
587 XtAddEventHandler (bgval,
588 ExposureMask,
589 FALSE,
590 shadow3,
591 (XtPointer) bgval);
592 addpanechild (td1, 4, bgval);
593
594 w_n = 0;
595 w_rel (NULL, 190, 55);
596 XtSetArg (w_args[w_n], XtNborderWidth, 0);
597 w_n++;
598 XtSetArg (w_args[w_n], XtNhighlightThickness, 0);
599 w_n++;
600
601 colchoice = (Widget) make_button_pixmap (base, "colchoice", colchoice_xpm, NULL, NULL);
602 XtAddEventHandler (colchoice, ButtonPressMask, False, set_col, (XtPointer) NULL);
603
604 XtSetValues (colchoice, w_args, w_n);
605 addpanechild (td1, 4, colchoice);
606
607
608
609 activepane (td1, 0);
610 return 0;
611 }
612