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    :                   Menu.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/FileSB.h>
49 # include <Xm/SelectioB.h>
50 # include <Xm/PushBG.h>
51 
52 # include "mut.h"
53 # include "mph.h"
54 # include "rds.h"
55 # include "rpr.h"
56 # include "rfm.h"
57 # include "GRM.h"
58 # include "GMX.h"
59 # include "GTB.h"
60 # include "GSB.h"
61 # include "GMF.h"
62 
63 # include "GMF_menu.h"
64 # include "GMF_dialog.h"
65 # include "GMF_file.h"
66 
67 /*------------------------------------------------------------\
68 |                                                             |
69 |                           Constants                         |
70 |                                                             |
71 \------------------------------------------------------------*/
72 /*------------------------------------------------------------\
73 |                                                             |
74 |                            Types                            |
75 |                                                             |
76 \------------------------------------------------------------*/
77 /*------------------------------------------------------------\
78 |                                                             |
79 |                          Variables                          |
80 |                                                             |
81 \------------------------------------------------------------*/
82 /*------------------------------------------------------------\
83 |                                                             |
84 |                            Menu                             |
85 |                                                             |
86 \------------------------------------------------------------*/
87 
88    GraalMenuItem GraalFileMenu[] =
89 
90          {
91            {
92              "New",
93              'N',
94              NULL,
95              NULL,
96              &xmPushButtonGadgetClass,
97              False,
98              False,
99              False,
100              CallbackFileNew,
101              (XtPointer)NULL,
102              (Widget)NULL,
103              (Widget)NULL,
104              (GraalMenuItem *)NULL
105            }
106            ,
107            {
108              "Open",
109              'O',
110              NULL,
111              NULL,
112              &xmPushButtonGadgetClass,
113              False,
114              False,
115              False,
116              CallbackFileOpen,
117              (XtPointer)NULL,
118              (Widget)NULL,
119              (Widget)NULL,
120              (GraalMenuItem *)NULL
121            }
122            ,
123            {
124              "Save     ",
125              'S',
126              "Ctrl<Key>W",
127              "Ctrl W",
128              &xmPushButtonGadgetClass,
129              False,
130              False,
131              False,
132              CallbackFileSave,
133              (XtPointer)NULL,
134              (Widget)NULL,
135              (Widget)NULL,
136              (GraalMenuItem *)NULL
137            }
138            ,
139            {
140              "Save As",
141              'A',
142              NULL,
143              NULL,
144              &xmPushButtonGadgetClass,
145              False,
146              False,
147              False,
148              CallbackFileSaveAs,
149              (XtPointer)NULL,
150              (Widget)NULL,
151              (Widget)NULL,
152              (GraalMenuItem *)NULL
153            }
154            ,
155            {
156              "Quit      ",
157              'Q',
158              "Ctrl<Key>Q",
159              "Ctrl Q",
160              &xmPushButtonGadgetClass,
161              False,
162              False,
163              False,
164              CallbackFileQuit,
165              (XtPointer)NULL,
166              (Widget)NULL,
167              (Widget)NULL,
168              (GraalMenuItem *)NULL
169            }
170            ,
171            {
172              NULL
173            }
174          };
175 
176 /*------------------------------------------------------------\
177 |                                                             |
178 |                          Functions                          |
179 |                                                             |
180 \------------------------------------------------------------*/
181 /*------------------------------------------------------------\
182 |                                                             |
183 |                     CallbackFileNew                         |
184 |                                                             |
185 \------------------------------------------------------------*/
186 
CallbackFileNew(MyWidget,ClientData,CallData)187 void CallbackFileNew( MyWidget, ClientData, CallData )
188 
189      Widget  MyWidget;
190      caddr_t ClientData;
191      caddr_t CallData;
192 {
193   rdsbegin();
194 
195   if ( GraalHeadUndo != (graalundo *)NULL )
196   {
197     CallbackFileSaveAs( NULL, NULL, NULL );
198   }
199 
200   GraalFileNew();
201 
202   rdsend();
203 }
204 
205 /*------------------------------------------------------------\
206 |                                                             |
207 |                     CallbackFileOpen                        |
208 |                                                             |
209 \------------------------------------------------------------*/
210 
CallbackFileOpen(MyWidget,ClientData,CallData)211 void CallbackFileOpen( MyWidget, ClientData, CallData )
212 
213      Widget  MyWidget;
214      caddr_t ClientData;
215      caddr_t CallData;
216 {
217   XmString Filter;
218 
219   rdsbegin();
220 
221   if ( GraalFileFilter[2] == '\0' )
222   {
223     strcat( GraalFileFilter, IN_PH );
224     strcat( GraalFileExtention, IN_PH );
225 
226     Filter    = XmStringCreateSimple( GraalFileFilter );
227 
228     XtVaSetValues( GraalFileOpenDialog.WIDGET,
229                    XmNpattern, Filter, NULL);
230 
231     XmStringFree( Filter );
232   }
233 
234   GraalEnterDialog( &GraalFileOpenDialog );
235 
236   rdsend();
237 }
238 
239 /*------------------------------------------------------------\
240 |                                                             |
241 |                     CallbackFileSave                        |
242 |                                                             |
243 \------------------------------------------------------------*/
244 
CallbackFileSave(MyWidget,ClientData,CallData)245 void CallbackFileSave( MyWidget, ClientData, CallData )
246 
247      Widget  MyWidget;
248      caddr_t ClientData;
249      caddr_t CallData;
250 {
251   rdsbegin();
252 
253   if ( GraalFigureMbk != (phfig_list *)NULL )
254   {
255     if ( ( GraalFigureMbk->NAME == (char *)NULL  ) ||
256          ( ! strcmp( GraalFigureMbk->NAME,
257                      GRAAL_DEFAULT_FIGURE_NAME ) ) )
258 
259     {
260       CallbackFileSaveAs( NULL, NULL, NULL );
261     }
262     else
263     {
264       GraalFileSave();
265     }
266   }
267   else
268   {
269     GraalErrorMessage( GraalMainWindow, "No current figure !" );
270   }
271 
272   rdsend();
273 }
274 
275 /*------------------------------------------------------------\
276 |                                                             |
277 |                     CallbackFileSaveAs                      |
278 |                                                             |
279 \------------------------------------------------------------*/
280 
CallbackFileSaveAs(MyWidget,ClientData,CallData)281 void CallbackFileSaveAs( MyWidget, ClientData, CallData )
282 
283      Widget  MyWidget;
284      caddr_t ClientData;
285      caddr_t CallData;
286 {
287   XmString SaveAsString;
288 
289   rdsbegin();
290 
291   if ( GraalFigureMbk == (phfig_list *)NULL )
292   {
293     GraalErrorMessage( GraalMainWindow, "No current figure !" );
294   }
295   else
296   {
297     SaveAsString = XmStringCreateLtoR( GraalFigureMbk->NAME,
298                                        XmSTRING_DEFAULT_CHARSET );
299 
300     XtVaSetValues( GraalFileSaveAsDialog.WIDGET,
301                    XmNtextString, SaveAsString, NULL );
302 
303     XmStringFree( SaveAsString );
304 
305     GraalEnterDialog( &GraalFileSaveAsDialog );
306   }
307 
308   rdsend();
309 }
310 
311 /*------------------------------------------------------------\
312 |                                                             |
313 |                     CallbackFileQuit                        |
314 |                                                             |
315 \------------------------------------------------------------*/
316 
CallbackFileQuit(MyWidget,ClientData,CallData)317 void CallbackFileQuit( MyWidget, ClientData, CallData )
318 
319      Widget  MyWidget;
320      caddr_t ClientData;
321      caddr_t CallData;
322 {
323   rdsbegin();
324 
325   GraalEnterDialog( &GraalFileQuitDialog );
326 
327   rdsend();
328 }
329