kicad/pcbnew/tools/pcb_actions.cpp

1857 lines
75 KiB
C++

/*
* 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 <maciej.suminski@cern.ch>
*
* 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 <pcbnew_id.h>
#include <bitmaps.h>
#include <layer_ids.h>
#include <microwave/microwave_tool.h>
#include <tool/tool_manager.h>
#include <tools/pcb_selection_tool.h>
#include <router/pns_router.h>
#include <router/pns_routing_settings.h>
// 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( "pcbnew.InteractiveDrawing.placeImage",
AS_GLOBAL, 0, "",
_( "Add Image" ), _( "Add bitmap image" ),
BITMAPS::image, AF_ACTIVATE );
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::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" ) );
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<FOOTPRINT*>( 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<int>( 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<int>( 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<int>( 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<int>( 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<int>( 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<int>( 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<CLIENT_SELECTION_FILTER>( 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<int>( 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<int>( 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( "pcbnew.ZoneFiller.zoneFill",
AS_GLOBAL, 0, "",
_( "Draft Fill Selected Zone(s)" ),
_( "Update copper fill of selected zone(s) without regard to other interacting zones" ),
BITMAPS::fill_zone );
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<bool*>( 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 );