1 /*-------------------------------------------------------------------------*/
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 /*-------------------------------------------------------------------------*/
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
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))
35 /* Inclusions for pixmap icons */
39 /* Things commented out here are reminders of future implementations. */
41 menustruct Fonts
[] = {
42 {"Add New Font", action(addnewfont
, NULL
)},
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))},
54 {"Subscript", action(addtotext
, Number(SUBSCRIPT
))},
55 {"Superscript", action(addtotext
, Number(SUPERSCRIPT
))},
56 {"Normalscript", action(addtotext
, Number(NORMALSCRIPT
))},
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
))},
84 {"Top Anchored", action(setvanchor
, Number(NOTBOTTOM
| TOP
))},
85 {"Middle Anchored", action(setvanchor
, Number(NOTBOTTOM
))},
86 {"Bottom Anchored", setaction(setvanchor
, Number(NORMAL
))},
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
))},
104 {"Drawing Scale", action(getdscale
, NULL
)},
107 menustruct Libraries
[] = {
108 {"Add New Library", action(newlibrary
, NULL
)},
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))},
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
)},
132 {"Solid", setaction(setline
, Number(NORMAL
))},
133 {"Dashed", action(setline
, Number(DASHED
))},
134 {"Dotted", action(setline
, Number(DOTTED
))},
135 {"Unbordered", action(setline
, Number(NOBORDER
))},
137 {"Closed", action(setclosure
, Number(UNCLOSED
))},
138 {"Bounding Box", action(makebbox
, Number(BBOX
))},
141 menustruct Colors
[] = {
142 {"Add New Color", action(addnewcolor
, NULL
)},
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
))},
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
))},
190 {"Set LaTeX Mode", action(setanchorbit
, Number(LATEXLABEL
))},
192 {"Make Label (t)", action(changetool
, Number(XCF_Text
))},
195 menustruct PolyMenu
[] = {
196 {"Border", submenu(BorderStyles
)},
197 {"Fill", submenu(Stipples
)},
198 {"Color", submenu(Colors
)},
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
))},
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))},
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))},
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
)},
284 {"Library Directory (L)", action(startcatalog
, Number(LIBLIB
))},
285 {"Goto Library", submenu(Libraries
)},
287 {"Page Directory (P)", action(startcatalog
, Number(PAGELIB
))},
288 {"Goto Page", submenu(Pages
)}
291 menustruct FileMenu
[] = {
293 {"New window", action(win32_new_window
, NULL
)},
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
))},
302 {"Import graphic image", action(getfile
, Number(IMPORTGRAPHIC
))},
305 {"Import SPICE deck", action(getfile
, Number(IMPORTSPICE
))},
307 {"Execute script", action(getfile
, Number(SCRIPT
))},
308 {"Write Xcircuit PS (W)", action(outputpopup
, NULL
)},
310 {"Add To Library", action(getlib
, NULL
)},
311 {"Load New Library", action(getuserlib
, NULL
)},
312 {"Save Library", action(savelibpopup
, NULL
)},
314 {"Clear Page", action(resetbutton
, Number(0))},
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
))},
325 {"Disable Toolbar", action(dotoolbar
, NULL
)},
327 {"Grid", submenu(GridMenu
)},
328 {"Snap-to", submenu(SnapMenu
)},
329 {"Linewidth", submenu(LineMenu
)},
330 {"Elements", submenu(PolyMenu
)},
332 {"Help!", action(starthelp
, NULL
)},
335 menustruct EditMenu
[] = {
336 {"Undo (u)", action(undo_call
, NULL
)},
337 {"Redo (U)", action(redo_call
, NULL
)},
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))},
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
);
367 /* Toolbar buttons */
368 toolbarstruct ToolBar
[] = {
369 {"Pan", pn_xpm
, toolaction(pantool
, Number(6)),
371 {"Wire", w_xpm
, toolaction(changetool
, Number(XCF_Wire
)),
373 {"Box", b_xpm
, toolaction(changetool
, Number(XCF_Box
)),
375 {"Arc", a_xpm
, toolaction(changetool
, Number(XCF_Arc
)),
377 {"Spline", s_xpm
, toolaction(changetool
, Number(XCF_Spline
)),
379 {"Text", t_xpm
, toolaction(changetool
, Number(XCF_Text
)),
381 {"Move", mv_xpm
, toolaction(exec_or_changetool
, Number(XCF_Move
)),
383 {"Copy", cp_xpm
, toolaction(exec_or_changetool
, Number(XCF_Copy
)),
385 {"Edit", e_xpm
, toolaction(exec_or_changetool
, Number(XCF_Edit
)),
387 {"Delete", d2_xpm
, toolaction(exec_or_changetool
, Number(XCF_Delete
)),
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
)),
395 {"VFlip", fy_xpm
, toolaction(exec_or_changetool
, Number(XCF_Flip_Y
)),
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
),
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
),
423 {"ZoomO", z5_xpm
, toolaction(zoomoutrefresh
, NULL
),
425 {"Help", i_xpm
, toolaction(starthelp
, NULL
),
426 "pop up help window"},
429 short toolbuttons
= sizeof(ToolBar
) / sizeof(toolbarstruct
);
439 /*-------------------------------------------------------------------------*/