/* * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2013-2016 CERN * Copyright (C) 2016-2022 KiCad Developers, see AUTHORS.txt for contributors. * @author Maciej Suminski * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, you may find one here: * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * or you may search the http://www.gnu.org website for the version 2 license, * or you may write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include "pcb_actions.h" #include "tool/tool_action.h" #include "tool/tool_event.h" #include #include #include #include #include #include #include #include // Forward declarations for types needed in the parameters class PCB_BITMAP; // Actions, being statically-defined, require specialized I18N handling. We continue to // use the _() macro so that string harvesting by the I18N framework doesn't have to be // specialized, but we don't translate on initialization and instead do it in the getters. #undef _ #define _(s) s // CONVERT_TOOL // TOOL_ACTION PCB_ACTIONS::convertToPoly( "pcbnew.Convert.convertToPoly", AS_GLOBAL, 0, "", _( "Create Polygon from Selection..." ), _( "Creates a graphic polygon from the selection" ), BITMAPS::add_graphical_polygon ); TOOL_ACTION PCB_ACTIONS::convertToZone( "pcbnew.Convert.convertToZone", AS_GLOBAL, 0, "", _( "Create Zone from Selection..." ), _( "Creates a copper zone from the selection" ), BITMAPS::add_zone ); TOOL_ACTION PCB_ACTIONS::convertToKeepout( "pcbnew.Convert.convertToKeepout", AS_GLOBAL, 0, "", _( "Create Rule Area from Selection..." ), _( "Creates a rule area from the selection" ), BITMAPS::add_keepout_area ); TOOL_ACTION PCB_ACTIONS::convertToLines( "pcbnew.Convert.convertToLines", AS_GLOBAL, 0, "", _( "Create Lines from Selection" ), _( "Creates graphic lines from the selection" ), BITMAPS::add_line ); TOOL_ACTION PCB_ACTIONS::convertToArc( "pcbnew.Convert.convertToArc", AS_GLOBAL, 0, "", _( "Create Arc from Selection" ), _( "Creates an arc from the selected line segment" ), BITMAPS::add_arc ); TOOL_ACTION PCB_ACTIONS::convertToTracks( "pcbnew.Convert.convertToTracks", AS_GLOBAL, 0, "", _( "Create Tracks from Selection" ), _( "Creates tracks from the selected graphic lines" ), BITMAPS::add_tracks ); // DRAWING_TOOL // TOOL_ACTION PCB_ACTIONS::drawLine( "pcbnew.InteractiveDrawing.line", AS_GLOBAL, MD_SHIFT + MD_CTRL + 'L', LEGACY_HK_NAME( "Draw Line" ), _( "Draw Line" ), _( "Draw a line" ), BITMAPS::add_graphical_segments, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::drawPolygon( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveDrawing.graphicPolygon" ) .Scope( AS_GLOBAL ) .DefaultHotkey( MD_SHIFT + MD_CTRL + 'P' ) .LegacyHotkeyName( "Draw Graphic Polygon" ) .MenuText( _( "Draw Graphic Polygon" ) ) .Tooltip( _( "Draw a graphic polygon" ) ) .Icon( BITMAPS::add_graphical_polygon ) .Flags( AF_ACTIVATE ) .Parameter( ZONE_MODE::GRAPHIC_POLYGON ) ); TOOL_ACTION PCB_ACTIONS::drawRectangle( "pcbnew.InteractiveDrawing.rectangle", AS_GLOBAL, 0, "", _( "Draw Rectangle" ), _( "Draw a rectangle" ), BITMAPS::add_rectangle, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::drawCircle( "pcbnew.InteractiveDrawing.circle", AS_GLOBAL, MD_SHIFT + MD_CTRL + 'C', LEGACY_HK_NAME( "Draw Circle" ), _( "Draw Circle" ), _( "Draw a circle" ), BITMAPS::add_circle, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::drawArc( "pcbnew.InteractiveDrawing.arc", AS_GLOBAL, MD_SHIFT + MD_CTRL + 'A', LEGACY_HK_NAME( "Draw Arc" ), _( "Draw Arc" ), _( "Draw an arc" ), BITMAPS::add_arc, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::placeCharacteristics( "pcbnew.InteractiveDrawing.placeCharacteristics", AS_GLOBAL, 0, LEGACY_HK_NAME( "Add Board Characteristics" ), _( "Add Board Characteristics" ), _( "Add a board characteristics table on a graphic layer" ), BITMAPS::INVALID_BITMAP, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::placeStackup( "pcbnew.InteractiveDrawing.placeStackup", AS_GLOBAL, 0, LEGACY_HK_NAME( "Add Stackup Table" ), _( "Add Stackup Table" ), _( "Add a board stackup table on a graphic layer" ), BITMAPS::INVALID_BITMAP, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::placeImage( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveDrawing.placeImage" ) .Scope( AS_GLOBAL ) .MenuText( _( "Add Image" ) ) .Tooltip( _( "Add bitmap image" ) ) .Icon( BITMAPS::image ) .Flags( AF_ACTIVATE ) .Parameter( nullptr ) ); TOOL_ACTION PCB_ACTIONS::placeText( "pcbnew.InteractiveDrawing.text", AS_GLOBAL, MD_SHIFT + MD_CTRL + 'T', LEGACY_HK_NAME( "Add Text" ), _( "Add Text" ), _( "Add a text item" ), BITMAPS::text, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::drawTextBox( "pcbnew.InteractiveDrawing.textbox", AS_GLOBAL, 0, "", _( "Add Text Box" ), _( "Add a wrapped text item" ), BITMAPS::add_textbox, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::drawAlignedDimension( "pcbnew.InteractiveDrawing.alignedDimension", AS_GLOBAL, MD_SHIFT + MD_CTRL + 'H', LEGACY_HK_NAME( "Add Dimension" ), _( "Add Aligned Dimension" ), _( "Add an aligned linear dimension" ), BITMAPS::add_aligned_dimension, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::drawCenterDimension( "pcbnew.InteractiveDrawing.centerDimension", AS_GLOBAL, 0, "", _( "Add Center Dimension" ), _( "Add a center dimension" ), BITMAPS::add_center_dimension, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::drawRadialDimension( "pcbnew.InteractiveDrawing.radialDimension", AS_GLOBAL, 0, "", _( "Add Radial Dimension" ), _( "Add a radial dimension" ), BITMAPS::add_radial_dimension, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::drawOrthogonalDimension( "pcbnew.InteractiveDrawing.orthogonalDimension", AS_GLOBAL, 0, "", _( "Add Orthogonal Dimension" ), _( "Add an orthogonal dimension" ), BITMAPS::add_orthogonal_dimension, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::drawLeader( "pcbnew.InteractiveDrawing.leader", AS_GLOBAL, 0, "", _( "Add Leader" ), _( "Add a leader dimension" ), BITMAPS::add_leader, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::drawZone( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveDrawing.zone" ) .Scope( AS_GLOBAL ) #ifdef __WXOSX_MAC__ .DefaultHotkey( MD_ALT + 'Z' ) #else .DefaultHotkey( MD_SHIFT + MD_CTRL + 'Z' ) #endif .LegacyHotkeyName( "Add Filled Zone" ) .MenuText( _( "Add Filled Zone" ) ) .Tooltip( _( "Add a filled zone" ) ) .Icon( BITMAPS::add_zone ) .Flags( AF_ACTIVATE ) .Parameter( ZONE_MODE::ADD ) ); TOOL_ACTION PCB_ACTIONS::drawVia( "pcbnew.InteractiveDrawing.via", AS_GLOBAL, MD_SHIFT + MD_CTRL + 'V', LEGACY_HK_NAME( "Add Vias" ), _( "Add Vias" ), _( "Add free-standing vias" ), BITMAPS::add_via, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::drawRuleArea( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveDrawing.ruleArea" ) .Scope( AS_GLOBAL ) .DefaultHotkey( MD_SHIFT + MD_CTRL + 'K' ) .LegacyHotkeyName( "Add Keepout Area" ) .MenuText( _( "Add Rule Area" ) ) .Tooltip( _( "Add a rule area (keepout)" ) ) .Icon( BITMAPS::add_keepout_area ) .Flags( AF_ACTIVATE ) .Parameter( ZONE_MODE::ADD ) ); TOOL_ACTION PCB_ACTIONS::drawZoneCutout( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveDrawing.zoneCutout" ) .Scope( AS_GLOBAL ) .DefaultHotkey( MD_SHIFT + 'C' ) .LegacyHotkeyName( "Add a Zone Cutout" ) .MenuText( _( "Add a Zone Cutout" ) ) .Tooltip( _( "Add a cutout area of an existing zone" ) ) .Icon( BITMAPS::add_zone_cutout ) .Flags( AF_ACTIVATE ) .Parameter( ZONE_MODE::CUTOUT ) ); TOOL_ACTION PCB_ACTIONS::drawSimilarZone( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveDrawing.similarZone" ) .Scope( AS_GLOBAL ) .DefaultHotkey( MD_SHIFT + MD_CTRL + '.' ) .LegacyHotkeyName( "Add a Similar Zone" ) .MenuText( _( "Add a Similar Zone" ) ) .Tooltip( _( "Add a zone with the same settings as an existing zone" ) ) .Icon( BITMAPS::add_zone ) .Flags( AF_ACTIVATE ) .Parameter( ZONE_MODE::SIMILAR ) ); TOOL_ACTION PCB_ACTIONS::placeImportedGraphics( "pcbnew.InteractiveDrawing.placeImportedGraphics", AS_GLOBAL, MD_SHIFT + MD_CTRL + 'F', LEGACY_HK_NAME( "Place DXF" ), _( "Import Graphics..." ), _( "Import 2D drawing file" ), BITMAPS::import_vector, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::setAnchor( "pcbnew.InteractiveDrawing.setAnchor", AS_GLOBAL, MD_SHIFT + MD_CTRL + 'N', LEGACY_HK_NAME( "Place the Footprint Anchor" ), _( "Place the Footprint Anchor" ), _( "Set the coordinate origin point (anchor) of the footprint" ), BITMAPS::anchor, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::incWidth( "pcbnew.InteractiveDrawing.incWidth", AS_CONTEXT, MD_CTRL + '+', LEGACY_HK_NAME( "Increase Line Width" ), _( "Increase Line Width" ), _( "Increase the line width" ) ); TOOL_ACTION PCB_ACTIONS::decWidth( "pcbnew.InteractiveDrawing.decWidth", AS_CONTEXT, MD_CTRL + '-', LEGACY_HK_NAME( "Decrease Line Width" ), _( "Decrease Line Width" ), _( "Decrease the line width" ) ); TOOL_ACTION PCB_ACTIONS::arcPosture( "pcbnew.InteractiveDrawing.arcPosture", AS_CONTEXT, '/', LEGACY_HK_NAME( "Switch Track Posture" ), _( "Switch Arc Posture" ), _( "Switch the arc posture" ) ); TOOL_ACTION PCB_ACTIONS::deleteLastPoint( "pcbnew.InteractiveDrawing.deleteLastPoint", AS_CONTEXT, WXK_BACK, "", _( "Delete Last Point" ), _( "Delete the last point added to the current item" ), BITMAPS::undo ); TOOL_ACTION PCB_ACTIONS::closeOutline( "pcbnew.InteractiveDrawing.closeOutline", AS_CONTEXT, 0, "", _( "Close Outline" ), _( "Close the in progress outline" ), BITMAPS::checked_ok ); // DRC // TOOL_ACTION PCB_ACTIONS::runDRC( "pcbnew.DRCTool.runDRC", AS_GLOBAL, 0, "", _( "Design Rules Checker" ), _( "Show the design rules checker window" ), BITMAPS::erc ); // EDIT_TOOL // TOOL_ACTION PCB_ACTIONS::editFpInFpEditor( "pcbnew.EditorControl.EditFpInFpEditor", AS_GLOBAL, MD_CTRL + 'E', LEGACY_HK_NAME( "Edit with Footprint Editor" ), _( "Open in Footprint Editor" ), _( "Opens the selected footprint in the Footprint Editor" ), BITMAPS::module_editor ); TOOL_ACTION PCB_ACTIONS::editLibFpInFpEditor( "pcbnew.EditorControl.EditLibFpInFpEditor", AS_GLOBAL, MD_CTRL + MD_SHIFT + 'E', "", _( "Edit Library Footprint..." ), _( "Opens the selected footprint in the Footprint Editor" ), BITMAPS::module_editor ); TOOL_ACTION PCB_ACTIONS::getAndPlace( "pcbnew.InteractiveEdit.FindMove", AS_GLOBAL, 'T', LEGACY_HK_NAME( "Get and Move Footprint" ), _( "Get and Move Footprint" ), _( "Selects a footprint by reference designator and places it under the cursor for moving"), BITMAPS::move, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::move( "pcbnew.InteractiveMove.move", AS_GLOBAL, 'M', LEGACY_HK_NAME( "Move Item" ), _( "Move" ), _( "Moves the selected item(s)" ), BITMAPS::move, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::moveIndividually( "pcbnew.InteractiveMove.moveIndividually", AS_GLOBAL, MD_CTRL + 'M', "", _( "Move Individually" ), _( "Moves the selected items one-by-one" ), BITMAPS::move, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::moveWithReference( "pcbnew.InteractiveMove.moveWithReference", AS_GLOBAL, 0, "", _( "Move with Reference" ), _( "Moves the selected item(s) with a specified starting point" ), BITMAPS::move, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::copyWithReference( "pcbnew.InteractiveMove.copyWithReference", AS_GLOBAL, 0, "", _( "Copy with Reference" ), _( "Copy selected item(s) to clipboard with a specified starting point" ), BITMAPS::copy, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::duplicateIncrement( "pcbnew.InteractiveEdit.duplicateIncrementPads", AS_GLOBAL, MD_SHIFT + MD_CTRL + 'D', LEGACY_HK_NAME( "Duplicate Item and Increment" ), _( "Duplicate and Increment" ), _( "Duplicates the selected item(s), incrementing pad numbers" ), BITMAPS::duplicate ); TOOL_ACTION PCB_ACTIONS::moveExact( "pcbnew.InteractiveEdit.moveExact", AS_GLOBAL, MD_SHIFT + 'M', LEGACY_HK_NAME( "Move Item Exactly" ), _( "Move Exactly..." ), _( "Moves the selected item(s) by an exact amount" ), BITMAPS::move_exactly ); TOOL_ACTION PCB_ACTIONS::pointEditorMoveCorner( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveEdit.moveCorner" ) .Scope( AS_GLOBAL ) .MenuText( _( "Move Corner To..." ) ) .Tooltip( _( "Move the active corner to an exact location" ) ) .Icon( BITMAPS::move_exactly ) ); TOOL_ACTION PCB_ACTIONS::pointEditorMoveMidpoint( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveEdit.moveMidpoint" ) .Scope( AS_GLOBAL ) .MenuText( _( "Move Midpoint To..." ) ) .Tooltip( _( "Move the active midpoint to an exact location" ) ) .Icon( BITMAPS::move_exactly ) ); TOOL_ACTION PCB_ACTIONS::createArray( "pcbnew.InteractiveEdit.createArray", AS_GLOBAL, MD_CTRL + 'T', LEGACY_HK_NAME( "Create Array" ), _( "Create Array..." ), _( "Create array" ), BITMAPS::array, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::rotateCw( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveEdit.rotateCw" ) .Scope( AS_GLOBAL ) .DefaultHotkey( MD_SHIFT + 'R' ) // Don't be tempted to remove "Modern Toolset only". It's in the legacy property name. .LegacyHotkeyName( "Rotate Item Clockwise (Modern Toolset only)" ) .MenuText( _( "Rotate Clockwise" ) ) .Tooltip( _( "Rotates selected item(s) clockwise" ) ) .Icon( BITMAPS::rotate_cw ) .Flags( AF_NONE ) .Parameter( -1 ) ); TOOL_ACTION PCB_ACTIONS::rotateCcw( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveEdit.rotateCcw" ) .Scope( AS_GLOBAL ) .DefaultHotkey( 'R' ) .LegacyHotkeyName( "Rotate Item" ) .MenuText( _( "Rotate Counterclockwise" ) ) .Tooltip( _( "Rotates selected item(s) counterclockwise" ) ) .Icon( BITMAPS::rotate_ccw ) .Flags( AF_NONE ) .Parameter( 1 ) ); TOOL_ACTION PCB_ACTIONS::flip( "pcbnew.InteractiveEdit.flip", AS_GLOBAL, 'F', LEGACY_HK_NAME( "Flip Item" ), _( "Change Side / Flip" ), _( "Flips selected item(s) to opposite side of board" ), BITMAPS::swap_layer ); TOOL_ACTION PCB_ACTIONS::mirrorH( "pcbnew.InteractiveEdit.mirrorHoriontally", AS_GLOBAL, 0, "", _( "Mirror Horizontally" ), _( "Mirrors selected item across the Y axis" ), BITMAPS::mirror_h ); TOOL_ACTION PCB_ACTIONS::mirrorV( "pcbnew.InteractiveEdit.mirrorVertically", AS_GLOBAL, 0, "", _( "Mirror Vertically" ), _( "Mirrors selected item across the X axis" ), BITMAPS::mirror_v ); TOOL_ACTION PCB_ACTIONS::swap( "pcbnew.InteractiveEdit.swap", AS_GLOBAL, 'S', "", _( "Swap" ), _( "Swaps selected items' positions" ), BITMAPS::swap ); TOOL_ACTION PCB_ACTIONS::packAndMoveFootprints( "pcbnew.InteractiveEdit.packAndMoveFootprints", AS_GLOBAL, 'P', "", _( "Pack and Move Footprints" ), _( "Sorts selected footprints by reference, packs based on size and initiates movement" ), BITMAPS::pack_footprints ); TOOL_ACTION PCB_ACTIONS::skip( "pcbnew.InteractiveEdit.skip", AS_CONTEXT, WXK_TAB, "", _( "Skip" ), _( "Skip item" ), BITMAPS::right ); TOOL_ACTION PCB_ACTIONS::changeTrackWidth( "pcbnew.InteractiveEdit.changeTrackWidth", AS_GLOBAL, 0, "", _( "Change Track Width" ), _( "Updates selected track & via sizes" ) ); TOOL_ACTION PCB_ACTIONS::filletTracks( "pcbnew.InteractiveEdit.filletTracks", AS_GLOBAL, 0, "", _( "Fillet Tracks" ), _( "Adds arcs tangent to the selected straight track segments" ) ); TOOL_ACTION PCB_ACTIONS::filletLines( "pcbnew.InteractiveEdit.filletLines", AS_GLOBAL, 0, "", _( "Fillet Lines" ), _( "Adds arcs tangent to the selected lines" ), BITMAPS::fillet ); TOOL_ACTION PCB_ACTIONS::chamferLines( "pcbnew.InteractiveEdit.chamferLines", AS_GLOBAL, 0, "", _( "Chamfer Lines" ), _( "Cut away corners between selected lines" ), BITMAPS::chamfer ); TOOL_ACTION PCB_ACTIONS::extendLines( "pcbnew.InteractiveEdit.extendLines", AS_GLOBAL, 0, "", _( "Extend Lines to Meet" ), _( "Extend lines to meet each other" ) ); TOOL_ACTION PCB_ACTIONS::deleteFull( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveEdit.deleteFull" ) .Scope( AS_GLOBAL ) .DefaultHotkey( MD_SHIFT + WXK_DELETE ) .LegacyHotkeyName( "Delete Full Track" ) .MenuText( _( "Delete Full Track" ) ) .Tooltip( _( "Deletes selected item(s) and copper connections" ) ) .Icon( BITMAPS::delete_cursor ) .Flags( AF_NONE ) .Parameter( PCB_ACTIONS::REMOVE_FLAGS::ALT ) ); TOOL_ACTION PCB_ACTIONS::properties( "pcbnew.InteractiveEdit.properties", AS_GLOBAL, 'E', LEGACY_HK_NAME( "Edit Item" ), _( "Properties..." ), _( "Displays item properties dialog" ), BITMAPS::edit ); // FOOTPRINT_EDITOR_CONTROL // TOOL_ACTION PCB_ACTIONS::showFootprintTree( "pcbnew.ModuleEditor.showFootprintTree", AS_GLOBAL, 0, "", _( "Show Footprint Tree" ), _( "Show Footprint Tree" ), BITMAPS::search_tree ); TOOL_ACTION PCB_ACTIONS::hideFootprintTree( "pcbnew.ModuleEditor.hideFootprintTree", AS_GLOBAL, 0, "", _( "Hide Footprint Tree" ), _( "Hide Footprint Tree" ), BITMAPS::search_tree ); TOOL_ACTION PCB_ACTIONS::newFootprint( "pcbnew.ModuleEditor.newFootprint", AS_GLOBAL, MD_CTRL + 'N', LEGACY_HK_NAME( "New" ), _( "New Footprint..." ), _( "Create a new, empty footprint" ), BITMAPS::new_footprint ); TOOL_ACTION PCB_ACTIONS::createFootprint( "pcbnew.ModuleEditor.createFootprint", AS_GLOBAL, 0, "", _( "Create Footprint..." ), _( "Create a new footprint using the Footprint Wizard" ), BITMAPS::module_wizard ); TOOL_ACTION PCB_ACTIONS::editFootprint( "pcbnew.ModuleEditor.editFootprint", AS_GLOBAL, 0, "", _( "Edit Footprint" ), _( "Show selected footprint on editor canvas" ), BITMAPS::edit ); TOOL_ACTION PCB_ACTIONS::duplicateFootprint( "pcbnew.ModuleEditor.duplicateFootprint", AS_GLOBAL, 0, "", _( "Duplicate Footprint" ), _( "Make a copy of the selected footprint" ), BITMAPS::duplicate ); TOOL_ACTION PCB_ACTIONS::renameFootprint( "pcbnew.ModuleEditor.renameFootprint", AS_GLOBAL, 0, "", _( "Rename Footprint..." ), _( "Rename the selected footprint" ), BITMAPS::edit ); TOOL_ACTION PCB_ACTIONS::deleteFootprint( "pcbnew.ModuleEditor.deleteFootprint", AS_GLOBAL, 0, "", _( "Delete Footprint from Library" ), _( "Delete Footprint from Library" ), BITMAPS::trash ); TOOL_ACTION PCB_ACTIONS::cutFootprint( "pcbnew.ModuleEditor.cutFootprint", AS_GLOBAL, 0, "", _( "Cut Footprint" ), _( "Cut Footprint" ), BITMAPS::cut ); TOOL_ACTION PCB_ACTIONS::copyFootprint( "pcbnew.ModuleEditor.copyFootprint", AS_GLOBAL, 0, "", _( "Copy Footprint" ), _( "Copy Footprint" ), BITMAPS::copy ); TOOL_ACTION PCB_ACTIONS::pasteFootprint( "pcbnew.ModuleEditor.pasteFootprint", AS_GLOBAL, 0, "", _( "Paste Footprint" ), _( "Paste Footprint" ), BITMAPS::paste ); TOOL_ACTION PCB_ACTIONS::importFootprint( "pcbnew.ModuleEditor.importFootprint", AS_GLOBAL, 0, "", _( "Import Footprint..." ), _( "Import footprint from file" ), BITMAPS::import_module ); TOOL_ACTION PCB_ACTIONS::exportFootprint( "pcbnew.ModuleEditor.exportFootprint", AS_GLOBAL, 0, "", _( "Export Current Footprint..." ), _( "Export edited footprint to file" ), BITMAPS::export_module ); TOOL_ACTION PCB_ACTIONS::footprintProperties( "pcbnew.ModuleEditor.footprintProperties", AS_GLOBAL, 0, "", _( "Footprint Properties..." ), _( "Edit footprint properties" ), BITMAPS::module_options ); TOOL_ACTION PCB_ACTIONS::checkFootprint( "pcbnew.ModuleEditor.checkFootprint", AS_GLOBAL, 0, "", _( "Footprint Checker" ), _( "Show the footprint checker window" ), BITMAPS::erc ); // GLOBAL_EDIT_TOOL // TOOL_ACTION PCB_ACTIONS::updateFootprint( "pcbnew.GlobalEdit.updateFootprint", AS_GLOBAL, 0, "", _( "Update Footprint..." ), _( "Update footprint to include any changes from the library" ), BITMAPS::refresh ); TOOL_ACTION PCB_ACTIONS::updateFootprints( "pcbnew.GlobalEdit.updateFootprints", AS_GLOBAL, 0, "", _( "Update Footprints from Library..." ), _( "Update footprints to include any changes from the library" ), BITMAPS::refresh ); TOOL_ACTION PCB_ACTIONS::removeUnusedPads( "pcbnew.GlobalEdit.removeUnusedPads", AS_GLOBAL, 0, "", _( "Remove Unused Pads..." ), _( "Remove or restore the unconnected inner layers on through hole pads and vias" ), BITMAPS::pads_remove ); TOOL_ACTION PCB_ACTIONS::changeFootprint( "pcbnew.GlobalEdit.changeFootprint", AS_GLOBAL, 0, "", _( "Change Footprint..." ), _( "Assign a different footprint from the library" ), BITMAPS::exchange ); TOOL_ACTION PCB_ACTIONS::changeFootprints( "pcbnew.GlobalEdit.changeFootprints", AS_GLOBAL, 0, "", _( "Change Footprints..." ), _( "Assign different footprints from the library" ), BITMAPS::exchange ); TOOL_ACTION PCB_ACTIONS::swapLayers( "pcbnew.GlobalEdit.swapLayers", AS_GLOBAL, 0, "", _( "Swap Layers..." ), _( "Move tracks or drawings from one layer to another" ), BITMAPS::swap_layer ); TOOL_ACTION PCB_ACTIONS::editTracksAndVias( "pcbnew.GlobalEdit.editTracksAndVias", AS_GLOBAL, 0, "", _( "Edit Track & Via Properties..." ), _( "Edit track and via properties globally across board" ), BITMAPS::width_track_via ); TOOL_ACTION PCB_ACTIONS::editTextAndGraphics( "pcbnew.GlobalEdit.editTextAndGraphics", AS_GLOBAL, 0, "", _( "Edit Text & Graphics Properties..." ), _( "Edit Text and graphics properties globally across board" ), BITMAPS::text ); TOOL_ACTION PCB_ACTIONS::editTeardrops( "pcbnew.GlobalEdit.editTeardrops", AS_GLOBAL, 0, "", _( "Edit Teardrops..." ), _( "Add, remove or edit teardrops globally across board" ), BITMAPS::via ); TOOL_ACTION PCB_ACTIONS::globalDeletions( "pcbnew.GlobalEdit.globalDeletions", AS_GLOBAL, 0, "", _( "Global Deletions..." ), _( "Delete tracks, footprints and graphic items from board" ), BITMAPS::general_deletions ); TOOL_ACTION PCB_ACTIONS::cleanupTracksAndVias( "pcbnew.GlobalEdit.cleanupTracksAndVias", AS_GLOBAL, 0, "", _( "Cleanup Tracks & Vias..." ), _( "Cleanup redundant items, shorting items, etc." ), BITMAPS::delete_cursor ); TOOL_ACTION PCB_ACTIONS::cleanupGraphics( "pcbnew.GlobalEdit.cleanupGraphics", AS_GLOBAL, 0, "", _( "Cleanup Graphics..." ), _( "Cleanup redundant items, etc." ), BITMAPS::delete_cursor ); // MICROWAVE_TOOL // TOOL_ACTION PCB_ACTIONS::microwaveCreateGap( TOOL_ACTION_ARGS() .Name( "pcbnew.MicrowaveTool.createGap" ) .Scope( AS_GLOBAL ) .MenuText( _( "Add Microwave Gap" ) ) .Tooltip( _( "Create gap of specified length for microwave applications" ) ) .Icon( BITMAPS::mw_add_gap ) .Flags( AF_ACTIVATE ) .Parameter( MICROWAVE_FOOTPRINT_SHAPE::GAP ) ); TOOL_ACTION PCB_ACTIONS::microwaveCreateStub( TOOL_ACTION_ARGS() .Name( "pcbnew.MicrowaveTool.createStub" ) .Scope( AS_GLOBAL ) .MenuText( _( "Add Microwave Stub" ) ) .Tooltip( _( "Create stub of specified length for microwave applications" ) ) .Icon( BITMAPS::mw_add_stub ) .Flags( AF_ACTIVATE ) .Parameter( MICROWAVE_FOOTPRINT_SHAPE::STUB ) ); TOOL_ACTION PCB_ACTIONS::microwaveCreateStubArc( TOOL_ACTION_ARGS() .Name( "pcbnew.MicrowaveTool.createStubArc" ) .Scope( AS_GLOBAL ) .MenuText( _( "Add Microwave Arc Stub" ) ) .Tooltip( _( "Create stub (arc) of specified size for microwave applications" ) ) .Icon( BITMAPS::mw_add_stub_arc ) .Flags( AF_ACTIVATE ) .Parameter( MICROWAVE_FOOTPRINT_SHAPE::STUB_ARC ) ); TOOL_ACTION PCB_ACTIONS::microwaveCreateFunctionShape( TOOL_ACTION_ARGS() .Name( "pcbnew.MicrowaveTool.createFunctionShape" ) .Scope( AS_GLOBAL ) .MenuText( _( "Add Microwave Polygonal Shape" ) ) .Tooltip( _( "Create a microwave polygonal shape from a list of vertices" ) ) .Icon( BITMAPS::mw_add_shape ) .Flags( AF_ACTIVATE ) .Parameter( MICROWAVE_FOOTPRINT_SHAPE::FUNCTION_SHAPE ) ); TOOL_ACTION PCB_ACTIONS::microwaveCreateLine( "pcbnew.MicrowaveTool.createLine", AS_GLOBAL, 0, "", _( "Add Microwave Line" ), _( "Create line of specified length for microwave applications" ), BITMAPS::mw_add_line, AF_ACTIVATE ); // PAD_TOOL // TOOL_ACTION PCB_ACTIONS::copyPadSettings( "pcbnew.PadTool.CopyPadSettings", AS_GLOBAL, 0, "", _( "Copy Pad Properties to Default" ), _( "Copy current pad's properties" ), BITMAPS::copy_pad_settings ); TOOL_ACTION PCB_ACTIONS::applyPadSettings( "pcbnew.PadTool.ApplyPadSettings", AS_GLOBAL, 0, "", _( "Paste Default Pad Properties to Selected" ), _( "Replace the current pad's properties with those copied earlier" ), BITMAPS::apply_pad_settings ); TOOL_ACTION PCB_ACTIONS::pushPadSettings( "pcbnew.PadTool.PushPadSettings", AS_GLOBAL, 0, "", _( "Push Pad Properties to Other Pads..." ), _( "Copy the current pad's properties to other pads" ), BITMAPS::push_pad_settings ); TOOL_ACTION PCB_ACTIONS::enumeratePads( "pcbnew.PadTool.enumeratePads", AS_GLOBAL, 0, "", _( "Renumber Pads..." ), _( "Renumber pads by clicking on them in the desired order" ), BITMAPS::pad_enumerate, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::placePad( "pcbnew.PadTool.placePad", AS_GLOBAL, 0, "", _( "Add Pad" ), _( "Add a pad" ), BITMAPS::pad, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::explodePad( "pcbnew.PadTool.explodePad", AS_GLOBAL, MD_CTRL + 'E', "", _( "Edit Pad as Graphic Shapes" ), _( "Ungroups a custom-shaped pad for editing as individual graphic shapes" ), BITMAPS::custom_pad_to_primitives ); TOOL_ACTION PCB_ACTIONS::recombinePad( "pcbnew.PadTool.recombinePad", AS_GLOBAL, MD_CTRL + 'E', "", _( "Finish Pad Edit" ), _( "Regroups all touching graphic shapes into the edited pad" ), BITMAPS::custom_pad_to_primitives ); TOOL_ACTION PCB_ACTIONS::defaultPadProperties( "pcbnew.PadTool.defaultPadProperties", AS_GLOBAL, 0, "", _( "Default Pad Properties..." ), _( "Edit the pad properties used when creating new pads" ), BITMAPS::options_pad ); // SCRIPTING TOOL // TOOL_ACTION PCB_ACTIONS::pluginsReload( "pcbnew.ScriptingTool.pluginsReload", AS_GLOBAL, 0, "", _( "Refresh Plugins" ), _( "Reload all python plugins and refresh plugin menus" ), BITMAPS::reload ); TOOL_ACTION PCB_ACTIONS::pluginsShowFolder( "pcbnew.ScriptingTool.pluginsShowFolder", AS_GLOBAL, 0, "", #ifdef __WXMAC__ _( "Reveal Plugin Folder in Finder" ), _( "Reveals the plugins folder in a Finder window" ), #else _( "Open Plugin Directory" ), _( "Opens the directory in the default system file manager" ), #endif BITMAPS::directory_open ); // BOARD_EDITOR_CONTROL // TOOL_ACTION PCB_ACTIONS::boardSetup( "pcbnew.EditorControl.boardSetup", AS_GLOBAL, 0, "", _( "Board Setup..." ), _( "Edit board setup including layers, design rules and various defaults" ), BITMAPS::options_board ); TOOL_ACTION PCB_ACTIONS::importNetlist( "pcbnew.EditorControl.importNetlist", AS_GLOBAL, 0, "", _( "Import Netlist..." ), _( "Read netlist and update board connectivity" ), BITMAPS::netlist ); TOOL_ACTION PCB_ACTIONS::importSpecctraSession( "pcbnew.EditorControl.importSpecctraSession", AS_GLOBAL, 0, "", _( "Import Specctra Session..." ), _( "Import routed Specctra session (*.ses) file" ), BITMAPS::import ); TOOL_ACTION PCB_ACTIONS::exportSpecctraDSN( "pcbnew.EditorControl.exportSpecctraDSN", AS_GLOBAL, 0, "", _( "Export Specctra DSN..." ), _( "Export Specctra DSN routing info" ), BITMAPS::export_dsn ); TOOL_ACTION PCB_ACTIONS::generateGerbers( "pcbnew.EditorControl.generateGerbers", AS_GLOBAL, 0, "", _( "Gerbers (.gbr)..." ), _( "Generate Gerbers for fabrication" ), BITMAPS::post_gerber ); TOOL_ACTION PCB_ACTIONS::generateDrillFiles( "pcbnew.EditorControl.generateDrillFiles", AS_GLOBAL, 0, "", _( "Drill Files (.drl)..." ), _( "Generate Excellon drill file(s)" ), BITMAPS::post_drill ); TOOL_ACTION PCB_ACTIONS::generatePosFile( "pcbnew.EditorControl.generatePosFile", AS_GLOBAL, 0, "", _( "Component Placement (.pos)..." ), _( "Generate component placement file(s) for pick and place" ), BITMAPS::post_compo ); TOOL_ACTION PCB_ACTIONS::generateReportFile( "pcbnew.EditorControl.generateReportFile", AS_GLOBAL, 0, "", _( "Footprint Report (.rpt)..." ), _( "Create report of all footprints from current board" ), BITMAPS::post_rpt ); TOOL_ACTION PCB_ACTIONS::generateD356File( "pcbnew.EditorControl.generateD356File", AS_GLOBAL, 0, "", _( "IPC-D-356 Netlist File..." ), _( "Generate IPC-D-356 netlist file" ), BITMAPS::post_d356 ); TOOL_ACTION PCB_ACTIONS::generateBOM( "pcbnew.EditorControl.generateBOM", AS_GLOBAL, 0, "", _( "BOM..." ), _( "Create bill of materials from board" ), BITMAPS::post_bom ); // Track & via size control TOOL_ACTION PCB_ACTIONS::trackWidthInc( "pcbnew.EditorControl.trackWidthInc", AS_GLOBAL, 'W', LEGACY_HK_NAME( "Switch Track Width To Next" ), _( "Switch Track Width to Next" ), _( "Change track width to next pre-defined size" ) ); TOOL_ACTION PCB_ACTIONS::trackWidthDec( "pcbnew.EditorControl.trackWidthDec", AS_GLOBAL, MD_SHIFT + 'W', LEGACY_HK_NAME( "Switch Track Width To Previous" ), _( "Switch Track Width to Previous" ), _( "Change track width to previous pre-defined size" ) ); TOOL_ACTION PCB_ACTIONS::viaSizeInc( "pcbnew.EditorControl.viaSizeInc", AS_GLOBAL, '\'', LEGACY_HK_NAME( "Increase Via Size" ), _( "Increase Via Size" ), _( "Change via size to next pre-defined size" ) ); TOOL_ACTION PCB_ACTIONS::viaSizeDec( "pcbnew.EditorControl.viaSizeDec", AS_GLOBAL, '\\', LEGACY_HK_NAME( "Decrease Via Size" ), _( "Decrease Via Size" ), _( "Change via size to previous pre-defined size" ) ); TOOL_ACTION PCB_ACTIONS::trackViaSizeChanged( "pcbnew.EditorControl.trackViaSizeChanged", AS_GLOBAL, 0, "", "", "", BITMAPS::INVALID_BITMAP, AF_NOTIFY ); TOOL_ACTION PCB_ACTIONS::assignNetClass( "pcbnew.EditorControl.assignNetclass", AS_GLOBAL, 0, "", _( "Assign Netclass..." ), _( "Assign a netclass to nets matching a pattern" ), BITMAPS::netlist ); TOOL_ACTION PCB_ACTIONS::zoneMerge( "pcbnew.EditorControl.zoneMerge", AS_GLOBAL, 0, "", _( "Merge Zones" ), _( "Merge zones" ) ); TOOL_ACTION PCB_ACTIONS::zoneDuplicate( "pcbnew.EditorControl.zoneDuplicate", AS_GLOBAL, 0, "", _( "Duplicate Zone onto Layer..." ), _( "Duplicate zone outline onto a different layer" ), BITMAPS::zone_duplicate ); TOOL_ACTION PCB_ACTIONS::placeFootprint( TOOL_ACTION_ARGS() .Name( "pcbnew.EditorControl.placeFootprint" ) .Scope( AS_GLOBAL ) .DefaultHotkey( 'A' ) .LegacyHotkeyName( "Add Footprint" ) .MenuText( _( "Add Footprint" ) ) .Tooltip( _( "Add a footprint" ) ) .Icon( BITMAPS::module ) .Flags( AF_ACTIVATE ) .Parameter( nullptr ) ); TOOL_ACTION PCB_ACTIONS::drillOrigin( "pcbnew.EditorControl.drillOrigin", AS_GLOBAL, 0, "", _( "Drill/Place File Origin" ), _( "Place origin point for drill files and component placement files" ), BITMAPS::set_origin, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::toggleLock( "pcbnew.EditorControl.toggleLock", AS_GLOBAL, 'L', LEGACY_HK_NAME( "Lock/Unlock Footprint" ), _( "Toggle Lock" ), _( "Lock or unlock selected items" ), BITMAPS::lock_unlock ); TOOL_ACTION PCB_ACTIONS::toggleHV45Mode( "pcbnew.EditorControl.toggle45", AS_GLOBAL, MD_SHIFT + ' ', "", _( "Constrain to H, V, 45" ), _( "Limit actions to horizontal, vertical, or 45 degrees from the starting point" ), BITMAPS::hv45mode ); TOOL_ACTION PCB_ACTIONS::lock( "pcbnew.EditorControl.lock", AS_GLOBAL, 0, "", _( "Lock" ), _( "Prevent items from being moved and/or resized on the canvas" ), BITMAPS::locked ); TOOL_ACTION PCB_ACTIONS::unlock( "pcbnew.EditorControl.unlock", AS_GLOBAL, 0, "", _( "Unlock" ), _( "Allow items to be moved and/or resized on the canvas" ), BITMAPS::unlocked ); TOOL_ACTION PCB_ACTIONS::group( "pcbnew.EditorControl.group", AS_GLOBAL, 0, "", _( "Group" ), _( "Group the selected items so that they are treated as a single item" ), BITMAPS::group ); TOOL_ACTION PCB_ACTIONS::ungroup( "pcbnew.EditorControl.ungroup", AS_GLOBAL, 0, "", _( "Ungroup" ), _( "Ungroup any selected groups" ), BITMAPS::group_ungroup ); TOOL_ACTION PCB_ACTIONS::removeFromGroup( "pcbnew.EditorControl.removeFromGroup", AS_GLOBAL, 0, "", _( "Remove Items" ), _( "Remove items from group" ), BITMAPS::group_remove ); TOOL_ACTION PCB_ACTIONS::groupEnter( "pcbnew.EditorControl.groupEnter", AS_GLOBAL, 0, "", _( "Enter Group" ), _( "Enter the group to edit items" ), BITMAPS::group_enter ); TOOL_ACTION PCB_ACTIONS::groupLeave( "pcbnew.EditorControl.groupLeave", AS_GLOBAL, 0, "", _( "Leave Group" ), _( "Leave the current group" ), BITMAPS::group_leave ); TOOL_ACTION PCB_ACTIONS::appendBoard( "pcbnew.EditorControl.appendBoard", AS_GLOBAL, 0, "", _( "Append Board..." ), _( "Open another board and append its contents to this board" ), BITMAPS::add_board ); TOOL_ACTION PCB_ACTIONS::highlightNet( TOOL_ACTION_ARGS() .Name( "pcbnew.EditorControl.highlightNet" ) .Scope( AS_GLOBAL ) .DefaultHotkey( '`' ) // Don't be tempted to remove "Modern Toolset only". It's in the legacy property name. .LegacyHotkeyName( "Toggle Highlight of Selected Net (Modern Toolset only)" ) .MenuText( _( "Highlight Net" ) ) .Tooltip( _( "Highlight net under cursor" ) ) .Icon( BITMAPS::net_highlight ) .Parameter( 0 ) ); TOOL_ACTION PCB_ACTIONS::toggleLastNetHighlight( TOOL_ACTION_ARGS() .Name( "pcbnew.EditorControl.toggleLastNetHighlight" ) .Scope( AS_GLOBAL ) .MenuText( _( "Toggle Last Net Highlight" ) ) .Tooltip( _( "Toggle between last two highlighted nets" ) ) .Parameter( 0 ) ); TOOL_ACTION PCB_ACTIONS::clearHighlight( "pcbnew.EditorControl.clearHighlight", AS_GLOBAL, '~', "", _( "Clear Net Highlighting" ), _( "Clear any existing net highlighting" ) ); TOOL_ACTION PCB_ACTIONS::toggleNetHighlight( TOOL_ACTION_ARGS() .Name( "pcbnew.EditorControl.toggleNetHighlight" ) .Scope( AS_GLOBAL ) .DefaultHotkey( MD_ALT + '`' ) .MenuText( _( "Toggle Net Highlight" ) ) .Tooltip( _( "Toggle net highlighting" ) ) .Icon( BITMAPS::net_highlight ) .Parameter( 0 ) ); TOOL_ACTION PCB_ACTIONS::highlightNetSelection( TOOL_ACTION_ARGS() .Name( "pcbnew.EditorControl.highlightNetSelection" ) .Scope( AS_GLOBAL ) .MenuText( _( "Highlight Net" ) ) .Tooltip( _( "Highlight all copper items on the selected net(s)" ) ) .Icon( BITMAPS::net_highlight ) .Parameter( 0 ) ); TOOL_ACTION PCB_ACTIONS::highlightItem( "pcbnew.EditorControl.highlightItem", AS_GLOBAL ); TOOL_ACTION PCB_ACTIONS::hideNetInRatsnest( TOOL_ACTION_ARGS() .Name( "pcbnew.EditorControl.hideNet" ) .Scope( AS_GLOBAL ) .MenuText( _( "Hide Net in Ratsnest" ) ) .Tooltip( _( "Hide the selected net in the ratsnest of unconnected net lines/arcs" ) ) .Icon( BITMAPS::hide_ratsnest ) .Parameter( 0 ) ); // Default to hiding selected net TOOL_ACTION PCB_ACTIONS::showNetInRatsnest( TOOL_ACTION_ARGS() .Name( "pcbnew.EditorControl.showNet" ) .Scope( AS_GLOBAL ) .MenuText( _( "Show Net in Ratsnest" ) ) .Tooltip( _( "Show the selected net in the ratsnest of unconnected net lines/arcs" ) ) .Icon( BITMAPS::show_ratsnest ) .Parameter( 0 ) ); // Default to showing selected net TOOL_ACTION PCB_ACTIONS::showEeschema( "pcbnew.EditorControl.showEeschema", AS_GLOBAL, 0, "", _( "Switch to Schematic Editor" ), _( "Open in schematic editor" ), BITMAPS::icon_eeschema_24 ); // PCB_CONTROL // TOOL_ACTION PCB_ACTIONS::localRatsnestTool( "pcbnew.Control.localRatsnestTool", AS_GLOBAL, 0, "", _( "Local Ratsnest" ), _( "Toggle ratsnest display of selected item(s)" ), BITMAPS::tool_ratsnest, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::hideLocalRatsnest( "pcbnew.Control.hideDynamicRatsnest", AS_GLOBAL ); TOOL_ACTION PCB_ACTIONS::updateLocalRatsnest( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.updateLocalRatsnest" ) .Scope( AS_GLOBAL ) .Parameter( VECTOR2I() ) ); TOOL_ACTION PCB_ACTIONS::listNets( "pcbnew.Control.listNets", AS_GLOBAL, 0, "", _( "Net Inspector" ), _( "Show the net inspector" ), BITMAPS::list_nets ); TOOL_ACTION PCB_ACTIONS::showPythonConsole( "pcbnew.Control.showPythonConsole", AS_GLOBAL, 0, "", _( "Scripting Console" ), _( "Show the Python scripting console" ), BITMAPS::py_script ); TOOL_ACTION PCB_ACTIONS::showLayersManager( "pcbnew.Control.showLayersManager", AS_GLOBAL, 0, "", _( "Show Appearance Manager" ), _( "Show/hide the appearance manager" ), BITMAPS::layers_manager ); TOOL_ACTION PCB_ACTIONS::flipBoard( "pcbnew.Control.flipBoard", AS_GLOBAL, 0, "", _( "Flip Board View" ), _( "View board from the opposite side" ), BITMAPS::flip_board ); // Display modes TOOL_ACTION PCB_ACTIONS::showRatsnest( "pcbnew.Control.showRatsnest", AS_GLOBAL, 0, "", _( "Show Ratsnest" ), _( "Show board ratsnest" ), BITMAPS::general_ratsnest ); TOOL_ACTION PCB_ACTIONS::ratsnestLineMode( "pcbnew.Control.ratsnestLineMode", AS_GLOBAL, 0, "", _( "Curved Ratsnest Lines" ), _( "Show ratsnest with curved lines" ), BITMAPS::curved_ratsnest ); TOOL_ACTION PCB_ACTIONS::ratsnestModeCycle( "pcbnew.Control.ratsnestModeCycle", AS_GLOBAL, 0, "", _( "Ratsnest Mode (3-state)" ), _( "Cycle between showing ratsnests for all layers, just visible layers, and none" ) ); TOOL_ACTION PCB_ACTIONS::netColorModeCycle( "pcbnew.Control.netColorMode", AS_GLOBAL, 0, "", _( "Net Color Mode (3-state)" ), _( "Cycle between using net and netclass colors for all nets, just ratsnests, and none" ) ); TOOL_ACTION PCB_ACTIONS::trackDisplayMode( "pcbnew.Control.trackDisplayMode", AS_GLOBAL, 'K', LEGACY_HK_NAME( "Track Display Mode" ), _( "Sketch Tracks" ), _( "Show tracks in outline mode" ), BITMAPS::showtrack ); TOOL_ACTION PCB_ACTIONS::padDisplayMode( "pcbnew.Control.padDisplayMode", AS_GLOBAL, 0, "", _( "Sketch Pads" ), _( "Show pads in outline mode" ), BITMAPS::pad_sketch ); TOOL_ACTION PCB_ACTIONS::viaDisplayMode( "pcbnew.Control.viaDisplayMode", AS_GLOBAL, 0, "", _( "Sketch Vias" ), _( "Show vias in outline mode" ), BITMAPS::via_sketch ); TOOL_ACTION PCB_ACTIONS::graphicsOutlines( "pcbnew.Control.graphicOutlines", AS_GLOBAL, 0, "", _( "Sketch Graphic Items" ), _( "Show graphic items in outline mode" ), BITMAPS::show_mod_edge ); TOOL_ACTION PCB_ACTIONS::textOutlines( "pcbnew.Control.textOutlines", AS_GLOBAL, 0, "", _( "Sketch Text Items" ), _( "Show footprint texts in line mode" ), BITMAPS::text_sketch ); TOOL_ACTION PCB_ACTIONS::showPadNumbers( "pcbnew.Control.showPadNumbers", AS_GLOBAL, 0, "", _( "Show pad numbers" ), _( "Show pad numbers" ), BITMAPS::pad_number ); TOOL_ACTION PCB_ACTIONS::zoneDisplayFilled( "pcbnew.Control.zoneDisplayEnable", AS_GLOBAL, 0, "", _( "Draw Zone Fills" ), _( "Show filled areas of zones" ), BITMAPS::show_zone ); TOOL_ACTION PCB_ACTIONS::zoneDisplayOutline( "pcbnew.Control.zoneDisplayDisable", AS_GLOBAL, 0, "", _( "Draw Zone Outlines" ), _( "Show only zone boundaries" ), BITMAPS::show_zone_disable ); TOOL_ACTION PCB_ACTIONS::zoneDisplayFractured( "pcbnew.Control.zoneDisplayOutlines", AS_GLOBAL, 0, "", _( "Draw Zone Fill Fracture Borders" ), _( "Draw Zone Fill Fracture Borders" ), BITMAPS::show_zone_outline_only ); TOOL_ACTION PCB_ACTIONS::zoneDisplayTriangulated( "pcbnew.Control.zoneDisplayTesselation", AS_GLOBAL, 0, "", _( "Draw Zone Fill Triangulation" ), _( "Draw Zone Fill Triangulation" ), BITMAPS::show_zone_triangulation ); TOOL_ACTION PCB_ACTIONS::zoneDisplayToggle( "pcbnew.Control.zoneDisplayToggle", AS_GLOBAL, 0, "", _( "Toggle Zone Display" ), _( "Cycle between showing zone fills and just their outlines" ), BITMAPS::show_zone ); // Layer control // Translate aLayer to the action that switches to it TOOL_ACTION* PCB_ACTIONS::LayerIDToAction( PCB_LAYER_ID aLayer ) { switch( aLayer ) { case F_Cu: return &PCB_ACTIONS::layerTop; case In1_Cu: return &PCB_ACTIONS::layerInner1; case In2_Cu: return &PCB_ACTIONS::layerInner2; case In3_Cu: return &PCB_ACTIONS::layerInner3; case In4_Cu: return &PCB_ACTIONS::layerInner4; case In5_Cu: return &PCB_ACTIONS::layerInner5; case In6_Cu: return &PCB_ACTIONS::layerInner6; case In7_Cu: return &PCB_ACTIONS::layerInner7; case In8_Cu: return &PCB_ACTIONS::layerInner8; case In9_Cu: return &PCB_ACTIONS::layerInner9; case In10_Cu: return &PCB_ACTIONS::layerInner10; case In11_Cu: return &PCB_ACTIONS::layerInner11; case In12_Cu: return &PCB_ACTIONS::layerInner12; case In13_Cu: return &PCB_ACTIONS::layerInner13; case In14_Cu: return &PCB_ACTIONS::layerInner14; case In15_Cu: return &PCB_ACTIONS::layerInner15; case In16_Cu: return &PCB_ACTIONS::layerInner16; case In17_Cu: return &PCB_ACTIONS::layerInner17; case In18_Cu: return &PCB_ACTIONS::layerInner18; case In19_Cu: return &PCB_ACTIONS::layerInner19; case In20_Cu: return &PCB_ACTIONS::layerInner20; case In21_Cu: return &PCB_ACTIONS::layerInner21; case In22_Cu: return &PCB_ACTIONS::layerInner22; case In23_Cu: return &PCB_ACTIONS::layerInner23; case In24_Cu: return &PCB_ACTIONS::layerInner24; case In25_Cu: return &PCB_ACTIONS::layerInner25; case In26_Cu: return &PCB_ACTIONS::layerInner26; case In27_Cu: return &PCB_ACTIONS::layerInner27; case In28_Cu: return &PCB_ACTIONS::layerInner28; case In29_Cu: return &PCB_ACTIONS::layerInner29; case In30_Cu: return &PCB_ACTIONS::layerInner30; case B_Cu: return &PCB_ACTIONS::layerBottom; default: return nullptr; } } TOOL_ACTION PCB_ACTIONS::layerTop( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerTop" ) .Scope( AS_GLOBAL ) .DefaultHotkey( WXK_PAGEUP ) .LegacyHotkeyName( "Switch to Component (F.Cu) layer" ) .MenuText( _( "Switch to Component (F.Cu) layer" ) ) .Tooltip( _( "Switch to Component (F.Cu) layer" ) ) .Flags( AF_NOTIFY ) .Parameter( F_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner1( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner1" ) .Scope( AS_GLOBAL ) .LegacyHotkeyName( "Switch to Inner layer 1" ) .MenuText( _( "Switch to Inner layer 1" ) ) .Tooltip( _( "Switch to Inner layer 1" ) ) .Flags( AF_NOTIFY ) .Parameter( In1_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner2( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner2" ) .Scope( AS_GLOBAL ) .LegacyHotkeyName( "Switch to Inner layer 2" ) .MenuText( _( "Switch to Inner layer 2" ) ) .Tooltip( _( "Switch to Inner layer 2" ) ) .Flags( AF_NOTIFY ) .Parameter( In2_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner3( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner3" ) .Scope( AS_GLOBAL ) .LegacyHotkeyName( "Switch to Inner layer 3" ) .MenuText( _( "Switch to Inner layer 3" ) ) .Tooltip( _( "Switch to Inner layer 3" ) ) .Flags( AF_NOTIFY ) .Parameter( In3_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner4( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner4" ) .Scope( AS_GLOBAL ) .LegacyHotkeyName( "Switch to Inner layer 4" ) .MenuText( _( "Switch to Inner layer 4" ) ) .Tooltip( _( "Switch to Inner layer 4" ) ) .Flags( AF_NOTIFY ) .Parameter( In4_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner5( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner5" ) .Scope( AS_GLOBAL ) .LegacyHotkeyName( "Switch to Inner layer 5" ) .MenuText( _( "Switch to Inner layer 5" ) ) .Tooltip( _( "Switch to Inner layer 5" ) ) .Flags( AF_NOTIFY ) .Parameter( In5_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner6( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner6" ) .Scope( AS_GLOBAL ) .LegacyHotkeyName( "Switch to Inner layer 6" ) .MenuText( _( "Switch to Inner layer 6" ) ) .Tooltip( _( "Switch to Inner layer 6" ) ) .Flags( AF_NOTIFY ) .Parameter( In6_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner7( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner7" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 7" ) ) .Tooltip( _( "Switch to Inner layer 7" ) ) .Flags( AF_NOTIFY ) .Parameter( In7_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner8( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner8" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 8" ) ) .Tooltip( _( "Switch to Inner layer 8" ) ) .Flags( AF_NOTIFY ) .Parameter( In8_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner9( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner9" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 9" ) ) .Tooltip( _( "Switch to Inner layer 9" ) ) .Flags( AF_NOTIFY ) .Parameter( In9_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner10( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner10" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 10" ) ) .Tooltip( _( "Switch to Inner layer 10" ) ) .Flags( AF_NOTIFY ) .Parameter( In10_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner11( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner11" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 11" ) ) .Tooltip( _( "Switch to Inner layer 11" ) ) .Flags( AF_NOTIFY ) .Parameter( In11_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner12( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner12" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 12" ) ) .Tooltip( _( "Switch to Inner layer 12" ) ) .Flags( AF_NOTIFY ) .Parameter( In12_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner13( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner13" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 13" ) ) .Tooltip( _( "Switch to Inner layer 13" ) ) .Flags( AF_NOTIFY ) .Parameter( In13_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner14( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner14" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 14" ) ) .Tooltip( _( "Switch to Inner layer 14" ) ) .Flags( AF_NOTIFY ) .Parameter( In14_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner15( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner15" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 15" ) ) .Tooltip( _( "Switch to Inner layer 15" ) ) .Flags( AF_NOTIFY ) .Parameter( In15_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner16( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner16" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 16" ) ) .Tooltip( _( "Switch to Inner layer 16" ) ) .Flags( AF_NOTIFY ) .Parameter( In16_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner17( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner17" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 17" ) ) .Tooltip( _( "Switch to Inner layer 17" ) ) .Flags( AF_NOTIFY ) .Parameter( In17_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner18( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner18" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 18" ) ) .Tooltip( _( "Switch to Inner layer 18" ) ) .Flags( AF_NOTIFY ) .Parameter( In18_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner19( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner19" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 19" ) ) .Tooltip( _( "Switch to Inner layer 19" ) ) .Flags( AF_NOTIFY ) .Parameter( In19_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner20( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner20" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 20" ) ) .Tooltip( _( "Switch to Inner layer 20" ) ) .Flags( AF_NOTIFY ) .Parameter( In20_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner21( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner21" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 21" ) ) .Tooltip( _( "Switch to Inner layer 21" ) ) .Flags( AF_NOTIFY ) .Parameter( In21_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner22( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner22" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 22" ) ) .Tooltip( _( "Switch to Inner layer 22" ) ) .Flags( AF_NOTIFY ) .Parameter( In22_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner23( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner23" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 23" ) ) .Tooltip( _( "Switch to Inner layer 23" ) ) .Flags( AF_NOTIFY ) .Parameter( In23_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner24( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner24" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 24" ) ) .Tooltip( _( "Switch to Inner layer 24" ) ) .Flags( AF_NOTIFY ) .Parameter( In24_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner25( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner25" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 25" ) ) .Tooltip( _( "Switch to Inner layer 25" ) ) .Flags( AF_NOTIFY ) .Parameter( In25_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner26( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner26" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 26" ) ) .Tooltip( _( "Switch to Inner layer 26" ) ) .Flags( AF_NOTIFY ) .Parameter( In26_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner27( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner27" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 27" ) ) .Tooltip( _( "Switch to Inner layer 27" ) ) .Flags( AF_NOTIFY ) .Parameter( In27_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner28( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner28" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 28" ) ) .Tooltip( _( "Switch to Inner layer 28" ) ) .Flags( AF_NOTIFY ) .Parameter( In28_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner29( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner29" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 29" ) ) .Tooltip( _( "Switch to Inner layer 29" ) ) .Flags( AF_NOTIFY ) .Parameter( In29_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerInner30( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerInner30" ) .Scope( AS_GLOBAL ) .MenuText( _( "Switch to Inner layer 30" ) ) .Tooltip( _( "Switch to Inner layer 30" ) ) .Flags( AF_NOTIFY ) .Parameter( In30_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerBottom( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.layerBottom" ) .Scope( AS_GLOBAL ) .DefaultHotkey( WXK_PAGEDOWN ) .LegacyHotkeyName( "Switch to Copper (B.Cu) layer" ) .MenuText( _( "Switch to Copper (B.Cu) layer" ) ) .Tooltip( _( "Switch to Copper (B.Cu) layer" ) ) .Flags( AF_NOTIFY ) .Parameter( B_Cu ) ); TOOL_ACTION PCB_ACTIONS::layerNext( "pcbnew.Control.layerNext", AS_GLOBAL, '+', LEGACY_HK_NAME( "Switch to Next Layer" ), _( "Switch to Next Layer" ), _( "Switch to Next Layer" ), BITMAPS::INVALID_BITMAP, AF_NOTIFY ); TOOL_ACTION PCB_ACTIONS::layerPrev( "pcbnew.Control.layerPrev", AS_GLOBAL, '-', LEGACY_HK_NAME( "Switch to Previous Layer" ), _( "Switch to Previous Layer" ), _( "Switch to Previous Layer" ), BITMAPS::INVALID_BITMAP, AF_NOTIFY ); TOOL_ACTION PCB_ACTIONS::layerToggle( "pcbnew.Control.layerToggle", AS_GLOBAL, 'V', LEGACY_HK_NAME( "Add Through Via" ), _( "Toggle Layer" ), _( "Switch between layers in active layer pair" ), BITMAPS::INVALID_BITMAP, AF_NOTIFY ); TOOL_ACTION PCB_ACTIONS::layerAlphaInc( "pcbnew.Control.layerAlphaInc", AS_GLOBAL, // Don't be tempted to remove "Modern Toolset only". It's in the legacy property name. '}', LEGACY_HK_NAME( "Increment Layer Transparency (Modern Toolset only)" ), _( "Increase Layer Opacity" ), _( "Make the current layer less transparent" ), BITMAPS::contrast_mode ); TOOL_ACTION PCB_ACTIONS::layerAlphaDec( "pcbnew.Control.layerAlphaDec", AS_GLOBAL, // Don't be tempted to remove "Modern Toolset only". It's in the legacy property name. '{', LEGACY_HK_NAME( "Decrement Layer Transparency (Modern Toolset only)" ), _( "Decrease Layer Opacity" ), _( "Make the current layer more transparent" ), BITMAPS::contrast_mode ); TOOL_ACTION PCB_ACTIONS::layerChanged( "pcbnew.Control.layerChanged", AS_GLOBAL, 0, "", "", "", BITMAPS::INVALID_BITMAP, AF_NOTIFY ); //Show board statistics tool TOOL_ACTION PCB_ACTIONS::boardStatistics( "pcbnew.InspectionTool.ShowBoardStatistics", AS_GLOBAL, 0, "", _( "Show Board Statistics" ), _( "Shows board statistics" ) ); TOOL_ACTION PCB_ACTIONS::inspectClearance( "pcbnew.InspectionTool.InspectClearance", AS_GLOBAL, 0, "", _( "Clearance Resolution" ), _( "Show clearance resolution for the active layer between two selected objects" ), BITMAPS::mw_add_gap ); TOOL_ACTION PCB_ACTIONS::inspectConstraints( "pcbnew.InspectionTool.InspectConstraints", AS_GLOBAL, 0, "", _( "Constraints Resolution" ), _( "Show constraints resolution for the selected object" ), BITMAPS::mw_add_gap ); TOOL_ACTION PCB_ACTIONS::diffFootprint( "pcbnew.InspectionTool.DiffFootprint", AS_GLOBAL, 0, "", _( "Diff Footprint with Library" ), _( "Show differences between board footprint and its library equivalent" ), BITMAPS::library ); TOOL_ACTION PCB_ACTIONS::showFootprintAssociations( "pcbnew.InspectionTool.ShowFootprintAssociations", AS_GLOBAL, 0, "", _( "Show Footprint Associations" ), _( "Show footprint library and schematic symbol associations" ), BITMAPS::edit_cmp_symb_links ); //Geographic re-annotation tool TOOL_ACTION PCB_ACTIONS::boardReannotate( "pcbnew.ReannotateTool.ShowReannotateDialog", AS_GLOBAL, 0, "", _( "Geographical Reannotate..." ), _( "Reannotate PCB in geographical order" ), BITMAPS::annotate ); TOOL_ACTION PCB_ACTIONS::repairBoard( TOOL_ACTION_ARGS() .Name( "pcbnew.Control.repairBoard" ) .Scope( AS_GLOBAL ) .MenuText( _( "Repair Board" ) ) .Tooltip( _( "Run various diagnostics and attempt to repair board" ) ) .Icon( BITMAPS::rescue ) .Parameter( false ) ); // Don't repair quietly TOOL_ACTION PCB_ACTIONS::repairFootprint( "pcbnew.ModuleEditor.repairFootprint", AS_GLOBAL, 0, "", _( "Repair Footprint" ), _( "Run various diagnostics and attempt to repair footprint" ) ); // PLACEMENT_TOOL // TOOL_ACTION PCB_ACTIONS::alignTop( "pcbnew.AlignAndDistribute.alignTop", AS_GLOBAL, 0, "", _( "Align to Top" ), _( "Aligns selected items to the top edge" ), BITMAPS::align_items_top ); TOOL_ACTION PCB_ACTIONS::alignBottom( "pcbnew.AlignAndDistribute.alignBottom", AS_GLOBAL, 0, "", _( "Align to Bottom" ), _( "Aligns selected items to the bottom edge" ), BITMAPS::align_items_bottom ); TOOL_ACTION PCB_ACTIONS::alignLeft( "pcbnew.AlignAndDistribute.alignLeft", AS_GLOBAL, 0, "", _( "Align to Left" ), _( "Aligns selected items to the left edge" ), BITMAPS::align_items_left ); TOOL_ACTION PCB_ACTIONS::alignRight( "pcbnew.AlignAndDistribute.alignRight", AS_GLOBAL, 0, "", _( "Align to Right" ), _( "Aligns selected items to the right edge" ), BITMAPS::align_items_right ); TOOL_ACTION PCB_ACTIONS::alignCenterY( "pcbnew.AlignAndDistribute.alignCenterY", AS_GLOBAL, 0, "", _( "Align to Vertical Center" ), _( "Aligns selected items to the vertical center" ), BITMAPS::align_items_center ); TOOL_ACTION PCB_ACTIONS::alignCenterX( "pcbnew.AlignAndDistribute.alignCenterX", AS_GLOBAL, 0, "", _( "Align to Horizontal Center" ), _( "Aligns selected items to the horizontal center" ), BITMAPS::align_items_middle ); TOOL_ACTION PCB_ACTIONS::distributeHorizontally( "pcbnew.AlignAndDistribute.distributeHorizontally", AS_GLOBAL, 0, "", _( "Distribute Horizontally" ), _( "Distributes selected items along the horizontal axis" ), BITMAPS::distribute_horizontal ); TOOL_ACTION PCB_ACTIONS::distributeVertically( "pcbnew.AlignAndDistribute.distributeVertically", AS_GLOBAL, 0, "", _( "Distribute Vertically" ), _( "Distributes selected items along the vertical axis" ), BITMAPS::distribute_vertical ); // PCB_POINT_EDITOR // TOOL_ACTION PCB_ACTIONS::pointEditorAddCorner( "pcbnew.PointEditor.addCorner", AS_GLOBAL, #ifdef __WXMAC__ WXK_F1, "", #else WXK_INSERT, "", #endif _( "Create Corner" ), _( "Create a corner" ), BITMAPS::add_corner ); TOOL_ACTION PCB_ACTIONS::pointEditorRemoveCorner( "pcbnew.PointEditor.removeCorner", AS_GLOBAL, 0, "", _( "Remove Corner" ), _( "Remove corner" ), BITMAPS::delete_cursor ); TOOL_ACTION PCB_ACTIONS::pointEditorArcKeepCenter( TOOL_ACTION_ARGS() .Name( "pcbnew.PointEditor.arcKeepCenter" ) .Scope( AS_GLOBAL ) .MenuText( _( "Keep arc center, adjust radius" ) ) .Tooltip( _( "Switch arc editing mode to keep center, adjust radius and endpoints" ) ) .Parameter( ARC_EDIT_MODE::KEEP_CENTER_ADJUST_ANGLE_RADIUS ) ); TOOL_ACTION PCB_ACTIONS::pointEditorArcKeepEndpoint( TOOL_ACTION_ARGS() .Name( "pcbnew.PointEditor.arcKeepEndpoint" ) .Scope( AS_GLOBAL ) .MenuText( _( "Keep arc endpoints or direction of starting point" ) ) .Tooltip( _( "Switch arc editing mode to keep endpoints, or to keep direction of the other point" ) ) .Parameter( ARC_EDIT_MODE::KEEP_ENDPOINTS_OR_START_DIRECTION ) ); // GROUP_TOOL // TOOL_ACTION PCB_ACTIONS::groupProperties( "pcbnew.Groups.groupProperties", AS_GLOBAL ); TOOL_ACTION PCB_ACTIONS::pickNewGroupMember( "pcbnew.Groups.selectNewGroupMember", AS_GLOBAL ); // POSITION_RELATIVE_TOOL // TOOL_ACTION PCB_ACTIONS::positionRelative( "pcbnew.PositionRelative.positionRelative", AS_GLOBAL, MD_SHIFT + 'P', LEGACY_HK_NAME( "Position Item Relative" ), _( "Position Relative To..." ), _( "Positions the selected item(s) by an exact amount relative to another" ), BITMAPS::move_relative ); TOOL_ACTION PCB_ACTIONS::selectpositionRelativeItem( "pcbnew.PositionRelative.selectpositionRelativeItem", AS_GLOBAL ); // PCB_SELECTION_TOOL // TOOL_ACTION PCB_ACTIONS::selectionActivate( "pcbnew.InteractiveSelection", AS_GLOBAL, 0, "", "", "", // No description, not shown anywhere BITMAPS::INVALID_BITMAP, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::selectionCursor( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveSelection.Cursor" ) .Scope( AS_GLOBAL ) .Parameter( nullptr ) ); TOOL_ACTION PCB_ACTIONS::selectItem( "pcbnew.InteractiveSelection.SelectItem", AS_GLOBAL ); TOOL_ACTION PCB_ACTIONS::selectItems( "pcbnew.InteractiveSelection.SelectItems", AS_GLOBAL ); TOOL_ACTION PCB_ACTIONS::unselectItem( "pcbnew.InteractiveSelection.UnselectItem", AS_GLOBAL ); TOOL_ACTION PCB_ACTIONS::unselectItems( "pcbnew.InteractiveSelection.UnselectItems", AS_GLOBAL ); TOOL_ACTION PCB_ACTIONS::selectionClear( "pcbnew.InteractiveSelection.Clear", AS_GLOBAL ); TOOL_ACTION PCB_ACTIONS::selectionMenu( "pcbnew.InteractiveSelection.SelectionMenu", AS_GLOBAL ); TOOL_ACTION PCB_ACTIONS::selectConnection( "pcbnew.InteractiveSelection.SelectConnection", AS_GLOBAL, 'U', LEGACY_HK_NAME( "Select Single Track" ), _( "Select/Expand Connection" ), _( "Selects a connection or expands an existing selection to junctions, pads, or entire connections" ), BITMAPS::add_tracks ); TOOL_ACTION PCB_ACTIONS::unrouteSelected( "pcbnew.InteractiveSelection.unrouteSelected", AS_GLOBAL, 0, "", _( "Unroute Selected" ), _( "Unroutes selected items to the nearest pad." ), BITMAPS::general_deletions ); TOOL_ACTION PCB_ACTIONS::syncSelection( "pcbnew.InteractiveSelection.SyncSelection", AS_GLOBAL ); TOOL_ACTION PCB_ACTIONS::syncSelectionWithNets( "pcbnew.InteractiveSelection.SyncSelectionWithNets", AS_GLOBAL ); TOOL_ACTION PCB_ACTIONS::selectNet( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveSelection.SelectNet" ) .Scope( AS_GLOBAL ) .MenuText( _( "Select All Tracks in Net" ) ) .Tooltip( _( "Selects all tracks & vias belonging to the same net." ) ) .Parameter( 0 ) ); TOOL_ACTION PCB_ACTIONS::deselectNet( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveSelection.DeselectNet" ) .Scope( AS_GLOBAL ) .MenuText( _( "Deselect All Tracks in Net" ) ) .Tooltip( _( "Deselects all tracks & vias belonging to the same net." ) ) .Parameter( 0 ) ); TOOL_ACTION PCB_ACTIONS::selectUnconnected( "pcbnew.InteractiveSelection.SelectUnconnected", AS_GLOBAL, 'O', "", _( "Select All Unconnected Footprints" ), _( "Selects all unconnected footprints belonging to each selected net." ) ); TOOL_ACTION PCB_ACTIONS::grabUnconnected( "pcbnew.InteractiveSelection.GrabUnconnected", AS_GLOBAL, MD_SHIFT + 'O', "", _( "Grab Nearest Unconnected Footprints" ), _( "Selects and initiates moving the nearest unconnected footprint on each selected net." ) ); TOOL_ACTION PCB_ACTIONS::selectOnSheetFromEeschema( "pcbnew.InteractiveSelection.SelectOnSheet", AS_GLOBAL, 0, "", _( "Sheet" ), _( "Selects all footprints and tracks in the schematic sheet" ), BITMAPS::select_same_sheet ); TOOL_ACTION PCB_ACTIONS::selectSameSheet( "pcbnew.InteractiveSelection.SelectSameSheet", AS_GLOBAL, 0, "", _( "Items in Same Hierarchical Sheet" ), _( "Selects all footprints and tracks in the same schematic sheet" ), BITMAPS::select_same_sheet ); TOOL_ACTION PCB_ACTIONS::selectOnSchematic( "pcbnew.InteractiveSelection.SelectOnSchematic", AS_GLOBAL, 0, "", _( "Select on Schematic" ), _( "Selects corresponding items in Schematic editor" ), BITMAPS::select_same_sheet ); TOOL_ACTION PCB_ACTIONS::filterSelection( "pcbnew.InteractiveSelection.FilterSelection", AS_GLOBAL, 0, "", _( "Filter Selected Items..." ), _( "Remove items from the selection by type" ), BITMAPS::filter ); // ZONE_FILLER_TOOL // TOOL_ACTION PCB_ACTIONS::zoneFill( TOOL_ACTION_ARGS() .Name( "pcbnew.ZoneFiller.zoneFill" ) .Scope( AS_GLOBAL ) .MenuText( _( "Draft Fill Selected Zone(s)" ) ) .Tooltip( _( "Update copper fill of selected zone(s) without regard to other interacting zones" ) ) .Icon( BITMAPS::fill_zone ) .Parameter( nullptr ) ); TOOL_ACTION PCB_ACTIONS::zoneFillAll( "pcbnew.ZoneFiller.zoneFillAll", AS_GLOBAL, 'B', LEGACY_HK_NAME( "Fill or Refill All Zones" ), _( "Fill All Zones" ), _( "Update copper fill of all zones" ), BITMAPS::fill_zone ); TOOL_ACTION PCB_ACTIONS::zoneFillDirty( "pcbnew.ZoneFiller.zoneFillDirty", AS_CONTEXT ); TOOL_ACTION PCB_ACTIONS::zoneUnfill( "pcbnew.ZoneFiller.zoneUnfill", AS_GLOBAL, 0, "", _( "Unfill Selected Zone(s)" ), _( "Remove copper fill from selected zone(s)" ), BITMAPS::zone_unfill ); TOOL_ACTION PCB_ACTIONS::zoneUnfillAll( "pcbnew.ZoneFiller.zoneUnfillAll", AS_GLOBAL, MD_CTRL + 'B', LEGACY_HK_NAME( "Remove Filled Areas in All Zones" ), _( "Unfill All Zones" ), _( "Remove copper fill from all zones" ), BITMAPS::zone_unfill ); // AUTOPLACER_TOOL // TOOL_ACTION PCB_ACTIONS::autoplaceSelectedComponents( "pcbnew.Autoplacer.autoplaceSelected", AS_GLOBAL, 0, "", _( "Place Selected Footprints" ), _( "Performs automatic placement of selected components" ) ); TOOL_ACTION PCB_ACTIONS::autoplaceOffboardComponents( "pcbnew.Autoplacer.autoplaceOffboard", AS_GLOBAL, 0, "", _( "Place Off-Board Footprints" ), _( "Performs automatic placement of components outside board area" ) ); // ROUTER_TOOL // TOOL_ACTION PCB_ACTIONS::routeSingleTrack( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveRouter.SingleTrack" ) .Scope( AS_GLOBAL ) .DefaultHotkey( 'X' ) .LegacyHotkeyName( "Add New Track" ) .MenuText( _( "Route Single Track" ) ) .Tooltip( _( "Route tracks" ) ) .Icon( BITMAPS::add_tracks ) .Flags( AF_ACTIVATE ) .Parameter( PNS::PNS_MODE_ROUTE_SINGLE ) ); TOOL_ACTION PCB_ACTIONS::routeDiffPair( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveRouter.DiffPair" ) .Scope( AS_GLOBAL ) .DefaultHotkey( '6' ) // Don't be tempted to remove "Modern Toolset only". It's in the legacy property name. .LegacyHotkeyName( "Route Differential Pair (Modern Toolset only)" ) .MenuText( _( "Route Differential Pair" ) ) .Tooltip( _( "Route differential pairs" ) ) .Icon( BITMAPS::ps_diff_pair ) .Flags( AF_ACTIVATE ) .Parameter( PNS::PNS_MODE_ROUTE_DIFF_PAIR ) ); TOOL_ACTION PCB_ACTIONS::routerSettingsDialog( "pcbnew.InteractiveRouter.SettingsDialog", AS_GLOBAL, MD_CTRL + '<', LEGACY_HK_NAME( "Routing Options" ), _( "Interactive Router Settings..." ), _( "Open Interactive Router settings" ), BITMAPS::tools ); TOOL_ACTION PCB_ACTIONS::routerDiffPairDialog( "pcbnew.InteractiveRouter.DiffPairDialog", AS_GLOBAL, 0, "", _( "Differential Pair Dimensions..." ), _( "Open Differential Pair Dimension settings" ), BITMAPS::ps_diff_pair_gap ); TOOL_ACTION PCB_ACTIONS::routerHighlightMode( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveRouter.HighlightMode" ) .Scope( AS_GLOBAL ) .MenuText( _( "Router Highlight Mode" ) ) .Tooltip( _( "Switch router to highlight mode" ) ) .Flags( AF_NONE ) .Parameter( PNS::RM_MarkObstacles ) ); TOOL_ACTION PCB_ACTIONS::routerShoveMode( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveRouter.ShoveMode" ) .Scope( AS_GLOBAL ) .MenuText( _( "Router Shove Mode" ) ) .Tooltip( _( "Switch router to shove mode" ) ) .Flags( AF_NONE ) .Parameter( PNS::RM_Shove ) ); TOOL_ACTION PCB_ACTIONS::routerWalkaroundMode( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveRouter.WalkaroundMode" ) .Scope( AS_GLOBAL ) .MenuText( _( "Router Walkaround Mode" ) ) .Tooltip( _( "Switch router to walkaround mode" ) ) .Flags( AF_NONE ) .Parameter( PNS::RM_Walkaround ) ); TOOL_ACTION PCB_ACTIONS::cycleRouterMode( "pcbnew.InteractiveRouter.CycleRouterMode", AS_GLOBAL, 0, "", _( "Cycle Router Mode" ), _( "Cycle router to the next mode" ), BITMAPS::INVALID_BITMAP); TOOL_ACTION PCB_ACTIONS::selectLayerPair( "pcbnew.InteractiveRouter.SelectLayerPair", AS_GLOBAL, 0, "", _( "Set Layer Pair..." ), _( "Change active layer pair for routing" ), BITMAPS::select_layer_pair, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::routerTuneSingleTrace( TOOL_ACTION_ARGS() .Name( "pcbnew.LengthTuner.TuneSingleTrack" ) .Scope( AS_GLOBAL ) .DefaultHotkey( '7' ) // Don't be tempted to remove "Modern Toolset only". It's in the legacy property name. .LegacyHotkeyName( "Tune Single Track (Modern Toolset only)" ) .MenuText( _( "Tune length of a single track" ) ) .Tooltip( _( "Tune length of a single track" ) ) .Icon( BITMAPS::ps_tune_length ) .Flags( AF_ACTIVATE ) .Parameter( PNS::PNS_MODE_TUNE_SINGLE ) ); TOOL_ACTION PCB_ACTIONS::routerTuneDiffPair( TOOL_ACTION_ARGS() .Name( "pcbnew.LengthTuner.TuneDiffPair" ) .Scope( AS_GLOBAL ) .DefaultHotkey( '8' ) // Don't be tempted to remove "Modern Toolset only". It's in the legacy property name. .LegacyHotkeyName( "Tune Differential Pair Length (Modern Toolset only)" ) .MenuText( _( "Tune length of a differential pair" ) ) .Tooltip( _( "Tune length of a differential pair" ) ) .Icon( BITMAPS::ps_diff_pair_tune_length ) .Flags( AF_ACTIVATE ) .Parameter( PNS::PNS_MODE_TUNE_DIFF_PAIR ) ); TOOL_ACTION PCB_ACTIONS::routerTuneDiffPairSkew( TOOL_ACTION_ARGS() .Name( "pcbnew.LengthTuner.TuneDiffPairSkew" ) .Scope( AS_GLOBAL ) .DefaultHotkey( '9' ) // Don't be tempted to remove "Modern Toolset only". It's in the legacy property name. .LegacyHotkeyName( "Tune Differential Pair Skew (Modern Toolset only)" ) .MenuText( _( "Tune skew of a differential pair" ) ) .Tooltip( _( "Tune skew of a differential pair" ) ) .Icon( BITMAPS::ps_diff_pair_tune_phase ) .Flags( AF_ACTIVATE ) .Parameter( PNS::PNS_MODE_TUNE_DIFF_PAIR_SKEW ) ); TOOL_ACTION PCB_ACTIONS::routerInlineDrag( "pcbnew.InteractiveRouter.InlineDrag", AS_CONTEXT ); TOOL_ACTION PCB_ACTIONS::routerUndoLastSegment( "pcbnew.InteractiveRouter.UndoLastSegment", AS_CONTEXT, WXK_BACK, "", _( "Undo Last Segment" ), _( "Walks the current track back one segment." ) ); TOOL_ACTION PCB_ACTIONS::routerContinueFromEnd( "pcbnew.InteractiveRouter.ContinueFromEnd", AS_CONTEXT, 'E', "", _( "Route From Other End" ), _( "Commits current segments and starts next segment from nearest ratsnest end." ) ); TOOL_ACTION PCB_ACTIONS::routerAttemptFinish( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveRouter.AttemptFinish" ) .Scope( AS_CONTEXT ) .DefaultHotkey( 'F' ) .MenuText( _( "Attempt Finish" ) ) .Tooltip( _( "Attempts to complete current route to nearest ratsnest end." ) ) .Parameter( nullptr ) ); TOOL_ACTION PCB_ACTIONS::routerRouteSelected( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveRouter.RouteSelected" ) .Scope( AS_GLOBAL ) .DefaultHotkey( MD_SHIFT + 'X' ) .MenuText( _( "Route Selected" ) ) .Tooltip( _( "Sequentially route selected items from ratsnest anchor." ) ) .Flags( AF_ACTIVATE ) .Parameter( PNS::PNS_MODE_ROUTE_SINGLE ) ); TOOL_ACTION PCB_ACTIONS::routerRouteSelectedFromEnd( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveRouter.RouteSelectedFromEnd" ) .Scope( AS_GLOBAL ) .DefaultHotkey( MD_SHIFT + 'E' ) .MenuText( _( "Route Selected From Other End" ) ) .Tooltip( _( "Sequentially route selected items from other end of ratsnest anchor." ) ) .Flags( AF_ACTIVATE ) .Parameter( PNS::PNS_MODE_ROUTE_SINGLE ) ); TOOL_ACTION PCB_ACTIONS::routerAutorouteSelected( TOOL_ACTION_ARGS() .Name( "pcbnew.InteractiveRouter.Autoroute" ) .Scope( AS_GLOBAL ) .DefaultHotkey( MD_SHIFT + 'F' ) .MenuText( _( "Attempt Finish Selected (Autoroute)" ) ) .Tooltip( _( "Sequentially attempt to automatically route all selected pads." ) ) .Flags( AF_ACTIVATE ) .Parameter( PNS::PNS_MODE_ROUTE_SINGLE ) ); TOOL_ACTION PCB_ACTIONS::breakTrack( "pcbnew.InteractiveRouter.BreakTrack", AS_GLOBAL, 0, "", _( "Break Track" ), _( "Splits the track segment into two segments connected at the cursor position." ), BITMAPS::break_line ); TOOL_ACTION PCB_ACTIONS::drag45Degree( "pcbnew.InteractiveRouter.Drag45Degree", AS_GLOBAL, 'D', LEGACY_HK_NAME( "Drag Track Keep Slope" ), _( "Drag (45 degree mode)" ), _( "Drags the track segment while keeping connected tracks at 45 degrees." ), BITMAPS::drag_segment_withslope ); TOOL_ACTION PCB_ACTIONS::dragFreeAngle( "pcbnew.InteractiveRouter.DragFreeAngle", AS_GLOBAL, 'G', LEGACY_HK_NAME( "Drag Item" ), _( "Drag (free angle)" ), _( "Drags the nearest joint in the track without restricting the track angle." ), BITMAPS::drag ); // LENGTH_TUNER_TOOL // TOOL_ACTION PCB_ACTIONS::lengthTunerSettingsDialog( "pcbnew.LengthTuner.Settings", AS_CONTEXT, // Don't be tempted to remove "Modern Toolset only". It's in the legacy property name. MD_CTRL + 'L', LEGACY_HK_NAME( "Length Tuning Settings (Modern Toolset only)" ), _( "Length Tuning Settings..." ), _( "Sets the length tuning parameters for currently routed item." ), BITMAPS::router_len_tuner_setup ); TOOL_ACTION PCB_ACTIONS::ddAppendBoard( "pcbnew.Control.DdAppendBoard", AS_GLOBAL ); TOOL_ACTION PCB_ACTIONS::ddImportFootprint( "pcbnew.Control.ddImportFootprint", AS_GLOBAL );