Continuing to track down the issue with a crash on startup on
[xcircuit.git] / menus.h
blobd5064234f49b373a0182ba5ec4da3c2aea2571a8
1 /*-------------------------------------------------------------------------*/
2 /* menus.h */
3 /* Copyright (c) 2002 Tim Edwards, Johns Hopkins University */
4 /*-------------------------------------------------------------------------*/
6 /*-------------------------------------------------------------------------*/
7 /* Hierarchical menus must be listed in bottom-up order */
8 /*-------------------------------------------------------------------------*/
9 /* Note: underscore (_) before name denotes a color to paint the button. */
10 /* colon (:) before name denotes a stipple, defined by the data */
11 /* passed to setfill(). */
12 /*-------------------------------------------------------------------------*/
14 #ifdef _MENUDEP
16 #define submenu(a) a, (sizeof (a) / sizeof(menustruct)), NULL, NULL
17 #define action(b,c) NULL, 0, NULL, NULL
18 #define setaction(b,c) NULL, 1, NULL, NULL
19 #define toolaction(b,c) NULL, NULL
20 #define noaction NULL, 0, NULL, NULL
21 #define offset(a) 0
23 #else /* real definitions. . .*/
25 #define submenu(a) a, (sizeof (a) / sizeof(menustruct)), \
26 (XtCallbackProc)DoNothing, NULL
27 #define action(b,c) NULL, 0, (XtCallbackProc)b, c
28 #define setaction(b,c) NULL, 1, (XtCallbackProc)b, c
29 #define toolaction(b,c) (XtCallbackProc)b, c
30 #define noaction NULL, 0, (XtCallbackProc)DoNothing, NULL
31 #define offset(a) Number(XtOffset(XCWindowDataPtr, a))
33 #endif
35 /* Inclusions for pixmap icons */
37 #include "tool_bar.h"
39 /* Things commented out here are reminders of future implementations. */
41 menustruct Fonts[] = {
42 {"Add New Font", action(addnewfont, NULL)},
43 {" ", noaction},
46 /* Note the unorthodox passing of integer constants through type pointer */
48 menustruct FontStyles[] = {
49 {"Normal", setaction(fontstyle, Number(0))},
50 {"Bold", action(fontstyle, Number(1))},
51 {"Italic", action(fontstyle, Number(2))},
52 {"BoldItalic", action(fontstyle, Number(3))},
53 {" ", noaction},
54 {"Subscript", action(addtotext, Number(SUBSCRIPT))},
55 {"Superscript", action(addtotext, Number(SUPERSCRIPT))},
56 {"Normalscript", action(addtotext, Number(NORMALSCRIPT))},
57 {" ", noaction},
58 {"Underline", action(addtotext, Number(UNDERLINE))},
59 {"Overline", action(addtotext, Number(OVERLINE))},
60 {"No line", action(addtotext, Number(NOLINE))},
63 menustruct FontEncodings[] = {
64 {"Standard", action(fontencoding, Number(0))},
65 {"ISO-Latin1", setaction(fontencoding, Number(2))},
68 menustruct TextSpacing[] = {
69 {"Tab stop", action(addtotext, Number(TABSTOP))},
70 {"Tab forward", action(addtotext, Number(TABFORWARD))},
71 {"Tab backward", action(addtotext, Number(TABBACKWARD))},
72 {"Carriage Return", action(addtotext, Number(RETURN))},
73 {"1/2 space", action(addtotext, Number(HALFSPACE))},
74 {"1/4 space", action(addtotext, Number(QTRSPACE))},
75 {"Kern", action(getkern, NULL)},
76 {"Character", action(addtotext, Number(SPECIAL))},
79 menustruct Anchors[] = {
80 {"Left Anchored", setaction(sethanchor, Number(NORMAL))},
81 {"Center Anchored", action(sethanchor, Number(NOTLEFT))},
82 {"Right Anchored", action(sethanchor, Number(NOTLEFT | RIGHT))},
83 {" ", noaction},
84 {"Top Anchored", action(setvanchor, Number(NOTBOTTOM | TOP))},
85 {"Middle Anchored", action(setvanchor, Number(NOTBOTTOM))},
86 {"Bottom Anchored", setaction(setvanchor, Number(NORMAL))},
87 {" ", noaction},
88 {"Flip Invariant", setaction(setanchorbit, Number(FLIPINV))},
91 menustruct BoxEditStyles[] = {
92 {"Manhattan Box Edit", setaction(boxedit, Number(MANHATTAN))},
93 {"Rhomboid X", action(boxedit, Number(RHOMBOIDX))},
94 {"Rhomboid Y", action(boxedit, Number(RHOMBOIDY))},
95 {"Rhomboid A", action(boxedit, Number(RHOMBOIDA))},
96 {"Normal", action(boxedit, Number(NORMAL))},
99 menustruct GridStyles[] = {
100 {"Decimal Inches", action(getgridtype, Number(DEC_INCH))},
101 {"Fractional Inches", setaction(getgridtype, Number(FRAC_INCH))},
102 {"Centimeters", action(getgridtype, Number(CM))},
103 {" ", noaction},
104 {"Drawing Scale", action(getdscale, NULL)},
107 menustruct Libraries[] = {
108 {"Add New Library", action(newlibrary, NULL)},
109 {" ", noaction},
110 {"Library 1", action(startcatalog, Number(LIBRARY))},
111 {"Library 2", action(startcatalog, Number(LIBRARY + 1))},
114 menustruct Pages[] = {
115 {"Add New Page", action(newpagemenu, Number(255))},
116 {" ", noaction},
117 {"Page 1", action(newpagemenu, Number(0))},
118 {"Page 2", action(newpagemenu, Number(1))},
119 {"Page 3", action(newpagemenu, Number(2))},
120 {"Page 4", action(newpagemenu, Number(3))},
121 {"Page 5", action(newpagemenu, Number(4))},
122 {"Page 6", action(newpagemenu, Number(5))},
123 {"Page 7", action(newpagemenu, Number(6))},
124 {"Page 8", action(newpagemenu, Number(7))},
125 {"Page 9", action(newpagemenu, Number(8))},
126 {"Page 10", action(newpagemenu, Number(9))}
129 menustruct BorderStyles[] = {
130 {"Linewidth", action(getwwidth, NULL)},
131 {" ", noaction},
132 {"Solid", setaction(setline, Number(NORMAL))},
133 {"Dashed", action(setline, Number(DASHED))},
134 {"Dotted", action(setline, Number(DOTTED))},
135 {"Unbordered", action(setline, Number(NOBORDER))},
136 {" ", noaction},
137 {"Closed", action(setclosure, Number(UNCLOSED))},
138 {"Bounding Box", action(makebbox, Number(BBOX))},
141 menustruct Colors[] = {
142 {"Add New Color", action(addnewcolor, NULL)},
143 {" ", noaction},
144 {"Inherit Color", setaction(setcolor, Number(1))},
145 {"_Black", action(setcolor, NULL)},
146 {"_White", action(setcolor, NULL)},
149 menustruct Parameterize[] = {
150 {"Substring", action(promptparam, NULL)},
151 {"Numeric", action(startparam, Number(P_NUMERIC))},
152 {"Style", action(startparam, Number(P_STYLE))},
153 {"Anchoring", action(startparam, Number(P_ANCHOR))},
154 {"Start Angle", action(startparam, Number(P_ANGLE1))},
155 {"End Angle", action(startparam, Number(P_ANGLE2))},
156 {"Radius", action(startparam, Number(P_RADIUS))},
157 {"Minor Axis", action(startparam, Number(P_MINOR_AXIS))},
158 {"Rotation", action(startparam, Number(P_ROTATION))},
159 {"Scale", action(startparam, Number(P_SCALE))},
160 {"Linewidth", action(startparam, Number(P_LINEWIDTH))},
161 {"Color", action(startparam, Number(P_COLOR))},
162 {"Position", action(startparam, Number(P_POSITION))},
165 menustruct Stipples[] = {
166 {":Black", action(setfill, Number(OPAQUE | FILLED | FILLSOLID))},
167 {":Gray12", action(setfill, Number(OPAQUE | FILLED | STIP2 | STIP1))},
168 {":Gray25", action(setfill, Number(OPAQUE | FILLED | STIP2 | STIP0))},
169 {":Gray37", action(setfill, Number(OPAQUE | FILLED | STIP2))},
170 {":Gray50", action(setfill, Number(OPAQUE | FILLED | STIP0 | STIP1))},
171 {":Gray62", action(setfill, Number(OPAQUE | FILLED | STIP1))},
172 {":Gray75", action(setfill, Number(OPAQUE | FILLED | STIP0))},
173 {":Gray87", action(setfill, Number(OPAQUE | FILLED))},
174 {":White", setaction(setfill, Number(FILLSOLID))},
175 {" ", noaction},
176 {"Opaque", action(setopaque, Number(OPAQUE))},
177 {"Transparent", setaction(setopaque, Number(NORMAL))},
180 menustruct TextMenu[] = {
181 {"Text Size", action(gettsize, NULL)},
182 {"Font", submenu(Fonts)},
183 {"Style", submenu(FontStyles)},
184 {"Encoding", submenu(FontEncodings)},
185 {"Insert", submenu(TextSpacing)},
186 {"Anchoring (keypad)", submenu(Anchors)},
187 {"Parameterize", action(promptparam, NULL)},
188 {"Unparameterize", action(startunparam, Number(P_SUBSTRING))},
189 {" ", noaction},
190 {"Set LaTeX Mode", action(setanchorbit, Number(LATEXLABEL))},
191 {" ", noaction},
192 {"Make Label (t)", action(changetool, Number(XCF_Text))},
195 menustruct PolyMenu[] = {
196 {"Border", submenu(BorderStyles)},
197 {"Fill", submenu(Stipples)},
198 {"Color", submenu(Colors)},
199 {" ", noaction},
200 {"Object size", action(getosize, NULL)},
201 {"Parameters", submenu(Parameterize)},
202 {"Center Object", setaction(toggle, offset(center))},
203 {"Manhattan Draw", action(toggle, offset(manhatn))},
204 {"Polygon Edit", submenu(BoxEditStyles)},
207 menustruct FilterMenu[] = {
208 {"Labels", setaction(selectfilter, Number(LABEL))},
209 {"Objects", setaction(selectfilter, Number(OBJINST))},
210 {"Polygons", setaction(selectfilter, Number(POLYGON))},
211 {"Arcs", setaction(selectfilter, Number(ARC))},
212 {"Splines", setaction(selectfilter, Number(SPLINE))},
213 {"Paths", setaction(selectfilter, Number(PATH))},
216 menustruct RotateMenu[] = {
217 {"Flip Horizontal (f)", action(exec_or_changetool, Number(XCF_Flip_X))},
218 {"Flip Vertical (F)", action(exec_or_changetool, Number(XCF_Flip_Y))},
219 {" ", noaction},
220 {"Rotate CW 90", action(rotatetool, Number(90))},
221 {"Rotate CW 45", action(rotatetool, Number(45))},
222 {"Rotate CW 30", action(rotatetool, Number(30))},
223 {"Rotate CW 15 (r)", action(rotatetool, Number(15))},
224 {"Rotate CW 5 (o)", action(rotatetool, Number(3))},
225 {"Rotate CW 1", action(rotatetool, Number(1))},
226 {" ", noaction},
227 {"Rotate CCW 90", action(rotatetool, Number(-90))},
228 {"Rotate CCW 45", action(rotatetool, Number(-45))},
229 {"Rotate CCW 30", action(rotatetool, Number(-30))},
230 {"Rotate CCW 15 (R)", action(rotatetool, Number(-15))},
231 {"Rotate CCW 5 (O)", action(rotatetool, Number(-5))},
232 {"Rotate CCW 1", action(rotatetool, Number(-1))},
235 menustruct LineMenu[] = {
236 {"Global Linewidth", action(getwirewidth, NULL)},
237 {"Wire Linewidth", action(getwwidth, NULL)},
240 menustruct GridMenu[] = {
241 {"Grid", setaction(toggle, offset(gridon))},
242 {"Axes", setaction(toggle, offset(axeson))},
243 {"Grid spacing", action(getgridspace, NULL)},
244 {"Grid type/display", submenu(GridStyles)},
247 menustruct SnapMenu[] = {
248 {"Snap-to", setaction(toggle, offset(snapto))},
249 {"Snap spacing", action(getsnapspace, NULL)},
252 menustruct PinConvert[] = {
253 {"Normal label", action(dopintype, Number(NORMAL))},
254 {"Local Pin", action(dopintype, Number(LOCAL))},
255 {"Global Pin", action(dopintype, Number(GLOBAL))},
256 {"Info label", action(dopintype, Number(INFO))},
259 menustruct SchemaMenu[] = {
260 {"Make Pin (T)", action(changetool, Number(XCF_Pin_Label))},
261 {"Make Info Pin (I)", action(changetool, Number(XCF_Info_Label))},
262 {"Make Global Pin (G)", action(changetool, Number(XCF_Pin_Global))},
263 {"Convert Label to...", submenu(PinConvert)},
264 {"Pin Visibility", action(setpinanchorbit, Number(PINVISIBLE))},
265 /* {"Make Object Non-Schematic", action(maketrivial, NULL)}, */
266 {"Make Matching Symbol", action(dobeforeswap, NULL)},
267 {"Associate with Symbol", action(startschemassoc, Number(1))},
268 {"Highlight Connectivity", action(startconnect, NULL)},
269 {"Auto-number Components", action(callwritenet, Number(4))},
270 {" ", noaction},
271 {"Write spice", action(callwritenet, Number(0))},
272 {"Write flattened spice", action(callwritenet, Number(3))},
273 {"Write sim", action(callwritenet, Number(1))},
274 {"Write pcb", action(callwritenet, Number(2))},
277 menustruct WindowMenu[] = {
278 {"Zoom In (Z)", action(zoominrefresh, NULL)},
279 {"Zoom Out (z)", action(zoomoutrefresh, NULL)},
280 {"Full View (v)", action(zoomview, NULL)},
281 {"Pan (p)", action(pantool, Number(6))},
282 {"Refresh ( )", action(refresh, NULL)},
283 {" ", noaction},
284 {"Library Directory (L)", action(startcatalog, Number(LIBLIB))},
285 {"Goto Library", submenu(Libraries)},
286 {" ", noaction},
287 {"Page Directory (P)", action(startcatalog, Number(PAGELIB))},
288 {"Goto Page", submenu(Pages)}
291 menustruct FileMenu[] = {
292 #ifdef XC_WIN32
293 {"New window", action(win32_new_window, NULL)},
294 {" ", noaction},
295 #endif
296 {"Read Xcircuit File", action(getfile, Number(NORMAL))},
297 {"Import Xcircuit PS", action(getfile, Number(IMPORT))},
298 #if !defined(HAVE_CAIRO) || defined(HAVE_GS)
299 {"Import background PS", action(getfile, Number(PSBKGROUND))},
300 #endif
301 #ifdef HAVE_CAIRO
302 {"Import graphic image", action(getfile, Number(IMPORTGRAPHIC))},
303 #endif
304 #ifdef ASG
305 {"Import SPICE deck", action(getfile, Number(IMPORTSPICE))},
306 #endif
307 {"Execute script", action(getfile, Number(SCRIPT))},
308 {"Write Xcircuit PS (W)", action(outputpopup, NULL)},
309 {" ", noaction},
310 {"Add To Library", action(getlib, NULL)},
311 {"Load New Library", action(getuserlib, NULL)},
312 {"Save Library", action(savelibpopup, NULL)},
313 {" ", noaction},
314 {"Clear Page", action(resetbutton, Number(0))},
315 {" ", noaction},
316 {"Quit", action(quitcheck, NULL)},
319 menustruct OptionMenu[] = {
320 {"Alt Colors", action(inversecolor, offset(invert))},
321 {"Show Bounding box", action(toggle, offset(bboxon))},
322 {"Edit in place", setaction(toggle, offset(editinplace))},
323 {"Show Pin Positions", action(toggle, offset(pinpointon))},
324 #ifdef HAVE_XPM
325 {"Disable Toolbar", action(dotoolbar, NULL)},
326 #endif
327 {"Grid", submenu(GridMenu)},
328 {"Snap-to", submenu(SnapMenu)},
329 {"Linewidth", submenu(LineMenu)},
330 {"Elements", submenu(PolyMenu)},
331 {" ", noaction},
332 {"Help!", action(starthelp, NULL)},
335 menustruct EditMenu[] = {
336 {"Undo (u)", action(undo_call, NULL)},
337 {"Redo (U)", action(redo_call, NULL)},
338 {" ", noaction},
339 {"Delete (d)", action(exec_or_changetool, Number(XCF_Delete))},
340 {"Copy (c)", action(exec_or_changetool, Number(XCF_Copy))},
341 {"Edit (e)", action(exec_or_changetool, Number(XCF_Edit))},
342 {"Rotate/Flip", submenu(RotateMenu)},
343 {"Deselect (x)", action(startdesel, NULL)},
344 {"Select filter", submenu(FilterMenu)},
345 {"Push selected (>)", action(exec_or_changetool, Number(XCF_Push))},
346 {"Pop hierarchy (<)", action(popobject, Number(0))},
347 {" ", noaction},
348 {"Make User Object (m)", action(selectsave, NULL)},
349 {"Make Arc (a)", action(changetool, Number(XCF_Arc))},
350 {"Make Box (b)", action(changetool, Number(XCF_Box))},
351 {"Make Spline (s)", action(changetool, Number(XCF_Spline))},
352 {"Join (j)", action(join, NULL)},
355 menustruct TopButtons[] = {
356 {"File", submenu(FileMenu)},
357 {"Edit", submenu(EditMenu)},
358 {"Text", submenu(TextMenu)},
359 {"Options", submenu(OptionMenu)},
360 {"Window", submenu(WindowMenu)},
361 {"Netlist", submenu(SchemaMenu)},
364 short maxbuttons = sizeof(TopButtons) / sizeof(menustruct);
366 #ifdef HAVE_XPM
367 /* Toolbar buttons */
368 toolbarstruct ToolBar[] = {
369 {"Pan", pn_xpm, toolaction(pantool, Number(6)),
370 "pan mode"},
371 {"Wire", w_xpm, toolaction(changetool, Number(XCF_Wire)),
372 "draw wire"},
373 {"Box", b_xpm, toolaction(changetool, Number(XCF_Box)),
374 "draw box"},
375 {"Arc", a_xpm, toolaction(changetool, Number(XCF_Arc)),
376 "draw arc"},
377 {"Spline", s_xpm, toolaction(changetool, Number(XCF_Spline)),
378 "draw spline"},
379 {"Text", t_xpm, toolaction(changetool, Number(XCF_Text)),
380 "enter text"},
381 {"Move", mv_xpm, toolaction(exec_or_changetool, Number(XCF_Move)),
382 "move element"},
383 {"Copy", cp_xpm, toolaction(exec_or_changetool, Number(XCF_Copy)),
384 "copy element"},
385 {"Edit", e_xpm, toolaction(exec_or_changetool, Number(XCF_Edit)),
386 "edit element"},
387 {"Delete", d2_xpm, toolaction(exec_or_changetool, Number(XCF_Delete)),
388 "delete element"},
389 {"RotP", cw_xpm, toolaction(rotatetool, Number(15)),
390 "rotate 15 degrees clockwise"},
391 {"RotN", ccw_xpm, toolaction(rotatetool, Number(-15)),
392 "rotate 15 degrees counterclockwise"},
393 {"HFlip", fx_xpm, toolaction(exec_or_changetool, Number(XCF_Flip_X)),
394 "flip horizontal"},
395 {"VFlip", fy_xpm, toolaction(exec_or_changetool, Number(XCF_Flip_Y)),
396 "flip vertical"},
397 {"Push", pu2_xpm, toolaction(exec_or_changetool, Number(XCF_Push)),
398 "push (edit object)"},
399 {"Pop", po2_xpm, toolaction(popobject, Number(0)),
400 "pop (return from object edit)"},
401 {"Make", mk_xpm, toolaction(selectsave, NULL),
402 "make an object from selected elements"},
403 {"Join", pz_xpm, toolaction(join, NULL),
404 "join elements into polygon or path"},
405 {"Unjoin", uj_xpm, toolaction(unjoin, NULL),
406 "separate path into elements"},
407 {"Colors", co_xpm, toolaction(color_popup, NULL),
408 "set color"},
409 {"Border", bd_xpm, toolaction(border_popup, NULL),
410 "set border and line properties"},
411 {"Fills", fi_xpm, toolaction(fill_popup, NULL),
412 "set fill properties"},
413 {"Parameters", pm_xpm, toolaction(param_popup, NULL),
414 "parameterize properties"},
415 {"Library",li_xpm, toolaction(changecat, NULL),
416 "go to next library"},
417 {"Libdir", yp_xpm, toolaction(startcatalog, Number(LIBLIB)),
418 "go to library directory"},
419 {"Pagedir",pl_xpm, toolaction(startcatalog, Number(PAGELIB)),
420 "go to page directory"},
421 {"ZoomI", z4_xpm, toolaction(zoominrefresh, NULL),
422 "zoom in"},
423 {"ZoomO", z5_xpm, toolaction(zoomoutrefresh, NULL),
424 "zoom out"},
425 {"Help", i_xpm, toolaction(starthelp, NULL),
426 "pop up help window"},
429 short toolbuttons = sizeof(ToolBar) / sizeof(toolbarstruct);
430 #endif
432 #undef submenu
433 #undef action
434 #undef setaction
435 #undef toolaction
436 #undef noaction
437 #undef offset
439 /*-------------------------------------------------------------------------*/