KiCad PCB EDA Suite
edit.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2016 Jean-Pierre Charras, jp.charras at wanadoo.fr
5 * Copyright (C) 2015 SoftPLC Corporation, Dick Hollenbeck <[email protected]>
6 * Copyright (C) 2015 Wayne Stambaugh <[email protected]>
7 * Copyright (C) 2017-2020 KiCad Developers, see AUTHORS.txt for contributors.
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version 2
12 * of the License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, you may find one here:
21 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
22 * or you may search the http://www.gnu.org website for the version 2 license,
23 * or you may write to the Free Software Foundation, Inc.,
24 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
25 */
26
27#include <kiface_base.h>
28#include <confirm.h>
29#include <gestfich.h>
30#include <pcb_edit_frame.h>
31#include <pcbnew_id.h>
32#include <board.h>
33#include <footprint.h>
34#include <pad.h>
35#include <zone.h>
36#include <pcb_target.h>
37#include <pcb_dimension.h>
38#include <dialog_drc.h>
40#include <tool/tool_manager.h>
41#include <tools/pcb_actions.h>
42#include <tools/drc_tool.h>
45
46// Handles the selection of command events.
47void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
48{
49 int id = event.GetId();
50 const PCB_DISPLAY_OPTIONS& displ_opts = GetDisplayOptions();
51
52 switch( id ) // Execute command
53 {
54 case 0:
55 break;
56
59
61 GetCanvas()->Refresh();
62 break;
63
66 break;
67
70 break;
71
72 default:
73 break;
74 }
75}
76
77
79{
80 PCB_LAYER_ID curLayer = GetActiveLayer();
81 auto displ_opts = GetDisplayOptions();
82
83 // Check if the specified layer matches the present layer
84 if( layer == curLayer )
85 return;
86
87 // Copper layers cannot be selected unconditionally; how many of those layers are currently
88 // enabled needs to be checked.
89 if( IsCopperLayer( layer ) )
90 {
91 // If only one copper layer is enabled, the only such layer that can be selected to is
92 // the "Back" layer (so the selection of any other copper layer is disregarded).
93 if( GetBoard()->GetCopperLayerCount() < 2 )
94 {
95 if( layer != B_Cu )
96 return;
97 }
98 // If more than one copper layer is enabled, the "Copper" and "Component" layers can be
99 // selected, but the total number of copper layers determines which internal layers are
100 // also capable of being selected.
101 else
102 {
103 if( layer != B_Cu && layer != F_Cu && layer >= GetBoard()->GetCopperLayerCount() - 1 )
104 return;
105 }
106 }
107
108 // Is yet more checking required? E.g. when the layer to be selected is a non-copper layer,
109 // or when switching between a copper layer and a non-copper layer, or vice-versa?
110
111 SetActiveLayer( layer );
112
113 if( displ_opts.m_ContrastModeDisplay != HIGH_CONTRAST_MODE::NORMAL )
114 GetCanvas()->Refresh();
115}
116
117
119{
120 switch( aItem->Type() )
121 {
122 case PCB_BITMAP_T:
124 break;
125
126 case PCB_TEXT_T:
127 case PCB_FP_TEXT_T:
129 break;
130
131 case PCB_TEXTBOX_T:
132 case PCB_FP_TEXTBOX_T:
134 break;
135
136 case PCB_PAD_T:
137 ShowPadPropertiesDialog( static_cast<PAD*>( aItem ) );
138 break;
139
140 case PCB_FOOTPRINT_T:
141 ShowFootprintPropertiesDialog( static_cast<FOOTPRINT*>( aItem ) );
142 break;
143
144 case PCB_TARGET_T:
145 ShowTargetOptionsDialog( static_cast<PCB_TARGET*>( aItem ) );
146 break;
147
149 case PCB_DIM_CENTER_T:
150 case PCB_DIM_RADIAL_T:
152 case PCB_DIM_LEADER_T:
153 {
154 DIALOG_DIMENSION_PROPERTIES dlg( this, static_cast<PCB_DIMENSION_BASE*>( aItem ) );
155 dlg.ShowQuasiModal();
156 break;
157 }
158
159 case PCB_SHAPE_T:
161 break;
162
163 case PCB_ZONE_T:
164 Edit_Zone_Params( static_cast<ZONE*>( aItem ) );
165 break;
166
167 case PCB_GROUP_T:
169 break;
170
171 case PCB_MARKER_T:
172 m_toolManager->GetTool<DRC_TOOL>()->CrossProbe( static_cast<PCB_MARKER*>( aItem ) );
173 break;
174
175 default:
176 break;
177 }
178}
179
@ NORMAL
Inactive layers are shown normally (no high-contrast mode)
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:52
int ShowQuasiModal()
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
Update the board display after modifying it by a python script (note: it is automatically called by a...
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:111
Definition: pad.h:58
static TOOL_ACTION groupProperties
Definition: pcb_actions.h:242
int ShowTextBoxPropertiesDialog(BOARD_ITEM *aText)
void ShowGraphicItemPropertiesDialog(BOARD_ITEM *aItem)
void ShowBitmapPropertiesDialog(BOARD_ITEM *aBitmap)
Set the angle used for rotate operations.
void ShowTextPropertiesDialog(BOARD_ITEM *aText)
void ShowPadPropertiesDialog(PAD *aPad)
const PCB_DISPLAY_OPTIONS & GetDisplayOptions() const
Display options control the way tracks, vias, outlines and other things are shown (for instance solid...
virtual PCB_LAYER_ID GetActiveLayer() const
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
BOARD * GetBoard() const
Abstract dimension API.
Definition: pcb_dimension.h:96
HIGH_CONTRAST_MODE m_ContrastModeDisplay
How inactive layers are displayed.
void OnEditItemRequest(BOARD_ITEM *aItem) override
Install the corresponding dialog editor for the given item.
Definition: edit.cpp:118
void SetActiveLayer(PCB_LAYER_ID aLayer) override
Change the currently active layer to aLayer and also update the APPEARANCE_CONTROLS.
void SwitchLayer(PCB_LAYER_ID layer) override
Change the active layer in the editor.
Definition: edit.cpp:78
void ShowTargetOptionsDialog(PCB_TARGET *aTarget)
void ExportFootprintsToLibrary(bool aStoreInNewLib, const wxString &aLibName=wxEmptyString, wxString *aLibPath=nullptr)
Save footprints in a library:
void ShowFootprintPropertiesDialog(FOOTPRINT *aFootprint)
void Edit_Zone_Params(ZONE *zone_container)
Edit params (layer, clearance, ...) for a zone outline.
PCB_LAYER_BOX_SELECTOR * m_SelLayerBox
void Process_Special_Functions(wxCommandEvent &event)
Definition: edit.cpp:47
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:170
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Run the specified action.
Definition: tool_manager.h:142
Handle a list of polygons defining a copper zone.
Definition: zone.h:57
This file is part of the common library.
bool IsCopperLayer(int aLayerId)
Tests whether a layer is a copper layer.
Definition: layer_ids.h:823
PCB_LAYER_ID
A quick note on layer IDs:
Definition: layer_ids.h:59
@ B_Cu
Definition: layer_ids.h:95
@ F_Cu
Definition: layer_ids.h:64
PCB_LAYER_ID ToLAYER_ID(int aLayer)
Definition: lset.cpp:926
@ ID_MENU_EXPORT_FOOTPRINTS_TO_NEW_LIBRARY
Definition: pcbnew_id.h:83
@ ID_MENU_EXPORT_FOOTPRINTS_TO_LIBRARY
Definition: pcbnew_id.h:82
@ ID_TOOLBARH_PCB_SELECT_LAYER
Definition: pcbnew_id.h:96
@ PCB_SHAPE_T
class PCB_SHAPE, a segment not on copper layers
Definition: typeinfo.h:88
@ PCB_DIM_ORTHOGONAL_T
class PCB_DIM_ORTHOGONAL, a linear dimension constrained to x/y
Definition: typeinfo.h:110
@ PCB_DIM_LEADER_T
class PCB_DIM_LEADER, a leader dimension (graphic item)
Definition: typeinfo.h:107
@ PCB_FP_TEXTBOX_T
class FP_TEXTBOX, wrapped text in a footprint
Definition: typeinfo.h:93
@ PCB_DIM_CENTER_T
class PCB_DIM_CENTER, a center point marking (graphic item)
Definition: typeinfo.h:108
@ PCB_GROUP_T
class PCB_GROUP, a set of BOARD_ITEMs
Definition: typeinfo.h:115
@ PCB_TEXTBOX_T
class PCB_TEXTBOX, wrapped text on a layer
Definition: typeinfo.h:91
@ PCB_ZONE_T
class ZONE, a copper pour area
Definition: typeinfo.h:112
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
Definition: typeinfo.h:90
@ PCB_MARKER_T
class PCB_MARKER, a marker used to show something
Definition: typeinfo.h:104
@ PCB_TARGET_T
class PCB_TARGET, a target (graphic item)
Definition: typeinfo.h:111
@ PCB_FOOTPRINT_T
class FOOTPRINT, a footprint
Definition: typeinfo.h:86
@ PCB_DIM_ALIGNED_T
class PCB_DIM_ALIGNED, a linear dimension (graphic item)
Definition: typeinfo.h:106
@ PCB_BITMAP_T
class PCB_BITMAP, bitmap on a layer
Definition: typeinfo.h:89
@ PCB_PAD_T
class PAD, a pad in a footprint
Definition: typeinfo.h:87
@ PCB_FP_TEXT_T
class FP_TEXT, text in a footprint
Definition: typeinfo.h:92
@ PCB_DIM_RADIAL_T
class PCB_DIM_RADIAL, a radius or diameter dimension
Definition: typeinfo.h:109