1 /*------------------------------------------------------------\
7 | Authors : Jacomme Ludovic |
10 \------------------------------------------------------------*/
14 #include <Xm/FileSB.h>
15 #include <Xm/MessageB.h>
16 #include <Xm/SelectioB.h>
17 #include <Xm/SeparatoG.h>
28 #include "XTB_dialog.h"
29 #include "XME_search.h"
30 #include "XYA_error.h"
34 Widget XyagFileSelectDialog
= NULL
;
36 static int XyagLockLoop
= 0;
38 static void CallbackConfirmQuitOk();
39 static void CallbackZoomSetOk();
40 static void CallbackFindOk();
41 static void CallbackDepthSetOk();
42 static void CallbackDepthSetToggle();
45 simple_callback(dialog
, client_data
, cbs
)
47 XtPointer client_data
;
48 XmAnyCallbackStruct
*cbs
;
50 XtUnmanageChild(dialog
);
53 /*------------------------------------------------------------\
54 | XyagDestroyDialogCallback |
55 \------------------------------------------------------------*/
58 XyagDestroyDialogCallback(MyWidget
, ClientData
, CallData
)
64 XyagExitErrorMessage(1);
68 /*------------------------------------------------------------\
69 | XyagExitDialogCallback |
70 \------------------------------------------------------------*/
73 XyagExitDialogCallback()
78 /*------------------------------------------------------------\
80 \------------------------------------------------------------*/
83 XyagLimitedLoop(MyWidget
)
86 Widget DialogShell
, WShell
;
91 Context
= XtWidgetToApplicationContext(MyWidget
);
95 // XyagSetMouseCursor(XtParent(MyWidget),XYAG_PIRATE_CURSOR);
97 for (WShell
= MyWidget
; !XtIsShell(WShell
); WShell
= XtParent(WShell
));
99 while (XyagLockLoop
== 1) {
100 XtAppNextEvent(Context
, &Event
);
102 AnyEvent
= (XAnyEvent
*) (&Event
);
104 for (DialogShell
= XtWindowToWidget(AnyEvent
->display
, AnyEvent
->window
);
105 ((DialogShell
!= NULL
) && (!XtIsShell(DialogShell
)));
106 DialogShell
= XtParent(DialogShell
));
108 switch (AnyEvent
->type
) {
111 if (WShell
== DialogShell
) {
112 XtDispatchEvent(&Event
);
118 if (WShell
!= DialogShell
) {
119 //AnyEvent->window = XtWindow(WShell);
120 XtPopup( WShell
, XtGrabNone
);
124 XtDispatchEvent( &Event
);
129 XtDispatchEvent(&Event
);
135 XyagSetMouseCursor( MyWidget
, XYAG_NORMAL_CURSOR
);
138 /*------------------------------------------------------------\
139 | XyagLeaveLimitedLoop |
140 \------------------------------------------------------------*/
141 void XyagLeaveLimitedLoop()
147 /*------------------------------------------------------------\
148 | XyagWarningMessage |
149 \------------------------------------------------------------*/
152 XyagWarningMessage(Father
, Subject
)
156 static Widget dialog
;
157 XmString label
, title
;
162 label
= XmStringCreateSimple(Subject
);
165 sprintf(buffer
,"%s: Warning",XYAGLE_NAME
);
166 title
= XmStringCreateSimple(buffer
);
167 XtSetArg(args
[n
], XmNdialogStyle
, XmDIALOG_FULL_APPLICATION_MODAL
);
169 XtSetArg(args
[n
], XmNmessageString
, label
);
171 dialog
= XmCreateWarningDialog(Father
, "warningDialog", args
, n
);
172 XtVaSetValues(dialog
, XmNdialogTitle
, title
, NULL
);
173 XtAddCallback(dialog
, XmNokCallback
, simple_callback
, NULL
);
174 XtUnmanageChild(XmMessageBoxGetChild(dialog
, XmDIALOG_CANCEL_BUTTON
));
175 XtUnmanageChild(XmMessageBoxGetChild(dialog
, XmDIALOG_HELP_BUTTON
));
178 XtVaSetValues(dialog
, XmNmessageString
, label
, NULL
);
182 XtManageChild(dialog
);
185 /*------------------------------------------------------------\
187 \------------------------------------------------------------*/
190 XyagErrorMessage(Father
, Subject
)
194 static Widget errorDialog
;
195 XmString label
, title
;
200 label
= XmStringCreateSimple(Subject
);
203 sprintf(buffer
,"%s: Error",XYAGLE_NAME
);
204 title
= XmStringCreateSimple(buffer
);
205 XtSetArg(args
[n
], XmNdialogStyle
, XmDIALOG_FULL_APPLICATION_MODAL
);
207 XtSetArg(args
[n
], XmNmessageString
, label
);
209 errorDialog
= XmCreateErrorDialog(Father
, "errorDialog", args
, n
);
210 XtVaSetValues(errorDialog
, XmNdialogTitle
, title
, NULL
);
211 XtAddCallback(errorDialog
, XmNokCallback
, simple_callback
, NULL
);
212 XtUnmanageChild(XmMessageBoxGetChild(errorDialog
, XmDIALOG_CANCEL_BUTTON
));
213 XtUnmanageChild(XmMessageBoxGetChild(errorDialog
, XmDIALOG_HELP_BUTTON
));
216 XtVaSetValues(errorDialog
, XmNmessageString
, label
, NULL
);
220 XtManageChild(errorDialog
);
223 /*------------------------------------------------------------\
224 | XyagWorkingDialog |
225 \------------------------------------------------------------*/
228 XyagWorkingDialog(Father
, Subject
)
232 static Widget workingDialog
;
233 XmString label
, title
;
238 label
= XmStringCreateSimple(Subject
);
240 if (!workingDialog
) {
241 sprintf(buffer
,"%s: Working",XYAGLE_NAME
);
242 title
= XmStringCreateSimple(buffer
);
243 XtSetArg(args
[n
], XmNdialogStyle
, XmDIALOG_FULL_APPLICATION_MODAL
);
245 XtSetArg(args
[n
], XmNmessageString
, label
);
247 workingDialog
= XmCreateWorkingDialog(Father
, "workingDialog", args
, n
);
248 XtVaSetValues(workingDialog
, XmNdialogTitle
, title
, NULL
);
249 XtAddCallback(workingDialog
, XmNcancelCallback
, simple_callback
, NULL
);
250 XtUnmanageChild(XmMessageBoxGetChild(workingDialog
, XmDIALOG_OK_BUTTON
));
251 XtUnmanageChild(XmMessageBoxGetChild(workingDialog
, XmDIALOG_HELP_BUTTON
));
254 XtVaSetValues(workingDialog
, XmNmessageString
, label
, NULL
);
258 XtManageChild(workingDialog
);
259 return workingDialog
;
263 /*------------------------------------------------------------\
265 \------------------------------------------------------------*/
270 static Widget quitDialog
;
271 XmString label
, title
, yes
, no
;
278 sprintf(buffer
,"%s: Confirm",XYAGLE_NAME
);
279 title
= XmStringCreateSimple(buffer
);
280 sprintf(buffer
,"Do you really want to quit %s?",XYAGLE_NAME
);
281 label
= XmStringCreateSimple(buffer
);
282 yes
= XmStringCreateSimple("YES");
283 no
= XmStringCreateSimple("NO");
284 XtSetArg(args
[n
], XmNdialogStyle
, XmDIALOG_FULL_APPLICATION_MODAL
); n
++;
285 XtSetArg(args
[n
], XmNmessageString
, label
); n
++;
286 XtSetArg(args
[n
], XmNokLabelString
, yes
); n
++;
287 XtSetArg(args
[n
], XmNcancelLabelString
, no
); n
++;
288 quitDialog
= XmCreateQuestionDialog(XyagMainWindow
, "confirmQuitDialog", args
, n
);
289 XtVaSetValues(quitDialog
, XmNdialogTitle
, title
, NULL
);
290 XtAddCallback(quitDialog
, XmNokCallback
, CallbackConfirmQuitOk
, NULL
);
291 XtAddCallback(quitDialog
, XmNcancelCallback
, simple_callback
, NULL
);
292 XtUnmanageChild(XmMessageBoxGetChild(quitDialog
, XmDIALOG_HELP_BUTTON
));
295 XtManageChild(quitDialog
);
299 /*------------------------------------------------------------\
300 | CallbackConfirmQuitOk |
301 \------------------------------------------------------------*/
304 CallbackConfirmQuitOk(MyWidget
, ClientData
, CallData
)
309 XtUnmanageChild(MyWidget
);
310 XtCloseDisplay(XtDisplay(XtParent(MyWidget
)));
311 XyagExitErrorMessage(0);
315 /*------------------------------------------------------------\
317 \------------------------------------------------------------*/
322 static Widget zoomSetDialog
;
323 XmString label
, title
;
329 if (!zoomSetDialog
) {
330 sprintf(buffer
,"%s: Prompt",XYAGLE_NAME
);
331 title
= XmStringCreateSimple(buffer
);
332 label
= XmStringCreateSimple("Enter the zoom percentage:");
333 XtSetArg(args
[n
], XmNdialogStyle
, XmDIALOG_FULL_APPLICATION_MODAL
); n
++;
334 XtSetArg(args
[n
], XmNselectionLabelString
, label
); n
++;
335 XtSetArg(args
[n
], XmNautoUnmanage
, False
); n
++;
336 zoomSetDialog
= XmCreatePromptDialog(XyagMainWindow
, "zoomSetDialog", args
, n
);
337 XtVaSetValues(zoomSetDialog
, XmNdialogTitle
, title
, NULL
);
338 XtAddCallback(zoomSetDialog
, XmNokCallback
, CallbackZoomSetOk
, NULL
);
339 XtAddCallback(zoomSetDialog
, XmNcancelCallback
, simple_callback
, NULL
);
340 XtUnmanageChild(XmSelectionBoxGetChild(zoomSetDialog
, XmDIALOG_HELP_BUTTON
));
343 XtManageChild(zoomSetDialog
);
346 /*------------------------------------------------------------\
347 | CallbackZoomSetOk |
348 \------------------------------------------------------------*/
351 CallbackZoomSetOk(MyWidget
, ClientData
, CallData
)
354 XmSelectionBoxCallbackStruct
*CallData
;
359 XmStringGetLtoR(CallData
->value
, XmSTRING_DEFAULT_CHARSET
, &ZoomSet
);
361 if (ZoomSet
!= NULL
) {
362 ZoomPercent
= atoi(ZoomSet
);
364 if ((ZoomPercent
< XYAG_PERCENT_ZOOM_MIN
) || (ZoomPercent
> XYAG_PERCENT_ZOOM_MAX
)) {
365 XyagErrorMessage(XyagMainWindow
, "The value must be between 5% and 95%");
368 XyagPercentZoom
= ZoomPercent
;
369 XtUnmanageChild(MyWidget
);
374 /*------------------------------------------------------------\
376 \------------------------------------------------------------*/
381 static Widget depthSetDialog
;
382 static Widget depthSetToggle
;
383 XmString label
, title
;
384 XmString btn1
, btn2
, btn3
;
389 if (!depthSetDialog
) {
390 sprintf(buffer
,"%s: Prompt",XYAGLE_NAME
);
391 title
= XmStringCreateSimple(buffer
);
392 label
= XmStringCreateSimple("Enter depth for Hilite/Extract:");
393 XtSetArg(args
[n
], XmNdialogStyle
, XmDIALOG_FULL_APPLICATION_MODAL
); n
++;
394 XtSetArg(args
[n
], XmNselectionLabelString
, label
); n
++;
395 XtSetArg(args
[n
], XmNautoUnmanage
, False
); n
++;
396 depthSetDialog
= XmCreatePromptDialog(XyagMainWindow
, "depthSetDialog", args
, n
);
397 XtVaSetValues(depthSetDialog
, XmNdialogTitle
, title
, NULL
);
398 XtAddCallback(depthSetDialog
, XmNokCallback
, CallbackDepthSetOk
, NULL
);
399 XtAddCallback(depthSetDialog
, XmNcancelCallback
, simple_callback
, NULL
);
400 XtUnmanageChild(XmSelectionBoxGetChild(depthSetDialog
, XmDIALOG_HELP_BUTTON
));
402 btn1
= XmStringCreateSimple("Backwards");
403 btn2
= XmStringCreateSimple("Forwards");
404 btn3
= XmStringCreateSimple("Both Ways");
405 depthSetToggle
= XmVaCreateSimpleRadioBox(depthSetDialog
, "depthSetToggle", 0, CallbackDepthSetToggle
,
406 XmVaRADIOBUTTON
, btn1
, 0, NULL
, NULL
,
407 XmVaRADIOBUTTON
, btn2
, 0, NULL
, NULL
,
408 XmVaRADIOBUTTON
, btn3
, 0, NULL
, NULL
,
410 XtManageChild(depthSetToggle
);
413 XtManageChild(depthSetDialog
);
416 /*------------------------------------------------------------\
417 | CallbackDepthSetToggle |
418 \------------------------------------------------------------*/
421 CallbackDepthSetToggle(MyWidget
, ClientData
, CallData
)
424 XmToggleButtonCallbackStruct
*CallData
;
426 if (CallData
->set
== False
) return;
427 switch ((int)ClientData
) {
429 XyagDependencyMode
= XYAG_BACKWARD
;
432 XyagDependencyMode
= XYAG_FORWARD
;
435 XyagDependencyMode
= XYAG_BOTH
;
440 /*------------------------------------------------------------\
441 | CallbackDepthSetOk |
442 \------------------------------------------------------------*/
445 CallbackDepthSetOk(MyWidget
, ClientData
, CallData
)
448 XmSelectionBoxCallbackStruct
*CallData
;
453 XmStringGetLtoR(CallData
->value
, XmSTRING_DEFAULT_CHARSET
, &DepthSet
);
456 if (DepthSet
!= NULL
) {
457 if (!strcmp(DepthSet
, "X\0")) {
459 XtUnmanageChild(MyWidget
);
462 DepthOfDep
= strtol(DepthSet
, NULL
, 10);
463 if (DepthOfDep
<= 0) {
464 XyagErrorMessage(XyagMainWindow
, "The Value must be strictly positive (or 'X' for MAX Depth)!");
467 XyagDepthOfDep
= DepthOfDep
;
468 XtUnmanageChild(MyWidget
);
473 XyagErrorMessage(XyagMainWindow
, "The Value must be strictly positive (or 'X' for MAX Depth)!");
477 /*------------------------------------------------------------\
479 \------------------------------------------------------------*/
484 static Widget findDialog
;
485 XmString label
, title
;
492 sprintf(buffer
,"%s: Prompt",XYAGLE_NAME
);
493 title
= XmStringCreateSimple(buffer
);
494 label
= XmStringCreateSimple("Enter gate or connector name:");
495 XtSetArg(args
[n
], XmNdialogStyle
, XmDIALOG_FULL_APPLICATION_MODAL
); n
++;
496 XtSetArg(args
[n
], XmNselectionLabelString
, label
); n
++;
497 XtSetArg(args
[n
], XmNautoUnmanage
, False
); n
++;
498 findDialog
= XmCreatePromptDialog(XyagMainWindow
, "findDialog", args
, n
);
499 XtVaSetValues(findDialog
, XmNdialogTitle
, title
, NULL
);
500 XtAddCallback(findDialog
, XmNokCallback
, CallbackFindOk
, NULL
);
501 XtAddCallback(findDialog
, XmNcancelCallback
, simple_callback
, NULL
);
502 XtUnmanageChild(XmSelectionBoxGetChild(findDialog
, XmDIALOG_HELP_BUTTON
));
505 XtManageChild(findDialog
);
508 /*------------------------------------------------------------\
510 \------------------------------------------------------------*/
513 CallbackFindOk(MyWidget
, ClientData
, CallData
)
516 XmSelectionBoxCallbackStruct
*CallData
;
520 XmStringGetLtoR(CallData
->value
, XmSTRING_DEFAULT_CHARSET
, &NameSet
);
521 XtUnmanageChild(MyWidget
);
523 NameSet
= XyagPostTreatString(NameSet
);
525 if (NameSet
!= (char *) NULL
) {
526 NameSet
= namealloc(NameSet
);
527 XyagEditSearchObject(NameSet
);
531 /*------------------------------------------------------------\
533 \------------------------------------------------------------*/
536 XyagFileSelect(Filter
, labelstr
, callbackOk
, labelExtraStr
, callbackExtra
)
541 void callbackExtra();
543 static Widget fileSelectDialog
;
544 XmString label
, title
, labelExtra
;
550 if (!fileSelectDialog
) {
551 sprintf(buffer
,"%s: File Select",XYAGLE_NAME
);
552 title
= XmStringCreateSimple(buffer
);
553 label
= XmStringCreateSimple(labelstr
);
554 XtSetArg(args
[n
], XmNdialogStyle
, XmDIALOG_FULL_APPLICATION_MODAL
); n
++;
555 XtSetArg(args
[n
], XmNselectionLabelString
, label
); n
++;
556 XtSetArg(args
[n
], XmNautoUnmanage
, False
); n
++;
557 fileSelectDialog
= XmCreateFileSelectionDialog(XyagMainWindow
, "fileSelectDialog", args
, n
);
558 XtVaSetValues(fileSelectDialog
, XmNdialogTitle
, title
, NULL
);
559 XtAddCallback(fileSelectDialog
, XmNokCallback
, callbackOk
, NULL
);
560 XtAddCallback(fileSelectDialog
, XmNcancelCallback
, simple_callback
, NULL
);
561 XtUnmanageChild(XmFileSelectionBoxGetChild(fileSelectDialog
, XmDIALOG_FILTER_LABEL
));
562 XtUnmanageChild(XmFileSelectionBoxGetChild(fileSelectDialog
, XmDIALOG_FILTER_TEXT
));
563 if (callbackExtra
!= NULL
) {
564 XtAddCallback(fileSelectDialog
, XmNhelpCallback
, callbackExtra
, NULL
);
567 XtUnmanageChild(XmSelectionBoxGetChild(fileSelectDialog
, XmDIALOG_HELP_BUTTON
));
569 if (labelExtraStr
!= NULL
) {
570 labelExtra
= XmStringCreateSimple(labelExtraStr
);
571 XtVaSetValues(fileSelectDialog
, XmNhelpLabelString
, labelExtra
, NULL
);
572 XmStringFree(labelExtra
);
576 XtRemoveAllCallbacks(fileSelectDialog
, XmNokCallback
);
577 XtAddCallback(fileSelectDialog
, XmNokCallback
, callbackOk
, NULL
);
578 XtRemoveAllCallbacks(fileSelectDialog
, XmNhelpCallback
);
579 if (callbackExtra
!= NULL
) {
580 XtManageChild(XmSelectionBoxGetChild(fileSelectDialog
, XmDIALOG_HELP_BUTTON
));
581 XtAddCallback(fileSelectDialog
, XmNhelpCallback
, callbackExtra
, NULL
);
584 XtUnmanageChild(XmSelectionBoxGetChild(fileSelectDialog
, XmDIALOG_HELP_BUTTON
));
586 if (labelExtraStr
!= NULL
) {
587 labelExtra
= XmStringCreateSimple(labelExtraStr
);
588 XtVaSetValues(fileSelectDialog
, XmNhelpLabelString
, labelExtra
, NULL
);
589 XmStringFree(labelExtra
);
592 XtVaSetValues(fileSelectDialog
, XmNpattern
, Filter
, NULL
);
594 XtManageChild(fileSelectDialog
);