1 /******************************************************************************
2 * DESCRIPTION: Dinotrace source: customization requestor
3 *
4 * This file is part of Dinotrace.
5 *
6 * Author: Wilson Snyder <wsnyder@wsnyder.org>
7 *
8 * Code available from: http://www.veripool.org/dinotrace
9 *
10 ******************************************************************************
11 *
12 * Some of the code in this file was originally developed for Digital
13 * Semiconductor, a division of Digital Equipment Corporation. They
14 * gratefuly have agreed to share it, and thus the bas version has been
15 * released to the public with the following provisions:
16 *
17 *
18 * This software is provided 'AS IS'.
19 *
20 * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THE INFORMATION
21 * (INCLUDING ANY SOFTWARE) PROVIDED, INCLUDING ALL IMPLIED WARRANTIES OF
22 * MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE, AND
23 * NON-INFRINGEMENT. DIGITAL NEITHER WARRANTS NOR REPRESENTS THAT THE USE
24 * OF ANY SOURCE, OR ANY DERIVATIVE WORK THEREOF, WILL BE UNINTERRUPTED OR
25 * ERROR FREE. In no event shall DIGITAL be liable for any damages
26 * whatsoever, and in particular DIGITAL shall not be liable for special,
27 * indirect, consequential, or incidental damages, or damages for lost
28 * profits, loss of revenue, or loss of use, arising out of or related to
29 * any use of this software or the information contained in it, whether
30 * such damages arise in contract, tort, negligence, under statute, in
31 * equity, at law or otherwise. This Software is made available solely for
32 * use by end users for information and non-commercial or personal use
33 * only. Any reproduction for sale of this Software is expressly
34 * prohibited. Any rights not expressly granted herein are reserved.
35 *
36 ******************************************************************************
37 *
38 * Changes made over the basic version are covered by the GNU public licence.
39 *
40 * Dinotrace is free software; you can redistribute it and/or modify
41 * it under the terms of the GNU General Public License as published by
42 * the Free Software Foundation; either version 3, or (at your option)
43 * any later version.
44 *
45 * Dinotrace is distributed in the hope that it will be useful,
46 * but WITHOUT ANY WARRANTY; without even the implied warranty of
47 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
48 * GNU General Public License for more details.
49 *
50 * You should have received a copy of the GNU General Public License
51 * along with Dinotrace; see the file COPYING. If not, write to
52 * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
53 * Boston, MA 02111-1307, USA.
54 *
55 *****************************************************************************/
56
57 #include "dinotrace.h"
58
59 #include <Xm/FileSB.h>
60 #include <Xm/Form.h>
61 #include <Xm/RowColumn.h>
62 #include <Xm/PushB.h>
63 #include <Xm/PushBG.h>
64 #include <Xm/ToggleB.h>
65 #include <Xm/SelectioB.h>
66 #include <Xm/Text.h>
67 #include <Xm/Scale.h>
68 #include <Xm/RowColumn.h>
69 #include <Xm/RowColumnP.h>
70 #include <Xm/Label.h>
71 #include <Xm/LabelP.h>
72 #include <Xm/Form.h>
73 #include <Xm/BulletinB.h>
74 #include <Xm/Separator.h>
75
76 #include "functions.h"
77
78 static char *cus_write_text[CUSWRITEM_MAX]
79 = { "Comment out commands",
80 "Personal display preferences",
81 "Value searches",
82 "Cursors",
83 "Grids",
84 "File Format",
85 "Signal highlights/radix/notes",
86 "Signal ordering"};
87
88 /***********************************************************************/
89
90
cus_dialog_cb(Widget w,Trace_t * trace,XmAnyCallbackStruct * cb)91 void cus_dialog_cb (
92 Widget w,
93 Trace_t *trace,
94 XmAnyCallbackStruct *cb)
95 {
96 char title[MAXFNAMELEN + 15];
97
98 if (DTPRINT_ENTRY) printf ("In custom - trace=%p\n",trace);
99
100 if (!trace->custom.dialog) {
101 if (trace->dfile.filename[0] == '\0')
102 sprintf (title,"Customize Window");
103 else
104 sprintf (title,"Customize %s",trace->dfile.filename);
105
106 XtSetArg (arglist[0], XmNdefaultPosition, TRUE);
107 XtSetArg (arglist[1], XmNdialogTitle, XmStringCreateSimple (title) );
108 XtSetArg (arglist[2], XmNverticalSpacing, 7);
109 XtSetArg (arglist[3], XmNhorizontalSpacing, 10);
110 trace->custom.dialog = XmCreateFormDialog (trace->work,"customize",arglist,4);
111
112 /* Create radio box for page increment */
113 trace->custom.page_menu = XmCreatePulldownMenu (trace->custom.dialog,"page",arglist,0);
114
115 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple (" 1 Page"));
116 trace->custom.page_item[0] = XmCreatePushButton (trace->custom.page_menu,"rpage",arglist,1);
117 DManageChild (trace->custom.page_item[0], trace, MC_NOKEYS);
118
119 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("1/2 Page"));
120 trace->custom.page_item[1] = XmCreatePushButton (trace->custom.page_menu,"rpage",arglist,1);
121 DManageChild (trace->custom.page_item[1], trace, MC_NOKEYS);
122
123 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("1/4 Page"));
124 trace->custom.page_item[2] = XmCreatePushButton (trace->custom.page_menu,"rpage",arglist,1);
125 DManageChild (trace->custom.page_item[2], trace, MC_NOKEYS);
126
127 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("Page Increment") );
128 XtSetArg (arglist[1], XmNsubMenuId, trace->custom.page_menu);
129 XtSetArg (arglist[2], XmNtopAttachment, XmATTACH_FORM );
130 XtSetArg (arglist[3], XmNleftAttachment, XmATTACH_FORM );
131 trace->custom.page_option = XmCreateOptionMenu (trace->custom.dialog,"options",arglist,4);
132 DManageChild (trace->custom.page_option, trace, MC_NOKEYS);
133
134 /* Create radio box for time representation */
135 trace->custom.time_menu = XmCreatePulldownMenu (trace->custom.dialog,"time",arglist,0);
136
137 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("Femtoseconds"));
138 trace->custom.time_item[0] = XmCreatePushButton (trace->custom.time_menu,"rpage",arglist,1);
139 DManageChild (trace->custom.time_item[0], trace, MC_NOKEYS);
140
141 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("Picoseconds"));
142 trace->custom.time_item[1] = XmCreatePushButton (trace->custom.time_menu,"rpage",arglist,1);
143 DManageChild (trace->custom.time_item[1], trace, MC_NOKEYS);
144
145 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("Nanoseconds"));
146 trace->custom.time_item[2] = XmCreatePushButton (trace->custom.time_menu,"rpage",arglist,1);
147 DManageChild (trace->custom.time_item[2], trace, MC_NOKEYS);
148
149 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("Microseconds"));
150 trace->custom.time_item[3] = XmCreatePushButton (trace->custom.time_menu,"rpage",arglist,1);
151 DManageChild (trace->custom.time_item[3], trace, MC_NOKEYS);
152
153 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("Grid #0 Cycles") );
154 trace->custom.time_item[4] = XmCreatePushButton (trace->custom.time_menu,"rpage",arglist,1);
155 DManageChild (trace->custom.time_item[4], trace, MC_NOKEYS);
156
157 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("Time represented in") );
158 XtSetArg (arglist[1], XmNsubMenuId, trace->custom.time_menu);
159 XtSetArg (arglist[2], XmNtopAttachment, XmATTACH_WIDGET );
160 XtSetArg (arglist[3], XmNtopWidget, trace->custom.page_option );
161 XtSetArg (arglist[4], XmNleftAttachment, XmATTACH_FORM );
162 trace->custom.time_option = XmCreateOptionMenu (trace->custom.dialog,"options",arglist,4);
163 DManageChild (trace->custom.time_option, trace, MC_NOKEYS);
164
165 /* Create signal height slider */
166 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("Signal Height"));
167 XtSetArg (arglist[1], XmNx, 150);
168 XtSetArg (arglist[2], XmNtopAttachment, XmATTACH_WIDGET );
169 XtSetArg (arglist[3], XmNtopWidget, trace->custom.time_option );
170 trace->custom.sighgt_label = XmCreateLabel (trace->custom.dialog,"sighgtlabel",arglist,4);
171 DManageChild (trace->custom.sighgt_label, trace, MC_NOKEYS);
172
173 XtSetArg (arglist[0], XmNshowValue, 1);
174 XtSetArg (arglist[1], XmNx, 180);
175 XtSetArg (arglist[2], XmNtopAttachment, XmATTACH_WIDGET );
176 XtSetArg (arglist[3], XmNtopWidget, trace->custom.sighgt_label );
177 XtSetArg (arglist[4], XmNrightAttachment, XmATTACH_FORM );
178 XtSetArg (arglist[5], XmNrightOffset, 10);
179 XtSetArg (arglist[6], XmNminimum, 10);
180 XtSetArg (arglist[7], XmNmaximum, 50);
181 XtSetArg (arglist[8], XmNorientation, XmHORIZONTAL);
182 XtSetArg (arglist[9], XmNprocessingDirection, XmMAX_ON_RIGHT);
183 trace->custom.s1 = XmCreateScale (trace->custom.dialog,"sighgt",arglist,10);
184 DManageChild (trace->custom.s1, trace, MC_NOKEYS);
185
186 /* Create click_to_edge button */
187 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("Click To Edges"));
188 XtSetArg (arglist[1], XmNx, 10);
189 XtSetArg (arglist[2], XmNshadowThickness, 1);
190 XtSetArg (arglist[3], XmNtopAttachment, XmATTACH_WIDGET );
191 XtSetArg (arglist[4], XmNtopWidget, trace->custom.time_option );
192 trace->custom.click_to_edge = XmCreateToggleButton (trace->custom.dialog,
193 "click_to_edge",arglist,5);
194 DManageChild (trace->custom.click_to_edge, trace, MC_NOKEYS);
195
196 /* Create RF button */
197 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("Rise/Fall Time"));
198 XtSetArg (arglist[1], XmNx, 10);
199 XtSetArg (arglist[2], XmNshadowThickness, 1);
200 XtSetArg (arglist[3], XmNtopAttachment, XmATTACH_WIDGET );
201 XtSetArg (arglist[4], XmNtopWidget, dmanage_last );
202 trace->custom.rfwid = XmCreateToggleButton (trace->custom.dialog,"rfwid",arglist,5);
203 DManageChild (trace->custom.rfwid, trace, MC_NOKEYS);
204
205 /* Create cursor state on/off button */
206 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("Cursors On/Off"));
207 XtSetArg (arglist[1], XmNx, 10);
208 XtSetArg (arglist[2], XmNshadowThickness, 1);
209 XtSetArg (arglist[3], XmNtopAttachment, XmATTACH_WIDGET );
210 XtSetArg (arglist[4], XmNtopWidget, dmanage_last );
211 trace->custom.cursor_state = XmCreateToggleButton (trace->custom.dialog,
212 "cursor_state",arglist,5);
213 DManageChild (trace->custom.cursor_state, trace, MC_NOKEYS);
214
215 /* Create prefix button */
216 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("Draw common signal prefix"));
217 XtSetArg (arglist[1], XmNx, 10);
218 XtSetArg (arglist[2], XmNshadowThickness, 1);
219 XtSetArg (arglist[3], XmNtopAttachment, XmATTACH_WIDGET );
220 XtSetArg (arglist[4], XmNtopWidget, dmanage_last );
221 trace->custom.prefixes = XmCreateToggleButton (trace->custom.dialog,"refreshing",arglist,5);
222 DManageChild (trace->custom.prefixes, trace, MC_NOKEYS);
223
224 /* Create refresh button */
225 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("Manual Refreshing"));
226 XtSetArg (arglist[1], XmNx, 10);
227 XtSetArg (arglist[2], XmNshadowThickness, 1);
228 XtSetArg (arglist[3], XmNtopAttachment, XmATTACH_WIDGET );
229 XtSetArg (arglist[4], XmNtopWidget, dmanage_last );
230 trace->custom.refreshing = XmCreateToggleButton (trace->custom.dialog,"refreshing",arglist,5);
231 DManageChild (trace->custom.refreshing, trace, MC_NOKEYS);
232
233 /* Ok/apply/cancel */
234 ok_apply_cancel (&trace->custom.okapply, trace->custom.dialog,
235 dmanage_last,
236 (XtCallbackProc)cus_ok_cb, trace,
237 (XtCallbackProc)cus_apply_cb, trace,
238 NULL, NULL,
239 (XtCallbackProc)unmanage_cb, (Trace_t*)trace->custom.dialog);
240 }
241
242 /* Update with current custom values */
243 switch (global->pageinc) {
244 case PAGEINC_FULL:
245 XtSetArg (arglist[0], XmNmenuHistory, trace->custom.page_item[0]);
246 break;
247 case PAGEINC_HALF:
248 XtSetArg (arglist[0], XmNmenuHistory, trace->custom.page_item[1]);
249 break;
250 case PAGEINC_QUARTER:
251 XtSetArg (arglist[0], XmNmenuHistory, trace->custom.page_item[2]);
252 break;
253 }
254 XtSetValues (trace->custom.page_option, arglist, 1);
255
256 if (global->timerep == TIMEREP_PS)
257 XtSetArg (arglist[0], XmNmenuHistory, trace->custom.time_item[0]);
258 else if (global->timerep == TIMEREP_FS)
259 XtSetArg (arglist[0], XmNmenuHistory, trace->custom.time_item[1]);
260 else if (global->timerep == TIMEREP_NS)
261 XtSetArg (arglist[0], XmNmenuHistory, trace->custom.time_item[2]);
262 else if (global->timerep == TIMEREP_US)
263 XtSetArg (arglist[0], XmNmenuHistory, trace->custom.time_item[3]);
264 else
265 XtSetArg (arglist[0], XmNmenuHistory, trace->custom.time_item[4]);
266 XtSetValues (trace->custom.time_option, arglist, 1);
267
268 XtSetArg (arglist[0], XmNvalue, global->sighgt);
269 XtSetValues (trace->custom.s1,arglist,1);
270
271 XmToggleButtonSetState (trace->custom.rfwid, global->sigrf, TRUE);
272 XmToggleButtonSetState (trace->custom.cursor_state, global->cursor_vis, TRUE);
273 XmToggleButtonSetState (trace->custom.click_to_edge, global->click_to_edge, TRUE);
274 XmToggleButtonSetState (trace->custom.refreshing, global->redraw_manually, TRUE);
275 XmToggleButtonSetState (trace->custom.refreshing, global->prefix_enable, TRUE);
276
277 /* Do it */
278 DManageChild (trace->custom.dialog, trace, MC_NOKEYS);
279 }
280
281
cus_reread_cb(Widget w,Trace_t * trace,XmAnyCallbackStruct * cb)282 void cus_reread_cb (
283 Widget w,
284 Trace_t *trace,
285 XmAnyCallbackStruct *cb)
286 {
287 if (DTPRINT_ENTRY) printf ("in cus_reread_cb trace=%p\n",trace);
288
289 config_read_defaults (trace, FALSE);
290
291 /* Reformat and refresh */
292 draw_all_needed ();
293 }
294
cus_restore_cb(Widget w,Trace_t * trace,XmAnyCallbackStruct * cb)295 void cus_restore_cb (
296 Widget w,
297 Trace_t *trace,
298 XmAnyCallbackStruct *cb)
299 {
300 if (DTPRINT_ENTRY) printf ("in cus_restore_cb trace=%p\n",trace);
301
302 /* do the default thing */
303 config_trace_defaults (trace);
304 config_global_defaults ();
305
306 /* redraw the display */
307 draw_all_needed ();
308 }
309
cus_ok_cb(Widget w,Trace_t * trace,XmAnyCallbackStruct * cb)310 void cus_ok_cb (
311 Widget w,
312 Trace_t *trace,
313 XmAnyCallbackStruct *cb)
314 {
315 int hgt;
316 Widget clicked;
317
318 if (DTPRINT_ENTRY) printf ("In cus_ok_cb - trace=%p\n",trace);
319
320 XmScaleGetValue (trace->custom.s1, &hgt);
321 global->sighgt = hgt;
322 global->cursor_vis = XmToggleButtonGetState (trace->custom.cursor_state);
323 global->click_to_edge = XmToggleButtonGetState (trace->custom.click_to_edge);
324 global->redraw_manually = XmToggleButtonGetState (trace->custom.refreshing);
325 global->prefix_enable = XmToggleButtonGetState (trace->custom.prefixes);
326
327 if (XmToggleButtonGetState (trace->custom.rfwid)) {
328 if (!global->sigrf) global->sigrf = SIG_RF;
329 }
330 else global->sigrf = 0;
331
332 XtSetArg (arglist[0], XmNmenuHistory, &clicked);
333 XtGetValues (trace->custom.time_option, arglist, 1);
334 if (clicked == trace->custom.time_item[4])
335 global->timerep = TIMEREP_CYC;
336 else if (clicked == trace->custom.time_item[3])
337 global->timerep = TIMEREP_US;
338 else if (clicked == trace->custom.time_item[2])
339 global->timerep = TIMEREP_NS;
340 else if (clicked == trace->custom.time_item[1])
341 global->timerep = TIMEREP_PS;
342 else global->timerep = TIMEREP_FS;
343
344 XtSetArg (arglist[0], XmNmenuHistory, &clicked);
345 XtGetValues (trace->custom.page_option, arglist, 1);
346 if (clicked == trace->custom.page_item[2])
347 global->pageinc = PAGEINC_QUARTER;
348 else if (clicked == trace->custom.page_item[1])
349 global->pageinc = PAGEINC_HALF;
350 else global->pageinc = PAGEINC_FULL;
351
352 /* hide the customize window */
353 XtUnmanageChild (trace->custom.dialog);
354
355 /* res units may have changed, fix it & redraw the display */
356 new_res (trace, global->res);
357
358 draw_needupd_sig_start (); /* If prefix dropping changed */
359 draw_all_needed ();
360 }
361
cus_apply_cb(Widget w,Trace_t * trace,XmAnyCallbackStruct * cb)362 void cus_apply_cb (
363 Widget w,
364 Trace_t *trace,
365 XmAnyCallbackStruct *cb)
366 {
367 if (DTPRINT_ENTRY) printf ("In cus_apply_cb - trace=%p\n",trace);
368
369 /* Pretend an OK */
370 cus_ok_cb (w,trace,cb);
371
372 /* manage the customize window */
373 DManageChild (trace->custom.dialog, trace, MC_NOKEYS);
374 }
375
376 /****************************** File reading ******************************/
377
cus_read_cb(Widget w,Trace_t * trace,XmFileSelectionBoxCallbackStruct * cb)378 void cus_read_cb (
379 Widget w,
380 Trace_t *trace,
381 XmFileSelectionBoxCallbackStruct *cb)
382 {
383 int cfg_num;
384 Widget last;
385
386 if (DTPRINT_ENTRY) printf ("In cus_read_cb trace=%p\n",trace);
387
388 if (!trace->cusread.dialog) {
389 XtSetArg (arglist[0], XmNdefaultPosition, TRUE);
390 XtSetArg (arglist[1], XmNdialogTitle, XmStringCreateSimple ("Read Dinotrace File") );
391 trace->cusread.dialog = XmCreateFileSelectionDialog ( trace->main, "file", arglist, 2);
392 DAddCallback (trace->cusread.dialog, XmNokCallback, cus_read_ok_cb, trace);
393 DAddCallback (trace->cusread.dialog, XmNcancelCallback, unmanage_cb, trace->cusread.dialog);
394 XtUnmanageChild ( XmFileSelectionBoxGetChild (trace->cusread.dialog, XmDIALOG_HELP_BUTTON));
395
396 XtSetArg (arglist[0], XmNhorizontalSpacing, 10);
397 XtSetArg (arglist[1], XmNverticalSpacing, 7);
398 trace->cusread.form = XmCreateForm (trace->cusread.dialog, "wa", arglist, 2);
399
400 /* Create label for this grid */
401 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("When reading a trace, read which .dino files?"));
402 XtSetArg (arglist[1], XmNleftAttachment, XmATTACH_FORM );
403 XtSetArg (arglist[2], XmNleftOffset, 25);
404 XtSetArg (arglist[3], XmNtopAttachment, XmATTACH_FORM );
405 trace->cusread.config_label = XmCreateLabel (trace->cusread.form,"label",arglist,5);
406 DManageChild (trace->cusread.config_label, trace, MC_NOKEYS);
407
408 last = trace->cusread.config_label;
409
410 for (cfg_num=0; cfg_num<MAXCFGFILES; cfg_num++) {
411 /* enable button */
412 XtSetArg (arglist[0], XmNleftAttachment, XmATTACH_FORM );
413 XtSetArg (arglist[1], XmNtopAttachment, XmATTACH_WIDGET );
414 XtSetArg (arglist[2], XmNtopWidget, last);
415 XtSetArg (arglist[3], XmNleftOffset, 15);
416 XtSetArg (arglist[4], XmNlabelString, XmStringCreateSimple (" ")); /* Else openmotif makes small button*/
417 trace->cusread.config_enable[cfg_num] = XmCreateToggleButton (trace->cusread.form,"",arglist,5);
418
419 /* file name */
420 XtSetArg (arglist[0], XmNrows, 1);
421 XtSetArg (arglist[1], XmNcolumns, 30);
422 XtSetArg (arglist[2], XmNleftAttachment, XmATTACH_WIDGET );
423 XtSetArg (arglist[3], XmNleftWidget, trace->cusread.config_enable[cfg_num]);
424 XtSetArg (arglist[4], XmNrightAttachment, XmATTACH_FORM );
425 XtSetArg (arglist[5], XmNtopAttachment, XmATTACH_WIDGET );
426 XtSetArg (arglist[6], XmNtopWidget, last);
427 XtSetArg (arglist[7], XmNresizeHeight, FALSE);
428 XtSetArg (arglist[8], XmNeditMode, XmSINGLE_LINE_EDIT);
429 XtSetArg (arglist[9], XmNsensitive, (cfg_num<3));
430 trace->cusread.config_filename[cfg_num] = XmCreateText (trace->cusread.form,"textn",arglist,9);
431
432 DManageChild (trace->cusread.config_enable[cfg_num], trace, MC_NOKEYS);
433 DManageChild (trace->cusread.config_filename[cfg_num], trace, MC_NOKEYS);
434
435 last = trace->cusread.config_enable[cfg_num];
436 }
437
438 DManageChild (trace->cusread.form, trace, MC_NOKEYS);
439
440 XSync (global->display,0);
441
442 /* Set directory */
443 XtSetArg (arglist[0], XmNdirectory, XmStringCreateSimple (global->directory) );
444 XtSetValues (trace->cusread.dialog,arglist,1);
445 fil_select_set_pattern (trace, trace->cusread.dialog, "*.dino");
446 }
447
448 config_update_filenames (trace);
449 for (cfg_num=0; cfg_num<MAXCFGFILES; cfg_num++) {
450 XmToggleButtonSetState (trace->cusread.config_enable[cfg_num], (global->config_enable[cfg_num]), TRUE);
451 XmTextSetString (trace->cusread.config_filename[cfg_num], global->config_filename[cfg_num]);
452 }
453
454 DManageChild (trace->cusread.dialog, trace, MC_NOKEYS);
455
456 XSync (global->display,0);
457 }
458
cus_read_ok_cb(Widget w,Trace_t * trace,XmFileSelectionBoxCallbackStruct * cb)459 void cus_read_ok_cb (
460 Widget w,
461 Trace_t *trace,
462 XmFileSelectionBoxCallbackStruct *cb)
463 {
464 char *tmp;
465 char filename[MAXFNAMELEN];
466 int cfg_num;
467
468 if (DTPRINT_ENTRY) printf ("In cus_read_ok_cb trace=%p\n",trace);
469
470 XtUnmanageChild (trace->cusread.dialog);
471 XSync (global->display,0);
472
473 for (cfg_num=0; cfg_num<MAXCFGFILES; cfg_num++) {
474 global->config_enable[cfg_num] = XmToggleButtonGetState (trace->cusread.config_enable[cfg_num]);
475 strcpy (global->config_filename[cfg_num], XmTextGetString (trace->cusread.config_filename[cfg_num]));
476 }
477
478 tmp = extract_first_xms_segment (cb->value);
479 strcpy (filename, tmp);
480 DFree (tmp);
481 if (DTPRINT_FILE) printf ("In cus_read_ok_cb Filename=%s\n",trace->dfile.filename);
482
483 config_read_file (trace, filename, TRUE, FALSE);
484
485 /* Apply the statenames */
486 grid_calc_autos (trace);
487 draw_all_needed ();
488 }
489
490
491 /****************************** File writing ******************************/
492
cus_write_cb(Widget w)493 void cus_write_cb (
494 Widget w)
495 {
496 Trace_t *trace = widget_to_trace(w);
497 int item_num;
498
499 if (DTPRINT_ENTRY) printf ("In cus_write_cb trace=%p\n",trace);
500
501 if (!trace->cuswr.dialog) {
502 XtSetArg (arglist[0], XmNdefaultPosition, TRUE);
503 XtSetArg (arglist[1], XmNdialogTitle, XmStringCreateSimple ("Write Dinotrace File") );
504 trace->cuswr.dialog = XmCreateFileSelectionDialog ( trace->main, "file", arglist, 2);
505 DAddCallback (trace->cuswr.dialog, XmNokCallback, cus_write_ok_cb, trace);
506 DAddCallback (trace->cuswr.dialog, XmNcancelCallback, unmanage_cb, trace->cuswr.dialog);
507 XtUnmanageChild ( XmFileSelectionBoxGetChild (trace->cuswr.dialog, XmDIALOG_HELP_BUTTON));
508
509 XtSetArg (arglist[0], XmNhorizontalSpacing, 10);
510 XtSetArg (arglist[1], XmNverticalSpacing, 0);
511 trace->cuswr.form = XmCreateForm (trace->cuswr.dialog, "wa", arglist, 2);
512
513 /* Comment out button */
514 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("Comment out commands"));
515 XtSetArg (arglist[1], XmNleftAttachment, XmATTACH_FORM );
516 XtSetArg (arglist[2], XmNtopAttachment, XmATTACH_FORM );
517 XtSetArg (arglist[3], XmNtopOffset, 5);
518 XtSetArg (arglist[4], XmNleftOffset, 5);
519 trace->cuswr.item[CUSWRITEM_COMMENT] = XmCreateToggleButton (trace->cuswr.form,"",arglist,5);
520 DManageChild (trace->cuswr.item[CUSWRITEM_COMMENT], trace, MC_NOKEYS);
521
522 /* Write global: */
523 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("Write global:"));
524 XtSetArg (arglist[1], XmNleftAttachment, XmATTACH_FORM );
525 XtSetArg (arglist[2], XmNleftOffset, 8);
526 XtSetArg (arglist[3], XmNtopAttachment, XmATTACH_WIDGET );
527 XtSetArg (arglist[4], XmNtopWidget, dmanage_last );
528 trace->cuswr.global_label = XmCreateLabel (trace->cuswr.form,"label",arglist,5);
529 DManageChild (trace->cuswr.global_label, trace, MC_NOKEYS);
530
531 /* Save personal preferences */
532 for (item_num=CUSWRITEM_PERSONAL; item_num<=CUSWRITEM_CURSORS; item_num++) {
533 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple (cus_write_text[item_num]));
534 XtSetArg (arglist[1], XmNleftAttachment, XmATTACH_FORM );
535 XtSetArg (arglist[2], XmNtopAttachment, XmATTACH_WIDGET );
536 XtSetArg (arglist[3], XmNtopWidget, dmanage_last );
537 XtSetArg (arglist[4], XmNtopOffset, -5);
538 XtSetArg (arglist[5], XmNleftOffset, 20);
539 trace->cuswr.item[item_num] = XmCreateToggleButton (trace->cuswr.form,"",arglist,6);
540 DManageChild (trace->cuswr.item[item_num], trace, MC_NOKEYS);
541 }
542
543 /* Begin pulldown */
544 trace->cuswr.trace_pulldown = XmCreatePulldownMenu (trace->cuswr.form,"trace_pulldown",arglist,0);
545
546 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("All Traces & Deleted") );
547 trace->cuswr.trace_button[TRACESEL_ALLDEL] =
548 XmCreatePushButtonGadget (trace->cuswr.trace_pulldown,"pdbutton2",arglist,1);
549 DManageChild (trace->cuswr.trace_button[TRACESEL_ALLDEL], trace, MC_NOKEYS);
550
551 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("All Traces") );
552 trace->cuswr.trace_button[TRACESEL_ALL] =
553 XmCreatePushButtonGadget (trace->cuswr.trace_pulldown,"pdbutton1",arglist,1);
554 DManageChild (trace->cuswr.trace_button[TRACESEL_ALL], trace, MC_NOKEYS);
555
556 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("This Trace") );
557 trace->cuswr.trace_button[TRACESEL_THIS] =
558 XmCreatePushButtonGadget (trace->cuswr.trace_pulldown,"pdbutton0",arglist,1);
559 DManageChild (trace->cuswr.trace_button[TRACESEL_THIS], trace, MC_NOKEYS);
560
561 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple ("Write for") );
562 XtSetArg (arglist[1], XmNsubMenuId, trace->cuswr.trace_pulldown);
563 XtSetArg (arglist[2], XmNtopAttachment, XmATTACH_WIDGET );
564 XtSetArg (arglist[3], XmNtopWidget, trace->cuswr.item[CUSWRITEM_CURSORS] );
565 XtSetArg (arglist[4], XmNleftAttachment, XmATTACH_FORM );
566 trace->cuswr.trace_option = XmCreateOptionMenu (trace->cuswr.form,"options",arglist,5);
567 DManageChild (trace->cuswr.trace_option, trace, MC_NOKEYS);
568
569 /* Save trace preferences */
570 for (item_num=CUSWRITEM_GRIDS; item_num<=CUSWRITEM_SIGORDER; item_num++) {
571 XtSetArg (arglist[0], XmNlabelString, XmStringCreateSimple (cus_write_text[item_num]));
572 XtSetArg (arglist[1], XmNleftAttachment, XmATTACH_FORM );
573 XtSetArg (arglist[2], XmNtopAttachment, XmATTACH_WIDGET );
574 XtSetArg (arglist[3], XmNtopWidget, dmanage_last );
575 XtSetArg (arglist[4], XmNtopOffset, -5);
576 XtSetArg (arglist[5], XmNleftOffset, 20);
577 trace->cuswr.item[item_num] = XmCreateToggleButton (trace->cuswr.form,"",arglist,6);
578 DManageChild (trace->cuswr.item[item_num], trace, MC_NOKEYS);
579 }
580
581 DManageChild (trace->cuswr.form, trace, MC_NOKEYS);
582
583 XSync (global->display,0);
584
585 /* Set directory */
586 XtSetArg (arglist[0], XmNdirectory, XmStringCreateSimple (global->directory) );
587 XtSetValues (trace->cuswr.dialog,arglist,1);
588 fil_select_set_pattern (trace, trace->cuswr.dialog, "*.dino");
589 }
590
591 XtSetArg (arglist[0], XmNmenuHistory, trace->cuswr.trace_button[global->cuswr_traces]);
592 XtSetValues (trace->cuswr.trace_option, arglist, 1);
593
594 for (item_num=0; item_num<CUSWRITEM_MAX; item_num++) {
595 XmToggleButtonSetState (trace->cuswr.item[item_num],
596 (global->cuswr_item[item_num]), TRUE);
597 }
598
599 DManageChild (trace->cuswr.dialog, trace, MC_NOKEYS);
600
601 XSync (global->display,0);
602 }
603
cus_write_ok_cb(Widget w,Trace_t * trace,XmFileSelectionBoxCallbackStruct * cb)604 void cus_write_ok_cb (
605 Widget w,
606 Trace_t *trace,
607 XmFileSelectionBoxCallbackStruct *cb)
608 {
609 char *tmp;
610 int item_num, i;
611 Widget clicked;
612
613 if (DTPRINT_ENTRY) printf ("In cus_write_ok_cb trace=%p\n",trace);
614
615 XtUnmanageChild (trace->cuswr.dialog);
616
617 tmp = extract_first_xms_segment (cb->value);
618 DFree (global->cuswr_filename);
619 global->cuswr_filename = strdup (tmp);
620 DFree (tmp);
621
622 for (item_num=0; item_num<CUSWRITEM_MAX; item_num++) {
623 global->cuswr_item[item_num] = XmToggleButtonGetState (trace->cuswr.item[item_num]);
624 }
625
626 XtSetArg (arglist[0], XmNmenuHistory, &clicked);
627 XtGetValues (trace->cuswr.trace_option, arglist, 1);
628 for (i=0; i<3; i++) {
629 if (clicked == trace->cuswr.trace_button[i]) {
630 global->cuswr_traces = (TraceSel_t)i;
631 }
632 }
633
634 config_write_file (trace, global->cuswr_filename);
635 }
636
637
638