1 /*------------------------------------------------------------\
2 | |
3 | This file is part of the Alliance CAD System Copyright |
4 | (C) Laboratoire LIP6 - D�partement ASIM Universite P&M Curie|
5 | |
6 | Home page : http://www-asim.lip6.fr/alliance/ |
7 | E-mail : mailto:alliance-users@asim.lip6.fr |
8 | |
9 | This progam is free software; you can redistribute it |
10 | and/or modify it under the terms of the GNU General Public |
11 | License as published by the Free Software Foundation; |
12 | either version 2 of the License, or (at your option) any |
13 | later version. |
14 | |
15 | Alliance VLSI CAD System is distributed in the hope that |
16 | it will be useful, but WITHOUT ANY WARRANTY; |
17 | without even the implied warranty of MERCHANTABILITY or |
18 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General |
19 | Public License for more details. |
20 | |
21 | You should have received a copy of the GNU General Public |
22 | License along with the GNU C Library; see the file COPYING. |
23 | If not, write to the Free Software Foundation, Inc., |
24 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
25 | |
26 \------------------------------------------------------------*/
27
28 /*------------------------------------------------------------\
29 | |
30 | Tool : GRAAL |
31 | |
32 | File : Event.c |
33 | |
34 | Author : Jacomme Ludovic |
35 | |
36 | Date : 28.03.95 |
37 | |
38 \------------------------------------------------------------*/
39
40 /*------------------------------------------------------------\
41 | |
42 | Include Files |
43 | |
44 \------------------------------------------------------------*/
45
46 # include <stdio.h>
47 # include <X11/Intrinsic.h>
48 # include <X11/StringDefs.h>
49 # include <Xm/Xm.h>
50
51
52 # include "mut.h"
53 # include "mph.h"
54 # include "rds.h"
55 # include "rpr.h"
56 # include "GSB.h"
57 # include "GRM.h"
58 # include "GMX.h"
59 # include "GTB.h"
60 # include "GMV.h"
61 # include "GMS.h"
62 # include "GME.h"
63 # include "GMH.h"
64 # include "GMC.h"
65 # include "GMT.h"
66 # include "GMX_motif.h"
67 # include "GMX_grid.h"
68 # include "GMX_cursor.h"
69 # include "GMX_event.h"
70 # include "GMX_message.h"
71 # include "GMX_graphic.h"
72 # include "GME_select.h"
73 # include "GMT_druc.h"
74
75 /*------------------------------------------------------------\
76 | |
77 | Constants |
78 | |
79 \------------------------------------------------------------*/
80 /*------------------------------------------------------------\
81 | |
82 | Types |
83 | |
84 \------------------------------------------------------------*/
85 /*------------------------------------------------------------\
86 | |
87 | Variables |
88 | |
89 \------------------------------------------------------------*/
90 /*------------------------------------------------------------\
91 | |
92 | Translation |
93 | |
94 \------------------------------------------------------------*/
95
96 static String GraalEventTranslation =
97
98 "<Btn1Down>: CallbackEvent( 0 )\n\
99 <Btn3Down>: CallbackEvent( 1 )\n\
100 Shift<Btn4Down>: CallbackEvent( 7 )\n\
101 Shift<Btn5Down>: CallbackEvent( 8 )\n\
102 Ctrl<Btn4Down>: CallbackEvent( 9 )\n\
103 Ctrl<Btn5Down>: CallbackEvent( 10 )\n\
104 <Btn4Down>: CallbackEvent( 5 )\n\
105 <Btn5Down>: CallbackEvent( 6 )\n\
106 <Motion>: CallbackEvent( 2 )\n\
107 <EnterWindow>: CallbackEvent( 3 )\n\
108 <LeaveWindow>: CallbackEvent( 4 )\n\
109 <Key>osfUp: CallbackEvent( 5 )\n\
110 <Key>osfDown: CallbackEvent( 6 )\n\
111 <Key>osfLeft: CallbackEvent( 7 )\n\
112 <Key>osfRight: CallbackEvent( 8 )\n\
113 <Key>Z: CallbackEvent( 9 )\n\
114 <Key>M: CallbackEvent( 10 )\n\
115 <Key>F: CallbackEvent( 11 )\n\
116 <Key>R: CallbackEvent( 12 )\n\
117 <Key>U: CallbackEvent( 13 )\n\
118 <Key>I: CallbackEvent( 14 )\n\
119 <Key>C: CallbackEvent( 15 )\n\
120 <Key>P: CallbackEvent( 16 )\n\
121 Shift<Key>Tab: CallbackEvent( 17 )\n\
122 <Key>Tab: CallbackEvent( 18 )";
123
124 /*------------------------------------------------------------\
125 | |
126 | Event Count |
127 | |
128 \------------------------------------------------------------*/
129
130 static char GraalMaxEventEditTable[] =
131
132 {
133 2, /* GRAAL_EDIT_MEASURE */
134 2, /* GRAAL_CREATE_SEGMENT */
135 2, /* GRAAL_CREATE_SEGMENT_WIRE */
136 1, /* GRAAL_CREATE_VIA */
137 2, /* GRAAL_CREATE_TRANSISTOR */
138 2, /* GRAAL_CREATE_TRANSISTOR_WIRE */
139 1, /* GRAAL_CREATE_CONNECTOR */
140 1, /* GRAAL_CREATE_INSTANCE */
141 1, /* GRAAL_CREATE_REFERENCE */
142 2, /* GRAAL_CREATE_ABUTMENTBOX */
143 1, /* GRAAL_SELECT_POINT_IDENTIFY */
144 1, /* GRAAL_SELECT_POINT_COPY */
145 1, /* GRAAL_SELECT_POINT_MOVE */
146 1, /* GRAAL_SELECT_POINT_DELETE */
147 1, /* GRAAL_SELECT_POINT_STRETCH */
148 1, /* GRAAL_SELECT_POINT_MODIFY */
149 2, /* GRAAL_SELECT_WINDOW_IDENTIFY */
150 2, /* GRAAL_SELECT_WINDOW_COPY */
151 2, /* GRAAL_SELECT_WINDOW_MOVE */
152 2, /* GRAAL_SELECT_WINDOW_DELETE */
153 2, /* GRAAL_SELECT_WINDOW_STRETCH */
154 2, /* GRAAL_SELECT_WINDOW_MODIFY */
155 2, /* GRAAL_EDIT_COPY_POINT */
156 2, /* GRAAL_EDIT_COPY_WINDOW */
157 2, /* GRAAL_EDIT_MOVE_POINT */
158 2, /* GRAAL_EDIT_MOVE_WINDOW */
159 2, /* GRAAL_EDIT_STRETCH_POINT */
160 2, /* GRAAL_EDIT_STRETCH_WINDOW */
161 1, /* GRAAL_TOOLS_EQUI */
162 2, /* GRAAL_TOOLS_FLATTEN */
163 2, /* GRAAL_TOOLS_UNFLATTEN */
164 2, /* GRAAL_TOOLS_PEEK */
165 2, /* GRAAL_TOOLS_DRUC */
166 2, /* GRAAL_TOOLS_REAL_FLATTEN */
167 1, /* GRAAL_TOOLS_HIERARCHY_DOWN */
168 1, /* GRAAL_TOOLS_HIERARCHY_SHOW */
169 2 /* GRAAL_CREATE_BIGVIA */
170 };
171
172 static char GraalInputEventEditTable[] =
173
174 {
175 GRAAL_INPUT_HALF_BOX, /* GRAAL_EDIT_MEASURE */
176 GRAAL_INPUT_ORTHO, /* GRAAL_CREATE_SEGMENT */
177 GRAAL_INPUT_LSTRING, /* GRAAL_CREATE_SEGMENT_WIRE */
178 GRAAL_INPUT_POINT, /* GRAAL_CREATE_VIA */
179 GRAAL_INPUT_ORTHO, /* GRAAL_CREATE_TRANSISTOR */
180 GRAAL_INPUT_LSTRING, /* GRAAL_CREATE_TRANSISTOR_WIRE */
181 GRAAL_INPUT_POINT, /* GRAAL_CREATE_CONNECTOR */
182 GRAAL_INPUT_POINT, /* GRAAL_CREATE_INSTANCE */
183 GRAAL_INPUT_POINT, /* GRAAL_CREATE_REFERENCE */
184 GRAAL_INPUT_BOX, /* GRAAL_CREATE_ABUTMENTBOX */
185 GRAAL_INPUT_POINT, /* GRAAL_SELECT_POINT_IDENTIFY */
186 GRAAL_INPUT_POINT, /* GRAAL_SELECT_POINT_COPY */
187 GRAAL_INPUT_POINT, /* GRAAL_SELECT_POINT_MOVE */
188 GRAAL_INPUT_POINT, /* GRAAL_SELECT_POINT_DELETE */
189 GRAAL_INPUT_POINT, /* GRAAL_SELECT_POINT_STRETCH */
190 GRAAL_INPUT_POINT, /* GRAAL_SELECT_POINT_MODIFY */
191 GRAAL_INPUT_BOX, /* GRAAL_SELECT_WINDOW_IDENTIFY */
192 GRAAL_INPUT_BOX, /* GRAAL_SELECT_WINDOW_COPY */
193 GRAAL_INPUT_BOX, /* GRAAL_SELECT_WINDOW_MOVE */
194 GRAAL_INPUT_BOX, /* GRAAL_SELECT_WINDOW_DELETE */
195 GRAAL_INPUT_BOX, /* GRAAL_SELECT_WINDOW_STRETCH */
196 GRAAL_INPUT_BOX, /* GRAAL_SELECT_WINDOW_MODIFY */
197 GRAAL_INPUT_LINE, /* GRAAL_EDIT_COPY_POINT */
198 GRAAL_INPUT_LINE, /* GRAAL_EDIT_COPY_WINDOW */
199 GRAAL_INPUT_LINE, /* GRAAL_EDIT_MOVE_POINT */
200 GRAAL_INPUT_LINE, /* GRAAL_EDIT_MOVE_WINDOW */
201 GRAAL_INPUT_ORTHO, /* GRAAL_EDIT_STRETCH_POINT */
202 GRAAL_INPUT_ORTHO, /* GRAAL_EDIT_STRETCH_WINDOW */
203 GRAAL_INPUT_POINT, /* GRAAL_TOOLS_EQUI */
204 GRAAL_INPUT_BOX, /* GRAAL_TOOLS_FLATTEN */
205 GRAAL_INPUT_BOX, /* GRAAL_TOOLS_UNFLATTEN */
206 GRAAL_INPUT_BOX, /* GRAAL_TOOLS_PEEK */
207 GRAAL_INPUT_BOX, /* GRAAL_TOOLS_DRUC */
208 GRAAL_INPUT_BOX, /* GRAAL_TOOLS_REAL_FLATTEN */
209 GRAAL_INPUT_POINT, /* GRAAL_TOOLS_HIERARCHY_DOWN */
210 GRAAL_INPUT_POINT, /* GRAAL_TOOLS_HIERARCHY_SHOW */
211 GRAAL_INPUT_BOX /* GRAAL_CREATE_BIGVIA */
212 };
213
214 static char GraalMaxEventZoomTable[] =
215
216 {
217 1, /* GRAAL_ZOOM_CENTER */
218 2, /* GRAAL_ZOOM_IN */
219 2 /* GRAAL_ZOOM_PAN */
220 };
221
222 static char GraalInputEventZoomTable[] =
223
224 {
225 GRAAL_INPUT_POINT, /* GRAAL_ZOOM_CENTER */
226 GRAAL_INPUT_BOX, /* GRAAL_ZOOM_IN */
227 GRAAL_INPUT_LINE /* GRAAL_ZOOM_PAN */
228 };
229
230 /*------------------------------------------------------------\
231 | |
232 | Translation |
233 | |
234 \------------------------------------------------------------*/
235
236 /*------------------------------------------------------------\
237 | |
238 | Expose Edit Zoom |
239 | |
240 \------------------------------------------------------------*/
241
242 static long GraalLambdaEventZoomX[ 2 ] = { 0, 0 };
243 static long GraalLambdaEventZoomY[ 2 ] = { 0, 0 };
244 static char GraalMaxEventZoom = 0;
245 char GraalCountEventZoom = 0;
246
247 static long GraalLambdaEventEditX[ 2 ] = { 0, 0 };
248 static long GraalLambdaEventEditY[ 2 ] = { 0, 0 };
249 static char GraalMaxEventEdit = 2;
250 char GraalCountEventEdit = 0;
251
252 static char GraalFirstExpose = GRAAL_TRUE;
253
254 /*------------------------------------------------------------\
255 | |
256 | Input |
257 | |
258 \------------------------------------------------------------*/
259
260 static char GraalInputMode = GRAAL_INPUT_HALF_BOX;
261 static char GraalSaveInputMode = GRAAL_INPUT_HALF_BOX;
262 static char GraalEditMode = GRAAL_EDIT_MEASURE;
263 static char GraalSaveEditMode = GRAAL_EDIT_MEASURE;
264
265 /*------------------------------------------------------------\
266 | |
267 | Edit Message |
268 | |
269 \------------------------------------------------------------*/
270
271 static void (*GraalPromptMessage)() = GraalPromptEditMeasure;
272 static void (*GraalSavePromptMessage)() = GraalPromptEditMeasure;
273
274 /*------------------------------------------------------------\
275 | |
276 | Functions |
277 | |
278 \------------------------------------------------------------*/
279 /*------------------------------------------------------------\
280 | |
281 | GraalChangeEditMode |
282 | |
283 \------------------------------------------------------------*/
284
GraalChangeEditMode(EditMode,PromptMessage)285 void GraalChangeEditMode( EditMode , PromptMessage )
286
287 char EditMode;
288 void (*PromptMessage)();
289 {
290 rdsbegin();
291
292 if ( EditMode & GRAAL_ZOOM_MARK )
293 {
294 EditMode = EditMode & ~GRAAL_ZOOM_MARK;
295
296 GraalCountEventZoom = 0;
297 GraalMaxEventZoom = GraalMaxEventZoomTable[ (int)EditMode ];
298
299 if ( ! ( GraalEditMode & GRAAL_ZOOM_MARK ) )
300 {
301 GraalSaveEditMode = GraalEditMode;
302 GraalSaveInputMode = GraalInputMode;
303 GraalSavePromptMessage = GraalPromptMessage;
304 }
305
306 GraalInputMode = GraalInputEventZoomTable[ (int)EditMode ];
307 GraalPromptMessage = PromptMessage;
308 GraalEditMode = EditMode | GRAAL_ZOOM_MARK;
309
310 GraalChangeCursorType( NULL, NULL, 0, GraalInputMode );
311 }
312 else
313 {
314 if ( GraalEditMode & GRAAL_ZOOM_MARK )
315 {
316 GraalSaveEditMode = EditMode;
317 GraalSaveInputMode = GraalInputEventEditTable[ (int)EditMode ];
318 GraalSavePromptMessage = PromptMessage;
319 GraalCountEventEdit = 0;
320 GraalMaxEventEdit = GraalMaxEventEditTable[ (int)EditMode ];
321 }
322 else
323 {
324 if ( GraalEditMode != EditMode )
325 {
326 GraalCountEventEdit = 0;
327 GraalMaxEventEdit = GraalMaxEventEditTable[ (int)EditMode ];
328 GraalEditMode = EditMode;
329 GraalInputMode = GraalInputEventEditTable[ (int)EditMode ];
330 GraalPromptMessage = PromptMessage;
331
332 GraalChangeCursorType( NULL, NULL, 0, GraalInputMode );
333 }
334 }
335
336 GraalEditUnselectAll();
337 }
338
339 GraalPromptMessage();
340
341 rdsend();
342 }
343
344 /*------------------------------------------------------------\
345 | |
346 | GraalContinueEditMode |
347 | |
348 \------------------------------------------------------------*/
349
GraalContinueEditMode(EditMode,PromptMessage,CountEvent)350 void GraalContinueEditMode( EditMode , PromptMessage, CountEvent )
351
352 char EditMode;
353 void (*PromptMessage)();
354 char CountEvent;
355 {
356 rdsbegin();
357
358 if ( GraalEditMode & GRAAL_ZOOM_MARK )
359 {
360 GraalSaveEditMode = EditMode;
361 GraalSaveInputMode = GraalInputEventEditTable[ (int)EditMode ];
362 GraalSavePromptMessage = PromptMessage;
363 GraalCountEventEdit = CountEvent;
364 GraalMaxEventEdit = GraalMaxEventEditTable[ (int)EditMode ];
365 }
366 else
367 {
368 GraalCountEventEdit = CountEvent;
369 GraalMaxEventEdit = GraalMaxEventEditTable[ (int)EditMode ];
370 GraalEditMode = EditMode;
371 GraalInputMode = GraalInputEventEditTable[ (int)EditMode ];
372 GraalPromptMessage = PromptMessage;
373
374 GraalChangeCursorType( GraalLambdaEventEditX,
375 GraalLambdaEventEditY,
376 GraalCountEventEdit,
377 GraalInputMode );
378
379 }
380
381 GraalPromptMessage();
382
383 rdsend();
384 }
385
386 /*------------------------------------------------------------\
387 | |
388 | GraalTreatEventZoom |
389 | |
390 \------------------------------------------------------------*/
391
GraalTreatEventZoom()392 void GraalTreatEventZoom()
393
394 {
395 rdsbegin();
396
397 switch ( GraalEditMode )
398 {
399 case GRAAL_ZOOM_CENTER :
400
401 GraalZoomCenter( GraalLambdaEventZoomX[ 0 ],
402 GraalLambdaEventZoomY[ 0 ] );
403 break;
404
405 case GRAAL_ZOOM_IN :
406
407 GraalZoomIn( GraalLambdaEventZoomX[ 0 ],
408 GraalLambdaEventZoomY[ 0 ],
409 GraalLambdaEventZoomX[ 1 ],
410 GraalLambdaEventZoomY[ 1 ] );
411 break;
412
413 case GRAAL_ZOOM_PAN :
414
415 GraalZoomPan( GraalLambdaEventZoomX[ 0 ],
416 GraalLambdaEventZoomY[ 0 ],
417 GraalLambdaEventZoomX[ 1 ],
418 GraalLambdaEventZoomY[ 1 ] );
419 break;
420 }
421
422 rdsend();
423 }
424
425 /*------------------------------------------------------------\
426 | |
427 | GraalTreatEventEdit |
428 | |
429 \------------------------------------------------------------*/
430
GraalTreatEventEdit()431 void GraalTreatEventEdit()
432
433 {
434 long DeltaX;
435 long DeltaY;
436 long X1;
437 long X2;
438 long Y1;
439 long Y2;
440
441 rdsbegin();
442
443 X1 = GraalLambdaEventEditX[0];
444 X2 = GraalLambdaEventEditX[1];
445 Y1 = GraalLambdaEventEditY[0];
446 Y2 = GraalLambdaEventEditY[1];
447
448 if ( ( GraalInputMode == GRAAL_INPUT_LSTRING ) ||
449 ( GraalInputMode == GRAAL_INPUT_ORTHO ) ||
450 ( GraalInputMode == GRAAL_INPUT_SORTHO ) )
451 {
452 DeltaX = X1 - X2;
453 DeltaY = Y1 - Y2;
454
455 if ( DeltaX < 0 ) DeltaX = - DeltaX;
456 if ( DeltaY < 0 ) DeltaY = - DeltaY;
457
458 if ( DeltaX > DeltaY )
459 {
460 Y2 = Y1;
461
462 GraalLambdaEventEditX[0] = X2;
463 GraalLambdaEventEditY[0] = Y2;
464 }
465 else
466 {
467 X2 = X1;
468
469 GraalLambdaEventEditX[0] = X2;
470 GraalLambdaEventEditY[0] = Y2;
471 }
472 }
473
474 if ( GraalInputMode == GRAAL_INPUT_LSTRING )
475 {
476 GraalChangeCursorType( GraalLambdaEventEditX,
477 GraalLambdaEventEditY,
478 1, GraalInputMode );
479
480 GraalCountEventEdit = 1;
481 }
482 else
483 {
484 GraalChangeCursorType( NULL, NULL, 0,
485 GraalInputMode );
486
487 GraalCountEventEdit = 0;
488 }
489
490 switch ( GraalEditMode )
491 {
492 case GRAAL_EDIT_MEASURE :
493
494 break;
495
496 case GRAAL_CREATE_SEGMENT :
497 case GRAAL_CREATE_SEGMENT_WIRE :
498
499 GraalCreateSegmentMbk( X1, Y1, X2, Y2 );
500
501 break;
502
503 case GRAAL_CREATE_VIA :
504
505 GraalCreateViaMbk( X1, Y1 );
506
507 break;
508
509 case GRAAL_CREATE_BIGVIA :
510
511 GraalCreateBigViaMbk( X1, Y1, X2, Y2 );
512
513 break;
514
515 case GRAAL_CREATE_TRANSISTOR :
516 case GRAAL_CREATE_TRANSISTOR_WIRE :
517
518 GraalCreateTransistorMbk( X1, Y1, X2, Y2 );
519
520 break;
521
522 case GRAAL_CREATE_CONNECTOR :
523
524 GraalCreateConnectorMbk( X1, Y1 );
525
526 break;
527
528 case GRAAL_CREATE_REFERENCE :
529
530 GraalCreateReferenceMbk( X1, Y1 );
531
532 break;
533
534 case GRAAL_CREATE_INSTANCE :
535
536 GraalCreateInstanceMbk( X1, Y1 );
537
538 break;
539
540 case GRAAL_CREATE_ABUTMENTBOX :
541
542 GraalCreateAbutmentBoxMbk( X1, Y1, X2, Y2 );
543
544 break;
545
546 case GRAAL_SELECT_POINT_IDENTIFY :
547
548 GraalEditSelectPoint( X1, Y1 );
549 GraalEditIdentify();
550
551 break;
552
553 case GRAAL_SELECT_WINDOW_IDENTIFY :
554
555 GraalEditSelectFence( X1, Y1, X2, Y2 );
556 GraalEditIdentify();
557
558 break;
559
560 case GRAAL_SELECT_POINT_COPY :
561
562 GraalEditSelectPointCopy( X1, Y1 );
563
564 break;
565
566 case GRAAL_SELECT_WINDOW_COPY :
567
568 GraalEditSelectWindowCopy( X1, Y1, X2, Y2 );
569
570 break;
571
572 case GRAAL_EDIT_COPY_POINT :
573
574 GraalEditCopy( X1, Y1, X2, Y2, 0 );
575
576 break;
577
578 case GRAAL_EDIT_COPY_WINDOW :
579
580 GraalEditCopy( X1, Y1, X2, Y2, 1 );
581
582 break;
583
584 case GRAAL_SELECT_POINT_MOVE :
585
586 GraalEditSelectPointMove( X1, Y1 );
587
588 break;
589
590 case GRAAL_SELECT_WINDOW_MOVE :
591
592 GraalEditSelectWindowMove( X1, Y1, X2, Y2 );
593
594 break;
595
596 case GRAAL_EDIT_MOVE_POINT :
597
598 GraalEditMove( X1, Y1, X2, Y2, 0 );
599
600 break;
601
602 case GRAAL_EDIT_MOVE_WINDOW :
603
604 GraalEditMove( X1, Y1, X2, Y2, 1 );
605
606 break;
607
608 case GRAAL_SELECT_POINT_DELETE :
609
610 GraalEditSelectPointDelete( X1, Y1 );
611
612 break;
613
614 case GRAAL_SELECT_WINDOW_DELETE :
615
616 GraalEditSelectWindowDelete( X1, Y1, X2, Y2 );
617
618 break;
619
620 case GRAAL_SELECT_POINT_STRETCH :
621
622 GraalEditSelectPointStretch( X1, Y1 );
623
624 break;
625
626 case GRAAL_SELECT_WINDOW_STRETCH :
627
628 GraalEditSelectWindowStretch( X1, Y1, X2, Y2 );
629
630 break;
631
632 case GRAAL_EDIT_STRETCH_POINT :
633
634 GraalEditStretch( X1, Y1, X2, Y2, 0 );
635
636 break;
637
638 case GRAAL_EDIT_STRETCH_WINDOW :
639
640 GraalEditStretch( X1, Y1, X2, Y2, 1 );
641
642 break;
643
644 case GRAAL_SELECT_POINT_MODIFY :
645
646 GraalEditSelectPointModify( X1, Y1 );
647
648 break;
649
650 case GRAAL_SELECT_WINDOW_MODIFY :
651
652 GraalEditSelectWindowModify( X1, Y1, X2, Y2 );
653
654 break;
655
656 case GRAAL_TOOLS_EQUI :
657
658 GraalToolsSelectEqui( X1, Y1 );
659
660 break;
661
662 case GRAAL_TOOLS_PEEK :
663
664 GraalToolsPeek( X1, Y1, X2, Y2 );
665
666 break;
667
668 case GRAAL_TOOLS_FLATTEN :
669
670 GraalToolsSelectFlatten( X1, Y1, X2, Y2 );
671
672 break;
673
674 case GRAAL_TOOLS_UNFLATTEN :
675
676 GraalToolsSelectUnflatten( X1, Y1, X2, Y2 );
677
678 break;
679
680 case GRAAL_TOOLS_DRUC :
681
682 GraalToolsDruc( X1, Y1, X2, Y2 );
683
684 break;
685
686 case GRAAL_TOOLS_REAL_FLATTEN :
687
688 GraalToolsSelectRealFlatten( X1, Y1, X2, Y2 );
689
690 break;
691
692 case GRAAL_TOOLS_HIERARCHY_DOWN :
693
694 GraalToolsSelectHierarchyDown( X1, Y1 );
695
696 break;
697
698 case GRAAL_TOOLS_HIERARCHY_SHOW :
699
700 GraalEditSelectPoint( X1, Y1 );
701 GraalToolsHierarchyShow( X1, Y1 );
702
703 break;
704 }
705
706 rdsend();
707 }
708
709 /*------------------------------------------------------------\
710 | |
711 | CallbackEvent |
712 | |
713 \------------------------------------------------------------*/
714
CallbackEvent(MyWidget,Event,Args,Argc)715 void CallbackEvent ( MyWidget, Event, Args, Argc )
716
717 Widget MyWidget;
718 XButtonEvent *Event;
719 String *Args;
720 int *Argc;
721 {
722 char MouseEvent;
723 int FlagUp;
724 Position OldLambdaCursorX;
725 Position OldLambdaCursorY;
726
727 rdsbegin();
728
729 MouseEvent = atoi( Args[ 0 ] );
730
731 if ( MouseEvent == GRAAL_LEAVE )
732 {
733 GraalUndisplayCursor();
734 GraalCursorInside = GRAAL_FALSE;
735 }
736 else
737 {
738 OldLambdaCursorX = GraalLambdaCursorX;
739 OldLambdaCursorY = GraalLambdaCursorY;
740
741 GraalComputeCursor( Event->x, Event->y );
742
743 switch ( MouseEvent )
744 {
745 case GRAAL_B1DN :
746
747 if ( GraalEditMode & GRAAL_ZOOM_MARK )
748 {
749 if ( GraalCountEventZoom < GraalMaxEventZoom )
750 {
751 GraalLambdaEventZoomX[ (int)GraalCountEventZoom ] = GraalLambdaCursorX;
752 GraalLambdaEventZoomY[ (int)GraalCountEventZoom ] = GraalLambdaCursorY;
753
754 GraalCountEventZoom = GraalCountEventZoom + 1;
755
756 GraalPointCursor();
757
758 if ( GraalCountEventZoom == GraalMaxEventZoom )
759 {
760 GraalChangeCursorType( NULL, NULL, 0, GraalInputMode );
761
762 GraalTreatEventZoom();
763
764 GraalInputMode = GraalSaveInputMode;
765 GraalEditMode = GraalSaveEditMode;
766 GraalPromptMessage = GraalSavePromptMessage;
767 GraalSaveEditMode = GRAAL_EDIT_MEASURE;
768 GraalSaveInputMode = GRAAL_INPUT_HALF_BOX;
769 GraalCountEventZoom = 0;
770 GraalMaxEventZoom = 0;
771
772 GraalChangeCursorType( GraalLambdaEventEditX,
773 GraalLambdaEventEditY,
774 GraalCountEventEdit,
775 GraalInputMode );
776
777 GraalComputeCursor( Event->x, Event->y );
778 GraalDisplayCursor();
779 }
780 }
781 }
782 else
783 {
784 if ( GraalCountEventEdit < GraalMaxEventEdit )
785 {
786 GraalLambdaEventEditX[ (int)GraalCountEventEdit ] = GraalLambdaCursorX;
787 GraalLambdaEventEditY[ (int)GraalCountEventEdit ] = GraalLambdaCursorY;
788
789 GraalCountEventEdit = GraalCountEventEdit + 1;
790
791 GraalPointCursor();
792
793 if ( GraalCountEventEdit == GraalMaxEventEdit )
794 {
795 GraalTreatEventEdit();
796
797 GraalDisplayCursor();
798 }
799 }
800 }
801
802 GraalPromptMessage();
803
804 break;
805
806 case GRAAL_B3DN :
807
808 if ( GraalEditMode & GRAAL_ZOOM_MARK )
809 {
810 if ( GraalCountEventZoom != 0 )
811 {
812 GraalCountEventZoom = GraalCountEventZoom - 1;
813
814 GraalResetCursor();
815 }
816 else
817 {
818 GraalChangeCursorType( GraalLambdaEventEditX,
819 GraalLambdaEventEditY,
820 GraalCountEventEdit,
821 GraalSaveInputMode );
822
823 GraalInputMode = GraalSaveInputMode;
824 GraalEditMode = GraalSaveEditMode;
825 GraalPromptMessage = GraalSavePromptMessage;
826 GraalSaveEditMode = GRAAL_EDIT_MEASURE;
827 GraalSaveInputMode = GRAAL_INPUT_HALF_BOX;
828 GraalSavePromptMessage = GraalPromptEditMeasure;
829 GraalCountEventZoom = 0;
830 GraalMaxEventZoom = 0;
831 }
832 }
833 else
834 {
835 if ( GraalCountEventEdit != 0 )
836 {
837 GraalCountEventEdit = GraalCountEventEdit - 1;
838
839 GraalResetCursor();
840 }
841 else
842 {
843 GraalEditUnselectAll();
844
845 GraalChangeCursorType( NULL, NULL, 0,
846 GRAAL_INPUT_HALF_BOX );
847
848 GraalInputMode = GRAAL_INPUT_HALF_BOX;
849 GraalEditMode = GRAAL_EDIT_MEASURE;
850 GraalPromptMessage = GraalPromptEditMeasure;
851 GraalCountEventEdit = 0;
852 GraalMaxEventEdit = 2;
853 }
854 }
855
856 GraalPromptMessage();
857
858 break;
859
860 case GRAAL_MOTION :
861
862 break;
863
864 case GRAAL_ENTER :
865
866 GraalCursorInside = GRAAL_TRUE;
867 GraalDisplayCursor();
868
869 break;
870
871 case GRAAL_KEY_UP : GraalZoomUp();
872
873 break;
874
875 case GRAAL_KEY_DN : GraalZoomDown();
876
877 break;
878
879 case GRAAL_KEY_LEFT : GraalZoomLeft();
880
881 break;
882
883 case GRAAL_KEY_RIGHT : GraalZoomRight();
884
885 break;
886
887 case GRAAL_KEY_MORE : GraalZoomMore();
888
889 break;
890
891 case GRAAL_KEY_LESS : GraalZoomLess();
892
893 break;
894
895 case GRAAL_KEY_FIT : GraalZoomFit();
896
897 break;
898
899 case GRAAL_KEY_REFRESH : GraalZoomRefresh();
900
901 break;
902
903 case GRAAL_KEY_UNZOOM : GraalZoomUndo();
904
905 break;
906
907 case GRAAL_KEY_ZOOM_IN :
908
909 GraalChangeEditMode( GRAAL_ZOOM_IN, GraalPromptZoomIn );
910
911 break;
912
913 case GRAAL_KEY_CENTER :
914
915 GraalChangeEditMode( GRAAL_ZOOM_CENTER, GraalPromptZoomCenter );
916
917 break;
918
919 case GRAAL_KEY_PAN :
920
921 GraalChangeEditMode( GRAAL_ZOOM_PAN, GraalPromptZoomPan );
922
923 break;
924
925 case GRAAL_KEY_UP_LAYER :
926 case GRAAL_KEY_DN_LAYER :
927
928 if ( ! ( GraalEditMode & GRAAL_ZOOM_MARK ) )
929 {
930 FlagUp = ( MouseEvent == GRAAL_KEY_UP_LAYER );
931
932 switch ( GraalEditMode )
933 {
934 case GRAAL_CREATE_SEGMENT :
935 case GRAAL_CREATE_SEGMENT_WIRE : GraalChangeSegmentLayer( FlagUp );
936 break;
937
938 case GRAAL_CREATE_VIA : GraalChangeViaType( FlagUp );
939 break;
940
941 case GRAAL_CREATE_BIGVIA : GraalChangeBigViaType( FlagUp );
942 break;
943
944 case GRAAL_CREATE_TRANSISTOR :
945 case GRAAL_CREATE_TRANSISTOR_WIRE : GraalChangeTransistorType( FlagUp );
946 break;
947
948 case GRAAL_CREATE_CONNECTOR : GraalChangeConnectorLayer( FlagUp );
949 break;
950
951 case GRAAL_CREATE_REFERENCE : GraalChangeReferenceType( FlagUp );
952 break;
953 }
954
955 GraalPromptMessage();
956 }
957
958 break;
959 }
960
961 if ( MouseEvent >= GRAAL_KEY_UP )
962 {
963 GraalComputeCursor( Event->x, Event->y );
964 GraalDisplayCursor();
965 }
966
967 if ( ( OldLambdaCursorX != GraalLambdaCursorX ) ||
968 ( OldLambdaCursorY != GraalLambdaCursorY ) )
969 {
970 GraalDisplayCoordinates();
971 GraalDisplayCursor();
972 }
973 }
974
975 rdsend();
976 }
977
978 /*------------------------------------------------------------\
979 | |
980 | CallbackResize |
981 | |
982 \------------------------------------------------------------*/
983
CallbackResize(MyWidget,ClientData,CallData)984 void CallbackResize( MyWidget, ClientData, CallData )
985
986 Widget MyWidget;
987 XtPointer ClientData;
988 XmDrawingAreaCallbackStruct *CallData;
989 {
990 if ( GraalFirstExpose == GRAAL_FALSE )
991 {
992 rdsbegin();
993
994 GraalSetMouseCursor( GraalGraphicWindow, GRAAL_WATCH_CURSOR );
995 GraalUndisplayCursor();
996
997 GraalResizeGraphicWindow();
998 GraalRefreshGraphicWindow( 0, 0,
999 GraalGraphicDx, GraalGraphicDy );
1000 GraalSetMouseCursor( GraalGraphicWindow, GRAAL_NORMAL_CURSOR );
1001 GraalDisplayCursor();
1002
1003 rdsend();
1004 }
1005 }
1006
1007 /*------------------------------------------------------------\
1008 | |
1009 | CallbackExpose |
1010 | |
1011 \------------------------------------------------------------*/
1012
CallbackExpose(MyWidget,ClientData,CallData)1013 void CallbackExpose( MyWidget, ClientData, CallData )
1014
1015 Widget MyWidget;
1016 XtPointer ClientData;
1017 XmDrawingAreaCallbackStruct *CallData;
1018 {
1019 XExposeEvent *ExposeEvent;
1020
1021 ExposeEvent = (XExposeEvent *)CallData->event;
1022
1023 rdsbegin();
1024
1025 if ( GraalFirstExpose == GRAAL_TRUE )
1026 {
1027 GraalFirstExpose = GRAAL_FALSE;
1028
1029 GraalInitializeGraphicWindow();
1030 GraalUndisplayCursor();
1031
1032 GraalLoadConfig( GRAAL_FALSE );
1033
1034 if ( GraalFigureMbk != (phfig_list *)NULL )
1035 {
1036 GraalSetMouseCursor( GraalGraphicWindow, GRAAL_WATCH_CURSOR );
1037
1038 GraalAddFigure();
1039 GraalChangeTopLevelTitle( GraalFigureMbk->NAME );
1040 GraalInitializeZoom();
1041 GraalDisplayToolsMessage();
1042 GraalDisplayFigure( 0, 0, GraalGraphicDx, GraalGraphicDy );
1043 GraalSetMouseCursor( GraalGraphicWindow, GRAAL_NORMAL_CURSOR );
1044 }
1045 else
1046 {
1047 GraalChangeTopLevelTitle( (char *)NULL );
1048 }
1049
1050 GraalRefreshGraphicWindow( 0, 0, GraalGraphicDx, GraalGraphicDy );
1051 GraalDisplayCursor();
1052
1053 /* LUDO: Fed up to Click On IT ...
1054 GraalEnterPresentPanel();
1055 */
1056 }
1057 else
1058 {
1059 GraalUndisplayCursor();
1060 GraalRefreshGraphicWindow( ExposeEvent->x, ExposeEvent->y,
1061 ExposeEvent->width, ExposeEvent->height );
1062 GraalDisplayCursor();
1063 }
1064
1065 rdsend();
1066 }
1067
1068 /*------------------------------------------------------------\
1069 | |
1070 | GraalInitializeEvent |
1071 | |
1072 \------------------------------------------------------------*/
1073
GraalInitializeEvent()1074 void GraalInitializeEvent()
1075
1076 {
1077 XtActionsRec NewActions;
1078
1079 rdsbegin();
1080
1081 XtVaSetValues( GraalGraphicWindow,
1082 XmNtranslations,
1083 XtParseTranslationTable( GraalEventTranslation ),
1084 NULL
1085 );
1086
1087 NewActions.string = "CallbackEvent";
1088 NewActions.proc = CallbackEvent;
1089
1090 XtAppAddActions( GraalApplication, &NewActions, 1 );
1091
1092 XtAddCallback( GraalGraphicWindow,
1093 XmNresizeCallback,
1094 CallbackResize, NULL );
1095
1096 XtAddCallback( GraalGraphicWindow,
1097 XmNexposeCallback,
1098 CallbackExpose, NULL );
1099
1100 rdsend();
1101 }
1102