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    :                 Dialog.c                          |
33 |                                                             |
34 | Author  :                Jacomme Ludovic                    |
35 |                                                             |
36 | Date    :                  28.03.95                         |
37 |                                                             |
38 \------------------------------------------------------------*/
39 /*------------------------------------------------------------\
40 |                                                             |
41 |                         Include Files                       |
42 |                                                             |
43 \------------------------------------------------------------*/
44 
45 # include <stdio.h>
46 # include <string.h>
47 # include <Xm/Xm.h>
48 # include <Xm/Form.h>
49 # include <Xm/LabelG.h>
50 # include <Xm/Label.h>
51 # include <Xm/Frame.h>
52 # include <Xm/List.h>
53 # include <Xm/Text.h>
54 # include <Xm/PushB.h>
55 # include <Xm/FileSB.h>
56 
57 # include "mut.h"
58 # include "mph.h"
59 # include "rds.h"
60 # include "rpr.h"
61 # include "rfm.h"
62 # include "GRM.h"
63 # include "GMX.h"
64 # include "GTB.h"
65 # include "GSB.h"
66 # include "GMF.h"
67 
68 # include "GMF_dialog.h"
69 # include "GMF_file.h"
70 # include "GMF_menu.h"
71 
72 /*------------------------------------------------------------\
73 |                                                             |
74 |                           Constants                         |
75 |                                                             |
76 \------------------------------------------------------------*/
77 /*------------------------------------------------------------\
78 |                                                             |
79 |                            Types                            |
80 |                                                             |
81 \------------------------------------------------------------*/
82 /*------------------------------------------------------------\
83 |                                                             |
84 |                          Variables                          |
85 |                                                             |
86 \------------------------------------------------------------*/
87 /*------------------------------------------------------------\
88 |                                                             |
89 |                          File Dialog                        |
90 |                                                             |
91 \------------------------------------------------------------*/
92 
93   GraalDialogItem GraalFileOpenDialog =
94 
95   {
96     "Open File",
97     GRAAL_DIALOG_FILE,
98     (Widget)NULL,
99     (void *)CallbackFileOpenOk,
100     (XtPointer)NULL,
101     (void *)CallbackFileOpenCancel,
102     (XtPointer)NULL
103   };
104 
105   GraalDialogItem GraalFileQuitDialog =
106 
107   {
108     "Do you really want to quit Graal ?",
109     GRAAL_DIALOG_WARNING,
110     (Widget)NULL,
111     (void *)CallbackFileQuitOk,
112     (XtPointer)NULL,
113     (void *)CallbackFileQuitCancel,
114     (XtPointer)NULL
115   };
116 
117   GraalDialogItem GraalFileSaveAsDialog =
118 
119   {
120     "Save As",
121     GRAAL_DIALOG_PROMPT,
122     (Widget)NULL,
123     (void *)CallbackFileSaveAsOk,
124     (XtPointer)NULL,
125     (void *)CallbackFileSaveAsCancel,
126     (XtPointer)NULL
127   };
128 
129 /*------------------------------------------------------------\
130 |                                                             |
131 |                          Functions                          |
132 |                                                             |
133 \------------------------------------------------------------*/
134 /*------------------------------------------------------------\
135 |                                                             |
136 |                  GraalBuildFileDialog                       |
137 |                                                             |
138 \------------------------------------------------------------*/
139 
GraalBuildFileDialog()140 void GraalBuildFileDialog()
141 
142 {
143   rdsbegin();
144 
145   GraalBuildDialog( GraalMainWindow, &GraalFileSaveAsDialog );
146   GraalBuildDialog( GraalMainWindow, &GraalFileOpenDialog   );
147   GraalBuildDialog( GraalMainWindow, &GraalFileQuitDialog   );
148 
149   rdsend();
150 }
151 
152 /*------------------------------------------------------------\
153 |                                                             |
154 |                  CallbackFileQuitOk                         |
155 |                                                             |
156 \------------------------------------------------------------*/
157 
CallbackFileQuitOk(MyWidget,ClientData,CallData)158 void CallbackFileQuitOk( MyWidget, ClientData, CallData )
159 
160     Widget                        MyWidget;
161     caddr_t                       ClientData;
162     caddr_t                       CallData;
163 {
164   rdsbegin();
165 
166   GraalExitDialog();
167 
168   if ( GraalHeadUndo != (graalundo *)NULL )
169   {
170     CallbackFileSaveAs( NULL, NULL, NULL );
171     GraalHeadUndo = (graalundo *)0;
172   }
173 
174   XtCloseDisplay( XtDisplay( XtParent( MyWidget ) ) );
175   GraalExitErrorMessage( 0 );
176 
177   rdsend();
178 }
179 
180 /*------------------------------------------------------------\
181 |                                                             |
182 |                  CallbackFileQuitCancel                     |
183 |                                                             |
184 \------------------------------------------------------------*/
185 
CallbackFileQuitCancel(MyWidget,ClientData,CallData)186 void CallbackFileQuitCancel( MyWidget, ClientData, CallData )
187 
188     Widget                        MyWidget;
189     caddr_t                       ClientData;
190     caddr_t                       CallData;
191 {
192   rdsbegin();
193 
194   GraalExitDialog();
195 
196   rdsend();
197 }
198 
199 /*------------------------------------------------------------\
200 |                                                             |
201 |                  CallbackFileSaveAsOk                       |
202 |                                                             |
203 \------------------------------------------------------------*/
204 
CallbackFileSaveAsOk(MyWidget,ClientData,CallData)205 void CallbackFileSaveAsOk( MyWidget, ClientData, CallData )
206 
207     Widget                        MyWidget;
208     caddr_t                       ClientData;
209     XmSelectionBoxCallbackStruct *CallData;
210 {
211   char *FileName;
212 
213   rdsbegin();
214 
215   XmStringGetLtoR(  CallData->value,
216                     XmSTRING_DEFAULT_CHARSET,
217                    &FileName );
218 
219   FileName = GraalPostTreatString( FileName );
220 
221   XtUnmanageChild( GraalFileSaveAsDialog.WIDGET );
222 
223   GraalExitDialog();
224 
225   GraalFileSaveAs( FileName );
226 
227   rdsend();
228 }
229 
230 /*------------------------------------------------------------\
231 |                                                             |
232 |                  CallbackFileSaveAsCancel                   |
233 |                                                             |
234 \------------------------------------------------------------*/
235 
CallbackFileSaveAsCancel(MyWidget,ClientData,CallData)236 void CallbackFileSaveAsCancel( MyWidget, ClientData, CallData )
237 
238     Widget                        MyWidget;
239     caddr_t                       ClientData;
240     XmSelectionBoxCallbackStruct *CallData;
241 {
242   rdsbegin();
243 
244   XtUnmanageChild( GraalFileSaveAsDialog.WIDGET );
245 
246   GraalExitDialog();
247 
248   rdsend();
249 }
250 
251 /*------------------------------------------------------------\
252 |                                                             |
253 |                    CallbackFileOpenOk                       |
254 |                                                             |
255 \------------------------------------------------------------*/
256 
CallbackFileOpenOk(MyWidget,ClientData,FileStruct)257 void CallbackFileOpenOk( MyWidget, ClientData, FileStruct )
258 
259     Widget                            MyWidget;
260     caddr_t                           ClientData;
261     XmFileSelectionBoxCallbackStruct *FileStruct;
262 {
263   char *FileName;
264 
265   rdsbegin();
266 
267   XtUnmanageChild( GraalFileOpenDialog.WIDGET );
268 
269   GraalExitDialog();
270 
271   if ( FileStruct->value != NULL )
272   {
273     XmStringGetLtoR( FileStruct->value,
274                      XmSTRING_DEFAULT_CHARSET,
275                      &FileName
276                    );
277 
278     FileName = GraalPostTreatString( FileName );
279 
280     if ( FileName != (char *)NULL )
281     {
282       if ( GraalHeadUndo != (graalundo *)NULL )
283       {
284         CallbackFileSaveAs( NULL, NULL, NULL );
285       }
286 
287       GraalFileOpen( FileName, 1 );
288 
289       GraalChangeEditMode( GRAAL_EDIT_MEASURE,
290                            GraalPromptEditMeasure );
291     }
292     else
293     {
294       GraalErrorMessage( GraalMainWindow, "Unable to load this file !" );
295     }
296   }
297 
298   rdsend();
299 }
300 
301 /*------------------------------------------------------------\
302 |                                                             |
303 |                    CallbackFileOpenCancel                   |
304 |                                                             |
305 \------------------------------------------------------------*/
306 
CallbackFileOpenCancel(MyWidget,ClientData,FileStruct)307 void CallbackFileOpenCancel( MyWidget, ClientData, FileStruct )
308 
309     Widget                            MyWidget;
310     caddr_t                           ClientData;
311     XmFileSelectionBoxCallbackStruct *FileStruct;
312 {
313   rdsbegin();
314 
315   XtUnmanageChild( GraalFileOpenDialog.WIDGET );
316 
317   GraalExitDialog();
318 
319   rdsend();
320 }
321