1 /*
2 * $Id: x11lgnd.c,v 1.10 2003/02/16 12:43:37 isizaka Exp isizaka $
3 *
4 * This file is part of "Ngraph for X11".
5 *
6 * Copyright (C) 2002, Satoshi ISHIZAKA. isizaka@msa.biglobe.ne.jp
7 *
8 * "Ngraph for X11" is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * "Ngraph for X11" is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 *
22 */
23
24 /**
25 *
26 * $Log: x11lgnd.c,v $
27 * Revision 1.10 2003/02/16 12:43:37 isizaka
28 * for release 6.13.18
29 *
30 * Revision 1.9 2002/07/06 08:57:25 isizaka
31 * change to GPL.
32 *
33 * Revision 1.8 2001/07/14 17:44:50 isizaka
34 * for 6.03.14
35 *
36 * Revision 1.7 2001/03/23 12:17:43 isizaka
37 * for 6.3.13
38 *
39 * Revision 1.6 1999/07/25 11:28:13 isizaka
40 * for release 6.03.04
41 *
42 * Revision 1.5 1999/05/08 13:31:30 isizaka
43 * for release 6.03.02
44 *
45 * Revision 1.4 1999/04/15 12:14:26 isizaka
46 * for release 6.03.01
47 *
48 * Revision 1.3 1999/04/11 06:09:20 isizaka
49 * *** empty log message ***
50 *
51 * Revision 1.2 1999/03/20 12:32:54 isizaka
52 * minor change
53 *
54 * Revision 1.1 1999/03/17 13:29:01 isizaka
55 * Initial revision
56 *
57 *
58 **/
59
60 #include <Xm/XmAll.h>
61 #include <X11/keysym.h>
62 #include <stdlib.h>
63 #include <stdio.h>
64 #include <unistd.h>
65 #include <math.h>
66
67 #include "motif12.h"
68
69 #include "ngraph.h"
70 #include "object.h"
71 #include "jnstring.h"
72 #include "nstring.h"
73 #include "mathfn.h"
74
75 #include "x11gui.h"
76 #include "x11dialg.h"
77 #include "x11menu.h"
78 #include "ox11menu.h"
79 #include "x11file.h"
80 #include "x11view.h"
81 #include "x11lgnd.h"
82 #include "x11commn.h"
83
84 char *legendlist[LEGENDNUM]=
85 {"line","curve","polygon","rectangle","arc","mark","text"};
86
LegendLineCB(struct objlist * obj,int id)87 char *LegendLineCB(struct objlist *obj,int id)
88 {
89 struct narray *array;
90 int num,*data;
91 char *s;
92
93 if ((s=(char *)memalloc(128))==NULL) return NULL;
94 getobj(obj,"points",id,0,NULL,&array);
95 num=arraynum(array);
96 data=(int *)arraydata(array);
97 if (num<2) sprintf(s,"%-5d",id);
98 else sprintf(s,"%-5d (%d,%d)-",id,data[0],data[1]);
99 return s;
100 }
101
LegendRectCB(struct objlist * obj,int id)102 char *LegendRectCB(struct objlist *obj,int id)
103 {
104 int x1,y1;
105 char *s;
106
107 if ((s=(char *)memalloc(128))==NULL) return NULL;
108 getobj(obj,"x1",id,0,NULL,&x1);
109 getobj(obj,"y1",id,0,NULL,&y1);
110 sprintf(s,"%-5d x1:%d y1:%d",id,x1,y1);
111 return s;
112 }
113
LegendArcCB(struct objlist * obj,int id)114 char *LegendArcCB(struct objlist *obj,int id)
115 {
116 int x1,y1;
117 char *s;
118
119 if ((s=(char *)memalloc(128))==NULL) return NULL;
120 getobj(obj,"x",id,0,NULL,&x1);
121 getobj(obj,"y",id,0,NULL,&y1);
122 sprintf(s,"%-5d x:%d y:%d",id,x1,y1);
123 return s;
124 }
125
LegendTextCB(struct objlist * obj,int id)126 char *LegendTextCB(struct objlist *obj,int id)
127 {
128 char *text;
129 char *s;
130
131 if ((s=(char *)memalloc(128))==NULL) return NULL;
132 getobj(obj,"text",id,0,NULL,&text);
133 sprintf(s,"%-5d",id);
134 if (text!=NULL) {
135 strncat(s, text, 64);
136 #ifdef JAPANESE
137 /* SJIS ---> EUC */
138 njms2euc(s);
139 #endif
140 }
141 return s;
142 }
143
LegendCurveDialogSetupItem(Widget w,struct LegendCurveDialog * d,int id)144 void LegendCurveDialogSetupItem(Widget w,struct LegendCurveDialog *d,int id)
145 {
146 SetTextFromObjField(w,"*points",d->Obj,id,"points");
147 SetStyleFromObjField(w,"*style",d->Obj,id,"style");
148 SetComboList(w,"*width",cblinewidth,CBLINEWIDTH);
149 SetTextFromObjField(GetComboBoxText(w,"*width"),NULL,d->Obj,id,"width");
150 SetComboListFromObjField(GetComboBoxList(w,"*width"),NULL,d->Obj,id,"width");
151 SetListFromObjField(w,"*join",d->Obj,id,"join");
152 SetTextFromObjField(w,"*miter",d->Obj,id,"miter_limit");
153 getobj(d->Obj,"R",id,0,NULL,&d->R);
154 getobj(d->Obj,"G",id,0,NULL,&d->G);
155 getobj(d->Obj,"B",id,0,NULL,&d->B);
156 XtVaSetValues(XtNameToWidget(w,"*col"),XmNbackground,RGB(d->R,d->G,d->B),NULL);
157 SetListFromObjField(w,"*interpolation",d->Obj,id,"interpolation");
158 }
159
LegendCurveDialogDelete(Widget w,XtPointer client_data,XtPointer call_data)160 void LegendCurveDialogDelete(Widget w,XtPointer client_data,XtPointer call_data)
161 {
162 struct LegendCurveDialog *d;
163
164 d=(struct LegendCurveDialog *)client_data;
165 d->ret=IDDELETE;
166 }
167
LegendCurveDialogCopy(Widget w,XtPointer client_data,XtPointer call_data)168 void LegendCurveDialogCopy(Widget w,XtPointer client_data,XtPointer call_data)
169 {
170 struct LegendCurveDialog *d;
171 int sel;
172
173 d=(struct LegendCurveDialog *)client_data;
174 if ((sel=CopyClick(d->widget,d->Obj,d->Id,LegendLineCB))!=-1)
175 LegendCurveDialogSetupItem(d->widget,d,sel);
176 }
177
LegendCurveDialogColor(Widget w,XtPointer client_data,XtPointer call_data)178 void LegendCurveDialogColor(Widget w,XtPointer client_data,XtPointer call_data)
179 {
180 struct LegendCurveDialog *d;
181
182 d=(struct LegendCurveDialog *)client_data;
183 GetColor(TopLevel,&d->R,&d->G,&d->B);
184 XtVaSetValues(w,XmNbackground,RGB(d->R,d->G,d->B),NULL);
185 }
186
LegendCurveDialogSetup(Widget w,void * data,int makewidget)187 void LegendCurveDialogSetup(Widget w,void *data,int makewidget)
188 {
189 Arg al[20];
190 Cardinal ac;
191 Widget rc,rc2,button;
192 struct LegendCurveDialog *d;
193 char title[30];
194 XmString xs;
195
196 d=(struct LegendCurveDialog *)data;
197 sprintf(title,"Legend curve %d",d->Id);
198 xs=XmStringCreateLocalized(title);
199 XtVaSetValues(w,XmNdialogTitle,xs,NULL);
200 XmStringFree(xs);
201 if (makewidget) {
202 ac=0;
203 XtManageChild(button=XmCreatePushButton(w,"Delete",al,ac));
204 XtAddCallback(button,XmNdisarmCallback,LegendCurveDialogDelete,d);
205 ac=0;
206 XtManageChild(button=XmCreatePushButton(w,"Copy",al,ac));
207 XtAddCallback(button,XmNdisarmCallback,LegendCurveDialogCopy,d);
208
209 ac=0;
210 XtSetArg(al[ac],XmNorientation,XmVERTICAL); ac++;
211 XtManageChild(rc=XmCreateRowColumn(w,"rc",al,ac));
212
213 ac=0;
214 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
215 XtManageChild(rc2=XmCreateRowColumn(rc,"pointsrc",al,ac));
216 ac=0;
217 XtManageChild(XmCreateLabel(rc2,"Points",al,ac));
218 ac=0;
219 XtManageChild(XmCreateTextField(rc2,"points",al,ac));
220
221 ac=0;
222 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
223 XtManageChild(rc2=XmCreateRowColumn(rc,"stylerc",al,ac));
224 ac=0;
225 XtManageChild(XmCreateLabel(rc2,"Style",al,ac));
226 ac=0;
227 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_COMBO_BOX); ac++;
228 XtManageChild(XmCreateComboBox(rc2,"style",al,ac));
229 ac=0;
230 XtManageChild(XmCreateLabel(rc2,"Interpolation",al,ac));
231 ac=0;
232 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_LIST); ac++;
233 XtManageChild(XmCreateComboBox(rc2,"interpolation",al,ac));
234
235 ac=0;
236 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
237 XtManageChild(rc2=XmCreateRowColumn(rc,"widthrc",al,ac));
238 ac=0;
239 XtManageChild(XmCreateLabel(rc2,"Width",al,ac));
240 ac=0;
241 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_COMBO_BOX); ac++;
242 XtManageChild(XmCreateComboBox(rc2,"width",al,ac));
243 ac=0;
244 XtManageChild(XmCreateLabel(rc2,"Miter",al,ac));
245 ac=0;
246 XtManageChild(XmCreateTextField(rc2,"miter",al,ac));
247 ac=0;
248 XtManageChild(XmCreateLabel(rc2,"Join",al,ac));
249 ac=0;
250 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_LIST); ac++;
251 XtManageChild(XmCreateComboBox(rc2,"join",al,ac));
252
253 ac=0;
254 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
255 XtManageChild(rc2=XmCreateRowColumn(rc,"colorrc",al,ac));
256 ac=0;
257 XtManageChild(XmCreateLabel(rc2,"Color",al,ac));
258 ac=0;
259 XtManageChild(button=XmCreateDrawnButton(rc2,"col",al,ac));
260 XtAddCallback(button,XmNdisarmCallback,LegendCurveDialogColor,d);
261 }
262 LegendCurveDialogSetupItem(w,d,d->Id);
263 }
264
LegendCurveDialogClose(Widget w,void * data)265 void LegendCurveDialogClose(Widget w,void *data)
266 {
267 struct LegendCurveDialog *d;
268 int ret;
269
270 d=(struct LegendCurveDialog *)data;
271 if (d->ret!=IDOK) return;
272 ret=d->ret;
273 d->ret=IDLOOP;
274 if (SetObjFieldFromText(w,"*points",d->Obj,d->Id,"points")) return;
275 if (SetObjFieldFromStyle(w,"*style",d->Obj,d->Id,"style")) return;
276 if (SetObjFieldFromText(GetComboBoxText(w,"*width"),NULL,
277 d->Obj,d->Id,"width")) return;
278 if (SetObjFieldFromList(w,"*join",d->Obj,d->Id,"join")) return;
279 if (SetObjFieldFromText(w,"*miter",d->Obj,d->Id,"miter_limit")) return;
280 if (putobj(d->Obj,"R",d->Id,&(d->R))==-1) return;
281 if (putobj(d->Obj,"G",d->Id,&(d->G))==-1) return;
282 if (putobj(d->Obj,"B",d->Id,&(d->B))==-1) return;
283 if (SetObjFieldFromList(w,"*interpolation",
284 d->Obj,d->Id,"interpolation")) return;
285 d->ret=ret;
286 }
287
LegendCurveDialog(struct LegendCurveDialog * data,struct objlist * obj,int id)288 void LegendCurveDialog(struct LegendCurveDialog *data,
289 struct objlist *obj,int id)
290 {
291 data->SetupWindow=LegendCurveDialogSetup;
292 data->CloseWindow=LegendCurveDialogClose;
293 data->Obj=obj;
294 data->Id=id;
295 }
296
LegendPolyDialogSetupItem(Widget w,struct LegendPolyDialog * d,int id)297 void LegendPolyDialogSetupItem(Widget w,struct LegendPolyDialog *d,int id)
298 {
299 SetTextFromObjField(w,"*points",d->Obj,id,"points");
300 SetStyleFromObjField(w,"*style",d->Obj,id,"style");
301 SetComboList(w,"*width",cblinewidth,CBLINEWIDTH);
302 SetTextFromObjField(GetComboBoxText(w,"*width"),NULL,d->Obj,id,"width");
303 SetComboListFromObjField(GetComboBoxList(w,"*width"),NULL,d->Obj,id,"width");
304 SetListFromObjField(w,"*join",d->Obj,id,"join");
305 SetTextFromObjField(w,"*miter",d->Obj,id,"miter_limit");
306 getobj(d->Obj,"R",id,0,NULL,&d->R);
307 getobj(d->Obj,"G",id,0,NULL,&d->G);
308 getobj(d->Obj,"B",id,0,NULL,&d->B);
309 XtVaSetValues(XtNameToWidget(w,"*col"),XmNbackground,RGB(d->R,d->G,d->B),NULL);
310 SetListFromObjField(w,"*fill",d->Obj,id,"fill");
311 }
312
LegendPolyDialogDelete(Widget w,XtPointer client_data,XtPointer call_data)313 void LegendPolyDialogDelete(Widget w,XtPointer client_data,XtPointer call_data)
314 {
315 struct LegendPolyDialog *d;
316
317 d=(struct LegendPolyDialog *)client_data;
318 d->ret=IDDELETE;
319 }
320
LegendPolyDialogCopy(Widget w,XtPointer client_data,XtPointer call_data)321 void LegendPolyDialogCopy(Widget w,XtPointer client_data,XtPointer call_data)
322 {
323 struct LegendPolyDialog *d;
324 int sel;
325
326 d=(struct LegendPolyDialog *)client_data;
327 if ((sel=CopyClick(d->widget,d->Obj,d->Id,LegendLineCB))!=-1)
328 LegendPolyDialogSetupItem(d->widget,d,sel);
329 }
330
LegendPolyDialogColor(Widget w,XtPointer client_data,XtPointer call_data)331 void LegendPolyDialogColor(Widget w,XtPointer client_data,XtPointer call_data)
332 {
333 struct LegendPolyDialog *d;
334
335 d=(struct LegendPolyDialog *)client_data;
336 GetColor(TopLevel,&d->R,&d->G,&d->B);
337 XtVaSetValues(w,XmNbackground,RGB(d->R,d->G,d->B),NULL);
338 }
339
LegendPolyDialogSetup(Widget w,void * data,int makewidget)340 void LegendPolyDialogSetup(Widget w,void *data,int makewidget)
341 {
342 Arg al[20];
343 Cardinal ac;
344 Widget rc,rc2,button;
345 struct LegendPolyDialog *d;
346 char title[30];
347 XmString xs;
348
349 d=(struct LegendPolyDialog *)data;
350 sprintf(title,"Legend polygon %d",d->Id);
351 xs=XmStringCreateLocalized(title);
352 XtVaSetValues(w,XmNdialogTitle,xs,NULL);
353 XmStringFree(xs);
354 if (makewidget) {
355 ac=0;
356 XtManageChild(button=XmCreatePushButton(w,"Delete",al,ac));
357 XtAddCallback(button,XmNdisarmCallback,LegendPolyDialogDelete,d);
358 ac=0;
359 XtManageChild(button=XmCreatePushButton(w,"Copy",al,ac));
360 XtAddCallback(button,XmNdisarmCallback,LegendPolyDialogCopy,d);
361
362 ac=0;
363 XtSetArg(al[ac],XmNorientation,XmVERTICAL); ac++;
364 XtManageChild(rc=XmCreateRowColumn(w,"rc",al,ac));
365
366 ac=0;
367 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
368 XtManageChild(rc2=XmCreateRowColumn(rc,"pointsrc",al,ac));
369 ac=0;
370 XtManageChild(XmCreateLabel(rc2,"Points",al,ac));
371 ac=0;
372 XtManageChild(XmCreateTextField(rc2,"points",al,ac));
373
374 ac=0;
375 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
376 XtManageChild(rc2=XmCreateRowColumn(rc,"stylerc",al,ac));
377 ac=0;
378 XtManageChild(XmCreateLabel(rc2,"Style",al,ac));
379 ac=0;
380 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_COMBO_BOX); ac++;
381 XtManageChild(XmCreateComboBox(rc2,"style",al,ac));
382
383 ac=0;
384 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
385 XtManageChild(rc2=XmCreateRowColumn(rc,"widthrc",al,ac));
386 ac=0;
387 XtManageChild(XmCreateLabel(rc2,"Width",al,ac));
388 ac=0;
389 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_COMBO_BOX); ac++;
390 XtManageChild(XmCreateComboBox(rc2,"width",al,ac));
391 ac=0;
392 XtManageChild(XmCreateLabel(rc2,"Miter",al,ac));
393 ac=0;
394 XtManageChild(XmCreateTextField(rc2,"miter",al,ac));
395 ac=0;
396 XtManageChild(XmCreateLabel(rc2,"Join",al,ac));
397 ac=0;
398 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_LIST); ac++;
399 XtManageChild(XmCreateComboBox(rc2,"join",al,ac));
400 ac=0;
401 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
402 XtManageChild(rc2=XmCreateRowColumn(rc,"colorrc",al,ac));
403 ac=0;
404 XtManageChild(XmCreateLabel(rc2,"Color",al,ac));
405 ac=0;
406 XtManageChild(button=XmCreateDrawnButton(rc2,"col",al,ac));
407 XtAddCallback(button,XmNdisarmCallback,LegendPolyDialogColor,d);
408 ac=0;
409 XtManageChild(XmCreateLabel(rc2,"Fill",al,ac));
410 ac=0;
411 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_LIST); ac++;
412 XtManageChild(XmCreateComboBox(rc2,"fill",al,ac));
413 }
414 LegendPolyDialogSetupItem(w,d,d->Id);
415 }
416
LegendPolyDialogClose(Widget w,void * data)417 void LegendPolyDialogClose(Widget w,void *data)
418 {
419 struct LegendPolyDialog *d;
420 int ret;
421
422 d=(struct LegendPolyDialog *)data;
423 if (d->ret!=IDOK) return;
424 ret=d->ret;
425 d->ret=IDLOOP;
426 if (SetObjFieldFromText(w,"*points",d->Obj,d->Id,"points")) return;
427 if (SetObjFieldFromStyle(w,"*style",d->Obj,d->Id,"style")) return;
428 if (SetObjFieldFromText(GetComboBoxText(w,"*width"),NULL,
429 d->Obj,d->Id,"width")) return;
430 if (SetObjFieldFromList(w,"*join",d->Obj,d->Id,"join")) return;
431 if (SetObjFieldFromText(w,"*miter",d->Obj,d->Id,"miter_limit")) return;
432 if (putobj(d->Obj,"R",d->Id,&(d->R))==-1) return;
433 if (putobj(d->Obj,"G",d->Id,&(d->G))==-1) return;
434 if (putobj(d->Obj,"B",d->Id,&(d->B))==-1) return;
435 if (SetObjFieldFromList(w,"*fill",d->Obj,d->Id,"fill")) return;
436 d->ret=ret;
437 }
438
LegendPolyDialog(struct LegendPolyDialog * data,struct objlist * obj,int id)439 void LegendPolyDialog(struct LegendPolyDialog *data,struct objlist *obj,int id)
440 {
441 data->SetupWindow=LegendPolyDialogSetup;
442 data->CloseWindow=LegendPolyDialogClose;
443 data->Obj=obj;
444 data->Id=id;
445 }
446
447
LegendArrowDialogSetupItem(Widget w,struct LegendArrowDialog * d,int id)448 void LegendArrowDialogSetupItem(Widget w,struct LegendArrowDialog *d,int id)
449 {
450 int len;
451
452 SetTextFromObjField(w,"*points",d->Obj,id,"points");
453 SetStyleFromObjField(w,"*style",d->Obj,id,"style");
454 SetComboList(w,"*width",cblinewidth,CBLINEWIDTH);
455 SetTextFromObjField(GetComboBoxText(w,"*width"),NULL,d->Obj,id,"width");
456 SetComboListFromObjField(GetComboBoxList(w,"*width"),NULL,d->Obj,id,"width");
457 SetListFromObjField(w,"*join",d->Obj,id,"join");
458 SetTextFromObjField(w,"*miter",d->Obj,id,"miter_limit");
459 SetListFromObjField(w,"*arrow",d->Obj,id,"arrow");
460 getobj(d->Obj,"arrow_length",id,0,NULL,&len);
461 getobj(d->Obj,"arrow_width",id,0,NULL,&(d->wid));
462 d->wid=(d->wid/100)*100;
463 d->ang=atan(0.5*d->wid/len)*2*180/MPI;
464 if (d->ang<10) d->ang=10;
465 else if (d->ang>170) d->ang=170;
466 XtVaSetValues(XtNameToWidget(w,"*sca"),XmNvalue,d->ang,NULL);
467 XtVaSetValues(XtNameToWidget(w,"*scw"),XmNvalue,d->wid/100,NULL);
468 getobj(d->Obj,"R",id,0,NULL,&d->R);
469 getobj(d->Obj,"G",id,0,NULL,&d->G);
470 getobj(d->Obj,"B",id,0,NULL,&d->B);
471 XtVaSetValues(XtNameToWidget(w,"*col"),XmNbackground,RGB(d->R,d->G,d->B),
472 NULL);
473 }
474
LegendArrowDialogPaint(Widget w,XtPointer client_data,XtPointer call_data)475 void LegendArrowDialogPaint(Widget w,XtPointer client_data,XtPointer call_data)
476 {
477 struct LegendArrowDialog *d;
478 XmDrawingAreaCallbackStruct *dd;
479 Window root,win;
480 Display *disp;
481 int x,y,lw,len;
482 unsigned int ww,hh,border,depth;
483 GC gc;
484 XPoint points[3];
485
486 d=(struct LegendArrowDialog *)client_data;
487 dd=(XmDrawingAreaCallbackStruct *)call_data;
488 disp=XtDisplay(w);
489 win=XtWindow(w);
490 gc=XCreateGC(disp,win,0,0);
491 XGetGeometry(disp,win,&root,&x,&y,&ww,&hh,&border,&depth);
492 XSetForeground(disp,gc,WhitePixel(XtDisplay(TopLevel),0));
493 x=y=0;
494 XFillRectangle(disp,win,gc,x,y,ww,hh);
495 XSetForeground(disp,gc,BlackPixel(XtDisplay(TopLevel),0));
496 if (ww/20<hh/20) lw=ww/20;
497 else lw=hh/20;
498 len=d->wid*0.5/tan(d->ang*0.5*MPI/180);
499 XFillRectangle(disp,win,gc,x+nround(lw*(len/10000.0)),y+(hh-lw)/2,ww,lw);
500 points[0].x=x;
501 points[0].y=y+hh/2;
502 points[1].x=x+nround(lw*(len/10000.0));
503 points[1].y=y+hh/2-nround(lw*(d->wid/20000.0));
504 points[2].x=x+nround(lw*(len/10000.0));
505 points[2].y=y+hh/2+nround(lw*(d->wid/20000.0));
506 XFillPolygon(disp,win,gc,points,3,Complex,CoordModeOrigin);
507 XFreeGC(disp,gc);
508 }
509
LegendArrowDialogScaleW(Widget w,XtPointer client_data,XtPointer call_data)510 void LegendArrowDialogScaleW(Widget w,XtPointer client_data,XtPointer call_data)
511 {
512 struct LegendArrowDialog *d;
513 XmScaleCallbackStruct *dd;
514 Widget win;
515
516 d=(struct LegendArrowDialog *)client_data;
517 dd=(XmScaleCallbackStruct *)call_data;
518 d->wid=dd->value*100;
519 win=XtNameToWidget(d->widget,"*win");
520 XClearArea(XtDisplay(win),XtWindow(win),0,0,0,0,TRUE);
521 }
522
LegendArrowDialogScaleL(Widget w,XtPointer client_data,XtPointer call_data)523 void LegendArrowDialogScaleL(Widget w,XtPointer client_data,XtPointer call_data)
524 {
525 struct LegendArrowDialog *d;
526 XmScaleCallbackStruct *dd;
527 Widget win;
528 char buf[30];
529 XmString xs;
530
531 d=(struct LegendArrowDialog *)client_data;
532 dd=(XmScaleCallbackStruct *)call_data;
533 d->ang=dd->value;
534 win=XtNameToWidget(d->widget,"*win");
535 XClearArea(XtDisplay(win),XtWindow(win),0,0,0,0,TRUE);
536 }
537
LegendArrowDialogDelete(Widget w,XtPointer client_data,XtPointer call_data)538 void LegendArrowDialogDelete(Widget w,XtPointer client_data,XtPointer call_data)
539 {
540 struct LegendArrowDialog *d;
541
542 d=(struct LegendArrowDialog *)client_data;
543 d->ret=IDDELETE;
544 }
545
LegendArrowDialogCopy(Widget w,XtPointer client_data,XtPointer call_data)546 void LegendArrowDialogCopy(Widget w,XtPointer client_data,XtPointer call_data)
547 {
548 struct LegendArrowDialog *d;
549 int sel;
550
551 d=(struct LegendArrowDialog *)client_data;
552 if ((sel=CopyClick(d->widget,d->Obj,d->Id,LegendLineCB))!=-1)
553 LegendArrowDialogSetupItem(d->widget,d,sel);
554 }
555
LegendArrowDialogColor(Widget w,XtPointer client_data,XtPointer call_data)556 void LegendArrowDialogColor(Widget w,XtPointer client_data,XtPointer call_data)
557 {
558 struct LegendArrowDialog *d;
559
560 d=(struct LegendArrowDialog *)client_data;
561 GetColor(TopLevel,&d->R,&d->G,&d->B);
562 XtVaSetValues(w,XmNbackground,RGB(d->R,d->G,d->B),NULL);
563 }
564
LegendArrowDialogSetup(Widget w,void * data,int makewidget)565 void LegendArrowDialogSetup(Widget w,void *data,int makewidget)
566 {
567 Arg al[20];
568 Cardinal ac;
569 Widget rc0,rc,rc2,button,da,sc;
570 struct LegendArrowDialog *d;
571 char title[30];
572 XmString xs;
573
574 d=(struct LegendArrowDialog *)data;
575 sprintf(title,"Legend line %d",d->Id);
576 xs=XmStringCreateLocalized(title);
577 XtVaSetValues(w,XmNdialogTitle,xs,NULL);
578 XmStringFree(xs);
579 if (makewidget) {
580 ac=0;
581 XtManageChild(button=XmCreatePushButton(w,"Delete",al,ac));
582 XtAddCallback(button,XmNdisarmCallback,LegendArrowDialogDelete,d);
583 ac=0;
584 XtManageChild(button=XmCreatePushButton(w,"Copy",al,ac));
585 XtAddCallback(button,XmNdisarmCallback,LegendArrowDialogCopy,d);
586
587 ac=0;
588 XtSetArg(al[ac],XmNorientation,XmVERTICAL); ac++;
589 XtManageChild(rc=XmCreateRowColumn(w,"rc",al,ac));
590
591 ac=0;
592 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
593 XtManageChild(rc2=XmCreateRowColumn(rc,"pointsrc",al,ac));
594 ac=0;
595 XtManageChild(XmCreateLabel(rc2,"Points",al,ac));
596 ac=0;
597 XtManageChild(XmCreateTextField(rc2,"points",al,ac));
598
599 ac=0;
600 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
601 XtManageChild(rc0=XmCreateRowColumn(rc,"rc2",al,ac));
602
603 ac=0;
604 XtSetArg(al[ac],XmNorientation,XmVERTICAL); ac++;
605 XtManageChild(rc=XmCreateRowColumn(rc0,"rc3",al,ac));
606
607 ac=0;
608 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
609 XtManageChild(rc2=XmCreateRowColumn(rc,"stylerc",al,ac));
610 ac=0;
611 XtManageChild(XmCreateLabel(rc2,"Style",al,ac));
612 ac=0;
613 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_COMBO_BOX); ac++;
614 XtManageChild(XmCreateComboBox(rc2,"style",al,ac));
615
616 ac=0;
617 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
618 XtManageChild(rc2=XmCreateRowColumn(rc,"widthrc",al,ac));
619 ac=0;
620 XtManageChild(XmCreateLabel(rc2,"Width",al,ac));
621 ac=0;
622 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_COMBO_BOX); ac++;
623 XtManageChild(XmCreateComboBox(rc2,"width",al,ac));
624
625 ac=0;
626 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
627 XtManageChild(rc2=XmCreateRowColumn(rc,"miterrc",al,ac));
628 ac=0;
629 XtManageChild(XmCreateLabel(rc2,"Miter",al,ac));
630 ac=0;
631 XtManageChild(XmCreateTextField(rc2,"miter",al,ac));
632
633 ac=0;
634 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
635 XtManageChild(rc2=XmCreateRowColumn(rc,"joinrc",al,ac));
636 ac=0;
637 XtManageChild(XmCreateLabel(rc2,"Join",al,ac));
638 ac=0;
639 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_LIST); ac++;
640 XtManageChild(XmCreateComboBox(rc2,"join",al,ac));
641
642 ac=0;
643 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
644 XtManageChild(rc2=XmCreateRowColumn(rc,"colorrc",al,ac));
645 ac=0;
646 XtManageChild(XmCreateLabel(rc2,"Color",al,ac));
647 ac=0;
648 XtManageChild(button=XmCreateDrawnButton(rc2,"col",al,ac));
649 XtAddCallback(button,XmNdisarmCallback,LegendArrowDialogColor,d);
650
651 ac=0;
652 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
653 XtManageChild(rc2=XmCreateRowColumn(rc,"arrowrc",al,ac));
654 ac=0;
655 XtManageChild(XmCreateLabel(rc2,"Arrow",al,ac));
656 ac=0;
657 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_COMBO_BOX); ac++;
658 XtManageChild(XmCreateComboBox(rc2,"arrow",al,ac));
659
660 ac=0;
661 XtSetArg(al[ac],XmNorientation,XmVERTICAL); ac++;
662 XtManageChild(rc=XmCreateRowColumn(rc0,"winrc",al,ac));
663 ac=0;
664 XtSetArg(al[ac],XmNminimum,10); ac++;
665 XtSetArg(al[ac],XmNmaximum,170); ac++;
666 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
667 XtSetArg(al[ac],XmNshowValue,XmNEAR_SLIDER); ac++;
668 XtManageChild(sc=XmCreateScale(rc,"sca",al,ac));
669 XtAddCallback(sc,XmNvalueChangedCallback,LegendArrowDialogScaleL,d);
670 XtAddCallback(sc,XmNdragCallback,LegendArrowDialogScaleL,d);
671 ac=0;
672 XtSetArg(al[ac],XmNresizeWidth,FALSE); ac++;
673 XtSetArg(al[ac],XmNresizeHeight,FALSE); ac++;
674 XtManageChild(da=XmCreateDrawnButton(rc,"win",al,ac));
675 XtAddCallback(da,XmNexposeCallback,LegendArrowDialogPaint,d);
676 ac=0;
677 XtSetArg(al[ac],XmNminimum,100); ac++;
678 XtSetArg(al[ac],XmNmaximum,2000); ac++;
679 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
680 XtSetArg(al[ac],XmNshowValue,XmNEAR_SLIDER); ac++;
681 XtManageChild(sc=XmCreateScale(rc,"scw",al,ac));
682 XtAddCallback(sc,XmNvalueChangedCallback,LegendArrowDialogScaleW,d);
683 XtAddCallback(sc,XmNdragCallback,LegendArrowDialogScaleW,d);
684 }
685 LegendArrowDialogSetupItem(w,d,d->Id);
686 }
687
LegendArrowDialogClose(Widget w,void * data)688 void LegendArrowDialogClose(Widget w,void *data)
689 {
690 struct LegendArrowDialog *d;
691 int ret,len;
692
693 d=(struct LegendArrowDialog *)data;
694 if (d->ret!=IDOK) return;
695 ret=d->ret;
696 d->ret=IDLOOP;
697 if (SetObjFieldFromText(w,"*points",d->Obj,d->Id,"points")) return;
698 if (SetObjFieldFromStyle(w,"*style",d->Obj,d->Id,"style")) return;
699 if (SetObjFieldFromText(GetComboBoxText(w,"*width"),NULL,
700 d->Obj,d->Id,"width")) return;
701 if (SetObjFieldFromList(w,"*join",d->Obj,d->Id,"join")) return;
702 if (SetObjFieldFromText(w,"*miter",d->Obj,d->Id,"miter_limit")) return;
703 if (SetObjFieldFromList(w,"*arrow",d->Obj,d->Id,"arrow")) return;
704 len=d->wid*0.5/tan(d->ang*0.5*MPI/180);
705 if (putobj(d->Obj,"arrow_length",d->Id,&len)==-1) return;
706 if (putobj(d->Obj,"arrow_width",d->Id,&(d->wid))==-1) return;
707 if (putobj(d->Obj,"R",d->Id,&(d->R))==-1) return;
708 if (putobj(d->Obj,"G",d->Id,&(d->G))==-1) return;
709 if (putobj(d->Obj,"B",d->Id,&(d->B))==-1) return;
710 d->ret=ret;
711 }
712
LegendArrowDialog(struct LegendArrowDialog * data,struct objlist * obj,int id)713 void LegendArrowDialog(struct LegendArrowDialog *data,
714 struct objlist *obj,int id)
715 {
716 data->SetupWindow=LegendArrowDialogSetup;
717 data->CloseWindow=LegendArrowDialogClose;
718 data->Obj=obj;
719 data->Id=id;
720 }
721
LegendRectDialogSetupItem(Widget w,struct LegendRectDialog * d,int id)722 void LegendRectDialogSetupItem(Widget w,struct LegendRectDialog *d,int id)
723 {
724 SetTextFromObjField(w,"*x1",d->Obj,id,"x1");
725 SetTextFromObjField(w,"*y1",d->Obj,id,"y1");
726 SetTextFromObjField(w,"*x2",d->Obj,id,"x2");
727 SetTextFromObjField(w,"*y2",d->Obj,id,"y2");
728 SetStyleFromObjField(w,"*style",d->Obj,id,"style");
729 SetComboList(w,"*width",cblinewidth,CBLINEWIDTH);
730 SetTextFromObjField(GetComboBoxText(w,"*width"),NULL,d->Obj,id,"width");
731 SetComboListFromObjField(GetComboBoxList(w,"*width"),NULL,d->Obj,id,"width");
732 getobj(d->Obj,"R",id,0,NULL,&d->R);
733 getobj(d->Obj,"G",id,0,NULL,&d->G);
734 getobj(d->Obj,"B",id,0,NULL,&d->B);
735 XtVaSetValues(XtNameToWidget(w,"*col"),XmNbackground,RGB(d->R,d->G,d->B),NULL);
736 SetToggleFromObjField(w,"*Fill",d->Obj,id,"fill");
737 getobj(d->Obj,"R2",id,0,NULL,&d->R2);
738 getobj(d->Obj,"G2",id,0,NULL,&d->G2);
739 getobj(d->Obj,"B2",id,0,NULL,&d->B2);
740 XtVaSetValues(XtNameToWidget(w,"*col2"),XmNbackground,RGB(d->R2,d->G2,d->B2),NULL);
741 SetToggleFromObjField(w,"*Frame",d->Obj,id,"frame");
742 }
743
LegendRectDialogDelete(Widget w,XtPointer client_data,XtPointer call_data)744 void LegendRectDialogDelete(Widget w,XtPointer client_data,XtPointer call_data)
745 {
746 struct LegendRectDialog *d;
747
748 d=(struct LegendRectDialog *)client_data;
749 d->ret=IDDELETE;
750 }
751
LegendRectDialogCopy(Widget w,XtPointer client_data,XtPointer call_data)752 void LegendRectDialogCopy(Widget w,XtPointer client_data,XtPointer call_data)
753 {
754 struct LegendRectDialog *d;
755 int sel;
756
757 d=(struct LegendRectDialog *)client_data;
758 if ((sel=CopyClick(d->widget,d->Obj,d->Id,LegendRectCB))!=-1)
759 LegendRectDialogSetupItem(d->widget,d,sel);
760 }
761
LegendRectDialogColor(Widget w,XtPointer client_data,XtPointer call_data)762 void LegendRectDialogColor(Widget w,XtPointer client_data,XtPointer call_data)
763 {
764 struct LegendRectDialog *d;
765
766 d=(struct LegendRectDialog *)client_data;
767 GetColor(TopLevel,&d->R,&d->G,&d->B);
768 XtVaSetValues(w,XmNbackground,RGB(d->R,d->G,d->B),NULL);
769 }
770
LegendRectDialogColor2(Widget w,XtPointer client_data,XtPointer call_data)771 void LegendRectDialogColor2(Widget w,XtPointer client_data,XtPointer call_data)
772 {
773 struct LegendRectDialog *d;
774
775 d=(struct LegendRectDialog *)client_data;
776 GetColor(TopLevel,&d->R2,&d->G2,&d->B2);
777 XtVaSetValues(w,XmNbackground,RGB(d->R2,d->G2,d->B2),NULL);
778 }
779
LegendRectDialogSetup(Widget w,void * data,int makewidget)780 void LegendRectDialogSetup(Widget w,void *data,int makewidget)
781 {
782 Arg al[20];
783 Cardinal ac;
784 Widget rc,rc2,button;
785 struct LegendRectDialog *d;
786 char title[30];
787 XmString xs;
788
789 d=(struct LegendRectDialog *)data;
790 sprintf(title,"Legend rectangle %d",d->Id);
791 xs=XmStringCreateLocalized(title);
792 XtVaSetValues(w,XmNdialogTitle,xs,NULL);
793 XmStringFree(xs);
794 if (makewidget) {
795 ac=0;
796 XtManageChild(button=XmCreatePushButton(w,"Delete",al,ac));
797 XtAddCallback(button,XmNdisarmCallback,LegendRectDialogDelete,d);
798 ac=0;
799 XtManageChild(button=XmCreatePushButton(w,"Copy",al,ac));
800 XtAddCallback(button,XmNdisarmCallback,LegendRectDialogCopy,d);
801
802 ac=0;
803 XtSetArg(al[ac],XmNorientation,XmVERTICAL); ac++;
804 XtManageChild(rc=XmCreateRowColumn(w,"rc",al,ac));
805
806 ac=0;
807 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
808 XtManageChild(rc2=XmCreateRowColumn(rc,"pointsrc",al,ac));
809 ac=0;
810 XtManageChild(XmCreateLabel(rc2,"X1",al,ac));
811 ac=0;
812 XtManageChild(XmCreateTextField(rc2,"x1",al,ac));
813 ac=0;
814 XtManageChild(XmCreateLabel(rc2,"Y1",al,ac));
815 ac=0;
816 XtManageChild(XmCreateTextField(rc2,"y1",al,ac));
817 ac=0;
818 XtManageChild(XmCreateLabel(rc2,"X2",al,ac));
819 ac=0;
820 XtManageChild(XmCreateTextField(rc2,"x2",al,ac));
821 ac=0;
822 XtManageChild(XmCreateLabel(rc2,"Y2",al,ac));
823 ac=0;
824 XtManageChild(XmCreateTextField(rc2,"y2",al,ac));
825
826 ac=0;
827 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
828 XtManageChild(rc2=XmCreateRowColumn(rc,"stylerc",al,ac));
829 ac=0;
830 XtManageChild(XmCreateLabel(rc2,"Style",al,ac));
831 ac=0;
832 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_COMBO_BOX); ac++;
833 XtManageChild(XmCreateComboBox(rc2,"style",al,ac));
834 ac=0;
835 XtManageChild(XmCreateLabel(rc2,"Width",al,ac));
836 ac=0;
837 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_COMBO_BOX); ac++;
838 XtManageChild(XmCreateComboBox(rc2,"width",al,ac));
839
840 ac=0;
841 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
842 XtManageChild(rc2=XmCreateRowColumn(rc,"colorrc",al,ac));
843 ac=0;
844 XtManageChild(XmCreateLabel(rc2,"Color",al,ac));
845 ac=0;
846 XtManageChild(button=XmCreateDrawnButton(rc2,"col",al,ac));
847 XtAddCallback(button,XmNdisarmCallback,LegendRectDialogColor,d);
848 ac=0;
849 XtManageChild(XmCreateToggleButton(rc2,"Fill",al,ac));
850 ac=0;
851 XtManageChild(XmCreateLabel(rc2,"Color2",al,ac));
852 ac=0;
853 XtManageChild(button=XmCreateDrawnButton(rc2,"col2",al,ac));
854 XtAddCallback(button,XmNdisarmCallback,LegendRectDialogColor2,d);
855 ac=0;
856 XtManageChild(XmCreateToggleButton(rc2,"Frame",al,ac));
857 }
858 LegendRectDialogSetupItem(w,d,d->Id);
859 }
860
LegendRectDialogClose(Widget w,void * data)861 void LegendRectDialogClose(Widget w,void *data)
862 {
863 struct LegendRectDialog *d;
864 int ret;
865
866 d=(struct LegendRectDialog *)data;
867 if (d->ret!=IDOK) return;
868 ret=d->ret;
869 d->ret=IDLOOP;
870 if (SetObjFieldFromText(w,"*x1",d->Obj,d->Id,"x1")) return;
871 if (SetObjFieldFromText(w,"*y1",d->Obj,d->Id,"y1")) return;
872 if (SetObjFieldFromText(w,"*x2",d->Obj,d->Id,"x2")) return;
873 if (SetObjFieldFromText(w,"*y2",d->Obj,d->Id,"y2")) return;
874 if (SetObjFieldFromStyle(w,"*style",d->Obj,d->Id,"style")) return;
875 if (SetObjFieldFromText(GetComboBoxText(w,"*width"),NULL,
876 d->Obj,d->Id,"width")) return;
877 if (putobj(d->Obj,"R",d->Id,&(d->R))==-1) return;
878 if (putobj(d->Obj,"G",d->Id,&(d->G))==-1) return;
879 if (putobj(d->Obj,"B",d->Id,&(d->B))==-1) return;
880 if (SetObjFieldFromToggle(w,"*Fill",d->Obj,d->Id,"fill")) return;
881 if (putobj(d->Obj,"R2",d->Id,&(d->R2))==-1) return;
882 if (putobj(d->Obj,"G2",d->Id,&(d->G2))==-1) return;
883 if (putobj(d->Obj,"B2",d->Id,&(d->B2))==-1) return;
884 if (SetObjFieldFromToggle(w,"*Frame",d->Obj,d->Id,"frame")) return;
885 d->ret=ret;
886 }
887
LegendRectDialog(struct LegendRectDialog * data,struct objlist * obj,int id)888 void LegendRectDialog(struct LegendRectDialog *data,
889 struct objlist *obj,int id)
890 {
891 data->SetupWindow=LegendRectDialogSetup;
892 data->CloseWindow=LegendRectDialogClose;
893 data->Obj=obj;
894 data->Id=id;
895 }
896
LegendArcDialogSetupItem(Widget w,struct LegendArcDialog * d,int id)897 void LegendArcDialogSetupItem(Widget w,struct LegendArcDialog *d,int id)
898 {
899 SetTextFromObjField(w,"*x",d->Obj,id,"x");
900 SetTextFromObjField(w,"*y",d->Obj,id,"y");
901 SetTextFromObjField(w,"*rx",d->Obj,id,"rx");
902 SetTextFromObjField(w,"*ry",d->Obj,id,"ry");
903 SetStyleFromObjField(w,"*style",d->Obj,id,"style");
904 SetComboList(w,"*width",cblinewidth,CBLINEWIDTH);
905 SetTextFromObjField(GetComboBoxText(w,"*width"),NULL,d->Obj,id,"width");
906 SetComboListFromObjField(GetComboBoxList(w,"*width"),NULL,d->Obj,id,"width");
907 SetTextFromObjField(w,"*angle1",d->Obj,id,"angle1");
908 SetTextFromObjField(w,"*angle2",d->Obj,id,"angle2");
909 SetToggleFromObjField(w,"*Pieslice",d->Obj,id,"pieslice");
910 getobj(d->Obj,"R",id,0,NULL,&d->R);
911 getobj(d->Obj,"G",id,0,NULL,&d->G);
912 getobj(d->Obj,"B",id,0,NULL,&d->B);
913 XtVaSetValues(XtNameToWidget(w,"*col"),XmNbackground,RGB(d->R,d->G,d->B),NULL);
914 SetToggleFromObjField(w,"*Fill",d->Obj,id,"fill");
915 }
916
917
LegendArcDialogDelete(Widget w,XtPointer client_data,XtPointer call_data)918 void LegendArcDialogDelete(Widget w,XtPointer client_data,XtPointer call_data)
919 {
920 struct LegendArcDialog *d;
921
922 d=(struct LegendArcDialog *)client_data;
923 d->ret=IDDELETE;
924 }
925
LegendArcDialogCopy(Widget w,XtPointer client_data,XtPointer call_data)926 void LegendArcDialogCopy(Widget w,XtPointer client_data,XtPointer call_data)
927 {
928 struct LegendArcDialog *d;
929 int sel;
930
931 d=(struct LegendArcDialog *)client_data;
932 if ((sel=CopyClick(d->widget,d->Obj,d->Id,LegendArcCB))!=-1)
933 LegendArcDialogSetupItem(d->widget,d,sel);
934 }
935
LegendArcDialogColor(Widget w,XtPointer client_data,XtPointer call_data)936 void LegendArcDialogColor(Widget w,XtPointer client_data,XtPointer call_data)
937 {
938 struct LegendArcDialog *d;
939
940 d=(struct LegendArcDialog *)client_data;
941 GetColor(TopLevel,&d->R,&d->G,&d->B);
942 XtVaSetValues(w,XmNbackground,RGB(d->R,d->G,d->B),NULL);
943 }
944
LegendArcDialogSetup(Widget w,void * data,int makewidget)945 void LegendArcDialogSetup(Widget w,void *data,int makewidget)
946 {
947 Arg al[20];
948 Cardinal ac;
949 Widget rc,rc2,button;
950 struct LegendArcDialog *d;
951 char title[30];
952 XmString xs;
953
954 d=(struct LegendArcDialog *)data;
955 sprintf(title,"Legend arc %d",d->Id);
956 xs=XmStringCreateLocalized(title);
957 XtVaSetValues(w,XmNdialogTitle,xs,NULL);
958 XmStringFree(xs);
959 if (makewidget) {
960 ac=0;
961 XtManageChild(button=XmCreatePushButton(w,"Delete",al,ac));
962 XtAddCallback(button,XmNdisarmCallback,LegendArcDialogDelete,d);
963 ac=0;
964 XtManageChild(button=XmCreatePushButton(w,"Copy",al,ac));
965 XtAddCallback(button,XmNdisarmCallback,LegendArcDialogCopy,d);
966
967 ac=0;
968 XtSetArg(al[ac],XmNorientation,XmVERTICAL); ac++;
969 XtManageChild(rc=XmCreateRowColumn(w,"rc",al,ac));
970
971 ac=0;
972 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
973 XtManageChild(rc2=XmCreateRowColumn(rc,"pointsrc",al,ac));
974 ac=0;
975 XtManageChild(XmCreateLabel(rc2,"X",al,ac));
976 ac=0;
977 XtManageChild(XmCreateTextField(rc2,"x",al,ac));
978 ac=0;
979 XtManageChild(XmCreateLabel(rc2,"Y",al,ac));
980 ac=0;
981 XtManageChild(XmCreateTextField(rc2,"y",al,ac));
982 ac=0;
983 XtManageChild(XmCreateLabel(rc2,"RX",al,ac));
984 ac=0;
985 XtManageChild(XmCreateTextField(rc2,"rx",al,ac));
986 ac=0;
987 XtManageChild(XmCreateLabel(rc2,"RY",al,ac));
988 ac=0;
989 XtManageChild(XmCreateTextField(rc2,"ry",al,ac));
990
991 ac=0;
992 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
993 XtManageChild(rc2=XmCreateRowColumn(rc,"anglerc",al,ac));
994 ac=0;
995 XtManageChild(XmCreateToggleButton(rc2,"Pieslice",al,ac));
996 ac=0;
997 XtManageChild(XmCreateLabel(rc2,"Angle1",al,ac));
998 ac=0;
999 XtManageChild(XmCreateTextField(rc2,"angle1",al,ac));
1000 ac=0;
1001 XtManageChild(XmCreateLabel(rc2,"Angle2",al,ac));
1002 ac=0;
1003 XtManageChild(XmCreateTextField(rc2,"angle2",al,ac));
1004
1005 ac=0;
1006 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
1007 XtManageChild(rc2=XmCreateRowColumn(rc,"stylerc",al,ac));
1008 ac=0;
1009 XtManageChild(XmCreateLabel(rc2,"Style",al,ac));
1010 ac=0;
1011 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_COMBO_BOX); ac++;
1012 XtManageChild(XmCreateComboBox(rc2,"style",al,ac));
1013 ac=0;
1014 XtManageChild(XmCreateLabel(rc2,"Width",al,ac));
1015 ac=0;
1016 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_COMBO_BOX); ac++;
1017 XtManageChild(XmCreateComboBox(rc2,"width",al,ac));
1018
1019 ac=0;
1020 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
1021 XtManageChild(rc2=XmCreateRowColumn(rc,"colorrc",al,ac));
1022 ac=0;
1023 XtManageChild(XmCreateLabel(rc2,"Color",al,ac));
1024 ac=0;
1025 XtManageChild(button=XmCreateDrawnButton(rc2,"col",al,ac));
1026 XtAddCallback(button,XmNdisarmCallback,LegendArcDialogColor,d);
1027 ac=0;
1028 XtManageChild(XmCreateToggleButton(rc2,"Fill",al,ac));
1029 }
1030 LegendArcDialogSetupItem(w,d,d->Id);
1031 }
1032
LegendArcDialogClose(Widget w,void * data)1033 void LegendArcDialogClose(Widget w,void *data)
1034 {
1035 struct LegendArcDialog *d;
1036 int ret;
1037
1038 d=(struct LegendArcDialog *)data;
1039 if (d->ret!=IDOK) return;
1040 ret=d->ret;
1041 d->ret=IDLOOP;
1042 if (SetObjFieldFromText(w,"*x",d->Obj,d->Id,"x")) return;
1043 if (SetObjFieldFromText(w,"*y",d->Obj,d->Id,"y")) return;
1044 if (SetObjFieldFromText(w,"*rx",d->Obj,d->Id,"rx")) return;
1045 if (SetObjFieldFromText(w,"*ry",d->Obj,d->Id,"ry")) return;
1046 if (SetObjFieldFromStyle(w,"*style",d->Obj,d->Id,"style")) return;
1047 if (SetObjFieldFromText(GetComboBoxText(w,"*width"),NULL,
1048 d->Obj,d->Id,"width")) return;
1049 if (SetObjFieldFromText(w,"*angle1",d->Obj,d->Id,"angle1")) return;
1050 if (SetObjFieldFromText(w,"*angle2",d->Obj,d->Id,"angle2")) return;
1051 if (SetObjFieldFromToggle(w,"*Pieslice",d->Obj,d->Id,"pieslice")) return;
1052 if (putobj(d->Obj,"R",d->Id,&(d->R))==-1) return;
1053 if (putobj(d->Obj,"G",d->Id,&(d->G))==-1) return;
1054 if (putobj(d->Obj,"B",d->Id,&(d->B))==-1) return;
1055 if (SetObjFieldFromToggle(w,"*Fill",d->Obj,d->Id,"fill")) return;
1056 d->ret=ret;
1057 }
1058
LegendArcDialog(struct LegendArcDialog * data,struct objlist * obj,int id)1059 void LegendArcDialog(struct LegendArcDialog *data,
1060 struct objlist *obj,int id)
1061 {
1062 data->SetupWindow=LegendArcDialogSetup;
1063 data->CloseWindow=LegendArcDialogClose;
1064 data->Obj=obj;
1065 data->Id=id;
1066 }
1067
LegendMarkDialogSetupItem(Widget w,struct LegendMarkDialog * d,int id)1068 void LegendMarkDialogSetupItem(Widget w,struct LegendMarkDialog *d,int id)
1069 {
1070 int a;
1071
1072 SetTextFromObjField(w,"*x",d->Obj,id,"x");
1073 SetTextFromObjField(w,"*y",d->Obj,id,"y");
1074 getobj(d->Obj,"type",id,0,NULL,&a);
1075 if (a<0) a=89;
1076 if (a>89) a=89;
1077 XtVaSetValues(XtNameToWidget(w,"*mark"),XmNlabelPixmap,
1078 NgraphApp.markpix[a],NULL);
1079 MarkDialog(&d->mark,a);
1080 SetComboList(w,"*size",cbmarksize,CBMARKSIZE);
1081 SetTextFromObjField(GetComboBoxText(w,"*size"),NULL,d->Obj,id,"size");
1082 SetComboListFromObjField(GetComboBoxList(w,"*size"),NULL,d->Obj,id,"size");
1083 SetStyleFromObjField(w,"*style",d->Obj,id,"style");
1084 SetComboList(w,"*width",cblinewidth,CBLINEWIDTH);
1085 SetTextFromObjField(GetComboBoxText(w,"*width"),NULL,d->Obj,id,"width");
1086 SetComboListFromObjField(GetComboBoxList(w,"*width"),NULL,d->Obj,id,"width");
1087 getobj(d->Obj,"R",id,0,NULL,&d->R);
1088 getobj(d->Obj,"G",id,0,NULL,&d->G);
1089 getobj(d->Obj,"B",id,0,NULL,&d->B);
1090 XtVaSetValues(XtNameToWidget(w,"*col"),XmNbackground,RGB(d->R,d->G,d->B),NULL);
1091 getobj(d->Obj,"R2",id,0,NULL,&d->R2);
1092 getobj(d->Obj,"G2",id,0,NULL,&d->G2);
1093 getobj(d->Obj,"B2",id,0,NULL,&d->B2);
1094 XtVaSetValues(XtNameToWidget(w,"*col2"),XmNbackground,RGB(d->R2,d->G2,d->B2),NULL);
1095 }
1096
LegendMarkDialogDelete(Widget w,XtPointer client_data,XtPointer call_data)1097 void LegendMarkDialogDelete(Widget w,XtPointer client_data,XtPointer call_data)
1098 {
1099 struct LegendMarkDialog *d;
1100
1101 d=(struct LegendMarkDialog *)client_data;
1102 d->ret=IDDELETE;
1103 }
1104
LegendMarkDialogCopy(Widget w,XtPointer client_data,XtPointer call_data)1105 void LegendMarkDialogCopy(Widget w,XtPointer client_data,XtPointer call_data)
1106 {
1107 struct LegendMarkDialog *d;
1108 int sel;
1109
1110 d=(struct LegendMarkDialog *)client_data;
1111 if ((sel=CopyClick(d->widget,d->Obj,d->Id,LegendArcCB))!=-1)
1112 LegendMarkDialogSetupItem(d->widget,d,sel);
1113 }
1114
LegendMarkDialogColor(Widget w,XtPointer client_data,XtPointer call_data)1115 void LegendMarkDialogColor(Widget w,XtPointer client_data,XtPointer call_data)
1116 {
1117 struct LegendMarkDialog *d;
1118
1119 d=(struct LegendMarkDialog *)client_data;
1120 GetColor(TopLevel,&d->R,&d->G,&d->B);
1121 XtVaSetValues(w,XmNbackground,RGB(d->R,d->G,d->B),NULL);
1122 }
1123
LegendMarkDialogColor2(Widget w,XtPointer client_data,XtPointer call_data)1124 void LegendMarkDialogColor2(Widget w,XtPointer client_data,XtPointer call_data)
1125 {
1126 struct LegendMarkDialog *d;
1127
1128 d=(struct LegendMarkDialog *)client_data;
1129 GetColor(TopLevel,&d->R2,&d->G2,&d->B2);
1130 XtVaSetValues(w,XmNbackground,RGB(d->R2,d->G2,d->B2),NULL);
1131 }
1132
LegendMarkDialogMark(Widget w,XtPointer client_data,XtPointer call_data)1133 void LegendMarkDialogMark(Widget w,XtPointer client_data,XtPointer call_data)
1134 {
1135 struct LegendMarkDialog *d;
1136
1137 d=(struct LegendMarkDialog *)client_data;
1138 DialogExecute(d->widget,&d->mark);
1139 XtVaSetValues(w,XmNlabelPixmap,NgraphApp.markpix[d->mark.Type],NULL);
1140 }
1141
LegendMarkDialogSetup(Widget w,void * data,int makewidget)1142 void LegendMarkDialogSetup(Widget w,void *data,int makewidget)
1143 {
1144 Arg al[20];
1145 Cardinal ac;
1146 Widget rc,rc2,button;
1147 struct LegendMarkDialog *d;
1148 char title[30];
1149 XmString xs;
1150
1151 d=(struct LegendMarkDialog *)data;
1152 sprintf(title,"Legend mark %d",d->Id);
1153 xs=XmStringCreateLocalized(title);
1154 XtVaSetValues(w,XmNdialogTitle,xs,NULL);
1155 XmStringFree(xs);
1156 if (makewidget) {
1157 ac=0;
1158 XtManageChild(button=XmCreatePushButton(w,"Delete",al,ac));
1159 XtAddCallback(button,XmNdisarmCallback,LegendMarkDialogDelete,d);
1160 ac=0;
1161 XtManageChild(button=XmCreatePushButton(w,"Copy",al,ac));
1162 XtAddCallback(button,XmNdisarmCallback,LegendMarkDialogCopy,d);
1163
1164 ac=0;
1165 XtSetArg(al[ac],XmNorientation,XmVERTICAL); ac++;
1166 XtManageChild(rc=XmCreateRowColumn(w,"rc",al,ac));
1167
1168 ac=0;
1169 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
1170 XtManageChild(rc2=XmCreateRowColumn(rc,"pointsrc",al,ac));
1171 ac=0;
1172 XtManageChild(XmCreateLabel(rc2,"X",al,ac));
1173 ac=0;
1174 XtManageChild(XmCreateTextField(rc2,"x",al,ac));
1175 ac=0;
1176 XtManageChild(XmCreateLabel(rc2,"Y",al,ac));
1177 ac=0;
1178 XtManageChild(XmCreateTextField(rc2,"y",al,ac));
1179
1180 ac=0;
1181 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
1182 XtManageChild(rc2=XmCreateRowColumn(rc,"stylerc",al,ac));
1183 ac=0;
1184 XtManageChild(XmCreateLabel(rc2,"Style",al,ac));
1185 ac=0;
1186 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_COMBO_BOX); ac++;
1187 XtManageChild(XmCreateComboBox(rc2,"style",al,ac));
1188 ac=0;
1189 XtManageChild(XmCreateLabel(rc2,"Width",al,ac));
1190 ac=0;
1191 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_COMBO_BOX); ac++;
1192 XtManageChild(XmCreateComboBox(rc2,"width",al,ac));
1193
1194 ac=0;
1195 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
1196 XtManageChild(rc2=XmCreateRowColumn(rc,"markrc",al,ac));
1197 ac=0;
1198 XtManageChild(XmCreateLabel(rc2,"Mark",al,ac));
1199 ac=0;
1200 XtSetArg(al[ac],XmNlabelType,XmPIXMAP); ac++;
1201 XtSetArg(al[ac],XmNlabelPixmap,NgraphApp.markpix[0]); ac++;
1202 XtManageChild(button=XmCreateDrawnButton(rc2,"mark",al,ac));
1203 XtAddCallback(button,XmNdisarmCallback,LegendMarkDialogMark,d);
1204 ac=0;
1205 XtManageChild(XmCreateLabel(rc2," Size",al,ac));
1206 ac=0;
1207 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_COMBO_BOX); ac++;
1208 XtManageChild(XmCreateComboBox(rc2,"size",al,ac));
1209
1210 ac=0;
1211 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
1212 XtManageChild(rc2=XmCreateRowColumn(rc,"colorrc",al,ac));
1213 ac=0;
1214 XtManageChild(XmCreateLabel(rc2,"Color1",al,ac));
1215 ac=0;
1216 XtManageChild(button=XmCreateDrawnButton(rc2,"col",al,ac));
1217 XtAddCallback(button,XmNdisarmCallback,LegendMarkDialogColor,d);
1218 ac=0;
1219 XtManageChild(XmCreateLabel(rc2,"Color2",al,ac));
1220 ac=0;
1221 XtManageChild(button=XmCreateDrawnButton(rc2,"col2",al,ac));
1222 XtAddCallback(button,XmNdisarmCallback,LegendMarkDialogColor2,d);
1223
1224 XtManageChild(d->widget);
1225 XtVaSetValues(rc,XmNresizeWidth,FALSE,
1226 XmNresizeHeight,FALSE,NULL);
1227 }
1228 LegendMarkDialogSetupItem(w,d,d->Id);
1229 if (makewidget) d->widget=NULL;
1230 }
1231
LegendMarkDialogClose(Widget w,void * data)1232 void LegendMarkDialogClose(Widget w,void *data)
1233 {
1234 struct LegendMarkDialog *d;
1235 int ret;
1236
1237 d=(struct LegendMarkDialog *)data;
1238 if (d->ret!=IDOK) return;
1239 ret=d->ret;
1240 d->ret=IDLOOP;
1241 if (SetObjFieldFromText(w,"*x",d->Obj,d->Id,"x")) return;
1242 if (SetObjFieldFromText(w,"*y",d->Obj,d->Id,"y")) return;
1243 if (putobj(d->Obj,"type",d->Id,&(d->mark.Type))==-1) return;
1244 if (SetObjFieldFromText(GetComboBoxText(w,"*size"),NULL,
1245 d->Obj,d->Id,"size")) return;
1246 if (SetObjFieldFromStyle(w,"*style",d->Obj,d->Id,"style")) return;
1247 if (SetObjFieldFromText(GetComboBoxText(w,"*width"),NULL,
1248 d->Obj,d->Id,"width")) return;
1249 if (putobj(d->Obj,"R",d->Id,&(d->R))==-1) return;
1250 if (putobj(d->Obj,"G",d->Id,&(d->G))==-1) return;
1251 if (putobj(d->Obj,"B",d->Id,&(d->B))==-1) return;
1252 if (putobj(d->Obj,"R2",d->Id,&(d->R2))==-1) return;
1253 if (putobj(d->Obj,"G2",d->Id,&(d->G2))==-1) return;
1254 if (putobj(d->Obj,"B2",d->Id,&(d->B2))==-1) return;
1255 d->ret=ret;
1256 }
1257
LegendMarkDialog(struct LegendMarkDialog * data,struct objlist * obj,int id)1258 void LegendMarkDialog(struct LegendMarkDialog *data,
1259 struct objlist *obj,int id)
1260 {
1261 data->SetupWindow=LegendMarkDialogSetup;
1262 data->CloseWindow=LegendMarkDialogClose;
1263 data->Obj=obj;
1264 data->Id=id;
1265 }
1266
LegendTextDialogSetupItem(Widget w,struct LegendTextDialog * d,int id)1267 void LegendTextDialogSetupItem(Widget w,struct LegendTextDialog *d,int id)
1268 {
1269 int j,selfont;
1270 struct fontmap *fcur;
1271 char *font;
1272 XmString xs;
1273 char *buf;
1274
1275 SetTextFromObjField(w,"*x",d->Obj,id,"x");
1276 SetTextFromObjField(w,"*y",d->Obj,id,"y");
1277
1278 sgetobjfield(d->Obj,id,"text",NULL,&buf,FALSE,FALSE,FALSE);
1279 #ifdef JAPANESE
1280 /* SJIS ---> EUC */
1281 njms2euc(buf);
1282 #endif
1283 XtVaSetValues(XtNameToWidget(w,"*text"),XmNvalue,buf,NULL);
1284 memfree(buf);
1285 SetComboList(w,"*direction",cbdirection,CBDIRECTION);
1286 SetTextFromObjField(GetComboBoxText(w,"*direction"),NULL,
1287 d->Obj,id,"direction");
1288 SetComboListFromObjField(GetComboBoxList(w,"*direction"),NULL,
1289 d->Obj,id,"direction");
1290 SetTextFromObjField(w,"*space",d->Obj,id,"space");
1291 SetComboList(w,"*pt",cbtextpt,CBTEXTPT);
1292 SetTextFromObjField(GetComboBoxText(w,"*pt"),NULL,
1293 d->Obj,id,"pt");
1294 SetComboListFromObjField(GetComboBoxList(w,"*pt"),NULL,
1295 d->Obj,id,"pt");
1296 SetTextFromObjField(w,"*script",d->Obj,id,"script_size");
1297 getobj(d->Obj,"font",id,0,NULL,&font);
1298 XmListDeleteAllItems(GetComboBoxList(w,"*font"));
1299 fcur=mxlocal->fontmaproot;
1300 j=0;
1301 selfont=-1;
1302 while (fcur!=NULL) {
1303 if (!(fcur->twobyte)) {
1304 xs=XmStringCreateLocalized(fcur->fontalias);
1305 XmListAddItem(GetComboBoxList(w,"*font"),xs,0);
1306 XmStringFree(xs);
1307 if (strcmp(font,fcur->fontalias)==0) selfont=j;
1308 j++;
1309 }
1310 fcur=fcur->next;
1311 }
1312 SetComboBoxVisibleItemCount(w,"*font",j);
1313 if (selfont!=-1)
1314 XmListSelectPos(GetComboBoxList(w,"*font"),selfont+1,TRUE);
1315 #ifdef JAPANESE
1316 getobj(d->Obj,"jfont",id,0,NULL,&font);
1317 XmListDeleteAllItems(GetComboBoxList(w,"*jfont"));
1318 fcur=mxlocal->fontmaproot;
1319 j=0;
1320 selfont=-1;
1321 while (fcur!=NULL) {
1322 if (fcur->twobyte) {
1323 xs=XmStringCreateLocalized(fcur->fontalias);
1324 XmListAddItem(GetComboBoxList(w,"*jfont"),xs,0);
1325 XmStringFree(xs);
1326 if (strcmp(font,fcur->fontalias)==0) selfont=j;
1327 j++;
1328 }
1329 fcur=fcur->next;
1330 }
1331 SetComboBoxVisibleItemCount(w,"*jfont",j);
1332 if (selfont!=-1)
1333 XmListSelectPos(GetComboBoxList(w,"*jfont"),selfont+1,TRUE);
1334 #endif
1335 getobj(d->Obj,"R",id,0,NULL,&d->R);
1336 getobj(d->Obj,"G",id,0,NULL,&d->G);
1337 getobj(d->Obj,"B",id,0,NULL,&d->B);
1338 XtVaSetValues(XtNameToWidget(w,"*col"),
1339 XmNbackground,RGB(d->R,d->G,d->B),NULL);
1340 SetToggleFromObjField(w,"*Raw",d->Obj,id,"raw");
1341 }
1342
LegendTextDialogDelete(Widget w,XtPointer client_data,XtPointer call_data)1343 void LegendTextDialogDelete(Widget w,XtPointer client_data,XtPointer call_data)
1344 {
1345 struct LegendTextDialog *d;
1346
1347 d=(struct LegendTextDialog *)client_data;
1348 d->ret=IDDELETE;
1349 }
1350
LegendTextDialogCopy(Widget w,XtPointer client_data,XtPointer call_data)1351 void LegendTextDialogCopy(Widget w,XtPointer client_data,XtPointer call_data)
1352 {
1353 struct LegendTextDialog *d;
1354 int sel;
1355
1356 d=(struct LegendTextDialog *)client_data;
1357 if ((sel=CopyClick(d->widget,d->Obj,d->Id,LegendTextCB))!=-1)
1358 LegendTextDialogSetupItem(d->widget,d,sel);
1359 }
1360
LegendTextDialogColor(Widget w,XtPointer client_data,XtPointer call_data)1361 void LegendTextDialogColor(Widget w,XtPointer client_data,XtPointer call_data)
1362 {
1363 struct LegendTextDialog *d;
1364
1365 d=(struct LegendTextDialog *)client_data;
1366 GetColor(TopLevel,&d->R,&d->G,&d->B);
1367 XtVaSetValues(w,XmNbackground,RGB(d->R,d->G,d->B),NULL);
1368 }
1369
LegendTextDialogSetup(Widget w,void * data,int makewidget)1370 void LegendTextDialogSetup(Widget w,void *data,int makewidget)
1371 {
1372 Arg al[20];
1373 Cardinal ac;
1374 Widget rc,rc2,button;
1375 struct LegendTextDialog *d;
1376 char title[30];
1377 XmString xs;
1378
1379 d=(struct LegendTextDialog *)data;
1380 sprintf(title,"Legend text %d",d->Id);
1381 xs=XmStringCreateLocalized(title);
1382 XtVaSetValues(w,XmNdialogTitle,xs,NULL);
1383 XmStringFree(xs);
1384 if (makewidget) {
1385 ac=0;
1386 XtManageChild(button=XmCreatePushButton(w,"Delete",al,ac));
1387 XtAddCallback(button,XmNdisarmCallback,LegendTextDialogDelete,d);
1388 ac=0;
1389 XtManageChild(button=XmCreatePushButton(w,"Copy",al,ac));
1390 XtAddCallback(button,XmNdisarmCallback,LegendTextDialogCopy,d);
1391
1392 ac=0;
1393 XtSetArg(al[ac],XmNorientation,XmVERTICAL); ac++;
1394 XtManageChild(rc=XmCreateRowColumn(w,"rc",al,ac));
1395
1396 ac=0;
1397 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
1398 XtManageChild(rc2=XmCreateRowColumn(rc,"pointsrc",al,ac));
1399 ac=0;
1400 XtManageChild(XmCreateLabel(rc2,"X",al,ac));
1401 ac=0;
1402 XtManageChild(XmCreateTextField(rc2,"x",al,ac));
1403 ac=0;
1404 XtManageChild(XmCreateLabel(rc2,"Y",al,ac));
1405 ac=0;
1406 XtManageChild(XmCreateTextField(rc2,"y",al,ac));
1407
1408 ac=0;
1409 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
1410 XtManageChild(rc2=XmCreateRowColumn(rc,"textrc",al,ac));
1411 ac=0;
1412 XtManageChild(XmCreateLabel(rc2,"Text",al,ac));
1413 ac=0;
1414 XtManageChild(XmCreateTextField(rc2,"text",al,ac));
1415 ac=0;
1416 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
1417 XtManageChild(rc2=XmCreateRowColumn(rc,"ptrc",al,ac));
1418 ac=0;
1419 XtManageChild(XmCreateLabel(rc2,"Pt",al,ac));
1420 ac=0;
1421 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_COMBO_BOX); ac++;
1422 XtManageChild(XmCreateComboBox(rc2,"pt",al,ac));
1423 ac=0;
1424 XtManageChild(XmCreateLabel(rc2,"Space",al,ac));
1425 ac=0;
1426 XtManageChild(XmCreateTextField(rc2,"space",al,ac));
1427 ac=0;
1428 XtManageChild(XmCreateLabel(rc2,"Script",al,ac));
1429 ac=0;
1430 XtManageChild(XmCreateTextField(rc2,"script",al,ac));
1431
1432 ac=0;
1433 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
1434 XtManageChild(rc2=XmCreateRowColumn(rc,"fontrc",al,ac));
1435 ac=0;
1436 XtManageChild(XmCreateLabel(rc2,"Font",al,ac));
1437 ac=0;
1438 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_LIST); ac++;
1439 XtManageChild(XmCreateComboBox(rc2,"font",al,ac));
1440
1441 #ifdef JAPANESE
1442 ac=0;
1443 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
1444 XtManageChild(rc2=XmCreateRowColumn(rc,"jfontrc",al,ac));
1445 ac=0;
1446 XtManageChild(XmCreateLabel(rc2,"Jfont",al,ac));
1447 ac=0;
1448 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_LIST); ac++;
1449 XtManageChild(XmCreateComboBox(rc2,"jfont",al,ac));
1450 #endif
1451
1452 ac=0;
1453 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
1454 XtManageChild(rc2=XmCreateRowColumn(rc,"colorrc",al,ac));
1455 ac=0;
1456 XtManageChild(XmCreateLabel(rc2,"Color",al,ac));
1457 ac=0;
1458 XtManageChild(button=XmCreateDrawnButton(rc2,"col",al,ac));
1459 XtAddCallback(button,XmNdisarmCallback,LegendTextDialogColor,d);
1460 ac=0;
1461 XtManageChild(XmCreateLabel(rc2,"Direction",al,ac));
1462 ac=0;
1463 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_COMBO_BOX); ac++;
1464 XtManageChild(XmCreateComboBox(rc2,"direction",al,ac));
1465 ac=0;
1466 XtManageChild(XmCreateToggleButton(rc2,"Raw",al,ac));
1467 }
1468 LegendTextDialogSetupItem(w,d,d->Id);
1469 }
1470
LegendTextDialogClose(Widget w,void * data)1471 void LegendTextDialogClose(Widget w,void *data)
1472 {
1473 struct LegendTextDialog *d;
1474 int ret;
1475 char *buf;
1476 struct fontmap *fcur;
1477 int *selected,num,a,j;
1478
1479 d=(struct LegendTextDialog *)data;
1480 if (d->ret!=IDOK) return;
1481 ret=d->ret;
1482 d->ret=IDLOOP;
1483 if (SetObjFieldFromText(w,"*x",d->Obj,d->Id,"x")) return;
1484 if (SetObjFieldFromText(w,"*y",d->Obj,d->Id,"y")) return;
1485
1486 XtVaGetValues(XtNameToWidget(w,"*text"),XmNvalue,&buf,NULL);
1487 #ifdef JAPANESE
1488 /* EUC ---> SJIS */
1489 neuc2jms(buf);
1490 #endif
1491 if (sputobjfield(d->Obj,d->Id,"text",buf)!=0) {
1492 XtFree(buf);
1493 return;
1494 }
1495 XtFree(buf);
1496
1497 if (SetObjFieldFromText(GetComboBoxText(w,"*direction"),NULL,
1498 d->Obj,d->Id,"direction")) return;
1499 if (SetObjFieldFromText(w,"*space",d->Obj,d->Id,"space")) return;
1500 if (SetObjFieldFromText(GetComboBoxText(w,"*pt"),NULL,
1501 d->Obj,d->Id,"pt")) return;
1502 if (SetObjFieldFromText(w,"*script",d->Obj,d->Id,"script_size")) return;
1503
1504 XmListGetSelectedPos(GetComboBoxList(w,"*font"),&selected,&num);
1505 if (num!=0) {
1506 a=selected[0];
1507 fcur=mxlocal->fontmaproot;
1508 j=0;
1509 while (fcur!=NULL) {
1510 if (!(fcur->twobyte)) {
1511 j++;
1512 if (j==a) {
1513 sputobjfield(d->Obj,d->Id,"font",fcur->fontalias);
1514 break;
1515 }
1516 }
1517 fcur=fcur->next;
1518 }
1519 XtFree((char *)selected);
1520 }
1521 #ifdef JAPANESE
1522 XmListGetSelectedPos(GetComboBoxList(w,"*jfont"),&selected,&num);
1523 if (num!=0) {
1524 a=selected[0];
1525 fcur=mxlocal->fontmaproot;
1526 j=0;
1527 while (fcur!=NULL) {
1528 if (fcur->twobyte) {
1529 j++;
1530 if (j==a) {
1531 sputobjfield(d->Obj,d->Id,"jfont",fcur->fontalias);
1532 break;
1533 }
1534 }
1535 fcur=fcur->next;
1536 }
1537 XtFree((char *)selected);
1538 }
1539 #endif
1540 if (putobj(d->Obj,"R",d->Id,&(d->R))==-1) return;
1541 if (putobj(d->Obj,"G",d->Id,&(d->G))==-1) return;
1542 if (putobj(d->Obj,"B",d->Id,&(d->B))==-1) return;
1543 if (SetObjFieldFromToggle(w,"*Raw",d->Obj,d->Id,"raw")) return;
1544 d->ret=ret;
1545 }
1546
LegendTextDialog(struct LegendTextDialog * data,struct objlist * obj,int id)1547 void LegendTextDialog(struct LegendTextDialog *data,
1548 struct objlist *obj,int id)
1549 {
1550 data->SetupWindow=LegendTextDialogSetup;
1551 data->CloseWindow=LegendTextDialogClose;
1552 data->Obj=obj;
1553 data->Id=id;
1554 }
1555
LegendTextDefDialogSetupItem(Widget w,struct LegendTextDialog * d,int id)1556 void LegendTextDefDialogSetupItem(Widget w,struct LegendTextDialog *d,int id)
1557 {
1558 int j,selfont;
1559 struct fontmap *fcur;
1560 char *font;
1561 XmString xs;
1562
1563 SetComboList(w,"*direction",cbdirection,CBDIRECTION);
1564 SetTextFromObjField(GetComboBoxText(w,"*direction"),NULL,
1565 d->Obj,id,"direction");
1566 SetComboListFromObjField(GetComboBoxList(w,"*direction"),NULL,
1567 d->Obj,id,"direction");
1568 SetTextFromObjField(w,"*space",d->Obj,id,"space");
1569 SetComboList(w,"*pt",cbtextpt,CBTEXTPT);
1570 SetTextFromObjField(GetComboBoxText(w,"*pt"),NULL,
1571 d->Obj,id,"pt");
1572 SetComboListFromObjField(GetComboBoxList(w,"*pt"),NULL,
1573 d->Obj,id,"pt");
1574 SetTextFromObjField(w,"*script",d->Obj,id,"script_size");
1575 getobj(d->Obj,"font",id,0,NULL,&font);
1576 XmListDeleteAllItems(GetComboBoxList(w,"*font"));
1577 fcur=mxlocal->fontmaproot;
1578 j=0;
1579 selfont=-1;
1580 while (fcur!=NULL) {
1581 if (!(fcur->twobyte)) {
1582 xs=XmStringCreateLocalized(fcur->fontalias);
1583 XmListAddItem(GetComboBoxList(w,"*font"),xs,0);
1584 XmStringFree(xs);
1585 if (strcmp(font,fcur->fontalias)==0) selfont=j;
1586 j++;
1587 }
1588 fcur=fcur->next;
1589 }
1590 SetComboBoxVisibleItemCount(w,"*font",j);
1591 if (selfont!=-1)
1592 XmListSelectPos(GetComboBoxList(w,"*font"),selfont+1,TRUE);
1593 #ifdef JAPANESE
1594 getobj(d->Obj,"jfont",id,0,NULL,&font);
1595 XmListDeleteAllItems(GetComboBoxList(w,"*jfont"));
1596 fcur=mxlocal->fontmaproot;
1597 j=0;
1598 selfont=-1;
1599 while (fcur!=NULL) {
1600 if (fcur->twobyte) {
1601 xs=XmStringCreateLocalized(fcur->fontalias);
1602 XmListAddItem(GetComboBoxList(w,"*jfont"),xs,0);
1603 XmStringFree(xs);
1604 if (strcmp(font,fcur->fontalias)==0) selfont=j;
1605 j++;
1606 }
1607 fcur=fcur->next;
1608 }
1609 SetComboBoxVisibleItemCount(w,"*jfont",j);
1610 if (selfont!=-1)
1611 XmListSelectPos(GetComboBoxList(w,"*jfont"),selfont+1,TRUE);
1612 #endif
1613 getobj(d->Obj,"R",id,0,NULL,&d->R);
1614 getobj(d->Obj,"G",id,0,NULL,&d->G);
1615 getobj(d->Obj,"B",id,0,NULL,&d->B);
1616 XtVaSetValues(XtNameToWidget(w,"*col"),XmNbackground,RGB(d->R,d->G,d->B),NULL);
1617 SetToggleFromObjField(w,"*Raw",d->Obj,id,"raw");
1618 }
1619
LegendTextDefDialogSetup(Widget w,void * data,int makewidget)1620 void LegendTextDefDialogSetup(Widget w,void *data,int makewidget)
1621 {
1622 Arg al[20];
1623 Cardinal ac;
1624 Widget rc,rc2,button;
1625 struct LegendTextDialog *d;
1626
1627 d=(struct LegendTextDialog *)data;
1628 if (makewidget) {
1629 ac=0;
1630 XtSetArg(al[ac],XmNorientation,XmVERTICAL); ac++;
1631 XtManageChild(rc=XmCreateRowColumn(w,"rc",al,ac));
1632
1633 ac=0;
1634 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
1635 XtManageChild(rc2=XmCreateRowColumn(rc,"ptrc",al,ac));
1636 ac=0;
1637 XtManageChild(XmCreateLabel(rc2,"Pt",al,ac));
1638 ac=0;
1639 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_COMBO_BOX); ac++;
1640 XtManageChild(XmCreateComboBox(rc2,"pt",al,ac));
1641 ac=0;
1642 XtManageChild(XmCreateLabel(rc2,"Space",al,ac));
1643 ac=0;
1644 XtManageChild(XmCreateTextField(rc2,"space",al,ac));
1645 ac=0;
1646 XtManageChild(XmCreateLabel(rc2,"Script",al,ac));
1647 ac=0;
1648 XtManageChild(XmCreateTextField(rc2,"script",al,ac));
1649
1650 ac=0;
1651 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
1652 XtManageChild(rc2=XmCreateRowColumn(rc,"fontrc",al,ac));
1653 ac=0;
1654 XtManageChild(XmCreateLabel(rc2,"Font",al,ac));
1655 ac=0;
1656 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_LIST); ac++;
1657 XtManageChild(XmCreateComboBox(rc2,"font",al,ac));
1658
1659 #ifdef JAPANESE
1660 ac=0;
1661 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
1662 XtManageChild(rc2=XmCreateRowColumn(rc,"jfontrc",al,ac));
1663 ac=0;
1664 XtManageChild(XmCreateLabel(rc2,"Jfont",al,ac));
1665 ac=0;
1666 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_LIST); ac++;
1667 XtManageChild(XmCreateComboBox(rc2,"jfont",al,ac));
1668 #endif
1669
1670 ac=0;
1671 XtSetArg(al[ac],XmNorientation,XmHORIZONTAL); ac++;
1672 XtManageChild(rc2=XmCreateRowColumn(rc,"colorrc",al,ac));
1673 ac=0;
1674 XtManageChild(XmCreateLabel(rc2,"Color",al,ac));
1675 ac=0;
1676 XtManageChild(button=XmCreateDrawnButton(rc2,"col",al,ac));
1677 XtAddCallback(button,XmNdisarmCallback,LegendTextDialogColor,d);
1678 ac=0;
1679 XtManageChild(XmCreateLabel(rc2,"Direction",al,ac));
1680 ac=0;
1681 XtSetArg(al[ac],XmNcomboBoxType,XmDROP_DOWN_COMBO_BOX); ac++;
1682 XtManageChild(XmCreateComboBox(rc2,"direction",al,ac));
1683 ac=0;
1684 XtManageChild(XmCreateToggleButton(rc2,"Raw",al,ac));
1685 }
1686 LegendTextDefDialogSetupItem(w,d,d->Id);
1687 }
1688
LegendTextDefDialogClose(Widget w,void * data)1689 void LegendTextDefDialogClose(Widget w,void *data)
1690 {
1691 struct LegendTextDialog *d;
1692 int ret;
1693 struct fontmap *fcur;
1694 int *selected,num,a,j;
1695
1696 d=(struct LegendTextDialog *)data;
1697 if (d->ret!=IDOK) return;
1698 ret=d->ret;
1699 d->ret=IDLOOP;
1700 if (SetObjFieldFromText(GetComboBoxText(w,"*direction"),NULL,
1701 d->Obj,d->Id,"direction")) return;
1702 if (SetObjFieldFromText(w,"*space",d->Obj,d->Id,"space")) return;
1703 if (SetObjFieldFromText(GetComboBoxText(w,"*pt"),NULL,
1704 d->Obj,d->Id,"pt")) return;
1705 if (SetObjFieldFromText(w,"*script",d->Obj,d->Id,"script_size")) return;
1706 XmListGetSelectedPos(GetComboBoxList(w,"*font"),&selected,&num);
1707 if (num!=0) {
1708 a=selected[0];
1709 fcur=mxlocal->fontmaproot;
1710 j=0;
1711 while (fcur!=NULL) {
1712 if (!(fcur->twobyte)) {
1713 j++;
1714 if (j==a) {
1715 sputobjfield(d->Obj,d->Id,"font",fcur->fontalias);
1716 break;
1717 }
1718 }
1719 fcur=fcur->next;
1720 }
1721 XtFree((char *)selected);
1722 }
1723 #ifdef JAPANESE
1724 XmListGetSelectedPos(GetComboBoxList(w,"*jfont"),&selected,&num);
1725 if (num!=0) {
1726 a=selected[0];
1727 fcur=mxlocal->fontmaproot;
1728 j=0;
1729 while (fcur!=NULL) {
1730 if (fcur->twobyte) {
1731 j++;
1732 if (j==a) {
1733 sputobjfield(d->Obj,d->Id,"jfont",fcur->fontalias);
1734 break;
1735 }
1736 }
1737 fcur=fcur->next;
1738 }
1739 XtFree((char *)selected);
1740 }
1741 #endif
1742 if (putobj(d->Obj,"R",d->Id,&(d->R))==-1) return;
1743 if (putobj(d->Obj,"G",d->Id,&(d->G))==-1) return;
1744 if (putobj(d->Obj,"B",d->Id,&(d->B))==-1) return;
1745 if (SetObjFieldFromToggle(w,"*Raw",d->Obj,d->Id,"raw")) return;
1746 d->ret=ret;
1747 }
1748
LegendTextDefDialog(struct LegendTextDialog * data,struct objlist * obj,int id)1749 void LegendTextDefDialog(struct LegendTextDialog *data,
1750 struct objlist *obj,int id)
1751 {
1752 data->SetupWindow=LegendTextDefDialogSetup;
1753 data->CloseWindow=LegendTextDefDialogClose;
1754 data->Obj=obj;
1755 data->Id=id;
1756 }
1757
1758
CmLineDel()1759 void CmLineDel()
1760 {
1761 struct narray array;
1762 struct objlist *obj;
1763 int i;
1764 int num,*data;
1765
1766 if (menulock || globallock) return;
1767 if ((obj=chkobject("line"))==NULL) return;
1768 if (chkobjlastinst(obj)==-1) return;
1769 SelectDialog(&DlgSelect,obj,LegendLineCB,(struct narray *)&array,NULL);
1770 if (DialogExecute(TopLevel,&DlgSelect)==IDOK) {
1771 num=arraynum(&array);
1772 data=(int *)arraydata(&array);
1773 for (i=num-1;i>=0;i--) {
1774 delobj(obj,data[i]);
1775 NgraphApp.Changed=TRUE;
1776 }
1777 LegendWinUpdate(TRUE);
1778 }
1779 arraydel(&array);
1780 }
1781
CmLineUpdate()1782 void CmLineUpdate()
1783 {
1784 struct narray array;
1785 struct objlist *obj;
1786 int i,j,ret;
1787 int *data,num;
1788
1789 if (menulock || globallock) return;
1790 if ((obj=chkobject("line"))==NULL) return;
1791 if (chkobjlastinst(obj)==-1) return;
1792 SelectDialog(&DlgSelect,obj,LegendLineCB,(struct narray *)&array,NULL);
1793 if (DialogExecute(TopLevel,&DlgSelect)==IDOK) {
1794 num=arraynum(&array);
1795 data=(int *)arraydata(&array);
1796 for (i=0;i<num;i++) {
1797 LegendArrowDialog(&DlgLegendArrow,obj,data[i]);
1798 if ((ret=DialogExecute(TopLevel,&DlgLegendArrow))==IDDELETE) {
1799 delobj(obj,data[i]);
1800 for (j=i+1;j<num;j++) data[j]--;
1801 }
1802 if (ret!=IDCANCEL) NgraphApp.Changed=TRUE;
1803 }
1804 LegendWinUpdate(TRUE);
1805 }
1806 arraydel(&array);
1807 }
1808
1809
CmLineMenu(Widget w,XtPointer client_data,XtPointer call_data)1810 void CmLineMenu(Widget w,XtPointer client_data,XtPointer call_data)
1811 {
1812 switch ((int )client_data) {
1813 case 0:
1814 CmLineUpdate();
1815 break;
1816 case 1:
1817 CmLineDel();
1818 break;
1819 }
1820 }
1821
CmCurveDel()1822 void CmCurveDel()
1823 {
1824 struct narray array;
1825 struct objlist *obj;
1826 int i;
1827 int num,*data;
1828
1829 if (menulock || globallock) return;
1830 if ((obj=chkobject("curve"))==NULL) return;
1831 if (chkobjlastinst(obj)==-1) return;
1832 SelectDialog(&DlgSelect,obj,LegendLineCB,(struct narray *)&array,NULL);
1833 if (DialogExecute(TopLevel,&DlgSelect)==IDOK) {
1834 num=arraynum(&array);
1835 data=(int *)arraydata(&array);
1836 for (i=num-1;i>=0;i--) {
1837 delobj(obj,data[i]);
1838 NgraphApp.Changed=TRUE;
1839 }
1840 LegendWinUpdate(TRUE);
1841 }
1842 arraydel(&array);
1843 }
1844
CmCurveUpdate()1845 void CmCurveUpdate()
1846 {
1847 struct narray array;
1848 struct objlist *obj;
1849 int i,j,ret;
1850 int *data,num;
1851
1852 if (menulock || globallock) return;
1853 if ((obj=chkobject("curve"))==NULL) return;
1854 if (chkobjlastinst(obj)==-1) return;
1855 SelectDialog(&DlgSelect,obj,LegendLineCB,(struct narray *)&array,NULL);
1856 if (DialogExecute(TopLevel,&DlgSelect)==IDOK) {
1857 num=arraynum(&array);
1858 data=(int *)arraydata(&array);
1859 for (i=0;i<num;i++) {
1860 LegendCurveDialog(&DlgLegendCurve,obj,data[i]);
1861 if ((ret=DialogExecute(TopLevel,&DlgLegendCurve))==IDDELETE) {
1862 delobj(obj,data[i]);
1863 for (j=i+1;j<num;j++) data[j]--;
1864 }
1865 if (ret!=IDCANCEL) NgraphApp.Changed=TRUE;
1866 }
1867 LegendWinUpdate(TRUE);
1868 }
1869 arraydel(&array);
1870 }
1871
CmCurveMenu(Widget w,XtPointer client_data,XtPointer call_data)1872 void CmCurveMenu(Widget w,XtPointer client_data,XtPointer call_data)
1873 {
1874 switch ((int )client_data) {
1875 case 0:
1876 CmCurveUpdate();
1877 break;
1878 case 1:
1879 CmCurveDel();
1880 break;
1881 }
1882 }
1883
CmPolyDel()1884 void CmPolyDel()
1885 {
1886 struct narray array;
1887 struct objlist *obj;
1888 int i;
1889 int num,*data;
1890
1891 if (menulock || globallock) return;
1892 if ((obj=chkobject("polygon"))==NULL) return;
1893 if (chkobjlastinst(obj)==-1) return;
1894 SelectDialog(&DlgSelect,obj,LegendLineCB,(struct narray *)&array,NULL);
1895 if (DialogExecute(TopLevel,&DlgSelect)==IDOK) {
1896 num=arraynum(&array);
1897 data=(int *)arraydata(&array);
1898 for (i=num-1;i>=0;i--) {
1899 delobj(obj,data[i]);
1900 NgraphApp.Changed=TRUE;
1901 }
1902 LegendWinUpdate(TRUE);
1903 }
1904 arraydel(&array);
1905 }
1906
CmPolyUpdate()1907 void CmPolyUpdate()
1908 {
1909 struct narray array;
1910 struct objlist *obj;
1911 int i,j,ret;
1912 int *data,num;
1913
1914 if (menulock || globallock) return;
1915 if ((obj=chkobject("polygon"))==NULL) return;
1916 if (chkobjlastinst(obj)==-1) return;
1917 SelectDialog(&DlgSelect,obj,LegendLineCB,(struct narray *)&array,NULL);
1918 if (DialogExecute(TopLevel,&DlgSelect)==IDOK) {
1919 num=arraynum(&array);
1920 data=(int *)arraydata(&array);
1921 for (i=0;i<num;i++) {
1922 LegendPolyDialog(&DlgLegendPoly,obj,data[i]);
1923 if ((ret=DialogExecute(TopLevel,&DlgLegendPoly))==IDDELETE) {
1924 delobj(obj,data[i]);
1925 for (j=i+1;j<num;j++) data[j]--;
1926 }
1927 if (ret!=IDCANCEL) NgraphApp.Changed=TRUE;
1928 }
1929 LegendWinUpdate(TRUE);
1930 }
1931 arraydel(&array);
1932 }
1933
CmPolygonMenu(Widget w,XtPointer client_data,XtPointer call_data)1934 void CmPolygonMenu(Widget w,XtPointer client_data,XtPointer call_data)
1935 {
1936 switch ((int )client_data) {
1937 case 0:
1938 CmPolyUpdate();
1939 break;
1940 case 1:
1941 CmPolyDel();
1942 break;
1943 }
1944 }
1945
CmRectDel()1946 void CmRectDel()
1947 {
1948 struct narray array;
1949 struct objlist *obj;
1950 int i;
1951 int num,*data;
1952
1953 if (menulock || globallock) return;
1954 if ((obj=chkobject("rectangle"))==NULL) return;
1955 if (chkobjlastinst(obj)==-1) return;
1956 SelectDialog(&DlgSelect,obj,LegendRectCB,(struct narray *)&array,NULL);
1957 if (DialogExecute(TopLevel,&DlgSelect)==IDOK) {
1958 num=arraynum(&array);
1959 data=(int *)arraydata(&array);
1960 for (i=num-1;i>=0;i--) {
1961 delobj(obj,data[i]);
1962 NgraphApp.Changed=TRUE;
1963 }
1964 LegendWinUpdate(TRUE);
1965 }
1966 arraydel(&array);
1967 }
1968
CmRectUpdate()1969 void CmRectUpdate()
1970 {
1971 struct narray array;
1972 struct objlist *obj;
1973 int i,j,ret;
1974 int *data,num;
1975
1976 if (menulock || globallock) return;
1977 if ((obj=chkobject("rectangle"))==NULL) return;
1978 if (chkobjlastinst(obj)==-1) return;
1979 SelectDialog(&DlgSelect,obj,LegendRectCB,(struct narray *)&array,NULL);
1980 if (DialogExecute(TopLevel,&DlgSelect)==IDOK) {
1981 num=arraynum(&array);
1982 data=(int *)arraydata(&array);
1983 for (i=0;i<num;i++) {
1984 LegendRectDialog(&DlgLegendRect,obj,data[i]);
1985 if ((ret=DialogExecute(TopLevel,&DlgLegendRect))==IDDELETE) {
1986 delobj(obj,data[i]);
1987 for (j=i+1;j<num;j++) data[j]--;
1988 }
1989 if (ret!=IDCANCEL) NgraphApp.Changed=TRUE;
1990 }
1991 LegendWinUpdate(TRUE);
1992 }
1993 arraydel(&array);
1994 }
1995
CmRectangleMenu(Widget w,XtPointer client_data,XtPointer call_data)1996 void CmRectangleMenu(Widget w,XtPointer client_data,XtPointer call_data)
1997 {
1998 switch ((int )client_data) {
1999 case 0:
2000 CmRectUpdate();
2001 break;
2002 case 1:
2003 CmRectDel();
2004 break;
2005 }
2006 }
2007
CmArcDel()2008 void CmArcDel()
2009 {
2010 struct narray array;
2011 struct objlist *obj;
2012 int i;
2013 int num,*data;
2014
2015 if (menulock || globallock) return;
2016 if ((obj=chkobject("arc"))==NULL) return;
2017 if (chkobjlastinst(obj)==-1) return;
2018 SelectDialog(&DlgSelect,obj,LegendArcCB,(struct narray *)&array,NULL);
2019 if (DialogExecute(TopLevel,&DlgSelect)==IDOK) {
2020 num=arraynum(&array);
2021 data=(int *)arraydata(&array);
2022 for (i=num-1;i>=0;i--) {
2023 delobj(obj,data[i]);
2024 NgraphApp.Changed=TRUE;
2025 }
2026 LegendWinUpdate(TRUE);
2027 }
2028 arraydel(&array);
2029 }
2030
CmArcUpdate()2031 void CmArcUpdate()
2032 {
2033 struct narray array;
2034 struct objlist *obj;
2035 int i,j,ret;
2036 int *data,num;
2037
2038 if (menulock || globallock) return;
2039 if ((obj=chkobject("arc"))==NULL) return;
2040 if (chkobjlastinst(obj)==-1) return;
2041 SelectDialog(&DlgSelect,obj,LegendArcCB,(struct narray *)&array,NULL);
2042 if (DialogExecute(TopLevel,&DlgSelect)==IDOK) {
2043 num=arraynum(&array);
2044 data=(int *)arraydata(&array);
2045 for (i=0;i<num;i++) {
2046 LegendArcDialog(&DlgLegendArc,obj,data[i]);
2047 if ((ret=DialogExecute(TopLevel,&DlgLegendArc))==IDDELETE) {
2048 delobj(obj,data[i]);
2049 for (j=i+1;j<num;j++) data[j]--;
2050 }
2051 if (ret!=IDCANCEL) NgraphApp.Changed=TRUE;
2052 }
2053 LegendWinUpdate(TRUE);
2054 }
2055 arraydel(&array);
2056 }
2057
CmArcMenu(Widget w,XtPointer client_data,XtPointer call_data)2058 void CmArcMenu(Widget w,XtPointer client_data,XtPointer call_data)
2059 {
2060 switch ((int )client_data) {
2061 case 0:
2062 CmArcUpdate();
2063 break;
2064 case 1:
2065 CmArcDel();
2066 break;
2067 }
2068 }
2069
CmMarkDel()2070 void CmMarkDel()
2071 {
2072 struct narray array;
2073 struct objlist *obj;
2074 int i;
2075 int num,*data;
2076
2077 if (menulock || globallock) return;
2078 if ((obj=chkobject("mark"))==NULL) return;
2079 if (chkobjlastinst(obj)==-1) return;
2080 SelectDialog(&DlgSelect,obj,LegendArcCB,(struct narray *)&array,NULL);
2081 if (DialogExecute(TopLevel,&DlgSelect)==IDOK) {
2082 num=arraynum(&array);
2083 data=(int *)arraydata(&array);
2084 for (i=num-1;i>=0;i--) {
2085 delobj(obj,data[i]);
2086 NgraphApp.Changed=TRUE;
2087 }
2088 LegendWinUpdate(TRUE);
2089 }
2090 arraydel(&array);
2091 }
2092
CmMarkUpdate()2093 void CmMarkUpdate()
2094 {
2095 struct narray array;
2096 struct objlist *obj;
2097 int i,j,ret;
2098 int *data,num;
2099
2100 if (menulock || globallock) return;
2101 if ((obj=chkobject("mark"))==NULL) return;
2102 if (chkobjlastinst(obj)==-1) return;
2103 SelectDialog(&DlgSelect,obj,LegendArcCB,(struct narray *)&array,NULL);
2104 if (DialogExecute(TopLevel,&DlgSelect)==IDOK) {
2105 num=arraynum(&array);
2106 data=(int *)arraydata(&array);
2107 for (i=0;i<num;i++) {
2108 LegendMarkDialog(&DlgLegendMark,obj,data[i]);
2109 if ((ret=DialogExecute(TopLevel,&DlgLegendMark))==IDDELETE) {
2110 delobj(obj,data[i]);
2111 for (j=i+1;j<num;j++) data[j]--;
2112 }
2113 if (ret!=IDCANCEL) NgraphApp.Changed=TRUE;
2114 }
2115 LegendWinUpdate(TRUE);
2116 }
2117 arraydel(&array);
2118 }
2119
CmMarkMenu(Widget w,XtPointer client_data,XtPointer call_data)2120 void CmMarkMenu(Widget w,XtPointer client_data,XtPointer call_data)
2121 {
2122 switch ((int )client_data) {
2123 case 0:
2124 CmMarkUpdate();
2125 break;
2126 case 1:
2127 CmMarkDel();
2128 break;
2129 }
2130 }
2131
CmTextDel()2132 void CmTextDel()
2133 {
2134 struct narray array;
2135 struct objlist *obj;
2136 int i;
2137 int num,*data;
2138
2139 if (menulock || globallock) return;
2140 if ((obj=chkobject("text"))==NULL) return;
2141 if (chkobjlastinst(obj)==-1) return;
2142 SelectDialog(&DlgSelect,obj,LegendTextCB,(struct narray *)&array,NULL);
2143 if (DialogExecute(TopLevel,&DlgSelect)==IDOK) {
2144 num=arraynum(&array);
2145 data=(int *)arraydata(&array);
2146 for (i=num-1;i>=0;i--) {
2147 delobj(obj,data[i]);
2148 NgraphApp.Changed=TRUE;
2149 }
2150 LegendWinUpdate(TRUE);
2151 }
2152 arraydel(&array);
2153 }
2154
CmTextUpdate()2155 void CmTextUpdate()
2156 {
2157 struct narray array;
2158 struct objlist *obj;
2159 int i,j,ret;
2160 int *data,num;
2161
2162 if (menulock || globallock) return;
2163 if ((obj=chkobject("text"))==NULL) return;
2164 if (chkobjlastinst(obj)==-1) return;
2165 SelectDialog(&DlgSelect,obj,LegendTextCB,(struct narray *)&array,NULL);
2166 if (DialogExecute(TopLevel,&DlgSelect)==IDOK) {
2167 num=arraynum(&array);
2168 data=(int *)arraydata(&array);
2169 for (i=0;i<num;i++) {
2170 LegendTextDialog(&DlgLegendText,obj,data[i]);
2171 if ((ret=DialogExecute(TopLevel,&DlgLegendText))==IDDELETE) {
2172 delobj(obj,data[i]);
2173 for (j=i+1;j<num;j++) data[j]--;
2174 }
2175 if (ret!=IDCANCEL) NgraphApp.Changed=TRUE;
2176 }
2177 LegendWinUpdate(TRUE);
2178 }
2179 arraydel(&array);
2180 }
2181
CmTextMenu(Widget w,XtPointer client_data,XtPointer call_data)2182 void CmTextMenu(Widget w,XtPointer client_data,XtPointer call_data)
2183 {
2184 switch ((int )client_data) {
2185 case 0:
2186 CmTextUpdate();
2187 break;
2188 case 1:
2189 CmTextDel();
2190 break;
2191 }
2192 }
2193
CmOptionTextDef()2194 void CmOptionTextDef()
2195 {
2196 struct objlist *obj;
2197 int id;
2198
2199 if (menulock || globallock) return;
2200 if ((obj=chkobject("text"))==NULL) return;
2201 if ((id=newobj(obj))>=0) {
2202 LegendTextDefDialog(&DlgLegendTextDef,obj,id);
2203 if (DialogExecute(TopLevel,&DlgLegendTextDef)==IDOK) {
2204 if (CheckIniFile()) {
2205 exeobj(obj,"save_config",id,0,NULL);
2206 }
2207 }
2208 delobj(obj,id);
2209 UpdateAll2();
2210 }
2211 }
2212
LegendWinLegendDelete()2213 void LegendWinLegendDelete()
2214 {
2215 int sel,i,num;
2216 struct LegendWin *d;
2217
2218 d=&(NgraphApp.LegendWin);
2219 if (menulock || globallock) return;
2220 UnFocus();
2221 sel=d->select;
2222 num=0;
2223 for (i=0;i<LEGENDNUM;i++) {
2224 if ((sel>=num) && (sel<=num+d->legend[i])) {
2225 delobj(d->obj[i],sel-num);
2226 LegendWinUpdate(TRUE);
2227 NgraphApp.Changed=TRUE;
2228 break;
2229 }
2230 num+=d->legend[i]+1;
2231 }
2232 }
2233
LegendWinLegendCopy()2234 void LegendWinLegendCopy()
2235 {
2236 int sel,i,num;
2237 int j,id,perm,type;
2238 char *field;
2239 struct LegendWin *d;
2240
2241 d=&(NgraphApp.LegendWin);
2242 if (menulock || globallock) return;
2243 sel=d->select;
2244 num=0;
2245 for (i=0;i<LEGENDNUM;i++) {
2246 if ((sel>=num) && (sel<=num+d->legend[i])) {
2247 if ((id=newobj(d->obj[i]))>=0) {
2248 for (j=0;j<chkobjfieldnum(d->obj[i]);j++) {
2249 field=chkobjfieldname(d->obj[i],j);
2250 perm=chkobjperm(d->obj[i],field);
2251 type=chkobjfieldtype(d->obj[i],field);
2252 if ((strcmp2(field,"name")!=0)
2253 && ((perm&NREAD)!=0) && ((perm&NWRITE)!=0) && (type<NVFUNC))
2254 copyobj(d->obj[i],field,id,sel-num);
2255 }
2256 d->legend[i]++;
2257 NgraphApp.Changed=TRUE;
2258 }
2259 d->select=sel;
2260 LegendWinUpdate(FALSE);
2261 break;
2262 }
2263 num+=d->legend[i]+1;
2264 }
2265 }
2266
LegendWinLegendCopy2()2267 void LegendWinLegendCopy2()
2268 {
2269 int sel,i,num;
2270 int j,id,perm,type;
2271 char *field;
2272 struct LegendWin *d;
2273
2274 d=&(NgraphApp.LegendWin);
2275 if (menulock || globallock) return;
2276 sel=d->select;
2277 num=0;
2278 for (i=0;i<LEGENDNUM;i++) {
2279 if ((sel>=num) && (sel<=num+d->legend[i])) {
2280 if ((id=newobj(d->obj[i]))>=0) {
2281 for (j=0;j<chkobjfieldnum(d->obj[i]);j++) {
2282 field=chkobjfieldname(d->obj[i],j);
2283 perm=chkobjperm(d->obj[i],field);
2284 type=chkobjfieldtype(d->obj[i],field);
2285 if ((strcmp2(field,"name")!=0)
2286 && ((perm&NREAD)!=0) && ((perm&NWRITE)!=0) && (type<NVFUNC))
2287 copyobj(d->obj[i],field,id,sel-num);
2288 }
2289 d->legend[i]++;
2290 for (j=d->legend[i];j>sel-num+1;j--) moveupobj(d->obj[i],j);
2291 NgraphApp.Changed=TRUE;
2292 }
2293 d->select=sel;
2294 LegendWinUpdate(FALSE);
2295 break;
2296 }
2297 num+=d->legend[i]+1;
2298 }
2299 }
2300
LegendWinLegendTop()2301 void LegendWinLegendTop()
2302 {
2303 int sel,i,num;
2304 struct LegendWin *d;
2305
2306 d=&(NgraphApp.LegendWin);
2307 if (menulock || globallock) return;
2308 sel=d->select;
2309 num=0;
2310 for (i=0;i<LEGENDNUM;i++) {
2311 if ((sel>=num) && (sel<=num+d->legend[i])) {
2312 movetopobj(d->obj[i],sel-num);
2313 d->select=num;
2314 LegendWinUpdate(FALSE);
2315 NgraphApp.Changed=TRUE;
2316 break;
2317 }
2318 num+=d->legend[i]+1;
2319 }
2320 }
2321
LegendWinLegendLast()2322 void LegendWinLegendLast()
2323 {
2324 int sel,i,num;
2325 struct LegendWin *d;
2326
2327 d=&(NgraphApp.LegendWin);
2328 if (menulock || globallock) return;
2329 sel=d->select;
2330 num=0;
2331 for (i=0;i<LEGENDNUM;i++) {
2332 if ((sel>=num) && (sel<=num+d->legend[i])) {
2333 movelastobj(d->obj[i],sel-num);
2334 d->select=num+d->legend[i];
2335 LegendWinUpdate(FALSE);
2336 NgraphApp.Changed=TRUE;
2337 break;
2338 }
2339 num+=d->legend[i]+1;
2340 }
2341 }
2342
LegendWinLegendUp()2343 void LegendWinLegendUp()
2344 {
2345 int sel,i,num;
2346 struct LegendWin *d;
2347
2348 d=&(NgraphApp.LegendWin);
2349 if (menulock || globallock) return;
2350 sel=d->select;
2351 num=0;
2352 for (i=0;i<LEGENDNUM;i++) {
2353 if ((sel>=num+1) && (sel<=num+d->legend[i])) {
2354 moveupobj(d->obj[i],sel-num);
2355 d->select=sel-1;
2356 LegendWinUpdate(FALSE);
2357 NgraphApp.Changed=TRUE;
2358 break;
2359 }
2360 num+=d->legend[i]+1;
2361 }
2362 }
2363
LegendWinLegendDown()2364 void LegendWinLegendDown()
2365 {
2366 int sel,i,num;
2367 struct LegendWin *d;
2368
2369 d=&(NgraphApp.LegendWin);
2370 if (menulock || globallock) return;
2371 sel=d->select;
2372 num=0;
2373 for (i=0;i<LEGENDNUM;i++) {
2374 if ((sel>=num) && (sel<=num+d->legend[i]-1)) {
2375 movedownobj(d->obj[i],sel-num);
2376 d->select=sel+1;
2377 LegendWinUpdate(FALSE);
2378 NgraphApp.Changed=TRUE;
2379 break;
2380 }
2381 num+=d->legend[i]+1;
2382 }
2383 }
2384
LegendWinLegendUpdate()2385 void LegendWinLegendUpdate()
2386 {
2387 int sel,i,num;
2388 int update,ret;
2389 struct LegendWin *d;
2390
2391 d=&(NgraphApp.LegendWin);
2392 if (menulock || globallock) return;
2393 UnFocus();
2394 sel=d->select;
2395 num=0;
2396 update=FALSE;
2397 for (i=0;i<LEGENDNUM;i++) {
2398 if ((sel>=num) && (sel<=num+d->legend[i])) {
2399 ret=IDCANCEL;
2400 if (i==0) {
2401 LegendArrowDialog(&DlgLegendArrow,d->obj[i],sel-num);
2402 ret=DialogExecute(TopLevel,&DlgLegendArrow);
2403 } else if (i==1) {
2404 LegendCurveDialog(&DlgLegendCurve,d->obj[i],sel-num);
2405 ret=DialogExecute(TopLevel,&DlgLegendCurve);
2406 } else if (i==2) {
2407 LegendPolyDialog(&DlgLegendPoly,d->obj[i],sel-num);
2408 ret=DialogExecute(TopLevel,&DlgLegendPoly);
2409 } else if (i==3) {
2410 LegendRectDialog(&DlgLegendRect,d->obj[i],sel-num);
2411 ret=DialogExecute(TopLevel,&DlgLegendRect);
2412 } else if (i==4) {
2413 LegendArcDialog(&DlgLegendArc,d->obj[i],sel-num);
2414 ret=DialogExecute(TopLevel,&DlgLegendArc);
2415 } else if (i==5) {
2416 LegendMarkDialog(&DlgLegendMark,d->obj[i],sel-num);
2417 ret=DialogExecute(TopLevel,&DlgLegendMark);
2418 } else if (i==6) {
2419 LegendTextDialog(&DlgLegendText,d->obj[i],sel-num);
2420 ret=DialogExecute(TopLevel,&DlgLegendText);
2421 }
2422 if (ret==IDDELETE) {
2423 delobj(d->obj[i],sel-num);
2424 update=TRUE;
2425 d->select=-1;
2426 } else if (ret==IDOK) update=TRUE;
2427 if (ret!=IDCANCEL) NgraphApp.Changed=TRUE;
2428 }
2429 num+=d->legend[i]+1;
2430 }
2431 if (update) LegendWinUpdate(FALSE);
2432 }
2433
LegendWinLegendSelect()2434 void LegendWinLegendSelect()
2435 {
2436 int sel,i,num;
2437 struct LegendWin *d;
2438
2439 d=&(NgraphApp.LegendWin);
2440 if (menulock || globallock) return;
2441 sel=d->select;
2442 num=0;
2443 for (i=0;i<LEGENDNUM;i++) {
2444 if ((sel>=num) && (sel<=num+d->legend[i])) {
2445 Focus(d->obj[i],sel-num);
2446 break;
2447 }
2448 num+=d->legend[i]+1;
2449 }
2450 }
2451
LegendWinLegendHidden()2452 void LegendWinLegendHidden()
2453 {
2454 int sel,i,num;
2455 int hidden;
2456 struct LegendWin *d;
2457
2458 d=&(NgraphApp.LegendWin);
2459 if (menulock || globallock) return;
2460 UnFocus();
2461 sel=d->select;
2462 num=0;
2463 for (i=0;i<LEGENDNUM;i++) {
2464 if ((sel>=num) && (sel<=num+d->legend[i])) {
2465 getobj(d->obj[i],"hidden",sel-num,0,NULL,&hidden);
2466 hidden=hidden?FALSE:TRUE;
2467 putobj(d->obj[i],"hidden",sel-num,&hidden);
2468 LegendWinUpdate(FALSE);
2469 NgraphApp.Changed=TRUE;
2470 break;
2471 }
2472 num+=d->legend[i]+1;
2473 }
2474 }
2475
LegendWinChangeLegendNum()2476 void LegendWinChangeLegendNum()
2477 {
2478 int i,num;
2479 struct LegendWin *d;
2480
2481 d=&(NgraphApp.LegendWin);
2482 if (d->text==NULL) return;
2483 num=0;
2484 for (i=0;i<LEGENDNUM;i++) num+=d->legend[i]+1;
2485 XtVaSetValues(d->text,XmNheight,(num+2)*FHeight,NULL);
2486 }
2487
LegendWinUpdate(int clear)2488 void LegendWinUpdate(int clear)
2489 {
2490 int i;
2491 struct LegendWin *d;
2492
2493 d=&(NgraphApp.LegendWin);
2494 for (i=0;i<LEGENDNUM;i++) d->legend[i]=chkobjlastinst(d->obj[i]);
2495 LegendWinChangeLegendNum();
2496 if (d->text==NULL) return;
2497 XClearArea(XtDisplay(d->text),XtWindow(d->text),0,0,0,0,TRUE);
2498 }
2499
LegendWinExpose(Widget wi,XtPointer client_data,XtPointer call_data)2500 void LegendWinExpose(Widget wi,XtPointer client_data,XtPointer call_data)
2501 {
2502 XmDrawingAreaCallbackStruct *dd;
2503 XExposeEvent *e;
2504 Display *disp;
2505 Window win;
2506 GC gc;
2507 int i,k,tot;
2508 char buf[256];
2509 XRectangle rect;
2510 int h,w,x,y,len,x1,y1,x2,y2,type,cx,x0=0,y0=0;
2511 struct narray *array;
2512 int *points;
2513 char *text;
2514 char *valstr;
2515 int hidden;
2516 struct LegendWin *d;
2517
2518 d=&(NgraphApp.LegendWin);
2519 if (d->text==NULL) return;
2520 dd=(XmDrawingAreaCallbackStruct *)call_data;
2521 e=(XExposeEvent *)(dd->event);
2522 disp=e->display;
2523 win=e->window;
2524 gc=XCreateGC(disp,win,0,0);
2525 if (globallock) return;
2526 h=FHeight;
2527 w=FWidth;
2528 XSetForeground(disp,gc,gray);
2529 XFillRectangle(disp,win,gc,0,0,63*w+2*w,h);
2530 x=FWidth;
2531 y=FAscent;
2532 XSetForeground(disp,gc,black);
2533 rect.y=y-FAscent;
2534 rect.height=h;
2535 rect.x=x;
2536 rect.width=6*w;
2537 len=sprintf(buf,"#");
2538 ExtTextOut(disp,win,gc,x,y,&rect,buf,len);
2539 x+=6*w;
2540 rect.x=x;
2541 rect.width=10*w;
2542 len=sprintf(buf,"object");
2543 ExtTextOut(disp,win,gc,x,y,&rect,buf,len);
2544 x+=10*w;
2545 rect.x=x;
2546 rect.width=25*w;
2547 len=sprintf(buf,"property");
2548 ExtTextOut(disp,win,gc,x,y,&rect,buf,len);
2549 x+=25*w;
2550 rect.x=x;
2551 rect.width=6*w;
2552 len=sprintf(buf," x");
2553 ExtTextOut(disp,win,gc,x,y,&rect,buf,len);
2554 x+=6*w;
2555 rect.x=x;
2556 rect.width=6*w;
2557 len=sprintf(buf," y");
2558 ExtTextOut(disp,win,gc,x,y,&rect,buf,len);
2559 x+=6*w;
2560 rect.x=x+w;
2561 rect.width=8*w;
2562 len=sprintf(buf,"^#");
2563 ExtTextOut(disp,win,gc,x+w,y,&rect,buf,len);
2564
2565 tot=0;
2566 for (k=0;k<LEGENDNUM;k++) {
2567 d->legend[k]=chkobjlastinst(d->obj[k]);
2568 for (i=0;i<=d->legend[k];i++) {
2569
2570 x=w;
2571 y=(tot+i+1)*h+FAscent;
2572 rect.y=y-FAscent;
2573 rect.height=h;
2574
2575 getobj(d->obj[k],"hidden",i,0,NULL,&hidden);
2576 if (hidden) XSetForeground(disp,gc,gray);
2577 else XSetForeground(disp,gc,black);
2578 if ((tot+i)==d->select) {
2579 XSetForeground(disp,gc,black);
2580 XFillRectangle(disp,win,gc,0,rect.y,74*w+h+w,rect.height);
2581 XSetForeground(disp,gc,white);
2582 }
2583
2584 rect.x=x;
2585 rect.width=6*w;
2586 getobj(d->obj[k],"id",i,0,NULL,&cx);
2587 len=sprintf(buf,"%d",cx);
2588 ExtTextOut(disp,win,gc,x,y,&rect,buf,len);
2589 x+=6*w;
2590
2591 rect.x=x;
2592 rect.width=10*w;
2593 len=sprintf(buf,"%s",legendlist[k]);
2594 ExtTextOut(disp,win,gc,x,y,&rect,buf,len);
2595 x+=10*w;
2596
2597 switch (k) {
2598 case 0:
2599 getobj(d->obj[k],"points",i,0,NULL,&array);
2600 points=(int *)arraydata(array);
2601 if (arraynum(array)<2) {
2602 x0=0;
2603 y0=0;
2604 } else {
2605 x0=points[0];
2606 y0=points[1];
2607 }
2608 sgetobjfield(d->obj[k],i,"arrow",NULL,&valstr,FALSE,FALSE,FALSE);
2609 rect.x=x;
2610 rect.width=25*w;
2611 len=sprintf(buf,"points:%-6d arrow:%s",arraynum(array)/2,valstr);
2612 memfree(valstr);
2613 ExtTextOut(disp,win,gc,x,y,&rect,buf,len);
2614 x+=25*w;
2615 break;
2616 case 1:
2617 case 2:
2618 getobj(d->obj[k],"points",i,0,NULL,&array);
2619 points=(int *)arraydata(array);
2620 if (arraynum(array)<2) {
2621 x0=0;
2622 y0=0;
2623 } else {
2624 x0=points[0];
2625 y0=points[1];
2626 }
2627 rect.x=x;
2628 rect.width=25*w;
2629 len=sprintf(buf,"points:%-6d",arraynum(array)/2);
2630 ExtTextOut(disp,win,gc,x,y,&rect,buf,len);
2631 x+=25*w;
2632 break;
2633 case 3:
2634 getobj(d->obj[k],"x1",i,0,NULL,&x1);
2635 getobj(d->obj[k],"y1",i,0,NULL,&y1);
2636 x0=x1;
2637 y0=y1;
2638 getobj(d->obj[k],"x2",i,0,NULL,&x2);
2639 getobj(d->obj[k],"y2",i,0,NULL,&y2);
2640 rect.x=x;
2641 rect.width=25*w;
2642 len=sprintf(buf,"w:%-6d h:%-6d",abs(x1-x2),abs(y1-y2));
2643 ExtTextOut(disp,win,gc,x,y,&rect,buf,len);
2644 x+=25*w;
2645 break;
2646 case 4:
2647 getobj(d->obj[k],"x",i,0,NULL,&x1);
2648 getobj(d->obj[k],"y",i,0,NULL,&y1);
2649 x0=x1;
2650 y0=y1;
2651 getobj(d->obj[k],"rx",i,0,NULL,&x2);
2652 getobj(d->obj[k],"ry",i,0,NULL,&y2);
2653 rect.x=x;
2654 rect.width=25*w;
2655 len=sprintf(buf,"rx:%-6d ry:%-6d",x2,y2);
2656 ExtTextOut(disp,win,gc,x,y,&rect,buf,len);
2657 x+=25*w;
2658 break;
2659 case 5:
2660 getobj(d->obj[k],"x",i,0,NULL,&x1);
2661 getobj(d->obj[k],"y",i,0,NULL,&y1);
2662 x0=x1;
2663 y0=y1;
2664 getobj(d->obj[k],"type",i,0,NULL,&type);
2665 rect.x=x;
2666 rect.width=25*w;
2667 len=sprintf(buf,"type:%-6d",type);
2668 ExtTextOut(disp,win,gc,x,y,&rect,buf,len);
2669 x+=25*w;
2670 break;
2671 case 6:
2672 getobj(d->obj[k],"x",i,0,NULL,&x1);
2673 getobj(d->obj[k],"y",i,0,NULL,&y1);
2674 x0=x1;
2675 y0=y1;
2676 getobj(d->obj[k],"text",i,0,NULL,&text);
2677 rect.x=x;
2678 rect.width=25*w;
2679 strncpy(buf, text, 25);
2680 buf[25] = '\0';
2681 len = strlen(buf);
2682 #ifdef JAPANESE
2683 /* SJIS ---> EUC */
2684 njms2euc(buf);
2685 #endif
2686 ExtTextOut(disp,win,gc,x,y,&rect,buf,len);
2687 x+=25*w;
2688 break;
2689 }
2690 rect.x=x;
2691 rect.width=6*w;
2692 len=sprintf(buf,"%6d",x0);
2693 ExtTextOut(disp,win,gc,x,y,&rect,buf,len);
2694 x+=6*w;
2695 rect.x=x;
2696 rect.width=6*w;
2697 len=sprintf(buf,"%6d",y0);
2698 ExtTextOut(disp,win,gc,x,y,&rect,buf,len);
2699 x+=6*w;
2700 rect.x=x+w;
2701 rect.width=x+8*w;
2702 getobj(d->obj[k],"oid",i,0,NULL,&cx);
2703 len=sprintf(buf,"^%d",cx);
2704 ExtTextOut(disp,win,gc,x+w,y,&rect,buf,len);
2705 x+=8*w;
2706 }
2707 tot+=d->legend[k]+1;
2708 }
2709 XFreeGC(disp,gc);
2710 }
2711
LegendWinEvLButtonDown(unsigned int state,TPoint point,struct LegendWin * d)2712 void LegendWinEvLButtonDown(unsigned int state,TPoint point,struct LegendWin *d)
2713 {
2714 int sel;
2715
2716 if (menulock || globallock) return;
2717 sel=point.y/FHeight-1;
2718 if (sel!=d->select) {
2719 LegendWinUpdate(FALSE);
2720 d->select=sel;
2721 }
2722 }
2723
LegendWinEvLButtonDblClk(unsigned int state,TPoint point,struct LegendWin * d)2724 void LegendWinEvLButtonDblClk(unsigned int state,TPoint point,struct LegendWin *d)
2725 {
2726 if (menulock || globallock) return;
2727 LegendWinLegendUpdate();
2728 }
2729
LegendWinEvRButtonDown(unsigned int state,TPoint point,struct LegendWin * d,XButtonPressedEvent * event)2730 void LegendWinEvRButtonDown(unsigned int state,TPoint point,
2731 struct LegendWin *d,XButtonPressedEvent *event)
2732 {
2733 int i,sel,num;
2734
2735 if (menulock || globallock) return;
2736 sel=point.y/FHeight-1;
2737 if (sel!=d->select) {
2738 LegendWinUpdate(TRUE);
2739 d->select=sel;
2740 }
2741 sel=d->select;
2742 num=0;
2743 for (i=0;i<LEGENDNUM;i++) num+=d->legend[i]+1;
2744 if ((sel>=0) && (sel<num)) {
2745 XtSetSensitive(XtNameToWidget(d->popup,"button_0"),True);
2746 XtSetSensitive(XtNameToWidget(d->popup,"button_1"),True);
2747 XtSetSensitive(XtNameToWidget(d->popup,"button_2"),True);
2748 XtSetSensitive(XtNameToWidget(d->popup,"button_3"),True);
2749 XtSetSensitive(XtNameToWidget(d->popup,"button_4"),True);
2750 XtSetSensitive(XtNameToWidget(d->popup,"button_5"),True);
2751 XtSetSensitive(XtNameToWidget(d->popup,"button_6"),True);
2752 XtSetSensitive(XtNameToWidget(d->popup,"button_7"),True);
2753 XtSetSensitive(XtNameToWidget(d->popup,"button_8"),True);
2754 XtSetSensitive(XtNameToWidget(d->popup,"button_9"),True);
2755 } else {
2756 XtSetSensitive(XtNameToWidget(d->popup,"button_0"),False);
2757 XtSetSensitive(XtNameToWidget(d->popup,"button_1"),False);
2758 XtSetSensitive(XtNameToWidget(d->popup,"button_2"),False);
2759 XtSetSensitive(XtNameToWidget(d->popup,"button_3"),False);
2760 XtSetSensitive(XtNameToWidget(d->popup,"button_4"),False);
2761 XtSetSensitive(XtNameToWidget(d->popup,"button_5"),False);
2762 XtSetSensitive(XtNameToWidget(d->popup,"button_6"),False);
2763 XtSetSensitive(XtNameToWidget(d->popup,"button_7"),False);
2764 XtSetSensitive(XtNameToWidget(d->popup,"button_8"),False);
2765 XtSetSensitive(XtNameToWidget(d->popup,"button_9"),False);
2766 }
2767 XmMenuPosition(d->popup,event);
2768 XtManageChild(d->popup);
2769 }
2770
2771 Time LegendWinTime=0;
2772 TPoint LegendWinPoint;
2773
LegendWinEvButtonDown(Widget w,XtPointer client_data,XEvent * event,Boolean * dispatch)2774 void LegendWinEvButtonDown(Widget w,XtPointer client_data,XEvent *event,
2775 Boolean *dispatch)
2776 {
2777 struct LegendWin *d;
2778 XButtonEvent *e;
2779 TPoint point;
2780 int dbl;
2781
2782 d=(struct LegendWin *)client_data;
2783 e=(XButtonEvent *)event;
2784 point.x=e->x;
2785 point.y=e->y;
2786 if (((e->time-LegendWinTime)<menulocal.mouseclick)
2787 && (LegendWinPoint.x==point.x) && (LegendWinPoint.y==point.y)) dbl=TRUE;
2788 else dbl=FALSE;
2789 LegendWinTime=e->time;
2790 LegendWinPoint.x=point.x;
2791 LegendWinPoint.y=point.y;
2792 if (e->button==Button1) {
2793 if (dbl) LegendWinEvLButtonDblClk(e->state,point,d);
2794 else LegendWinEvLButtonDown(e->state,point,d);
2795 } else if (e->button==Button2) {
2796 LegendWinEvLButtonDown(e->state,point,d);
2797 LegendWinEvLButtonDblClk(e->state,point,d);
2798 } else if (e->button==Button3) LegendWinEvRButtonDown(e->state,point,d,e);
2799 }
2800
LegendWinPopupMenu(Widget w,XtPointer client_data,XtPointer call_data)2801 void LegendWinPopupMenu(Widget w,XtPointer client_data,XtPointer call_data)
2802 {
2803 switch ((int )client_data) {
2804 case 0:
2805 LegendWinLegendSelect();
2806 break;
2807 case 1:
2808 LegendWinLegendUpdate();
2809 break;
2810 case 2:
2811 LegendWinLegendDelete();
2812 break;
2813 case 3:
2814 LegendWinLegendTop();
2815 break;
2816 case 4:
2817 LegendWinLegendUp();
2818 break;
2819 case 5:
2820 LegendWinLegendDown();
2821 break;
2822 case 6:
2823 LegendWinLegendLast();
2824 break;
2825 case 7:
2826 LegendWinLegendCopy();
2827 break;
2828 case 8:
2829 LegendWinLegendCopy2();
2830 break;
2831 case 9:
2832 LegendWinLegendHidden();
2833 break;
2834 }
2835 }
2836
LegendWinEvKeyDown(Widget w,XtPointer client_data,XEvent * event,Boolean * dispatch)2837 void LegendWinEvKeyDown(Widget w,XtPointer client_data,XEvent *event,
2838 Boolean *dispatch)
2839 {
2840 struct LegendWin *d;
2841 XKeyEvent *e;
2842 KeySym sym;
2843 int i,sel,num;
2844
2845 if (menulock || globallock) return;
2846 d=(struct LegendWin *)client_data;
2847 e=(XKeyEvent *)event;
2848 sym=XKeycodeToKeysym(e->display,e->keycode,0);
2849 sel=d->select;
2850 num=0;
2851 for (i=0;i<LEGENDNUM;i++) num+=d->legend[i]+1;
2852 num--;
2853 switch (sym) {
2854 case XK_Down:
2855 if (e->state & ShiftMask) LegendWinLegendDown();
2856 else {
2857 if ((sel==-1) && (num>=0)) sel=0;
2858 else if (sel<num) sel++;
2859 if (sel!=d->select) {
2860 d->select=sel;
2861 LegendWinUpdate(TRUE);
2862 }
2863 }
2864 break;
2865 case XK_Up:
2866 if (e->state & ShiftMask) LegendWinLegendUp();
2867 else {
2868 if ((sel==-1) && (num>=0)) sel=num;
2869 else if (sel>0) sel--;
2870 if (sel!=d->select) {
2871 d->select=sel;
2872 LegendWinUpdate(TRUE);
2873 }
2874 }
2875 break;
2876 case XK_Delete:
2877 LegendWinLegendDelete();
2878 break;
2879 case XK_Insert:
2880 if (e->state & ShiftMask) LegendWinLegendCopy2();
2881 else LegendWinLegendCopy();
2882 break;
2883 case XK_Home:
2884 if (e->state & ShiftMask) LegendWinLegendTop();
2885 break;
2886 case XK_End:
2887 if (e->state & ShiftMask) LegendWinLegendLast();
2888 break;
2889 case XK_Return:
2890 LegendWinLegendUpdate();
2891 break;
2892 case XK_space:
2893 LegendWinLegendSelect();
2894 break;
2895 case XK_BackSpace:
2896 LegendWinLegendHidden();
2897 break;
2898 }
2899 }
2900
LegendWindowUnmap(Widget w,XtPointer client_data,XtPointer call_data)2901 void LegendWindowUnmap(Widget w,XtPointer client_data,XtPointer call_data)
2902 {
2903 struct LegendWin *d;
2904 Position x,y,x0,y0;
2905 Dimension w0,h0;
2906
2907 d=&(NgraphApp.LegendWin);
2908 if (d->Win!=NULL) {
2909 XtVaGetValues(d->Win,XmNx,&x,XmNy,&y,
2910 XmNwidth,&w0,XmNheight,&h0,NULL);
2911 menulocal.legendwidth=w0;
2912 menulocal.legendheight=h0;
2913 XtTranslateCoords(TopLevel,0,0,&x0,&y0);
2914 menulocal.legendx=x-x0;
2915 menulocal.legendy=y-y0;
2916 XtDestroyWidget(d->Win);
2917 d->Win=NULL;
2918 d->text=NULL;
2919 XmToggleButtonSetState(XtNameToWidget(TopLevel,"*windowmenu.button_2"),
2920 False,False);
2921 }
2922 }
2923
CmLegendWindow(Widget w,XtPointer client_data,XtPointer call_data)2924 void CmLegendWindow(Widget w,XtPointer client_data,XtPointer call_data)
2925 {
2926 Arg al[20];
2927 Cardinal ac;
2928 Widget dlg,scw,clip;
2929 int i,width,height;
2930 Position x,y;
2931 struct LegendWin *d;
2932
2933 d=&(NgraphApp.LegendWin);
2934 if (d->Win!=NULL) {
2935 XtUnmanageChild(d->Win);
2936 } else {
2937 if (menulocal.legendwidth==CW_USEDEFAULT) width=FWidth*63+2*FWidth;
2938 else width=menulocal.legendwidth;
2939 if (menulocal.legendheight==CW_USEDEFAULT) height=FHeight*10;
2940 else height=menulocal.legendheight;
2941 ac=0;
2942 XtSetArg(al[ac],XmNborderWidth,1);ac++;
2943 XtSetArg(al[ac],XmNdialogStyle,XmDIALOG_MODELESS); ac++;
2944 XtSetArg(al[ac],XmNautoUnmanage,FALSE); ac++;
2945 XtSetArg(al[ac],XmNwidth,width); ac++;
2946 XtSetArg(al[ac],XmNheight,height); ac++;
2947 if ((menulocal.legendx!=CW_USEDEFAULT)
2948 && (menulocal.legendy!=CW_USEDEFAULT)) {
2949 XtTranslateCoords(TopLevel,menulocal.legendx,menulocal.legendy,&x,&y);
2950 x-=menulocal.framex;
2951 y-=menulocal.framey;
2952 if (x<0) x=0;
2953 if (y<0) y=0;
2954 XtSetArg(al[ac],XmNdefaultPosition,False); ac++;
2955 XtSetArg(al[ac],XmNx,x); ac++;
2956 XtSetArg(al[ac],XmNy,y); ac++;
2957 } else {
2958 XtSetArg(al[ac],XmNdefaultPosition,True); ac++;
2959 }
2960 XtManageChild(dlg=XmCreateFormDialog(TopLevel,"legendwindow",al,ac));
2961 d->Win=dlg;
2962 XtAddCallback(dlg,XmNunmapCallback,LegendWindowUnmap,NULL);
2963 ac=0;
2964 XtSetArg(al[ac],XmNtopAttachment,XmATTACH_FORM); ac++;
2965 XtSetArg(al[ac],XmNbottomAttachment,XmATTACH_FORM); ac++;
2966 XtSetArg(al[ac],XmNleftAttachment,XmATTACH_FORM); ac++;
2967 XtSetArg(al[ac],XmNrightAttachment,XmATTACH_FORM); ac++;
2968 XtSetArg(al[ac],XmNalignment,XmALIGNMENT_BEGINNING); ac++;
2969 XtSetArg(al[ac],XmNscrollingPolicy,XmAUTOMATIC); ac++;
2970 XtSetArg(al[ac],XmNscrollBarDisplayPolicy,XmSTATIC); ac++;
2971 XtSetArg(al[ac],XmNwidth,width); ac++;
2972 XtSetArg(al[ac],XmNheight,height); ac++;
2973 XtSetArg(al[ac],XmNborderWidth,0);ac++;
2974 XtManageChild(scw=XmCreateScrolledWindow(dlg,NULL,al,ac));
2975 ac=0;
2976 XtSetArg(al[ac],XmNwidth,FWidth*72+2*FWidth); ac++;
2977 XtSetArg(al[ac],XmNheight,height); ac++;
2978 XtSetArg(al[ac],XmNbackground,WhitePixel(XtDisplay(TopLevel),0)); ac++;
2979 XtManageChild(d->text=XmCreateDrawingArea(scw,NULL,al,ac));
2980 XtVaGetValues(scw,XmNclipWindow,&clip,NULL);
2981 XtVaSetValues(clip,XmNbackground,WhitePixel(XtDisplay(TopLevel),0),NULL);
2982 XtAddCallback(d->text,XmNexposeCallback,LegendWinExpose,NULL);
2983 XtAddEventHandler(d->text,ButtonPressMask,False,LegendWinEvButtonDown,d);
2984 for (i=0;i<LEGENDNUM;i++) {
2985 d->obj[i]=chkobject(legendlist[i]);
2986 d->legend[i]=chkobjlastinst(d->obj[i]);
2987 }
2988 LegendWinChangeLegendNum();
2989 d->select=-1;
2990 d->popup=XmVaCreateSimplePopupMenu(d->text,"legendpopup",
2991 LegendWinPopupMenu,
2992 XmVaPUSHBUTTON,NULL,NULL,NULL,NULL,
2993 XmVaPUSHBUTTON,NULL,NULL,NULL,NULL,
2994 XmVaPUSHBUTTON,NULL,NULL,NULL,NULL,
2995 XmVaPUSHBUTTON,NULL,NULL,NULL,NULL,
2996 XmVaPUSHBUTTON,NULL,NULL,NULL,NULL,
2997 XmVaPUSHBUTTON,NULL,NULL,NULL,NULL,
2998 XmVaPUSHBUTTON,NULL,NULL,NULL,NULL,
2999 XmVaPUSHBUTTON,NULL,NULL,NULL,NULL,
3000 XmVaPUSHBUTTON,NULL,NULL,NULL,NULL,
3001 XmVaPUSHBUTTON,NULL,NULL,NULL,NULL,
3002 NULL);
3003 XtAddEventHandler(d->text,KeyPressMask,False,LegendWinEvKeyDown,d);
3004 XmToggleButtonSetState(XtNameToWidget(TopLevel,"*windowmenu.button_2"),
3005 True,False);
3006 }
3007 }
3008