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