Index: trunk/doc/Makefile =================================================================== --- trunk/doc/Makefile (revision 34890) +++ trunk/doc/Makefile (revision 34891) @@ -1,4 +1,4 @@ -MENU_RES=../src/pcb-menu-default.lht +MENU_RES=../src/menu-default.lht KEYLIST=../util/keylist.sh DEBLIST=../util/devhelpers/deblist.sh ROOT=.. Index: trunk/doc/TODO =================================================================== --- trunk/doc/TODO (revision 34890) +++ trunk/doc/TODO (revision 34891) @@ -6,9 +6,7 @@ - rename pcblib to footprint-rnd! rename pcblib/tru-hole to fix the typo; update configs; update README - rename pcb-menu-default to menu-default - rename pcb-conf.lht - - rename pcb-out* (default file name in some exporters) - ./configure --config should default to /etc - - move data/ into doc/resources - FEATURE: asm(): a config node (maybe query script); if a subc matches, omit it from the list; this is for DNP or build options [report: Majenko] - BUG: layer binding dialog: on the standard 4 layer board create a subc with a line on top copper; edit layer bindings of the subc; try to move it to each inner copper -> dialog box gets confused [report: Igor2] - BUG: cuvoodoo's netlength bug: bug_files/netlen1.lht; run {n l o} on the horizontal lines; it breaks because a short line segment is fully under the via causing multiple touching objects [report: cuvoodoo] (report to the mailing list) Index: trunk/doc/conf/tree/rc.html =================================================================== --- trunk/doc/conf/tree/rc.html (revision 34890) +++ trunk/doc/conf/tree/rc.html (revision 34891) @@ -33,7 +33,7 @@ cli_prompt rnd_cfn_string 0 [hidlib] plain text prompt to prefix the command entry cli_backend rnd_cfn_string 0 [hidlib] command parser action export_basename rnd_cfn_boolean 0 [hidlib] if an exported file contains the source file name, remove path from it, keeping the basename only - menu_file rnd_cfn_string 0 [hidlib] where to load the default menu file from. If empty/unset, fall back to the legacy 'per hid ow menu file' setup. If contains slash, take it as a full path, if no slash, do a normal menu search for pcb-menu-NAME.lht + menu_file rnd_cfn_string 0 [hidlib] where to load the default menu file from. If empty/unset, fall back to the legacy 'per hid own menu file' setup. If contains slash, take it as a full path, if no slash, do a normal menu search for menu-NAME.lht menu_patches rnd_cfn_list 0 [hidlib] file paths to extra menu patches to load preferred_gui rnd_cfn_list 0 [hidlib] if set, try GUI HIDs in this order when no GUI is explicitly selected hid_fallback rnd_cfn_boolean 0 [hidlib] if there is no explicitly specified HID (--gui) and the preferred GUI fails, automatically fall back on other HIDs, eventually running in batch mode Index: trunk/doc/developer/lihata_format/index.html =================================================================== --- trunk/doc/developer/lihata_format/index.html (revision 34890) +++ trunk/doc/developer/lihata_format/index.html (revision 34891) @@ -56,7 +56,7 @@ A project file that describes configuration and source file names for various software
(struct drawing) - pcb-menu-default.lht ha: + menu-default.lht ha: The main menu system, including popup menus, all key and mouse bindings Index: trunk/doc/developer/packaging/Changelog =================================================================== --- trunk/doc/developer/packaging/Changelog (revision 34890) +++ trunk/doc/developer/packaging/Changelog (revision 34891) @@ -7,6 +7,7 @@ TODO: librnd-dev: new file sharedir/plugin.state TODO: removed $LC and $LP (we are not installing any librnd related file) +TODO: menu file rename Packaging changes between 2.3.2 and 2.4.0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Index: trunk/doc/developer/packaging/extra.digest =================================================================== --- trunk/doc/developer/packaging/extra.digest (revision 34890) +++ trunk/doc/developer/packaging/extra.digest (revision 34891) @@ -1,5 +1,5 @@ @appendfiles pcb-rnd-core $PREFIX/bin/pcb-rnd $PREFIX/share/man/man1/pcb-rnd.1 -@appendfiles pcb-rnd-core $C/pcb-conf.lht $C/pcb-menu-default.lht +@appendfiles pcb-rnd-core $C/pcb-conf.lht $C/menu-default.lht @appendfiles pcb-rnd-core $PREFIX/share/pcb-rnd/default2.lht $PREFIX/share/pcb-rnd/default4.lht $PREFIX/share/pcb-rnd/default_font @appendfiles pcb-rnd-core $PREFIX/bin/fp2preview $PREFIX/bin/fp2subc $PREFIX/bin/pcb-prj2lht $PREFIX/share/man/man1/fp2preview.1 $PREFIX/share/man/man1/fp2subc.1 $PREFIX/share/man/man1/pcb-prj2lht.1 @appendfiles pcb-rnd-core $PREFIX/share/pcb-rnd/pcblib/* Index: trunk/doc/user/05_ui/04_common/index.html =================================================================== --- trunk/doc/user/05_ui/04_common/index.html (revision 34890) +++ trunk/doc/user/05_ui/04_common/index.html (revision 34891) @@ -118,7 +118,7 @@ The menu system is loaded and merged from multiple menu files and is dynamic (can be changed while pcb-rnd is running). There is a base menu file (file name is partially configured by conf node rc/menu_file), typically -/usr/share/pcb-menu-default.lht. This is file is loaded first, with priority 0. +/usr/share/menu-default.lht. This is file is loaded first, with priority 0. Then pcb-rnd loads further menu files and menu file patches, for feature plugins, scripts or user addons at higher priority.

@@ -131,7 +131,7 @@

source usual prio description -
base 0 factory menu file, normally /usr/share/pcb-menu-default.lht +
base 0 factory menu file, normally /usr/share/menu-default.lht
plugins (static) 100..199 menu files embedded in feature plugins (e.g. to create import menus per format)
user 300..400 menu files/patches loaded upon user request (conf node: rc/menu_patches)
action (scripts) 500 using the CreateMenu() action Index: trunk/doc/user/06_feature/autocrop/index.html =================================================================== --- trunk/doc/user/06_feature/autocrop/index.html (revision 34890) +++ trunk/doc/user/06_feature/autocrop/index.html (revision 34891) @@ -20,7 +20,7 @@

Use:
-Bind autocrop to a key in the appropriate pcb-menu-*.lht for your preferred pcb-rnd gui. +You may want to bind autocrop to a key in a menu patch.

Issues:
Autocrop will move the objects to crop the layout, and as a consequence autocrop() plugin will take time to calculate for complex layouts. Index: trunk/scconfig/Rev.h =================================================================== --- trunk/scconfig/Rev.h (revision 34890) +++ trunk/scconfig/Rev.h (revision 34891) @@ -1 +1 @@ -static const int myrev = 34772; +static const int myrev = 34891; Index: trunk/scconfig/Rev.tab =================================================================== --- trunk/scconfig/Rev.tab (revision 34890) +++ trunk/scconfig/Rev.tab (revision 34891) @@ -1,3 +1,4 @@ +34891 configure renames for 3.0.0 34772 configure version bump to 3.0.0-dev and related API changes in librnd 34707 configure new release version 34691 configure io_pads: disable write code but enable the plugin by default Index: trunk/src/pcb-menu-default.lht =================================================================== --- trunk/src/pcb-menu-default.lht (revision 34890) +++ trunk/src/pcb-menu-default.lht (nonexistent) @@ -1,983 +0,0 @@ -ha:rnd-menu-v1 { - li:mouse { - li:left { - li:press = { Tool(Press) } - li:press-shift = { Tool(Press) } - li:press-ctrl = { Tool(Save); Tool(arrow); Tool(Restore); Tool(Press) } - li:release = { Tool(Release) } - li:release-shift = { Tool(Release) } - li:release-ctrl = { Tool(Release) } - } - li:middle { - li:press = { Pan(1) } - li:release = { Pan(0) } - } - li:right { - li:press = { Tool(Stroke) } - li:release = { Tool(Release); Popup(popup-obj, obj-type) } - li:shift-release = { Popup(popup-obj-misc) } - } - li:scroll-up { - li:press = { Zoom(0.8) } - li:press-shift = { Scroll(up) } - li:press-ctrl = { Scroll(left) } - } - li:scroll-down { - li:press = { Zoom(1.25) } - li:press-shift = { Scroll(down) } - li:press-ctrl = { Scroll(right) } - } - } - - # List of tool names for the toolbar. - # Do not specify keys here, they are specified in the menu; the GUI will - # not pick up keys from this subtree. There's also no action here: the - # plugin handling this subtree will always pick the tool. - li:toolbar_static { - ha:via {tip={place a via on the board}} - ha:line {tip={draw a line segment (trace) on the board}} - ha:arc {tip={draw an arc segment (trace) on the board}} - ha:text {tip={draw text on the board}} - ha:rectangle {tip={draw a rectangular polygon on the board}} - ha:poly {tip={draw a polygon on the board}} - ha:polyhole {tip={cut out a hole from existing polygons on the board}} - ha:buffer {tip={paste the current buffer on the board}} - ha:remove {tip={remove an object from the board}} - ha:rotate {tip={rotate an object on the board}} - ha:insert {tip={insert a point in a trace or polygon contour}} - ha:thermal {tip={change thermal connectivity of a pin or via}} - ha:arrow {tip={switch to arrow mode}} - ha:lock {tip={lock or unlock objects on the board}} - } - - li:main_menu { - - ha:File { - li:submenu { - ha:Start New Layout = { li:a={{f;n}; {Ctrln};}; action=New() } - ha:Revert = { a={f;r}; action=Load(Revert,none); tip=Revert to the layout stored on disk } - - - ha:Load layout... = { li:a={{f;o};{f;l};} action=Load(Layout); tip=Load a layout from a file } - - - ha:Save Layout = { li:a={{f;s}; {Ctrls};}; action=Save(Layout); tip=Saves current layout } - ha:Save Layout As... = { li:a={{f;a}; {Shift Ctrls};}; action=Save(LayoutAs); tip=Saves current layout into a new file } - - - ha:Import { - li:submenu { - ha:Import schematics... = { action=ImportSch() } - ha:Configure import schematics... = { action=ImportSch(dialog) } - @import_top - ha:Import AnyLoad (or lht config) = { action=AnyLoad() } - - - ha:Load subcircuit data to paste-buffer = { li:action={PasteBuffer(Clear); Load(ElementTobuffer)} } - ha:Load layout data to paste-buffer = { li:action={PasteBuffer(Clear); Load(LayoutTobuffer)} } - ha:Load pixmap to paste-buffer gfx = { li:action={PasteBuffer(Clear); LoadPixmap(); Tool(buffer);} } - @import_geo - - - @import_sch - ha:Load netlist file = { action=Load(Netlist) } - } - } - - - ha:Save connection data of { - li:submenu { - ha:a single element = { li:action={ Save(ElementConnections) } } - ha:all elements = { action=Save(AllConnections) } - ha:unused pins = { action=Save(AllUnusedPins) } - ha:netlist patch for back annotation = {li:a={{f;x;p}; {a;b;x};}; action=SavePatch() } - } - } - ha:Print layout... = { a={f;p}; action=Print()} - ha:Export layout... = { a={f;e}; action=ExportGUI()} - ha:Export with CAM job...={ a={f;c}; action=cam()} - ha:Reports { - li:submenu { - ha:Generate object report = { a={i;r}; action=ReportObject() } - ha:Generate drill summary = { a={i;d}; action=Report(DrillReport) } - ha:Report found padstacks = { a={i;f}; action=Report(FoundPins) } - } - } - - - ha:Preferences... = { a={i;c;p}; action=preferences} - ha:Maintenance { - li:submenu { - ha:Re-scan the footprint library = { a={i;c;r}; action=fp_rehash() } - ha:Data integrity check = { a={i;c;i}; action=Integrity() } - - - ha:Edit current font = { action=FontEdit() } - ha:Edit on-disk font = { action={ LoadFontFrom("", 126); conf(set, design/text_font_id, 126, design); FontEdit() } } - ha:Save font from font editor = { action=FontSave() } - - - ha:Undo dialog (for debugging) = { a={u;d;}; action=UndoDialog() } - } - } - - - ha:Quit Program = { li:a={{f;q}; {Ctrlq};}; action=Quit() } - } - } # File - - ha:Edit { - li:submenu { - ha:Undo last operation = { li:a={{u; u}; {Ctrlz};}; action=Undo() } - ha:Redo last undone operation = { li:a={{u; r}; {Ctrly};}; action=Redo() } - ha:Clear undo-buffer = { a={u; c}; action=Undo(ClearList) } - - - ha:Cut selection to buffer = { li:a={{e; x}; a=Ctrlx;}; li:action={ GetXY(Click to set the snap point for this buffer); PasteBuffer(Clear); PasteBuffer(MoveSelected); Tool(buffer) } } - ha:Copy selection to buffer = { li:a={{e; c}; {Ctrlc;};}; li:action={ GetXY(Click to set the snap point for this buffer); PasteBuffer(Clear); PasteBuffer(AddSelected); Unselect(All); Tool(buffer) } } - ha:Paste buffer to layout = { li:a={{e; v}; a=Ctrlv;}; action=Tool(buffer) } - - - ha:Remove object = { li:a={{e;d};{Delete};}; li:action={Tool(Save); Tool(remove); Tool(Press); Tool(Restore)} } - ha:Change object { - li:submenu { - ha:Set Same Style = { a={e; s; s}; action=SetSame() } - ha:Apply Pen to object = { a={e; a; p}; action=ApplyPen() } - ha:Flip Object = { a={e; i}; action=Flip(Object) } - ha:Move to current layer = { a={e; l}; action=MoveToCurrentLayer(Object) } - ha:ChangeJoin Object = { a={e; j}; action=ChangeJoin(Object) } - ha:Convert to extended object... = { a={e; s; x}; action=ExtobjConvFrom(Object, @gui) } - ha:Geometry { - li:submenu { - ha:Clearance +2 mil = { a={e; g; c}; action=ChangeClearSize(Object,+2,mil) } - ha:Clearance -2 mil = { a={e; g; Shiftc}; action=ChangeClearSize(Object,-2,mil) } - ha:ChangeSizes to Route style = { a={e; g; y}; action=ChangeSizes(Object,style,mil) } - ha:ChangeSize +5 mil = { a={e; g; s}; action=ChangeSize(Object,+5,mil) } - ha:ChangeSize -5 mil = { a={e; g; Shifts}; action=ChangeSize(Object,-5,mil) } - ha:ChangeDrill +5 mil = { a={e; g; d}; action=ChangeDrillSize(Object,+5,mil) } - ha:ChangeDrill -5 mil = { a={e; g; Shiftd}; action=ChangeDrillSize(Object,-5,mil) } - - - ha:Edit padstack geometry/prototype = {a={e; g; g}; action=padstackedit } - } - } - } - } # Change object - ha:Add/place object { - li:submenu { - ha:Place mark = { li:a={{a;m}; {a;w}; }; action=MarkCrosshair() } - ha:Place via = { a={a;v}; li:action={Tool(Save); Tool(via); Tool(Press); Tool(Restore);} } - ha:Start routing a line = { a={a;l}; li:action={Tool(Save); Tool(line); Tool(Press); } } - ha:Start routing an arc = { a={a;a}; li:action={Tool(Save); Tool(arc); Tool(Press); } } - } - } - - - ha:Edit properties of { - li:submenu { - ha:Layout = { action=Propedit(board) } - ha:Current Layer = { action={Propedit(layer)} } - ha:Current Layer Group = { action={Propedit(layergrp)} } - } - } - ha:Route Styles { - li:submenu { - @routestyles - - - ha:Edit... = { action=AdjustStyle() } - } - } - ha:Board padstack prototypes... = { action=pstklib() } - - - ha:Subcircuit { - li:submenu { - ha:Layer bindings... = { a={e; s; b}; action=LayerBinding() } - ha:External editor... = { a={e; s; e}; li:action={ GetXY(Click on the subcircuit to edit); extedit(object) } } - ha:Refdes = { a={e; s; r}; action=ChangeName(Subc) } - } - } - ha:Object flags... = { a={e; f}; action=FlagEdit() } - ha:Object Properties... = { a={e; p}; action=PropEdit(selection) } - } - } # Edit - - ha:View { - li:submenu { - ha:Grid { - li:submenu { - ha:Enable visible grid = { a={g; v}; checked=editor/draw_grid; action=conf(toggle, editor/draw_grid, design) } - ha:Enable local grid = { a={g; l}; checked=plugins/hid_gtk/local_grid/enable; action=conf(toggle, plugins/hid_gtk/local_grid/enable, design) } - ha:Grid units { - li:submenu { - ha:mil = { a={g; i}; checked=ChkGridUnits(mil); action=SetUnits(mil); update_on={editor/grid_unit} } - ha:mm = { a={g; m}; checked=ChkGridUnits(mm); action=SetUnits(mm); update_on={editor/grid_unit} } - } - } - ha:Grid size = { - li:submenu { - ha:No Grid = { checked=ChkGridSize(none); action=SetGrid(1); update_on={editor/grid} } - - - @grid - - - ha:Previous grid = { li:a={{g; b};{[};}; action=Grid(down) } - ha:Next grid = { li:a={{g; f};{]};}; action=Grid(up) } - ha:Custom grid = { li:a={{g; c};}; action=Grid(ask) } - - - ha:Grid *2 = { a={g; d}; action=SetGrid(*2) } - ha:Grid /2 = { a={g; h}; action=SetGrid(/2) } - ha:Grid -5mil = { action=SetGrid(-5,mil) } - ha:Grid +5mil = { action=SetGrid(+5,mil) } - ha:Grid -0.05mm = { action=SetGrid(-0.05,mm) } - ha:Grid +0.05mm = { action=SetGrid(+0.05,mm) } - } - } - ha:Grid properties = { - li:submenu { - ha:Enable local grid = { checked=plugins/hid_gtk/local_grid/enable; action=conf(toggle, plugins/hid_gtk/local_grid/enable, design) } - - - ha:local grid radius 4 = { checked={conf(iseq, plugins/hid_gtk/local_grid/radius, 4)}; li:action={conf(set, plugins/hid_gtk/local_grid/radius, 4, design); conf(set, plugins/hid_gtk/local_grid/enable, 1, design) } update_on={} } - ha:local grid radius 8 = { checked={conf(iseq, plugins/hid_gtk/local_grid/radius, 8)}; li:action={conf(set, plugins/hid_gtk/local_grid/radius, 8, design); conf(set, plugins/hid_gtk/local_grid/enable, 1, design) } update_on={} } - ha:local grid radius 16 = { checked={conf(iseq, plugins/hid_gtk/local_grid/radius, 16)}; li:action={conf(set, plugins/hid_gtk/local_grid/radius, 16, design); conf(set, plugins/hid_gtk/local_grid/enable, 1, design) } update_on={} } - ha:local grid radius 32 = { checked={conf(iseq, plugins/hid_gtk/local_grid/radius, 32)}; li:action={conf(set, plugins/hid_gtk/local_grid/radius, 32, design); conf(set, plugins/hid_gtk/local_grid/enable, 1, design) } update_on={} } - - - ha:sparse global grid = { checked=plugins/hid_gtk/global_grid/sparse; action=conf(toggle, plugins/hid_gtk/global_grid/sparse, design) } - ha:global grid density 4 = { checked={conf(iseq, plugins/hid_gtk/global_grid/min_dist_px, 4)}; li:action={conf(set, plugins/hid_gtk/global_grid/min_dist_px, 4, design); conf(set, plugins/hid_gtk/local_grid/enable, 0, design) } update_on={} } - ha:global grid density 8 = { checked={conf(iseq, plugins/hid_gtk/global_grid/min_dist_px, 8)}; li:action={conf(set, plugins/hid_gtk/global_grid/min_dist_px, 8, design); conf(set, plugins/hid_gtk/local_grid/enable, 0, design) } update_on={} } - ha:global grid density 16 = { checked={conf(iseq, plugins/hid_gtk/global_grid/min_dist_px, 16)}; li:action={conf(set, plugins/hid_gtk/global_grid/min_dist_px, 16, design); conf(set, plugins/hid_gtk/local_grid/enable, 0, design) } update_on={} } - } - } - ha:Realign grid = { a={g; r}; action={ Display(ToggleGrid) } } - } - } - - - ha:Displayed subcircuit ID { - li:submenu { - ha:refdes = { a={v; s; r}; checked=ChkSubcID(%a.refdes%); action=Display(SubcID, "%a.refdes%"); update_on={editor/subc_id} } - ha:footprint = { a={v; s; f}; checked=ChkSubcID(%a.footprint%); action=Display(SubcID,"%a.footprint%"); update_on={editor/subc_id} } - ha:value = { a={v; s; v}; checked=ChkSubcID(%a.value%); action=Display(SubcID,"%a.value%"); update_on={editor/subc_id} } - ha:refdes+value = { a={v; s; s}; checked=ChkSubcID(%a.refdes%\\n%a.value%); action=Display(SubcID,"%a.refdes%\\\\n%a.value%"); update_on={editor/subc_id} } - ha:user configured = { a={v; s; c}; action=Display(SubcID); } - } - } - ha:Displayed terminal ID { - li:submenu { - ha:term = { a={v; t; t}; checked=ChkTermID(%a.term%); action=Display(TermID, "%a.term%"); update_on={editor/term_id} } - ha:name = { a={v; t; n}; checked=ChkTermID(%a.name%); action=Display(TermID, "%a.name%"); update_on={editor/term_id} } - ha:term+name = { a={v; t; s}; checked=ChkTermID("%a.term%,%a.name%"); action=Display(TermID, "%a.term%,%a.name%"); update_on={editor/term_id} } - ha:user configured = { a={v; t; c}; action=Display(TermID); } - } - } - ha:Zoom and side { - li:submenu { - ha:Zoom In 20% = { li:a={{z;z;}; {+};} action=Zoom(-1.2) } - ha:Zoom Out 20% = { li:a={{z;x;}; {-};} action=Zoom(+1.2) } - ha:Zoom In 2X = { action=Zoom(-2) } - ha:Zoom Out 2X = { action=Zoom(+2) } - ha:Zoom to 0.1mil/px = { action={Zoom(=0.1mil)} } - ha:Zoom to 0.01mm/px = { action={Zoom(=0.01mm)} } - ha:Zoom to 1mil/px = { action={Zoom(=1mil)} } - ha:Zoom to 0.05mm/px = { action={Zoom(=0.05mm)} } - ha:Zoom to 2.5mil/px = { action={Zoom(=2.5mil)} } - ha:Zoom to 0.1mm/px = { action={Zoom(=0.1mm)} } - ha:Zoom to 10mil/px = { action={Zoom(=10mil)} } - ha:Zoom In 20% and center = { li:action={Zoom(-1.2); Center()} } - ha:Zoom Out 20% and center= { li:action={Zoom(+1.2); Center()} } - - - ha:Zoom Extents = { li:a={{z;e;}; {v;f};}; action=Zoom() } - ha:Zoom to selection = { a={z;s;}; action=ZoomTo(selected) } - ha:Zoom to found = { a={z;f;}; action=ZoomTo(found) } - - - ha:Flip up/down = { checked=editor/view/flip_y; a=Tab; action=SwapSides(V) } - ha:Flip left/right = { checked=editor/view/flip_x; a=ShiftTab; action=SwapSides(H) } - ha:Spin 180 degrees = { a=CtrlTab; action=SwapSides(R) } - ha:Swap Sides = { a=Ctrl ShiftTab; action=SwapSides() } - - - ha:Center cursor = { a={v; c} action=Center() } - } - } - ha:Layers { - li:submenu { - ha:Shown Layers { - li:submenu { - @layerview - - - ha:Edit Layer Groups = { action=Preferences("layers") } - } - } - ha:Current Layer { - li:submenu { - anon2=@layerpick - - - ha:Delete current layer = { action=MoveLayer(c,-1) } - ha:Add new layer = { action=MoveLayer(-1,c) } - ha:Move current layer up = { action=MoveLayer(c,step-) } - ha:Move current layer down= { action=MoveLayer(c,step+) } - } - } - } - } - ha:Show padstack numbers in a subc = { a={v; n} action=Display(PinOrPadName) } - ha:Full screen = { checked=editor/fullscreen; a=\\; action=fullscreen(toggle) } - ha:Reset { - li:submenu { - ha:Reset View = { a={v; r; v}; sy:action={/scripts/view_reset}; tip={Reset all visibility related states to make sure all objects are visible} } - ha:Reset GUI = { a={v; r; g}; sy:action={/scripts/gui_reset}; tip={Reset all GUI related states } } - } - } - } - } # View - - ha:Mode = { - li:submenu { - ha:Routing { - li:submenu { - ha:'All-direction' lines = { li:a={{m; l; a}; {.};}; checked=editor/all_direction_lines; action=conf(toggle, editor/all_direction_lines, design); update_on={editor/all_direction_lines} } - ha:Cycle line clip/refraction = { li:a={{m; l; f}; {/};}; action=Display(CycleClip) } - ha:Auto swap line start angle = { checked=editor/swap_start_direction; action=conf(toggle, editor/swap_start_direction, design) } - ha:Auto enforce style clearance = { a={m; l; d}; checked=editor/auto_drc; action=conf(toggle, editor/auto_drc, design) } - ha:Automatic trace merging = { a={m; l; m}; checked=editor/trace_auto_merge; action=conf(toggle, editor/trace_auto_merge, design) } - - - ha:Rubber band mode = { a={m; r; r}; checked=editor/rubber_band_mode; action=conf(toggle, editor/rubber_band_mode, design) } - ha:Rubber band keeps middle line dir= { a={m; r; m}; checked=editor/rubber_band_keep_midlinedir; action=conf(toggle, editor/rubber_band_keep_midlinedir, design) } - - - ha:Route radius +0.5 = { li:a={{r; r; +}; {r; r; p};}; action=conf(delta, editor/route_radius, +0.5, design); } - ha:Route radius -0.5 = { li:a={{r; r; -}; {r; r; m};}; action=conf(delta, editor/route_radius, -0.5, design); } - - - ha:New lines, arcs clear polygons = { a={m; l; c}; checked=editor/clear_line; action=conf(toggle, editor/clear_line, design) } - ha:New polygons are full ones = { a={m; p; f}; checked=editor/full_poly; action=conf(toggle, editor/full_poly, design) } - ha:New polygons clear polygons = { a={m; p; c}; checked=editor/clear_polypoly; action=conf(toggle, editor/clear_polypoly, design) } - ha:Polygon clip inhibit (toggle) = { a={m; p; i}; checked=ClipInhibit(check); action=ClipInhibit(toggle); update_on={temp/clip_inhibit_chg} } - } - } - ha:Cursor/snap { - li:submenu { - ha:Orthogonal moves = { a={m; c; o}; checked=editor/orthogonal_moves; action=conf(toggle, editor/orthogonal_moves, design) } - ha:Crosshair snaps to padstacks = { a={m; c; p}; checked=editor/snap_pin; action=conf(toggle, editor/snap_pin, design) } - ha:Crosshair snaps to off-grid points on lines = { a={m; c; s};checked=editor/snap_offgrid_line; action=conf(toggle, editor/snap_offgrid_line, design) } - ha:Crosshair shows style/object clearance = { a={m; c; c}; checked=editor/show_drc; action=conf(toggle, editor/show_drc, design) } - } - } - ha:Drawing { - li:submenu { - @indications - ha:Show autorouter trials = { a={m; d; a}; checked=editor/live_routing; action=conf(toggle, editor/live_routing, design) } - ha:Highlighting on line, arc points = { a={m; d; h}; checked=editor/highlight_on_point; action=conf(toggle, editor/highlight_on_point, design) } - ha:Wireframe draw = { li:a={{m; d; w}; {|};}; checked=editor/wireframe_draw; action=conf(toggle, editor/wireframe_draw, design) } - ha:Thin draw = { a={m; d; t}; checked=editor/thin_draw; action=conf(toggle, editor/thin_draw, design) } - ha:Thin draw poly = { a={m; d; p}; checked=editor/thin_draw_poly; action=conf(toggle, editor/thin_draw_poly, design); update_on={editor/thin_draw_poly} } - ha:poly as-drawn frame annotation = { a={m; d; d}; checked=editor/as_drawn_poly; action=conf(toggle, editor/as_drawn_poly, design); update_on={editor/as_drawn_poly} } - ha:Check polygons = { a={m; d; c}; checked=editor/check_planes; action=conf(toggle, editor/check_planes, design) } - ha:Object list popup = { a={m; d; o}; checked=editor/click_objlist; action=conf(toggle, editor/click_objlist, design); tip={If there are multiple objects under the cursor when executing an action, present a popup dialog to select which object to operate on} } - - - ha:Lock floaters = { a={m; f; l}; checked=editor/lock_names; action=conf(toggle, editor/lock_names, design) } - ha:Only floaters = { a={m; f; o}; checked=editor/only_names; action=conf(toggle, editor/only_names, design) } - ha:Hide floaters = { a={m; f; h}; checked=editor/hide_names; action=conf(toggle, editor/hide_names, design) } - - - ha:Line Tool size +5 mil = { a={m; l; +}; action=SetValue(LineSize,+5,mil) } - ha:Line Tool size -5 mil = { a={m; l; -}; action=SetValue(LineSize,-5,mil) } - ha:Text Tool scale +10 mil = { a={m; t; +}; action=SetValue(TextScale,+10,mil) } - ha:Text Tool scale -10 mil = { a={m; t; -}; action=SetValue(TextScale,-10,mil) } - - - ha:Render color override { - li:submenu { - ha:Invisible-color on other groups = { a={m; o; i}; checked=appearance/invis_other_groups; action=conf(toggle, appearance/invis_other_groups, design) } - ha:black current group = { a={m; o; b}; checked=appearance/black_current_group; action=conf(toggle, appearance/black_current_group, design) } - } - } - - - ha:Reset = { a={m; d; r}; sy:action={/scripts/mode_reset}; tip={Reset all the above drawing modes to make sure objects are visible} } - } - } - ha:Mincut on shorts = { checked=plugins/mincut/enable; action=conf(toggle, plugins/mincut/enable, design) } - ha:Auto-zero delta measurements = { checked=editor/local_ref; action=conf(toggle, editor/local_ref, design) } - ha:Brave mode = { action=brave() } - ha:Loose subcircuits (no subc lock) = { a={m; k; s}; checked=subc(loose, check); action=subc(loose, toggle); update_on={} } - ha:Tool { - li:submenu { - ha:Via = { checked=ChkMode(via); li:a={{t;v};{F1};}; action=Tool(via); update_on={editor/mode} } - ha:Line = { checked=ChkMode(line); li:a={{t;l};{F2};}; action=Tool(line); update_on={editor/mode} } - ha:Arc = { checked=ChkMode(arc); li:a={{t;a};{F3};}; action=Tool(arc); update_on={editor/mode} } - ha:Text = { checked=ChkMode(text); li:a={{t;t};{F4};}; action=Tool(text); update_on={editor/mode} } - ha:Rectangle = { checked=ChkMode(rectangle); li:a={{t;r};{F5};}; action=Tool(rectangle); update_on={editor/mode} } - ha:Polygon = { checked=ChkMode(poly); li:a={{t;p};{F6};}; action=Tool(poly); update_on={editor/mode} } - ha:Polygon Hole = { checked=ChkMode(polyhole); a={t;h}; action=Tool(polyhole); update_on={editor/mode} } - ha:Buffer = { checked=ChkMode(buffer); li:a={{t;b};{F7};}; action=Tool(buffer); update_on={editor/mode} } - ha:Del/Remove = { checked=ChkMode(remove); li:a={{t;d};{F8};}; action=Tool(remove); update_on={editor/mode} } - ha:Rotate = { checked=ChkMode(rotate); li:a={{t;o};{F9};}; action=Tool(rotate); update_on={editor/mode} } - ha:Thermal = { checked=ChkMode(thermal); li:a={{t;e};{F10};}; action=Tool(thermal); update_on={editor/mode} } - ha:Arrow = { checked=ChkMode(arrow); li:a={{t;n};{F11};{space};}; action=Tool(arrow); update_on={editor/mode} } - ha:Insert Point = { checked=ChkMode(insert); li:a={{t;i};{Insert};}; action=Tool(insert); update_on={editor/mode} } - ha:Move = { checked=ChkMode(move); a={t;m}; action=Tool(move); update_on={editor/mode} } - ha:Copy = { checked=ChkMode(copy); a={t;c}; action=Tool(copy); update_on={editor/mode} } - ha:Lock = { checked=ChkMode(lock); li:a={{t;k};{F12};}; action=Tool(lock); update_on={editor/mode} } - ha:Cancel = { a={Escape}; action=Tool(Escape) } - } - } # Tool - } - } #Mode - - ha:Select { - li:submenu { - ha:Select all visible objects = { a={s; a; a;}; action=Select(All) } - ha:Select all found objects = { a={s; a; c;}; action=Select(Connection); tip={Select all objects that have the 'found' flag set} } - ha:Unselect all objects = { a={s; u; a;}; action=Unselect(All) } - ha:Unselect all found objects = { a={s; u; c;}; action=Unselect(Connection); tip={Unselect all objects that have the 'found' flag set} } - ha:Invert selection = { a={s; i; }; action=Select(Invert) } - - - ha:Advanced search and select = { a={s; s;} action=SearchDialog() } - ha:List locked objects = { a={s; k;} action={query(view, "@.p.flag.lock == 1 && isvoid(@.subc)")} } - - - ha:Move selected subcircuits to other side= { a={s; f;} action=Flip(SelectedElements) } - ha:Move selected objects to current layer = { a={s; l;} action=MoveToCurrentLayer(Selected) } - ha:Remove selected objects = { a={s; r;} action=RemoveSelected() } - ha:Convert selection to subcircuit = { a={s; c; s;} action=Select(ConvertSubc) } - ha:Convert selection to padstack = { a={s; c; p;} li:action={PadstackConvert(selected); Tool(buffer);} } - ha:Convert selection to extended object...= { a={s; c; e;} action=ExtobjConvFrom(Selected, @gui); } - ha:Break selection subcircuits to pieces = { a={s; b; s}; li:action={PasteBuffer(Push); PasteBuffer(5); PasteBuffer(Clear); PasteBuffer(AddSelected); RemoveSelected(); PasteBuffer(Restore); PasteBuffer(ToLayout, crosshair); PasteBuffer(Clear); PasteBuffer(Pop);} } - ha:Break selection padstack to pieces = { a={s; b; p}; action=PadstackBreakup(selected) } - ha:Change selected objects { - li:submenu { - ha:Lines -10 mil = { li:action={ChangeSize(SelectedLines,-10,mil); ChangeSize(SelectedArcs,-10,mil)} } - ha:Lines +10 mil = { li:action={ChangeSize(SelectedLines,+10,mil); ChangeSize(SelectedArcs,+10,mil)} } - ha:Texts -10 mil = { action=ChangeSize(SelectedTexts,-10,mil) } - ha:Texts +10 mil = { action=ChangeSize(SelectedTexts,+10,mil) } - - - ha:Clearance +2 mil = { action=ChangeClearSize(SelectedObjects,+2,mil) } - ha:Clearance -2 mil = { action=ChangeClearSize(SelectedObjects,-2,mil) } - - - ha:Hole -10 mil = { action=ChangeDrillSize(SelectedPadstacks,-10,mil) } - ha:Hole +10 mil = { action=ChangeDrillSize(SelectedPadstacks,+10,mil) } - - - ha:Toggle join = { action=ChangeJoin(SelectedObjects) } - - - ha:Apply Pen = { a={s; a; p}; action=ApplyPen(selected) } - - - ha:Edit properties = { a={s; p}; action=propedit(selection) } - } - } - } - } # Select - - ha:Buffer { - li:submenu { - ha:Rotate buffer 90 deg CCW (left) = { li:a={{b;r;l}; {ShiftF7};}; li:action={Tool(buffer); PasteBuffer(Rotate,1)} } - ha:Rotate buffer 90 deg CW (right) = { a={b;r;r}; li:action={Tool(buffer); PasteBuffer(Rotate,3)} } - ha:Arbitrarily Rotate Buffer = { a={b;r;a}; li:action={Tool(buffer); FreeRotateBuffer()} } - ha:Mirror buffer (up/down) = { a={b;m;u}; li:action={Tool(buffer); PasteBuffer(Mirror)} } - ha:Mirror buffer (left/right) = { a={b;m;l}; li:action={Tool(buffer); PasteBuffer(Rotate,1); PasteBuffer(Mirror); PasteBuffer(Rotate,3)} } - ha:Scale = { action=ScaleBuffer(); } - ha:Normalize = { a={b;n}; li:action={Tool(buffer); PasteBuffer(Rotate,1); PasteBuffer(Normalize);} } - - - ha:Clear buffer = { a={b;c;c;}; action=PasteBuffer(Clear) } - ha:Save buffer content to file = { a={b;f;s;}; action=PasteBuffer(SaveAll) } - ha:Load buffer content from file = { a={b;f;l;}; li:action={PasteBuffer(Clear); PasteBuffer(LoadAll)} } - - - ha:Convert buffer to subcircuit = { a={b;c;s}; action=PasteBuffer(ConvertSubc) } - ha:Convert buffer to padstack = { a={b;c;p}; li:action={PadstackConvert(buffer); Tool(buffer);} } - ha:Convert buffer to extended object... = { a={b;c;e}; li:action={ExtobjConvFrom(buffer, @gui); Tool(buffer);} } - ha:Break buffer subcircuits to pieces = { a={b;s;b}; action=PasteBuffer(Restore) } - ha:Break buffer padstacks to pieces = { a={b;s;p}; action=PadstackBreakup(buffer) } - ha:Save buffer subcircuit to file = { a={b;s;s}; action=Save(PasteBuffer); tip={save one subcircuits from the buffer as a footprint file} } - ha:Save buffer subcircuits as lib... { - li:submenu { - ha:in a single lib file = { a={b;s;l;f}; action=SaveLib(file, buffer); tip={save all subcircuits from the buffer as a footprint lib in a library file} } - ha:in multiple footprint files = { a={b;s;l;d}; action=SaveLib(dir, buffer); tip={save all subcircuits from the buffer in individual, numbered files} } - } - } - - - ha:Layer bindings... = { a={b;b;}; action=LayerBinding(buffer) } - ha:Buffer selection { - li:submenu { - ha:Select Buffer \#1 = { checked=ChkBuffer(1); a={b;1;} action=PasteBuffer(1); update_on={editor/buffer_number} } - ha:Select Buffer \#2 = { checked=ChkBuffer(2); a={b;2;} action=PasteBuffer(2); update_on={editor/buffer_number} } - ha:Select Buffer \#3 = { checked=ChkBuffer(3); a={b;3;} action=PasteBuffer(3); update_on={editor/buffer_number} } - ha:Select Buffer \#4 = { checked=ChkBuffer(4); a={b;4;} action=PasteBuffer(4); update_on={editor/buffer_number} } - ha:Select scratchpad = { checked=ChkBuffer(5); a={b;5;} action=PasteBuffer(5); update_on={editor/buffer_number} } - } - } - } - } # Buffer - - ha:Connects = { - li:submenu { - ha:Rats nest { - li:submenu { - ha:Optimize rats nest = { a={c;r;}; li:action={Atomic(Save); DeleteRats(AllRats); Atomic(Restore); AddRats(AllRats); Atomic(Close)} } - ha:Optimize rats nest - autorouter = { a={c;Shiftr;}; li:action={Atomic(Save); DeleteRats(AllRats); Atomic(Restore); AddRats(AllRats, manhattan); Atomic(Close)} } - ha:Erase rats nest = { a={c;e;}; action=DeleteRats(AllRats) } - - - ha:Select shortest rat = { a={c;s;}; action=AddRats(Close) } - ha:AddRats to selected pins = { li:action={Atomic(Save); DeleteRats(AllRats); Atomic(Restore); AddRats(SelectedRats); Atomic(Close)} } - ha:AddRats Selected = { action=AddRats(SelectedRats) } - ha:Add All Rats = { action=AddRats(AllRats) } - } - } - ha:Network lengths { - li:submenu { - ha:Visual length, from object = { a={n;l;o;}; action=NetLength(object) } - ha:Visual length, clear = { a={n;l;k;}; action=NetLength(clear) } - ha:Netlist dialog, refresh lengths = { a={n;l;l;}; li:action={NetlistDialog(); NetlistDialog(RefreshNetLens);}} - } - } - - - ha:Find Connections = { a={c;f;}; li:action={Connection(Reset); Connection(Find)} } - ha:Clear/reset lookup = { a={c;c;}; li:action={Connection(Reset); Display(Redraw)} } - - - ha:Del/Remove Connected = { a={c;d;}; li:action={Atomic(Save); Connection(Reset); Atomic(Restore); Unselect(All); Atomic(Restore); Connection(Find); Atomic(Restore); Select(Connection); Atomic(Restore); RemoveSelected(); Atomic(Restore); Connection(Reset); Atomic(Restore); Unselect(All); Atomic(Block)} } - - - ha:Subcircuit Placement { - li:submenu { - ha:Auto-place selected subcircuits = { a={a;p;s;}; action=AutoPlaceSelected() } - ha:Disperse all subcircuits = { a={a;d;a;}; action=DisperseElements(All) } - ha:Disperse selected subcircuits = { a={a;d;s;}; action=DisperseElements(Selected) } - } - } - ha:Automatic Routing { - li:submenu { - ha:Auto-route selected rats = { a={a;r;s;}; action=AutoRoute(SelectedRats) } - ha:Auto-route all rats = { a={a;r;a;}; action=AutoRoute(AllRats) } - @autoroute - ha:Rip up selected auto-routed tracks = { a={a;r;t;}; action=RipUp(Selected) } - ha:Rip up all auto-routed tracks = { a={a;r;r;}; action=RipUp(All) } - } - } - ha:Optimize routed tracks { - li:submenu { - } - } - - - ha:Design Rule Checker = { a={a;x;}; action=DRC() } - - - ha:Design changes (back annotation) { - li:submenu { - ha:Swap nets on two selected pins = { a={a;b;s;}; action=net(swap) } - ha:Replace footprint = { a={a;b;f;}; action=ReplaceFootprint() } - - - ha:claim net by object = { a={n;c;o;}; action=ClaimNet(object) } - ha:claim net on found = { a={n;c;f;}; action=ClaimNet(found) } - ha:claim net on selected = { a={n;c;s;}; action=ClaimNet(selected) } - } - } - } - } # Connects - - ha:Plugins { - li:submenu { - ha:feature plugins = { - # submenu dedicated for feature plugins to register their menu items - li:submenu { - @feature_plugins - } - } - ha:script = { - # submenu dedicated for user scripts to register their menu items - li:submenu { - @scripts - } - } - ha:Manage plugins... = { a={p;m;p;}; action=ManagePlugins() } - ha:Manage scripts... = { a={p;m;s;}; action=BrowseScripts() } - } - } # Plugins - - ha:Window { - li:submenu { - ha:Library = { a={w;l}; action=LibraryDialog() } - ha:Message Log = { a={w;m}; action=LogDialog() } - ha:DRC Check = { a={w;d}; action=DRC() } - ha:Netlist = { a={w;n}; action=NetlistDialog() } - ha:Command Entry = { li:a={a={w;c}; {:};} action=Command() } - ha:Pinout = { a={w;p}; action=Display(Pinout) } - ha:Font selector = { a={w;f}; action=FontSel() } - - - ha:Key Bindings { - li:submenu { - ha:Cycle object being dragged = { li:a={{,};{e;y;};}; action=CycleDrag() } - - - ha:Step Cursor { - li:submenu { - ha:Step Up = { li:a={{Up};{k;k};}; action=Cursor(Warp,0,-1,grid) } - ha:Step Down = { li:a={{Down};{k;j};}; action=Cursor(Warp,0,1,grid) } - ha:Step Left = { li:a={{Left};{k;h};}; action=Cursor(Warp,-1,0,grid) } - ha:Step Right = { li:a={{Right};{k;l};}; action=Cursor(Warp,1,0,grid) } - ha:Step +Up = { a=ShiftUp; action=Cursor(Pan,0,-50,view) } - ha:Step +Down = { a=ShiftDown; action=Cursor(Pan,0,50,view) } - ha:Step +Left = { a=ShiftLeft; action=Cursor(Pan,-50,0,view) } - ha:Step +Right = { a=ShiftRight; action=Cursor(Pan,50,0,view) } - ha:Scroll Up = { li:a={{CtrlUp};{j;k};}; action=Scroll(up) } - ha:Scroll Down = { li:a={{CtrlDown};{j;j};}; action=Scroll(down) } - ha:Scroll Left = { li:a={{CtrlLeft};{j;h};}; action=Scroll(left) } - ha:Scroll Right = { li:a={{CtrlRight};{j;l};}; action=Scroll(right) } - ha:Click (left) = { li:a={{Enter};{k;space};}; li:action={Tool(Press); Tool(Release)} } - ha:Click (right) = { a={k;r}; li:action={Tool(Release); Popup(popup-obj, obj-type)} } - } - } - ha:attribute layer keys { - li:submenu { - anon3=@layerkeys - } - } - ha:generic layer keys { - li:submenu { - ha:Select previous layer = { a={l; k}; action=LayerByStack(Select, Prev); } - ha:Select next layer = { a={l; l}; action=LayerByStack(Select, Next); } - - - ha:Select Layer 1 = { a=1; action=SelectLayer(1) } - ha:Select Layer 2 = { a=2; action=SelectLayer(2) } - ha:Select Layer 3 = { a=3; action=SelectLayer(3) } - ha:Select Layer 4 = { a=4; action=SelectLayer(4) } - ha:Select Layer 5 = { a=5; action=SelectLayer(5) } - ha:Select Layer 6 = { a=6; action=SelectLayer(6) } - ha:Select Layer 7 = { a=7; action=SelectLayer(7) } - ha:Select Layer 8 = { a=8; action=SelectLayer(8) } - ha:Select Layer 9 = { a=9; action=SelectLayer(9) } - ha:Select Layer 10 = { a=0; action=SelectLayer(10) } - ha:Select Layer 11 = { a=Alt1; action=SelectLayer(11) } - ha:Select Layer 12 = { a=Alt2; action=SelectLayer(12) } - ha:Select Layer 13 = { a=Alt3; action=SelectLayer(13) } - ha:Select Layer 14 = { a=Alt4; action=SelectLayer(14) } - ha:Select Layer 15 = { a=Alt5; action=SelectLayer(15) } - ha:Select Layer 16 = { a=Alt6; action=SelectLayer(16) } - ha:Select Layer 17 = { a=Alt7; action=SelectLayer(17) } - ha:Select Layer 18 = { a=Alt8; action=SelectLayer(18) } - ha:Select Layer 19 = { a=Alt9; action=SelectLayer(19) } - ha:Select Layer 20 = { a=Alt0; action=SelectLayer(20) } - - - ha:Toggle Layer 1 = { a=Ctrl1; action=ToggleView(1) } - ha:Toggle Layer 2 = { a=Ctrl2; action=ToggleView(2) } - ha:Toggle Layer 3 = { a=Ctrl3; action=ToggleView(3) } - ha:Toggle Layer 4 = { a=Ctrl4; action=ToggleView(4) } - ha:Toggle Layer 5 = { a=Ctrl5; action=ToggleView(5) } - ha:Toggle Layer 6 = { a=Ctrl6; action=ToggleView(6) } - ha:Toggle Layer 7 = { a=Ctrl7; action=ToggleView(7) } - ha:Toggle Layer 8 = { a=Ctrl8; action=ToggleView(8) } - ha:Toggle Layer 9 = { a=Ctrl9; action=ToggleView(9) } - ha:Toggle Layer 10 = { a=Ctrl0; action=ToggleView(10) } - ha:Toggle Layer 11 = { a=Ctrl-Alt1; action=ToggleView(11) } - ha:Toggle Layer 12 = { a=Ctrl-Alt2; action=ToggleView(12) } - ha:Toggle Layer 13 = { a=Ctrl-Alt3; action=ToggleView(13) } - ha:Toggle Layer 14 = { a=Ctrl-Alt4; action=ToggleView(14) } - ha:Toggle Layer 15 = { a=Ctrl-Alt5; action=ToggleView(15) } - ha:Toggle Layer 16 = { a=Ctrl-Alt6; action=ToggleView(16) } - ha:Toggle Layer 17 = { a=Ctrl-Alt7; action=ToggleView(17) } - ha:Toggle Layer 18 = { a=Ctrl-Alt8; action=ToggleView(18) } - ha:Toggle Layer 19 = { a=Ctrl-Alt9; action=ToggleView(19) } - ha:Toggle Layer 20 = { a=Ctrl-Alt0; action=ToggleView(20) } - } - } # layer keys - - ha:polygon drawing { - li:submenu { - ha:Polygon PreviousPoint = { a={p; p; p}; action=Polygon(PreviousPoint) } - ha:Polygon Close = { a={p; p; c}; action=Polygon(Close) } - } - } - } - } - ha:About... = { li:a={{w;a}; {i;a};}; action=About() } - } - } # Window - } # main menu - - li:popups { -# context sensitive right click: popup per object type under the cursor - - ha:popup-obj-line { - li:submenu { - ha:Edit properties { action=propedit(object) } - ha:Edit flags... { action=FlagEdit() } - ha:Set Same Style { action=SetSame() } - ha:Convert to extended object... = { action=ExtobjConvFrom(Object, @gui) } - - - ha:Remove line { li:action={Tool(Save); Tool(remove); Tool(Press); Tool(Restore)} } - ha:Copy to buffer { li:action={Unselect(All); Select(object); PasteBuffer(Clear); PasteBuffer(AddSelected); Unselect(All); Tool(buffer) } } - ha:Move to current layer { action=MoveToCurrentLayer(object) } - } - } - - ha:popup-obj-arc { - li:submenu { - ha:Edit properties { action=propedit(object) } - ha:Edit flags... { action=FlagEdit() } - ha:Set Same Style { action=SetSame() } - ha:Convert to extended object... = { action=ExtobjConvFrom(Object, @gui) } - - - ha:Remove arc { li:action={Tool(Save); Tool(remove); Tool(Press); Tool(Restore)} } - ha:Copy to buffer { li:action={Unselect(All); Select(object); PasteBuffer(Clear); PasteBuffer(AddSelected); Unselect(All); Tool(buffer) } } - ha:Move to current layer { action=MoveToCurrentLayer(object) } - } - } - - ha:popup-obj-polygon { - li:submenu { - ha:Edit properties { action=propedit(object) } - ha:Edit flags... { action=FlagEdit() } - ha:Convert to extended object... = { action=ExtobjConvFrom(Object, @gui) } - - - ha:Remove polygon { li:action={Tool(Save); Tool(remove); Tool(Press); Tool(Restore)} } - ha:Copy to buffer { li:action={Unselect(All); Select(object); PasteBuffer(Clear); PasteBuffer(AddSelected); Unselect(All); Tool(buffer) } } - ha:Move to current layer { action=MoveToCurrentLayer(object) } - } - } - - ha:popup-obj-text { - li:submenu { - ha:Edit properties { action=propedit(object) } - ha:Edit flags... { action=FlagEdit() } - ha:Edit text... { li:a={{e;t};}; action=ChangeName(Object) } - ha:Set Same Style { action=SetSame() } - ha:Convert to extended object... = { action=ExtobjConvFrom(Object, @gui) } - ha:Change font... { li:a={{e;o};} action=FontSel(Object) } - ha:Toggle tight clearance { action=PropToggle(object, a/tight_clearance, true); } - - - ha:Remove text { li:action={Tool(Save); Tool(remove); Tool(Press); Tool(Restore)} } - ha:Copy to buffer { li:action={Unselect(All); Select(object); PasteBuffer(Clear); PasteBuffer(AddSelected); Unselect(All); Tool(buffer) } } - ha:Move to current layer { action=MoveToCurrentLayer(object) } - } - } - - ha:popup-obj-padstack { - li:submenu { - ha:Edit properties { action=propedit(object) } - ha:Edit geometry/prototype {action=padstackedit } - ha:Edit flags... { action=FlagEdit() } - ha:Set Same Style { action=SetSame() } - - - ha:Remove padstack { li:action={Tool(Save); Tool(remove); Tool(Press); Tool(Restore)} } - ha:Break up padstack { action=PadstackBreakup(object) } - ha:Copy to buffer { li:action={Unselect(All); Select(object); PasteBuffer(Clear); PasteBuffer(AddSelected); Unselect(All); Tool(buffer) } } - } - } - - ha:popup-obj-padstack-in-subc { - li:submenu { - ha:Edit properties { action=propedit(object) } - ha:Edit geometry/prototype {action=padstackedit } - ha:Set Same Style { action=SetSame() } - } - } - - ha:popup-obj-subcircuit { - li:submenu { - ha:Edit properties { action=propedit(object) } - ha:External editor... { action=extedit(object) } - ha:Edit flags... { action=FlagEdit() } - ha:Edit layer bindings... { action=LayerBinding() } - ha:Change refdes { li:a={{e;r};}; action=ChangeName(Refdes) } - ha:Edit padstack prototypes... = { action=pstklib(object) } - ha:Convert back to extended object { action=ExtobjToggle(object) } - -#TODO: replace from lib - - - ha:Remove subcircuit { li:action={Tool(Save); Tool(remove); Tool(Press); Tool(Restore)} } - ha:Copy to buffer { li:action={Unselect(All); Select(object); PasteBuffer(Clear); PasteBuffer(AddSelected); Unselect(All); Tool(buffer) } } - ha:Move to other side { action=Flip(object) } - } - } - - ha:popup-obj-extobj-subcircuit { - li:submenu { - ha:Edit extobj properties (generic) { action=propedit(subc) } - ha:Edit extobj properties (specific) { action=ExtobjGUIPropEdit(object) } - ha:Edit extobj layer bindings... { action=LayerBinding() } - ha:Edit extobjpadstack prototypes... { action=pstklib(object) } - ha:Convert to plain subcircuit { action=ExtobjToggle(object) } - } - } - - ha:popup-obj-gfx { - li:submenu { - ha:Edit properties { action=propedit(object) } - ha:Edit flags... { action=FlagEdit() } - - - {ha:Render level: under} { action=propset(object, "a/render_level", "under") } - {ha:Render level: above} { action=propset(object, "a/render_level", "above") } - {ha:Set transparent pixel...} { action=GfxMod(transparent) } - {ha:Resize to measured...} { action=GfxMod(resize) } - - - ha:Remove gfx { li:action={Tool(Save); Tool(remove); Tool(Press); Tool(Restore)} } - ha:Copy to buffer { li:action={Unselect(All); Select(object); PasteBuffer(Clear); PasteBuffer(AddSelected); Unselect(All); Tool(buffer) } } - ha:Move to current layer { action=MoveToCurrentLayer(object) } - } - } - - - ha:popup-obj-misc { - li:submenu { - ha:Operations on selections { - li:submenu { - ha:Unselect all objects = { action=Unselect(All) } - ha:Remove selected objects = { action=RemoveSelected() } - ha:Copy selection to buffer = { li:action={GetXY(Click to set the snap point for this buffer); PasteBuffer(Clear); PasteBuffer(AddSelected); Tool(buffer)} } - ha:Cut selection to buffer = { li:action={GetXY(Click to set the snap point for this buffer); PasteBuffer(Clear); PasteBuffer(AddSelected); RemoveSelected(); Tool(buffer)} } - ha:Convert selection to subcircuit = { action=Select(ConvertSubc) } - ha:Convert selection to extended object... = { action=ExtobjConvFrom(selected, @gui) } - ha:Auto place selected subcircuits = { action=AutoPlaceSelected() } - ha:Autoroute selected subcircuits = { action=AutoRoute(SelectedRats) } - ha:Rip up selected auto-routed tracks = { action=RipUp(Selected) } - ha:Rotate selected = { action={GetXY(Click to set the snap point for this buffer); PasteBuffer(Clear); PasteBuffer(AddSelected); RemoveSelected(); Tool(buffer) FreeRotateBuffer(); Tool(buffer); PasteBuffer(Tolayout, crosshair); } } - } - } - ha:Operations on this location { - li:submenu { - ha:Generate object report = { li:action={GetXY(Click on the object); Report(Object)} } - } - } - - - ha:Undo last operation = { action=Undo() } - ha:Redo last undone operation = { action=Redo() } - } - } # popup-obj-misc - - ha:layer { - li:submenu { - ha:Layer name and flags... = { action=EditLayer() } - ha:Layer properties... = { action=Propedit(layer) } - ha:Grouping... (layer preferences) = { action=Preferences("layers") } - ha:Hotkey { - li:submenu { - ha:Selection... = { action=LayerHotkey("¤t", select) } - ha:Visibility... = { action=LayerHotkey("¤t", vis) } - } - } - ha:transformations { - li:submenu { - ha:Toggle wireframe = { action={LayerXform(¤t, toggle, wireframe)} } - ha:Toggle thindraw = { action={LayerXform(¤t, toggle, thindraw)} } - } - } - - - ha:Move up (within group) = { action=MoveLayer(c, step-) } - ha:Move down (within group) = { action=MoveLayer(c, step+) } - - - ha:Remove layer = { action=MoveLayer(c, -1) } - ha:Insert new, before this layer = { action={ MoveLayer(-1, c); EditLayer() } } - ha:Insert new, after this layer = { action={ Undo(FreezeSerial); MoveLayer(-1, c); MoveLayer(c, step+); Undo(UnFreezeSerial); Undo(IncSerial); EditLayer() } } - - - ha:all layers on = { a={l;v;}; action=ToggleView(all, vis, set) } - ha:all layers off = { a={l;h;}; action=ToggleView(all, vis, clear) } - } - } # layer - - ha:group { - li:submenu { - ha:Group name & type... = { action=EditGroup(@) } - ha:Group properties... = { action={Propedit(layergrp:editgroup)} } - ha:Grouping... (layer preferences) = { action=Preferences("layers") } - - - ha:Duplicate group = { action={ DupGroup(@) } } - ha:Create new group { - li:submenu { - ha:Boundary (board outline) { - li:submenu { - ha:Boundary, unplated, routed = { action={ NewGroup(boundary, global, uroute) } } - ha:Boundary, plated, routed = { action={ NewGroup(boundary, global, proute) } } - ha:Boundary, unplated, cut = { action={ NewGroup(boundary, global, ucut) } } - ha:Boundary, unplated, vcut = { action={ NewGroup(boundary, global, uvcut) } } - } - } - ha:Slots, cutouts, adhesive, finish { - li:submenu { - ha:Slot, unplated, routed = { action={ NewGroup(mech, global, uroute, auto) } } - ha:Slot, plated, routed = { action={ NewGroup(mech, global, proute, auto) } } - ha:Adhesive, top side = { action={ NewGroup(mech, top, adhesive, -, top-adhesive) } } - ha:Adhesive, bottom side = { action={ NewGroup(mech, bot, adhesive, -, bot-adhesive) } } - ha:Gold finish, top side = { action={ NewGroup(mech, top, finish.gold, -, top-gold) } } - ha:Gold finish, bottom side = { action={ NewGroup(mech, bot, finish.gold, -, bot-gold) } } - ha:Carbon finish, top side = { action={ NewGroup(mech, top, finish.carbon, -, top-carbon) } } - ha:Carbon finish, bottom side = { action={ NewGroup(mech, bot, finish.carbon, -, bot-carbon) } } - } - } - ha:Keepouts { - li:submenu { - ha:Courtyard (comp. body), top = { action={ NewGroup(doc, top, ko.courtyard, -, top-courtyard, "init-invis=true") } } - ha:Courtyard (comp. body), bottom = { action={ NewGroup(doc, bottom, ko.courtyard, -, bot-courtyard, "init-invis=true") } } - ha:Copper, top side = { action={ NewGroup(doc, top, ko@top-copper, -, top-copper-ko, "init-invis=true") } } - ha:Copper, bottom side = { action={ NewGroup(doc, bottom, ko@bottom-copper, -, bot-copper-ko, "init-invis=true") } } - ha:Silk, top side = { action={ NewGroup(doc, top, ko@top-silk, -, top-silk-ko, "init-invis=true") } } - ha:Silk, bottom side = { action={ NewGroup(doc, bottom, ko@bottom-silk, -, bot-silk-ko, "init-invis=true") } } - ha:Mask, top side = { action={ NewGroup(doc, top, ko@top-mask, -, top-mask-ko, "init-invis=true") } } - ha:Mask, bottom side = { action={ NewGroup(doc, bottom, ko@bottom-mask, -, bot-mask-ko, "init-invis=true") } } - ha:Paste, top side = { action={ NewGroup(doc, top, ko@top-paste, -, top-paste-ko, "init-invis=true") } } - ha:Paste, bottom side = { action={ NewGroup(doc, bottom, ko@bottom-paste, -, bot-paste-ko, "init-invis=true") } } - } - } - ha:Fab & assy { - li:submenu { - ha:assy, top side = { action={ NewGroup(doc, top, assy, -, top-assy, "init-invis=true") } } - ha:assy, bottom side = { action={ NewGroup(doc, bottom, assy, -, bot-assy, "init-invis=true") } } - ha:fab, top side = { action={ NewGroup(doc, top, fab, auto, fab, "init-invis=true") } } - } - } - ha:Doc, misc { - li:submenu { - ha:Doc, top side = { action={ NewGroup(doc, top) } } - ha:Doc, bottom side = { action={ NewGroup(doc, bottom) } } - ha:Doc, global = { action={ NewGroup(doc, global) } } - ha:placement, top side = { action={ NewGroup(doc, top, placement, -, top-place, "init-invis=true") } } - ha:placement, bottom side = { action={ NewGroup(doc, bottom, placement, -, bot-place, "init-invis=true") } } - ha:placement, global = { action={ NewGroup(doc, global, placement, -, place, "init-invis=true") } } - } - } - ha:Physical (silk, mask, paste) { - li:submenu { - ha:Top paste = { action={ NewGroup(paste, top, "", auto, "top_paste", "", unique_first) } } - ha:Top silk = { action={ NewGroup(silk, top, "", auto, "top_silk", "", unique_first) } } - ha:Top mask = { action={ NewGroup(mask, top, "", auto, "top_mask", "", unique_first) } } - ha:Bottom mask = { action={ NewGroup(mask, bottom, "", auto, "bottom_mask", "", unique_last) } } - ha:Bottom silk = { action={ NewGroup(silk, bottom, "", auto, "bottom_silk", "", unique_last) } } - ha:Bottom paste = { action={ NewGroup(paste, bottom, "", auto, "bottom_paste", "", unique_last) } } - } - } - - } - } - ha:Remove group = { action={ DelGroup(@) } } - - - ha:Insert new layer = { action={ MoveLayer(-1, gi); EditLayer() } } - ha:Append new layer = { action={ MoveLayer(-1, ga); EditLayer() } } - - - ha:expand groups = { action=ToggleView(all, open, set) } - ha:collapse groups = { action=ToggleView(all, open, clear) } - ha:all layers on = { action=ToggleView(all, vis, set) } - ha:all layers off = { action=ToggleView(all, vis, clear) } - } - } # group - - } # popups - - ha:scripts { - - # set all visibility related conf nodes (view/mode/drawing in the menu) - # to safe defaults that makes sure everything is visible - mode_reset { - conf(set, editor/live_routing, 0, design); - conf(set, editor/wireframe_draw, 0, design); - conf(set, editor/wireframe_draw, 0, design); - conf(set, editor/thin_draw, 0, design); - conf(set, editor/thin_draw_poly, 0, design); - conf(set, editor/as_drawn_poly, 0, design); - conf(set, editor/check_planes, 0, design); - conf(set, editor/lock_names, 0, design); - conf(set, editor/only_names, 0, design); - conf(set, editor/hide_names, 0, design); - conf(set, appearance/invis_other_groups, 0, design); - conf(set, appearance/black_current_group, 0, design); - } - - # set all visibility related states to safe defaults that makes sure - # everything is visible - li:view_reset { - sy:mdr = {/scripts/mode_reset} - LayerVisReset(); - zoom(); - } - - # set all GUI states to safe defaults to get the UI to a known state - li:gui_reset { - sy:vr = {/scripts/view_reset} - fullscreen(off); - conf(set, editor/draw_grid, 1, design); - conf(set, plugins/hid_gtk/local_grid/enable, 0, design); - Display(SubcID, "%a.refdes%"); - Display(TermID, "%a.term%"); - conf(set, editor/all_direction_lines, 0, design); - conf(set, editor/auto_drc, 0, design); - conf(set, editor/rubber_band_mode, 0, design); - conf(set, editor/orthogonal_moves, 0, design); - conf(set, editor/snap_pin, 1, design); - conf(set, editor/snap_offgrid_line, 1, design); - conf(set, editor/show_drc, 0, design); - conf(set, editor/highlight_on_point, 0, design); - subc(loose, off); - Tool(arrow); - } - } -} # root Index: trunk/src/Makefile.in =================================================================== --- trunk/src/Makefile.in (revision 34890) +++ trunk/src/Makefile.in (revision 34891) @@ -321,14 +321,14 @@ ##### module rules end ##### ### default menu embed -pcb_menu_default.c: pcb-menu-default.lht $(CQUOTE) - $(CQUOTE) -n rnd_hidlib_default_embedded_menu pcb_menu_default.c +pcb_menu_default.c: menu-default.lht $(CQUOTE) + $(CQUOTE) -n rnd_hidlib_default_embedded_menu pcb_menu_default.c pcblib_DATA= \ default_font \ default2.lht \ default4.lht \ - pcb-menu-default.lht + menu-default.lht EXTRA_DIST= \ default_font \ @@ -371,7 +371,7 @@ $(SCCBOX) mkdir -p "$(BINDIR)" "$(DATADIR)" "$(LIBDIR)" "$(LIBDIR)/plugins" "$(CONFDIR)" $(SCCBOX) $(HOW) "pcb-rnd$(EXE)" "$(BINDIR)/pcb-rnd$(EXE)" $(SCCBOX) $(HOW) "pcb-conf.lht" "$(CONFDIR)/pcb-conf.lht" - $(SCCBOX) $(HOW) "pcb-menu-default.lht" "$(CONFDIR)/pcb-menu-default.lht" + $(SCCBOX) $(HOW) "menu-default.lht" "$(CONFDIR)/menu-default.lht" $(SCCBOX) $(HOW) "default2.lht" "$(DATADIR)/default2.lht" $(SCCBOX) $(HOW) "default4.lht" "$(DATADIR)/default4.lht" $(SCCBOX) $(HOW) "default_font" "$(DATADIR)/default_font"@/local/pcb/rules/install_@ Index: trunk/src/main.c =================================================================== --- trunk/src/main.c (revision 34890) +++ trunk/src/main.c (revision 34891) @@ -88,7 +88,7 @@ #undef pup_buildins static const char *menu_file_paths[4]; -static const char *menu_name_fmt = "pcb-menu-%s.lht"; +static const char *menu_name_fmt = "menu-%s.lht"; #define CONF_USER_DIR "~/" DOT_PCB_RND Index: trunk/src/menu-default.lht =================================================================== --- trunk/src/menu-default.lht (nonexistent) +++ trunk/src/menu-default.lht (revision 34891) @@ -0,0 +1,983 @@ +ha:rnd-menu-v1 { + li:mouse { + li:left { + li:press = { Tool(Press) } + li:press-shift = { Tool(Press) } + li:press-ctrl = { Tool(Save); Tool(arrow); Tool(Restore); Tool(Press) } + li:release = { Tool(Release) } + li:release-shift = { Tool(Release) } + li:release-ctrl = { Tool(Release) } + } + li:middle { + li:press = { Pan(1) } + li:release = { Pan(0) } + } + li:right { + li:press = { Tool(Stroke) } + li:release = { Tool(Release); Popup(popup-obj, obj-type) } + li:shift-release = { Popup(popup-obj-misc) } + } + li:scroll-up { + li:press = { Zoom(0.8) } + li:press-shift = { Scroll(up) } + li:press-ctrl = { Scroll(left) } + } + li:scroll-down { + li:press = { Zoom(1.25) } + li:press-shift = { Scroll(down) } + li:press-ctrl = { Scroll(right) } + } + } + + # List of tool names for the toolbar. + # Do not specify keys here, they are specified in the menu; the GUI will + # not pick up keys from this subtree. There's also no action here: the + # plugin handling this subtree will always pick the tool. + li:toolbar_static { + ha:via {tip={place a via on the board}} + ha:line {tip={draw a line segment (trace) on the board}} + ha:arc {tip={draw an arc segment (trace) on the board}} + ha:text {tip={draw text on the board}} + ha:rectangle {tip={draw a rectangular polygon on the board}} + ha:poly {tip={draw a polygon on the board}} + ha:polyhole {tip={cut out a hole from existing polygons on the board}} + ha:buffer {tip={paste the current buffer on the board}} + ha:remove {tip={remove an object from the board}} + ha:rotate {tip={rotate an object on the board}} + ha:insert {tip={insert a point in a trace or polygon contour}} + ha:thermal {tip={change thermal connectivity of a pin or via}} + ha:arrow {tip={switch to arrow mode}} + ha:lock {tip={lock or unlock objects on the board}} + } + + li:main_menu { + + ha:File { + li:submenu { + ha:Start New Layout = { li:a={{f;n}; {Ctrln};}; action=New() } + ha:Revert = { a={f;r}; action=Load(Revert,none); tip=Revert to the layout stored on disk } + - + ha:Load layout... = { li:a={{f;o};{f;l};} action=Load(Layout); tip=Load a layout from a file } + - + ha:Save Layout = { li:a={{f;s}; {Ctrls};}; action=Save(Layout); tip=Saves current layout } + ha:Save Layout As... = { li:a={{f;a}; {Shift Ctrls};}; action=Save(LayoutAs); tip=Saves current layout into a new file } + - + ha:Import { + li:submenu { + ha:Import schematics... = { action=ImportSch() } + ha:Configure import schematics... = { action=ImportSch(dialog) } + @import_top + ha:Import AnyLoad (or lht config) = { action=AnyLoad() } + - + ha:Load subcircuit data to paste-buffer = { li:action={PasteBuffer(Clear); Load(ElementTobuffer)} } + ha:Load layout data to paste-buffer = { li:action={PasteBuffer(Clear); Load(LayoutTobuffer)} } + ha:Load pixmap to paste-buffer gfx = { li:action={PasteBuffer(Clear); LoadPixmap(); Tool(buffer);} } + @import_geo + - + @import_sch + ha:Load netlist file = { action=Load(Netlist) } + } + } + - + ha:Save connection data of { + li:submenu { + ha:a single element = { li:action={ Save(ElementConnections) } } + ha:all elements = { action=Save(AllConnections) } + ha:unused pins = { action=Save(AllUnusedPins) } + ha:netlist patch for back annotation = {li:a={{f;x;p}; {a;b;x};}; action=SavePatch() } + } + } + ha:Print layout... = { a={f;p}; action=Print()} + ha:Export layout... = { a={f;e}; action=ExportGUI()} + ha:Export with CAM job...={ a={f;c}; action=cam()} + ha:Reports { + li:submenu { + ha:Generate object report = { a={i;r}; action=ReportObject() } + ha:Generate drill summary = { a={i;d}; action=Report(DrillReport) } + ha:Report found padstacks = { a={i;f}; action=Report(FoundPins) } + } + } + - + ha:Preferences... = { a={i;c;p}; action=preferences} + ha:Maintenance { + li:submenu { + ha:Re-scan the footprint library = { a={i;c;r}; action=fp_rehash() } + ha:Data integrity check = { a={i;c;i}; action=Integrity() } + - + ha:Edit current font = { action=FontEdit() } + ha:Edit on-disk font = { action={ LoadFontFrom("", 126); conf(set, design/text_font_id, 126, design); FontEdit() } } + ha:Save font from font editor = { action=FontSave() } + - + ha:Undo dialog (for debugging) = { a={u;d;}; action=UndoDialog() } + } + } + - + ha:Quit Program = { li:a={{f;q}; {Ctrlq};}; action=Quit() } + } + } # File + + ha:Edit { + li:submenu { + ha:Undo last operation = { li:a={{u; u}; {Ctrlz};}; action=Undo() } + ha:Redo last undone operation = { li:a={{u; r}; {Ctrly};}; action=Redo() } + ha:Clear undo-buffer = { a={u; c}; action=Undo(ClearList) } + - + ha:Cut selection to buffer = { li:a={{e; x}; a=Ctrlx;}; li:action={ GetXY(Click to set the snap point for this buffer); PasteBuffer(Clear); PasteBuffer(MoveSelected); Tool(buffer) } } + ha:Copy selection to buffer = { li:a={{e; c}; {Ctrlc;};}; li:action={ GetXY(Click to set the snap point for this buffer); PasteBuffer(Clear); PasteBuffer(AddSelected); Unselect(All); Tool(buffer) } } + ha:Paste buffer to layout = { li:a={{e; v}; a=Ctrlv;}; action=Tool(buffer) } + - + ha:Remove object = { li:a={{e;d};{Delete};}; li:action={Tool(Save); Tool(remove); Tool(Press); Tool(Restore)} } + ha:Change object { + li:submenu { + ha:Set Same Style = { a={e; s; s}; action=SetSame() } + ha:Apply Pen to object = { a={e; a; p}; action=ApplyPen() } + ha:Flip Object = { a={e; i}; action=Flip(Object) } + ha:Move to current layer = { a={e; l}; action=MoveToCurrentLayer(Object) } + ha:ChangeJoin Object = { a={e; j}; action=ChangeJoin(Object) } + ha:Convert to extended object... = { a={e; s; x}; action=ExtobjConvFrom(Object, @gui) } + ha:Geometry { + li:submenu { + ha:Clearance +2 mil = { a={e; g; c}; action=ChangeClearSize(Object,+2,mil) } + ha:Clearance -2 mil = { a={e; g; Shiftc}; action=ChangeClearSize(Object,-2,mil) } + ha:ChangeSizes to Route style = { a={e; g; y}; action=ChangeSizes(Object,style,mil) } + ha:ChangeSize +5 mil = { a={e; g; s}; action=ChangeSize(Object,+5,mil) } + ha:ChangeSize -5 mil = { a={e; g; Shifts}; action=ChangeSize(Object,-5,mil) } + ha:ChangeDrill +5 mil = { a={e; g; d}; action=ChangeDrillSize(Object,+5,mil) } + ha:ChangeDrill -5 mil = { a={e; g; Shiftd}; action=ChangeDrillSize(Object,-5,mil) } + - + ha:Edit padstack geometry/prototype = {a={e; g; g}; action=padstackedit } + } + } + } + } # Change object + ha:Add/place object { + li:submenu { + ha:Place mark = { li:a={{a;m}; {a;w}; }; action=MarkCrosshair() } + ha:Place via = { a={a;v}; li:action={Tool(Save); Tool(via); Tool(Press); Tool(Restore);} } + ha:Start routing a line = { a={a;l}; li:action={Tool(Save); Tool(line); Tool(Press); } } + ha:Start routing an arc = { a={a;a}; li:action={Tool(Save); Tool(arc); Tool(Press); } } + } + } + - + ha:Edit properties of { + li:submenu { + ha:Layout = { action=Propedit(board) } + ha:Current Layer = { action={Propedit(layer)} } + ha:Current Layer Group = { action={Propedit(layergrp)} } + } + } + ha:Route Styles { + li:submenu { + @routestyles + - + ha:Edit... = { action=AdjustStyle() } + } + } + ha:Board padstack prototypes... = { action=pstklib() } + - + ha:Subcircuit { + li:submenu { + ha:Layer bindings... = { a={e; s; b}; action=LayerBinding() } + ha:External editor... = { a={e; s; e}; li:action={ GetXY(Click on the subcircuit to edit); extedit(object) } } + ha:Refdes = { a={e; s; r}; action=ChangeName(Subc) } + } + } + ha:Object flags... = { a={e; f}; action=FlagEdit() } + ha:Object Properties... = { a={e; p}; action=PropEdit(selection) } + } + } # Edit + + ha:View { + li:submenu { + ha:Grid { + li:submenu { + ha:Enable visible grid = { a={g; v}; checked=editor/draw_grid; action=conf(toggle, editor/draw_grid, design) } + ha:Enable local grid = { a={g; l}; checked=plugins/hid_gtk/local_grid/enable; action=conf(toggle, plugins/hid_gtk/local_grid/enable, design) } + ha:Grid units { + li:submenu { + ha:mil = { a={g; i}; checked=ChkGridUnits(mil); action=SetUnits(mil); update_on={editor/grid_unit} } + ha:mm = { a={g; m}; checked=ChkGridUnits(mm); action=SetUnits(mm); update_on={editor/grid_unit} } + } + } + ha:Grid size = { + li:submenu { + ha:No Grid = { checked=ChkGridSize(none); action=SetGrid(1); update_on={editor/grid} } + - + @grid + - + ha:Previous grid = { li:a={{g; b};{[};}; action=Grid(down) } + ha:Next grid = { li:a={{g; f};{]};}; action=Grid(up) } + ha:Custom grid = { li:a={{g; c};}; action=Grid(ask) } + - + ha:Grid *2 = { a={g; d}; action=SetGrid(*2) } + ha:Grid /2 = { a={g; h}; action=SetGrid(/2) } + ha:Grid -5mil = { action=SetGrid(-5,mil) } + ha:Grid +5mil = { action=SetGrid(+5,mil) } + ha:Grid -0.05mm = { action=SetGrid(-0.05,mm) } + ha:Grid +0.05mm = { action=SetGrid(+0.05,mm) } + } + } + ha:Grid properties = { + li:submenu { + ha:Enable local grid = { checked=plugins/hid_gtk/local_grid/enable; action=conf(toggle, plugins/hid_gtk/local_grid/enable, design) } + - + ha:local grid radius 4 = { checked={conf(iseq, plugins/hid_gtk/local_grid/radius, 4)}; li:action={conf(set, plugins/hid_gtk/local_grid/radius, 4, design); conf(set, plugins/hid_gtk/local_grid/enable, 1, design) } update_on={} } + ha:local grid radius 8 = { checked={conf(iseq, plugins/hid_gtk/local_grid/radius, 8)}; li:action={conf(set, plugins/hid_gtk/local_grid/radius, 8, design); conf(set, plugins/hid_gtk/local_grid/enable, 1, design) } update_on={} } + ha:local grid radius 16 = { checked={conf(iseq, plugins/hid_gtk/local_grid/radius, 16)}; li:action={conf(set, plugins/hid_gtk/local_grid/radius, 16, design); conf(set, plugins/hid_gtk/local_grid/enable, 1, design) } update_on={} } + ha:local grid radius 32 = { checked={conf(iseq, plugins/hid_gtk/local_grid/radius, 32)}; li:action={conf(set, plugins/hid_gtk/local_grid/radius, 32, design); conf(set, plugins/hid_gtk/local_grid/enable, 1, design) } update_on={} } + - + ha:sparse global grid = { checked=plugins/hid_gtk/global_grid/sparse; action=conf(toggle, plugins/hid_gtk/global_grid/sparse, design) } + ha:global grid density 4 = { checked={conf(iseq, plugins/hid_gtk/global_grid/min_dist_px, 4)}; li:action={conf(set, plugins/hid_gtk/global_grid/min_dist_px, 4, design); conf(set, plugins/hid_gtk/local_grid/enable, 0, design) } update_on={} } + ha:global grid density 8 = { checked={conf(iseq, plugins/hid_gtk/global_grid/min_dist_px, 8)}; li:action={conf(set, plugins/hid_gtk/global_grid/min_dist_px, 8, design); conf(set, plugins/hid_gtk/local_grid/enable, 0, design) } update_on={} } + ha:global grid density 16 = { checked={conf(iseq, plugins/hid_gtk/global_grid/min_dist_px, 16)}; li:action={conf(set, plugins/hid_gtk/global_grid/min_dist_px, 16, design); conf(set, plugins/hid_gtk/local_grid/enable, 0, design) } update_on={} } + } + } + ha:Realign grid = { a={g; r}; action={ Display(ToggleGrid) } } + } + } + - + ha:Displayed subcircuit ID { + li:submenu { + ha:refdes = { a={v; s; r}; checked=ChkSubcID(%a.refdes%); action=Display(SubcID, "%a.refdes%"); update_on={editor/subc_id} } + ha:footprint = { a={v; s; f}; checked=ChkSubcID(%a.footprint%); action=Display(SubcID,"%a.footprint%"); update_on={editor/subc_id} } + ha:value = { a={v; s; v}; checked=ChkSubcID(%a.value%); action=Display(SubcID,"%a.value%"); update_on={editor/subc_id} } + ha:refdes+value = { a={v; s; s}; checked=ChkSubcID(%a.refdes%\\n%a.value%); action=Display(SubcID,"%a.refdes%\\\\n%a.value%"); update_on={editor/subc_id} } + ha:user configured = { a={v; s; c}; action=Display(SubcID); } + } + } + ha:Displayed terminal ID { + li:submenu { + ha:term = { a={v; t; t}; checked=ChkTermID(%a.term%); action=Display(TermID, "%a.term%"); update_on={editor/term_id} } + ha:name = { a={v; t; n}; checked=ChkTermID(%a.name%); action=Display(TermID, "%a.name%"); update_on={editor/term_id} } + ha:term+name = { a={v; t; s}; checked=ChkTermID("%a.term%,%a.name%"); action=Display(TermID, "%a.term%,%a.name%"); update_on={editor/term_id} } + ha:user configured = { a={v; t; c}; action=Display(TermID); } + } + } + ha:Zoom and side { + li:submenu { + ha:Zoom In 20% = { li:a={{z;z;}; {+};} action=Zoom(-1.2) } + ha:Zoom Out 20% = { li:a={{z;x;}; {-};} action=Zoom(+1.2) } + ha:Zoom In 2X = { action=Zoom(-2) } + ha:Zoom Out 2X = { action=Zoom(+2) } + ha:Zoom to 0.1mil/px = { action={Zoom(=0.1mil)} } + ha:Zoom to 0.01mm/px = { action={Zoom(=0.01mm)} } + ha:Zoom to 1mil/px = { action={Zoom(=1mil)} } + ha:Zoom to 0.05mm/px = { action={Zoom(=0.05mm)} } + ha:Zoom to 2.5mil/px = { action={Zoom(=2.5mil)} } + ha:Zoom to 0.1mm/px = { action={Zoom(=0.1mm)} } + ha:Zoom to 10mil/px = { action={Zoom(=10mil)} } + ha:Zoom In 20% and center = { li:action={Zoom(-1.2); Center()} } + ha:Zoom Out 20% and center= { li:action={Zoom(+1.2); Center()} } + - + ha:Zoom Extents = { li:a={{z;e;}; {v;f};}; action=Zoom() } + ha:Zoom to selection = { a={z;s;}; action=ZoomTo(selected) } + ha:Zoom to found = { a={z;f;}; action=ZoomTo(found) } + - + ha:Flip up/down = { checked=editor/view/flip_y; a=Tab; action=SwapSides(V) } + ha:Flip left/right = { checked=editor/view/flip_x; a=ShiftTab; action=SwapSides(H) } + ha:Spin 180 degrees = { a=CtrlTab; action=SwapSides(R) } + ha:Swap Sides = { a=Ctrl ShiftTab; action=SwapSides() } + - + ha:Center cursor = { a={v; c} action=Center() } + } + } + ha:Layers { + li:submenu { + ha:Shown Layers { + li:submenu { + @layerview + - + ha:Edit Layer Groups = { action=Preferences("layers") } + } + } + ha:Current Layer { + li:submenu { + anon2=@layerpick + - + ha:Delete current layer = { action=MoveLayer(c,-1) } + ha:Add new layer = { action=MoveLayer(-1,c) } + ha:Move current layer up = { action=MoveLayer(c,step-) } + ha:Move current layer down= { action=MoveLayer(c,step+) } + } + } + } + } + ha:Show padstack numbers in a subc = { a={v; n} action=Display(PinOrPadName) } + ha:Full screen = { checked=editor/fullscreen; a=\\; action=fullscreen(toggle) } + ha:Reset { + li:submenu { + ha:Reset View = { a={v; r; v}; sy:action={/scripts/view_reset}; tip={Reset all visibility related states to make sure all objects are visible} } + ha:Reset GUI = { a={v; r; g}; sy:action={/scripts/gui_reset}; tip={Reset all GUI related states } } + } + } + } + } # View + + ha:Mode = { + li:submenu { + ha:Routing { + li:submenu { + ha:'All-direction' lines = { li:a={{m; l; a}; {.};}; checked=editor/all_direction_lines; action=conf(toggle, editor/all_direction_lines, design); update_on={editor/all_direction_lines} } + ha:Cycle line clip/refraction = { li:a={{m; l; f}; {/};}; action=Display(CycleClip) } + ha:Auto swap line start angle = { checked=editor/swap_start_direction; action=conf(toggle, editor/swap_start_direction, design) } + ha:Auto enforce style clearance = { a={m; l; d}; checked=editor/auto_drc; action=conf(toggle, editor/auto_drc, design) } + ha:Automatic trace merging = { a={m; l; m}; checked=editor/trace_auto_merge; action=conf(toggle, editor/trace_auto_merge, design) } + - + ha:Rubber band mode = { a={m; r; r}; checked=editor/rubber_band_mode; action=conf(toggle, editor/rubber_band_mode, design) } + ha:Rubber band keeps middle line dir= { a={m; r; m}; checked=editor/rubber_band_keep_midlinedir; action=conf(toggle, editor/rubber_band_keep_midlinedir, design) } + - + ha:Route radius +0.5 = { li:a={{r; r; +}; {r; r; p};}; action=conf(delta, editor/route_radius, +0.5, design); } + ha:Route radius -0.5 = { li:a={{r; r; -}; {r; r; m};}; action=conf(delta, editor/route_radius, -0.5, design); } + - + ha:New lines, arcs clear polygons = { a={m; l; c}; checked=editor/clear_line; action=conf(toggle, editor/clear_line, design) } + ha:New polygons are full ones = { a={m; p; f}; checked=editor/full_poly; action=conf(toggle, editor/full_poly, design) } + ha:New polygons clear polygons = { a={m; p; c}; checked=editor/clear_polypoly; action=conf(toggle, editor/clear_polypoly, design) } + ha:Polygon clip inhibit (toggle) = { a={m; p; i}; checked=ClipInhibit(check); action=ClipInhibit(toggle); update_on={temp/clip_inhibit_chg} } + } + } + ha:Cursor/snap { + li:submenu { + ha:Orthogonal moves = { a={m; c; o}; checked=editor/orthogonal_moves; action=conf(toggle, editor/orthogonal_moves, design) } + ha:Crosshair snaps to padstacks = { a={m; c; p}; checked=editor/snap_pin; action=conf(toggle, editor/snap_pin, design) } + ha:Crosshair snaps to off-grid points on lines = { a={m; c; s};checked=editor/snap_offgrid_line; action=conf(toggle, editor/snap_offgrid_line, design) } + ha:Crosshair shows style/object clearance = { a={m; c; c}; checked=editor/show_drc; action=conf(toggle, editor/show_drc, design) } + } + } + ha:Drawing { + li:submenu { + @indications + ha:Show autorouter trials = { a={m; d; a}; checked=editor/live_routing; action=conf(toggle, editor/live_routing, design) } + ha:Highlighting on line, arc points = { a={m; d; h}; checked=editor/highlight_on_point; action=conf(toggle, editor/highlight_on_point, design) } + ha:Wireframe draw = { li:a={{m; d; w}; {|};}; checked=editor/wireframe_draw; action=conf(toggle, editor/wireframe_draw, design) } + ha:Thin draw = { a={m; d; t}; checked=editor/thin_draw; action=conf(toggle, editor/thin_draw, design) } + ha:Thin draw poly = { a={m; d; p}; checked=editor/thin_draw_poly; action=conf(toggle, editor/thin_draw_poly, design); update_on={editor/thin_draw_poly} } + ha:poly as-drawn frame annotation = { a={m; d; d}; checked=editor/as_drawn_poly; action=conf(toggle, editor/as_drawn_poly, design); update_on={editor/as_drawn_poly} } + ha:Check polygons = { a={m; d; c}; checked=editor/check_planes; action=conf(toggle, editor/check_planes, design) } + ha:Object list popup = { a={m; d; o}; checked=editor/click_objlist; action=conf(toggle, editor/click_objlist, design); tip={If there are multiple objects under the cursor when executing an action, present a popup dialog to select which object to operate on} } + - + ha:Lock floaters = { a={m; f; l}; checked=editor/lock_names; action=conf(toggle, editor/lock_names, design) } + ha:Only floaters = { a={m; f; o}; checked=editor/only_names; action=conf(toggle, editor/only_names, design) } + ha:Hide floaters = { a={m; f; h}; checked=editor/hide_names; action=conf(toggle, editor/hide_names, design) } + - + ha:Line Tool size +5 mil = { a={m; l; +}; action=SetValue(LineSize,+5,mil) } + ha:Line Tool size -5 mil = { a={m; l; -}; action=SetValue(LineSize,-5,mil) } + ha:Text Tool scale +10 mil = { a={m; t; +}; action=SetValue(TextScale,+10,mil) } + ha:Text Tool scale -10 mil = { a={m; t; -}; action=SetValue(TextScale,-10,mil) } + - + ha:Render color override { + li:submenu { + ha:Invisible-color on other groups = { a={m; o; i}; checked=appearance/invis_other_groups; action=conf(toggle, appearance/invis_other_groups, design) } + ha:black current group = { a={m; o; b}; checked=appearance/black_current_group; action=conf(toggle, appearance/black_current_group, design) } + } + } + - + ha:Reset = { a={m; d; r}; sy:action={/scripts/mode_reset}; tip={Reset all the above drawing modes to make sure objects are visible} } + } + } + ha:Mincut on shorts = { checked=plugins/mincut/enable; action=conf(toggle, plugins/mincut/enable, design) } + ha:Auto-zero delta measurements = { checked=editor/local_ref; action=conf(toggle, editor/local_ref, design) } + ha:Brave mode = { action=brave() } + ha:Loose subcircuits (no subc lock) = { a={m; k; s}; checked=subc(loose, check); action=subc(loose, toggle); update_on={} } + ha:Tool { + li:submenu { + ha:Via = { checked=ChkMode(via); li:a={{t;v};{F1};}; action=Tool(via); update_on={editor/mode} } + ha:Line = { checked=ChkMode(line); li:a={{t;l};{F2};}; action=Tool(line); update_on={editor/mode} } + ha:Arc = { checked=ChkMode(arc); li:a={{t;a};{F3};}; action=Tool(arc); update_on={editor/mode} } + ha:Text = { checked=ChkMode(text); li:a={{t;t};{F4};}; action=Tool(text); update_on={editor/mode} } + ha:Rectangle = { checked=ChkMode(rectangle); li:a={{t;r};{F5};}; action=Tool(rectangle); update_on={editor/mode} } + ha:Polygon = { checked=ChkMode(poly); li:a={{t;p};{F6};}; action=Tool(poly); update_on={editor/mode} } + ha:Polygon Hole = { checked=ChkMode(polyhole); a={t;h}; action=Tool(polyhole); update_on={editor/mode} } + ha:Buffer = { checked=ChkMode(buffer); li:a={{t;b};{F7};}; action=Tool(buffer); update_on={editor/mode} } + ha:Del/Remove = { checked=ChkMode(remove); li:a={{t;d};{F8};}; action=Tool(remove); update_on={editor/mode} } + ha:Rotate = { checked=ChkMode(rotate); li:a={{t;o};{F9};}; action=Tool(rotate); update_on={editor/mode} } + ha:Thermal = { checked=ChkMode(thermal); li:a={{t;e};{F10};}; action=Tool(thermal); update_on={editor/mode} } + ha:Arrow = { checked=ChkMode(arrow); li:a={{t;n};{F11};{space};}; action=Tool(arrow); update_on={editor/mode} } + ha:Insert Point = { checked=ChkMode(insert); li:a={{t;i};{Insert};}; action=Tool(insert); update_on={editor/mode} } + ha:Move = { checked=ChkMode(move); a={t;m}; action=Tool(move); update_on={editor/mode} } + ha:Copy = { checked=ChkMode(copy); a={t;c}; action=Tool(copy); update_on={editor/mode} } + ha:Lock = { checked=ChkMode(lock); li:a={{t;k};{F12};}; action=Tool(lock); update_on={editor/mode} } + ha:Cancel = { a={Escape}; action=Tool(Escape) } + } + } # Tool + } + } #Mode + + ha:Select { + li:submenu { + ha:Select all visible objects = { a={s; a; a;}; action=Select(All) } + ha:Select all found objects = { a={s; a; c;}; action=Select(Connection); tip={Select all objects that have the 'found' flag set} } + ha:Unselect all objects = { a={s; u; a;}; action=Unselect(All) } + ha:Unselect all found objects = { a={s; u; c;}; action=Unselect(Connection); tip={Unselect all objects that have the 'found' flag set} } + ha:Invert selection = { a={s; i; }; action=Select(Invert) } + - + ha:Advanced search and select = { a={s; s;} action=SearchDialog() } + ha:List locked objects = { a={s; k;} action={query(view, "@.p.flag.lock == 1 && isvoid(@.subc)")} } + - + ha:Move selected subcircuits to other side= { a={s; f;} action=Flip(SelectedElements) } + ha:Move selected objects to current layer = { a={s; l;} action=MoveToCurrentLayer(Selected) } + ha:Remove selected objects = { a={s; r;} action=RemoveSelected() } + ha:Convert selection to subcircuit = { a={s; c; s;} action=Select(ConvertSubc) } + ha:Convert selection to padstack = { a={s; c; p;} li:action={PadstackConvert(selected); Tool(buffer);} } + ha:Convert selection to extended object...= { a={s; c; e;} action=ExtobjConvFrom(Selected, @gui); } + ha:Break selection subcircuits to pieces = { a={s; b; s}; li:action={PasteBuffer(Push); PasteBuffer(5); PasteBuffer(Clear); PasteBuffer(AddSelected); RemoveSelected(); PasteBuffer(Restore); PasteBuffer(ToLayout, crosshair); PasteBuffer(Clear); PasteBuffer(Pop);} } + ha:Break selection padstack to pieces = { a={s; b; p}; action=PadstackBreakup(selected) } + ha:Change selected objects { + li:submenu { + ha:Lines -10 mil = { li:action={ChangeSize(SelectedLines,-10,mil); ChangeSize(SelectedArcs,-10,mil)} } + ha:Lines +10 mil = { li:action={ChangeSize(SelectedLines,+10,mil); ChangeSize(SelectedArcs,+10,mil)} } + ha:Texts -10 mil = { action=ChangeSize(SelectedTexts,-10,mil) } + ha:Texts +10 mil = { action=ChangeSize(SelectedTexts,+10,mil) } + - + ha:Clearance +2 mil = { action=ChangeClearSize(SelectedObjects,+2,mil) } + ha:Clearance -2 mil = { action=ChangeClearSize(SelectedObjects,-2,mil) } + - + ha:Hole -10 mil = { action=ChangeDrillSize(SelectedPadstacks,-10,mil) } + ha:Hole +10 mil = { action=ChangeDrillSize(SelectedPadstacks,+10,mil) } + - + ha:Toggle join = { action=ChangeJoin(SelectedObjects) } + - + ha:Apply Pen = { a={s; a; p}; action=ApplyPen(selected) } + - + ha:Edit properties = { a={s; p}; action=propedit(selection) } + } + } + } + } # Select + + ha:Buffer { + li:submenu { + ha:Rotate buffer 90 deg CCW (left) = { li:a={{b;r;l}; {ShiftF7};}; li:action={Tool(buffer); PasteBuffer(Rotate,1)} } + ha:Rotate buffer 90 deg CW (right) = { a={b;r;r}; li:action={Tool(buffer); PasteBuffer(Rotate,3)} } + ha:Arbitrarily Rotate Buffer = { a={b;r;a}; li:action={Tool(buffer); FreeRotateBuffer()} } + ha:Mirror buffer (up/down) = { a={b;m;u}; li:action={Tool(buffer); PasteBuffer(Mirror)} } + ha:Mirror buffer (left/right) = { a={b;m;l}; li:action={Tool(buffer); PasteBuffer(Rotate,1); PasteBuffer(Mirror); PasteBuffer(Rotate,3)} } + ha:Scale = { action=ScaleBuffer(); } + ha:Normalize = { a={b;n}; li:action={Tool(buffer); PasteBuffer(Rotate,1); PasteBuffer(Normalize);} } + - + ha:Clear buffer = { a={b;c;c;}; action=PasteBuffer(Clear) } + ha:Save buffer content to file = { a={b;f;s;}; action=PasteBuffer(SaveAll) } + ha:Load buffer content from file = { a={b;f;l;}; li:action={PasteBuffer(Clear); PasteBuffer(LoadAll)} } + - + ha:Convert buffer to subcircuit = { a={b;c;s}; action=PasteBuffer(ConvertSubc) } + ha:Convert buffer to padstack = { a={b;c;p}; li:action={PadstackConvert(buffer); Tool(buffer);} } + ha:Convert buffer to extended object... = { a={b;c;e}; li:action={ExtobjConvFrom(buffer, @gui); Tool(buffer);} } + ha:Break buffer subcircuits to pieces = { a={b;s;b}; action=PasteBuffer(Restore) } + ha:Break buffer padstacks to pieces = { a={b;s;p}; action=PadstackBreakup(buffer) } + ha:Save buffer subcircuit to file = { a={b;s;s}; action=Save(PasteBuffer); tip={save one subcircuits from the buffer as a footprint file} } + ha:Save buffer subcircuits as lib... { + li:submenu { + ha:in a single lib file = { a={b;s;l;f}; action=SaveLib(file, buffer); tip={save all subcircuits from the buffer as a footprint lib in a library file} } + ha:in multiple footprint files = { a={b;s;l;d}; action=SaveLib(dir, buffer); tip={save all subcircuits from the buffer in individual, numbered files} } + } + } + - + ha:Layer bindings... = { a={b;b;}; action=LayerBinding(buffer) } + ha:Buffer selection { + li:submenu { + ha:Select Buffer \#1 = { checked=ChkBuffer(1); a={b;1;} action=PasteBuffer(1); update_on={editor/buffer_number} } + ha:Select Buffer \#2 = { checked=ChkBuffer(2); a={b;2;} action=PasteBuffer(2); update_on={editor/buffer_number} } + ha:Select Buffer \#3 = { checked=ChkBuffer(3); a={b;3;} action=PasteBuffer(3); update_on={editor/buffer_number} } + ha:Select Buffer \#4 = { checked=ChkBuffer(4); a={b;4;} action=PasteBuffer(4); update_on={editor/buffer_number} } + ha:Select scratchpad = { checked=ChkBuffer(5); a={b;5;} action=PasteBuffer(5); update_on={editor/buffer_number} } + } + } + } + } # Buffer + + ha:Connects = { + li:submenu { + ha:Rats nest { + li:submenu { + ha:Optimize rats nest = { a={c;r;}; li:action={Atomic(Save); DeleteRats(AllRats); Atomic(Restore); AddRats(AllRats); Atomic(Close)} } + ha:Optimize rats nest - autorouter = { a={c;Shiftr;}; li:action={Atomic(Save); DeleteRats(AllRats); Atomic(Restore); AddRats(AllRats, manhattan); Atomic(Close)} } + ha:Erase rats nest = { a={c;e;}; action=DeleteRats(AllRats) } + - + ha:Select shortest rat = { a={c;s;}; action=AddRats(Close) } + ha:AddRats to selected pins = { li:action={Atomic(Save); DeleteRats(AllRats); Atomic(Restore); AddRats(SelectedRats); Atomic(Close)} } + ha:AddRats Selected = { action=AddRats(SelectedRats) } + ha:Add All Rats = { action=AddRats(AllRats) } + } + } + ha:Network lengths { + li:submenu { + ha:Visual length, from object = { a={n;l;o;}; action=NetLength(object) } + ha:Visual length, clear = { a={n;l;k;}; action=NetLength(clear) } + ha:Netlist dialog, refresh lengths = { a={n;l;l;}; li:action={NetlistDialog(); NetlistDialog(RefreshNetLens);}} + } + } + - + ha:Find Connections = { a={c;f;}; li:action={Connection(Reset); Connection(Find)} } + ha:Clear/reset lookup = { a={c;c;}; li:action={Connection(Reset); Display(Redraw)} } + - + ha:Del/Remove Connected = { a={c;d;}; li:action={Atomic(Save); Connection(Reset); Atomic(Restore); Unselect(All); Atomic(Restore); Connection(Find); Atomic(Restore); Select(Connection); Atomic(Restore); RemoveSelected(); Atomic(Restore); Connection(Reset); Atomic(Restore); Unselect(All); Atomic(Block)} } + - + ha:Subcircuit Placement { + li:submenu { + ha:Auto-place selected subcircuits = { a={a;p;s;}; action=AutoPlaceSelected() } + ha:Disperse all subcircuits = { a={a;d;a;}; action=DisperseElements(All) } + ha:Disperse selected subcircuits = { a={a;d;s;}; action=DisperseElements(Selected) } + } + } + ha:Automatic Routing { + li:submenu { + ha:Auto-route selected rats = { a={a;r;s;}; action=AutoRoute(SelectedRats) } + ha:Auto-route all rats = { a={a;r;a;}; action=AutoRoute(AllRats) } + @autoroute + ha:Rip up selected auto-routed tracks = { a={a;r;t;}; action=RipUp(Selected) } + ha:Rip up all auto-routed tracks = { a={a;r;r;}; action=RipUp(All) } + } + } + ha:Optimize routed tracks { + li:submenu { + } + } + - + ha:Design Rule Checker = { a={a;x;}; action=DRC() } + - + ha:Design changes (back annotation) { + li:submenu { + ha:Swap nets on two selected pins = { a={a;b;s;}; action=net(swap) } + ha:Replace footprint = { a={a;b;f;}; action=ReplaceFootprint() } + - + ha:claim net by object = { a={n;c;o;}; action=ClaimNet(object) } + ha:claim net on found = { a={n;c;f;}; action=ClaimNet(found) } + ha:claim net on selected = { a={n;c;s;}; action=ClaimNet(selected) } + } + } + } + } # Connects + + ha:Plugins { + li:submenu { + ha:feature plugins = { + # submenu dedicated for feature plugins to register their menu items + li:submenu { + @feature_plugins + } + } + ha:script = { + # submenu dedicated for user scripts to register their menu items + li:submenu { + @scripts + } + } + ha:Manage plugins... = { a={p;m;p;}; action=ManagePlugins() } + ha:Manage scripts... = { a={p;m;s;}; action=BrowseScripts() } + } + } # Plugins + + ha:Window { + li:submenu { + ha:Library = { a={w;l}; action=LibraryDialog() } + ha:Message Log = { a={w;m}; action=LogDialog() } + ha:DRC Check = { a={w;d}; action=DRC() } + ha:Netlist = { a={w;n}; action=NetlistDialog() } + ha:Command Entry = { li:a={a={w;c}; {:};} action=Command() } + ha:Pinout = { a={w;p}; action=Display(Pinout) } + ha:Font selector = { a={w;f}; action=FontSel() } + - + ha:Key Bindings { + li:submenu { + ha:Cycle object being dragged = { li:a={{,};{e;y;};}; action=CycleDrag() } + + + ha:Step Cursor { + li:submenu { + ha:Step Up = { li:a={{Up};{k;k};}; action=Cursor(Warp,0,-1,grid) } + ha:Step Down = { li:a={{Down};{k;j};}; action=Cursor(Warp,0,1,grid) } + ha:Step Left = { li:a={{Left};{k;h};}; action=Cursor(Warp,-1,0,grid) } + ha:Step Right = { li:a={{Right};{k;l};}; action=Cursor(Warp,1,0,grid) } + ha:Step +Up = { a=ShiftUp; action=Cursor(Pan,0,-50,view) } + ha:Step +Down = { a=ShiftDown; action=Cursor(Pan,0,50,view) } + ha:Step +Left = { a=ShiftLeft; action=Cursor(Pan,-50,0,view) } + ha:Step +Right = { a=ShiftRight; action=Cursor(Pan,50,0,view) } + ha:Scroll Up = { li:a={{CtrlUp};{j;k};}; action=Scroll(up) } + ha:Scroll Down = { li:a={{CtrlDown};{j;j};}; action=Scroll(down) } + ha:Scroll Left = { li:a={{CtrlLeft};{j;h};}; action=Scroll(left) } + ha:Scroll Right = { li:a={{CtrlRight};{j;l};}; action=Scroll(right) } + ha:Click (left) = { li:a={{Enter};{k;space};}; li:action={Tool(Press); Tool(Release)} } + ha:Click (right) = { a={k;r}; li:action={Tool(Release); Popup(popup-obj, obj-type)} } + } + } + ha:attribute layer keys { + li:submenu { + anon3=@layerkeys + } + } + ha:generic layer keys { + li:submenu { + ha:Select previous layer = { a={l; k}; action=LayerByStack(Select, Prev); } + ha:Select next layer = { a={l; l}; action=LayerByStack(Select, Next); } + - + ha:Select Layer 1 = { a=1; action=SelectLayer(1) } + ha:Select Layer 2 = { a=2; action=SelectLayer(2) } + ha:Select Layer 3 = { a=3; action=SelectLayer(3) } + ha:Select Layer 4 = { a=4; action=SelectLayer(4) } + ha:Select Layer 5 = { a=5; action=SelectLayer(5) } + ha:Select Layer 6 = { a=6; action=SelectLayer(6) } + ha:Select Layer 7 = { a=7; action=SelectLayer(7) } + ha:Select Layer 8 = { a=8; action=SelectLayer(8) } + ha:Select Layer 9 = { a=9; action=SelectLayer(9) } + ha:Select Layer 10 = { a=0; action=SelectLayer(10) } + ha:Select Layer 11 = { a=Alt1; action=SelectLayer(11) } + ha:Select Layer 12 = { a=Alt2; action=SelectLayer(12) } + ha:Select Layer 13 = { a=Alt3; action=SelectLayer(13) } + ha:Select Layer 14 = { a=Alt4; action=SelectLayer(14) } + ha:Select Layer 15 = { a=Alt5; action=SelectLayer(15) } + ha:Select Layer 16 = { a=Alt6; action=SelectLayer(16) } + ha:Select Layer 17 = { a=Alt7; action=SelectLayer(17) } + ha:Select Layer 18 = { a=Alt8; action=SelectLayer(18) } + ha:Select Layer 19 = { a=Alt9; action=SelectLayer(19) } + ha:Select Layer 20 = { a=Alt0; action=SelectLayer(20) } + - + ha:Toggle Layer 1 = { a=Ctrl1; action=ToggleView(1) } + ha:Toggle Layer 2 = { a=Ctrl2; action=ToggleView(2) } + ha:Toggle Layer 3 = { a=Ctrl3; action=ToggleView(3) } + ha:Toggle Layer 4 = { a=Ctrl4; action=ToggleView(4) } + ha:Toggle Layer 5 = { a=Ctrl5; action=ToggleView(5) } + ha:Toggle Layer 6 = { a=Ctrl6; action=ToggleView(6) } + ha:Toggle Layer 7 = { a=Ctrl7; action=ToggleView(7) } + ha:Toggle Layer 8 = { a=Ctrl8; action=ToggleView(8) } + ha:Toggle Layer 9 = { a=Ctrl9; action=ToggleView(9) } + ha:Toggle Layer 10 = { a=Ctrl0; action=ToggleView(10) } + ha:Toggle Layer 11 = { a=Ctrl-Alt1; action=ToggleView(11) } + ha:Toggle Layer 12 = { a=Ctrl-Alt2; action=ToggleView(12) } + ha:Toggle Layer 13 = { a=Ctrl-Alt3; action=ToggleView(13) } + ha:Toggle Layer 14 = { a=Ctrl-Alt4; action=ToggleView(14) } + ha:Toggle Layer 15 = { a=Ctrl-Alt5; action=ToggleView(15) } + ha:Toggle Layer 16 = { a=Ctrl-Alt6; action=ToggleView(16) } + ha:Toggle Layer 17 = { a=Ctrl-Alt7; action=ToggleView(17) } + ha:Toggle Layer 18 = { a=Ctrl-Alt8; action=ToggleView(18) } + ha:Toggle Layer 19 = { a=Ctrl-Alt9; action=ToggleView(19) } + ha:Toggle Layer 20 = { a=Ctrl-Alt0; action=ToggleView(20) } + } + } # layer keys + + ha:polygon drawing { + li:submenu { + ha:Polygon PreviousPoint = { a={p; p; p}; action=Polygon(PreviousPoint) } + ha:Polygon Close = { a={p; p; c}; action=Polygon(Close) } + } + } + } + } + ha:About... = { li:a={{w;a}; {i;a};}; action=About() } + } + } # Window + } # main menu + + li:popups { +# context sensitive right click: popup per object type under the cursor + + ha:popup-obj-line { + li:submenu { + ha:Edit properties { action=propedit(object) } + ha:Edit flags... { action=FlagEdit() } + ha:Set Same Style { action=SetSame() } + ha:Convert to extended object... = { action=ExtobjConvFrom(Object, @gui) } + - + ha:Remove line { li:action={Tool(Save); Tool(remove); Tool(Press); Tool(Restore)} } + ha:Copy to buffer { li:action={Unselect(All); Select(object); PasteBuffer(Clear); PasteBuffer(AddSelected); Unselect(All); Tool(buffer) } } + ha:Move to current layer { action=MoveToCurrentLayer(object) } + } + } + + ha:popup-obj-arc { + li:submenu { + ha:Edit properties { action=propedit(object) } + ha:Edit flags... { action=FlagEdit() } + ha:Set Same Style { action=SetSame() } + ha:Convert to extended object... = { action=ExtobjConvFrom(Object, @gui) } + - + ha:Remove arc { li:action={Tool(Save); Tool(remove); Tool(Press); Tool(Restore)} } + ha:Copy to buffer { li:action={Unselect(All); Select(object); PasteBuffer(Clear); PasteBuffer(AddSelected); Unselect(All); Tool(buffer) } } + ha:Move to current layer { action=MoveToCurrentLayer(object) } + } + } + + ha:popup-obj-polygon { + li:submenu { + ha:Edit properties { action=propedit(object) } + ha:Edit flags... { action=FlagEdit() } + ha:Convert to extended object... = { action=ExtobjConvFrom(Object, @gui) } + - + ha:Remove polygon { li:action={Tool(Save); Tool(remove); Tool(Press); Tool(Restore)} } + ha:Copy to buffer { li:action={Unselect(All); Select(object); PasteBuffer(Clear); PasteBuffer(AddSelected); Unselect(All); Tool(buffer) } } + ha:Move to current layer { action=MoveToCurrentLayer(object) } + } + } + + ha:popup-obj-text { + li:submenu { + ha:Edit properties { action=propedit(object) } + ha:Edit flags... { action=FlagEdit() } + ha:Edit text... { li:a={{e;t};}; action=ChangeName(Object) } + ha:Set Same Style { action=SetSame() } + ha:Convert to extended object... = { action=ExtobjConvFrom(Object, @gui) } + ha:Change font... { li:a={{e;o};} action=FontSel(Object) } + ha:Toggle tight clearance { action=PropToggle(object, a/tight_clearance, true); } + - + ha:Remove text { li:action={Tool(Save); Tool(remove); Tool(Press); Tool(Restore)} } + ha:Copy to buffer { li:action={Unselect(All); Select(object); PasteBuffer(Clear); PasteBuffer(AddSelected); Unselect(All); Tool(buffer) } } + ha:Move to current layer { action=MoveToCurrentLayer(object) } + } + } + + ha:popup-obj-padstack { + li:submenu { + ha:Edit properties { action=propedit(object) } + ha:Edit geometry/prototype {action=padstackedit } + ha:Edit flags... { action=FlagEdit() } + ha:Set Same Style { action=SetSame() } + - + ha:Remove padstack { li:action={Tool(Save); Tool(remove); Tool(Press); Tool(Restore)} } + ha:Break up padstack { action=PadstackBreakup(object) } + ha:Copy to buffer { li:action={Unselect(All); Select(object); PasteBuffer(Clear); PasteBuffer(AddSelected); Unselect(All); Tool(buffer) } } + } + } + + ha:popup-obj-padstack-in-subc { + li:submenu { + ha:Edit properties { action=propedit(object) } + ha:Edit geometry/prototype {action=padstackedit } + ha:Set Same Style { action=SetSame() } + } + } + + ha:popup-obj-subcircuit { + li:submenu { + ha:Edit properties { action=propedit(object) } + ha:External editor... { action=extedit(object) } + ha:Edit flags... { action=FlagEdit() } + ha:Edit layer bindings... { action=LayerBinding() } + ha:Change refdes { li:a={{e;r};}; action=ChangeName(Refdes) } + ha:Edit padstack prototypes... = { action=pstklib(object) } + ha:Convert back to extended object { action=ExtobjToggle(object) } + +#TODO: replace from lib + - + ha:Remove subcircuit { li:action={Tool(Save); Tool(remove); Tool(Press); Tool(Restore)} } + ha:Copy to buffer { li:action={Unselect(All); Select(object); PasteBuffer(Clear); PasteBuffer(AddSelected); Unselect(All); Tool(buffer) } } + ha:Move to other side { action=Flip(object) } + } + } + + ha:popup-obj-extobj-subcircuit { + li:submenu { + ha:Edit extobj properties (generic) { action=propedit(subc) } + ha:Edit extobj properties (specific) { action=ExtobjGUIPropEdit(object) } + ha:Edit extobj layer bindings... { action=LayerBinding() } + ha:Edit extobjpadstack prototypes... { action=pstklib(object) } + ha:Convert to plain subcircuit { action=ExtobjToggle(object) } + } + } + + ha:popup-obj-gfx { + li:submenu { + ha:Edit properties { action=propedit(object) } + ha:Edit flags... { action=FlagEdit() } + - + {ha:Render level: under} { action=propset(object, "a/render_level", "under") } + {ha:Render level: above} { action=propset(object, "a/render_level", "above") } + {ha:Set transparent pixel...} { action=GfxMod(transparent) } + {ha:Resize to measured...} { action=GfxMod(resize) } + - + ha:Remove gfx { li:action={Tool(Save); Tool(remove); Tool(Press); Tool(Restore)} } + ha:Copy to buffer { li:action={Unselect(All); Select(object); PasteBuffer(Clear); PasteBuffer(AddSelected); Unselect(All); Tool(buffer) } } + ha:Move to current layer { action=MoveToCurrentLayer(object) } + } + } + + + ha:popup-obj-misc { + li:submenu { + ha:Operations on selections { + li:submenu { + ha:Unselect all objects = { action=Unselect(All) } + ha:Remove selected objects = { action=RemoveSelected() } + ha:Copy selection to buffer = { li:action={GetXY(Click to set the snap point for this buffer); PasteBuffer(Clear); PasteBuffer(AddSelected); Tool(buffer)} } + ha:Cut selection to buffer = { li:action={GetXY(Click to set the snap point for this buffer); PasteBuffer(Clear); PasteBuffer(AddSelected); RemoveSelected(); Tool(buffer)} } + ha:Convert selection to subcircuit = { action=Select(ConvertSubc) } + ha:Convert selection to extended object... = { action=ExtobjConvFrom(selected, @gui) } + ha:Auto place selected subcircuits = { action=AutoPlaceSelected() } + ha:Autoroute selected subcircuits = { action=AutoRoute(SelectedRats) } + ha:Rip up selected auto-routed tracks = { action=RipUp(Selected) } + ha:Rotate selected = { action={GetXY(Click to set the snap point for this buffer); PasteBuffer(Clear); PasteBuffer(AddSelected); RemoveSelected(); Tool(buffer) FreeRotateBuffer(); Tool(buffer); PasteBuffer(Tolayout, crosshair); } } + } + } + ha:Operations on this location { + li:submenu { + ha:Generate object report = { li:action={GetXY(Click on the object); Report(Object)} } + } + } + - + ha:Undo last operation = { action=Undo() } + ha:Redo last undone operation = { action=Redo() } + } + } # popup-obj-misc + + ha:layer { + li:submenu { + ha:Layer name and flags... = { action=EditLayer() } + ha:Layer properties... = { action=Propedit(layer) } + ha:Grouping... (layer preferences) = { action=Preferences("layers") } + ha:Hotkey { + li:submenu { + ha:Selection... = { action=LayerHotkey("¤t", select) } + ha:Visibility... = { action=LayerHotkey("¤t", vis) } + } + } + ha:transformations { + li:submenu { + ha:Toggle wireframe = { action={LayerXform(¤t, toggle, wireframe)} } + ha:Toggle thindraw = { action={LayerXform(¤t, toggle, thindraw)} } + } + } + - + ha:Move up (within group) = { action=MoveLayer(c, step-) } + ha:Move down (within group) = { action=MoveLayer(c, step+) } + - + ha:Remove layer = { action=MoveLayer(c, -1) } + ha:Insert new, before this layer = { action={ MoveLayer(-1, c); EditLayer() } } + ha:Insert new, after this layer = { action={ Undo(FreezeSerial); MoveLayer(-1, c); MoveLayer(c, step+); Undo(UnFreezeSerial); Undo(IncSerial); EditLayer() } } + - + ha:all layers on = { a={l;v;}; action=ToggleView(all, vis, set) } + ha:all layers off = { a={l;h;}; action=ToggleView(all, vis, clear) } + } + } # layer + + ha:group { + li:submenu { + ha:Group name & type... = { action=EditGroup(@) } + ha:Group properties... = { action={Propedit(layergrp:editgroup)} } + ha:Grouping... (layer preferences) = { action=Preferences("layers") } + - + ha:Duplicate group = { action={ DupGroup(@) } } + ha:Create new group { + li:submenu { + ha:Boundary (board outline) { + li:submenu { + ha:Boundary, unplated, routed = { action={ NewGroup(boundary, global, uroute) } } + ha:Boundary, plated, routed = { action={ NewGroup(boundary, global, proute) } } + ha:Boundary, unplated, cut = { action={ NewGroup(boundary, global, ucut) } } + ha:Boundary, unplated, vcut = { action={ NewGroup(boundary, global, uvcut) } } + } + } + ha:Slots, cutouts, adhesive, finish { + li:submenu { + ha:Slot, unplated, routed = { action={ NewGroup(mech, global, uroute, auto) } } + ha:Slot, plated, routed = { action={ NewGroup(mech, global, proute, auto) } } + ha:Adhesive, top side = { action={ NewGroup(mech, top, adhesive, -, top-adhesive) } } + ha:Adhesive, bottom side = { action={ NewGroup(mech, bot, adhesive, -, bot-adhesive) } } + ha:Gold finish, top side = { action={ NewGroup(mech, top, finish.gold, -, top-gold) } } + ha:Gold finish, bottom side = { action={ NewGroup(mech, bot, finish.gold, -, bot-gold) } } + ha:Carbon finish, top side = { action={ NewGroup(mech, top, finish.carbon, -, top-carbon) } } + ha:Carbon finish, bottom side = { action={ NewGroup(mech, bot, finish.carbon, -, bot-carbon) } } + } + } + ha:Keepouts { + li:submenu { + ha:Courtyard (comp. body), top = { action={ NewGroup(doc, top, ko.courtyard, -, top-courtyard, "init-invis=true") } } + ha:Courtyard (comp. body), bottom = { action={ NewGroup(doc, bottom, ko.courtyard, -, bot-courtyard, "init-invis=true") } } + ha:Copper, top side = { action={ NewGroup(doc, top, ko@top-copper, -, top-copper-ko, "init-invis=true") } } + ha:Copper, bottom side = { action={ NewGroup(doc, bottom, ko@bottom-copper, -, bot-copper-ko, "init-invis=true") } } + ha:Silk, top side = { action={ NewGroup(doc, top, ko@top-silk, -, top-silk-ko, "init-invis=true") } } + ha:Silk, bottom side = { action={ NewGroup(doc, bottom, ko@bottom-silk, -, bot-silk-ko, "init-invis=true") } } + ha:Mask, top side = { action={ NewGroup(doc, top, ko@top-mask, -, top-mask-ko, "init-invis=true") } } + ha:Mask, bottom side = { action={ NewGroup(doc, bottom, ko@bottom-mask, -, bot-mask-ko, "init-invis=true") } } + ha:Paste, top side = { action={ NewGroup(doc, top, ko@top-paste, -, top-paste-ko, "init-invis=true") } } + ha:Paste, bottom side = { action={ NewGroup(doc, bottom, ko@bottom-paste, -, bot-paste-ko, "init-invis=true") } } + } + } + ha:Fab & assy { + li:submenu { + ha:assy, top side = { action={ NewGroup(doc, top, assy, -, top-assy, "init-invis=true") } } + ha:assy, bottom side = { action={ NewGroup(doc, bottom, assy, -, bot-assy, "init-invis=true") } } + ha:fab, top side = { action={ NewGroup(doc, top, fab, auto, fab, "init-invis=true") } } + } + } + ha:Doc, misc { + li:submenu { + ha:Doc, top side = { action={ NewGroup(doc, top) } } + ha:Doc, bottom side = { action={ NewGroup(doc, bottom) } } + ha:Doc, global = { action={ NewGroup(doc, global) } } + ha:placement, top side = { action={ NewGroup(doc, top, placement, -, top-place, "init-invis=true") } } + ha:placement, bottom side = { action={ NewGroup(doc, bottom, placement, -, bot-place, "init-invis=true") } } + ha:placement, global = { action={ NewGroup(doc, global, placement, -, place, "init-invis=true") } } + } + } + ha:Physical (silk, mask, paste) { + li:submenu { + ha:Top paste = { action={ NewGroup(paste, top, "", auto, "top_paste", "", unique_first) } } + ha:Top silk = { action={ NewGroup(silk, top, "", auto, "top_silk", "", unique_first) } } + ha:Top mask = { action={ NewGroup(mask, top, "", auto, "top_mask", "", unique_first) } } + ha:Bottom mask = { action={ NewGroup(mask, bottom, "", auto, "bottom_mask", "", unique_last) } } + ha:Bottom silk = { action={ NewGroup(silk, bottom, "", auto, "bottom_silk", "", unique_last) } } + ha:Bottom paste = { action={ NewGroup(paste, bottom, "", auto, "bottom_paste", "", unique_last) } } + } + } + + } + } + ha:Remove group = { action={ DelGroup(@) } } + - + ha:Insert new layer = { action={ MoveLayer(-1, gi); EditLayer() } } + ha:Append new layer = { action={ MoveLayer(-1, ga); EditLayer() } } + - + ha:expand groups = { action=ToggleView(all, open, set) } + ha:collapse groups = { action=ToggleView(all, open, clear) } + ha:all layers on = { action=ToggleView(all, vis, set) } + ha:all layers off = { action=ToggleView(all, vis, clear) } + } + } # group + + } # popups + + ha:scripts { + + # set all visibility related conf nodes (view/mode/drawing in the menu) + # to safe defaults that makes sure everything is visible + mode_reset { + conf(set, editor/live_routing, 0, design); + conf(set, editor/wireframe_draw, 0, design); + conf(set, editor/wireframe_draw, 0, design); + conf(set, editor/thin_draw, 0, design); + conf(set, editor/thin_draw_poly, 0, design); + conf(set, editor/as_drawn_poly, 0, design); + conf(set, editor/check_planes, 0, design); + conf(set, editor/lock_names, 0, design); + conf(set, editor/only_names, 0, design); + conf(set, editor/hide_names, 0, design); + conf(set, appearance/invis_other_groups, 0, design); + conf(set, appearance/black_current_group, 0, design); + } + + # set all visibility related states to safe defaults that makes sure + # everything is visible + li:view_reset { + sy:mdr = {/scripts/mode_reset} + LayerVisReset(); + zoom(); + } + + # set all GUI states to safe defaults to get the UI to a known state + li:gui_reset { + sy:vr = {/scripts/view_reset} + fullscreen(off); + conf(set, editor/draw_grid, 1, design); + conf(set, plugins/hid_gtk/local_grid/enable, 0, design); + Display(SubcID, "%a.refdes%"); + Display(TermID, "%a.term%"); + conf(set, editor/all_direction_lines, 0, design); + conf(set, editor/auto_drc, 0, design); + conf(set, editor/rubber_band_mode, 0, design); + conf(set, editor/orthogonal_moves, 0, design); + conf(set, editor/snap_pin, 1, design); + conf(set, editor/snap_offgrid_line, 1, design); + conf(set, editor/show_drc, 0, design); + conf(set, editor/highlight_on_point, 0, design); + subc(loose, off); + Tool(arrow); + } + } +} # root Index: trunk/util/menu2svg.sh =================================================================== --- trunk/util/menu2svg.sh (revision 34890) +++ trunk/util/menu2svg.sh (revision 34891) @@ -21,7 +21,7 @@ fn="$1" if test -z $fn then - fn="../src/pcb-menu-gtk.lht" + fn="../src/menu-default.lht" fi lhtflat < $fn | tee LHT | awk -F "[\t]" '