KiCad PCB EDA Suite
pcb_layer_box_selector.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) 1992-2015 Jean-Pierre Charras <[email protected]>
5 * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <[email protected]>
6 * Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, you may find one here:
20 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
21 * or you may search the http://www.gnu.org website for the version 2 license,
22 * or you may write to the Free Software Foundation, Inc.,
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24 */
25
26#include <pgm_base.h>
29#include <pcb_edit_frame.h>
30#include <layer_ids.h>
32#include <board.h>
34#include <tools/pcb_actions.h>
35
36
37// translate aLayer to its action
39{
40 switch( aLayer )
41 {
42 case F_Cu: return &PCB_ACTIONS::layerTop;
43 case In1_Cu: return &PCB_ACTIONS::layerInner1;
44 case In2_Cu: return &PCB_ACTIONS::layerInner2;
45 case In3_Cu: return &PCB_ACTIONS::layerInner3;
46 case In4_Cu: return &PCB_ACTIONS::layerInner4;
47 case In5_Cu: return &PCB_ACTIONS::layerInner5;
48 case In6_Cu: return &PCB_ACTIONS::layerInner6;
49 case In7_Cu: return &PCB_ACTIONS::layerInner7;
50 case In8_Cu: return &PCB_ACTIONS::layerInner8;
51 case In9_Cu: return &PCB_ACTIONS::layerInner9;
73 case B_Cu: return &PCB_ACTIONS::layerBottom;
74 default: return nullptr;
75 }
76}
77
78
79// class to display a layer list in a wxBitmapComboBox.
80
81// Reload the Layers
83{
84 Freeze();
85 Clear();
86
87 const int BM_SIZE = 14;
88
89 LSET show = LSET::AllLayersMask() & ~m_layerMaskDisable;
90 LSET activated = getEnabledLayers() & ~m_layerMaskDisable;
91 wxString layerstatus;
92
93 for( PCB_LAYER_ID layerid : show.UIOrder() )
94 {
95 if( !m_showNotEnabledBrdlayers && !activated[layerid] )
96 continue;
97 else if( !activated[layerid] )
98 layerstatus = wxT( " " ) + _( "(not activated)" );
99 else
100 layerstatus.Empty();
101
102 wxBitmap bmp( BM_SIZE, BM_SIZE );
104
105 wxString layername = getLayerName( layerid ) + layerstatus;
106
107 if( m_layerhotkeys )
108 {
109 TOOL_ACTION* action = layer2action( layerid );
110
111 if( action )
112 layername = AddHotkeyName( layername, action->GetHotKey(), IS_COMMENT );
113 }
114
115 Append( layername, bmp, (void*)(intptr_t) layerid );
116 }
117
118 if( !m_undefinedLayerName.IsEmpty() )
119 Append( m_undefinedLayerName, wxNullBitmap, (void*)(intptr_t)UNDEFINED_LAYER );
120
121 // Ensure the size of the widget is enough to show the text and the icon
122 // We have to have a selected item when doing this, because otherwise GTK
123 // will just choose a random size that might not fit the actual data
124 // (such as in cases where the font size is very large). So we select
125 // the first item, get the size of the control and make that the minimum size,
126 // then remove the selection (which was the initial state).
127 SetSelection( 0 );
128
129 SetMinSize( wxSize( -1, -1 ) );
130 wxSize bestSize = GetBestSize();
131
132 bestSize.x = GetBestSize().x + BM_SIZE + 10;
133 SetMinSize( bestSize );
134
135 SetSelection( wxNOT_FOUND );
136 Thaw();
137}
138
139
140// Returns true if the layer id is enabled (i.e. is it should be displayed)
142{
143 return getEnabledLayers().test( aLayer );
144}
145
146
148{
149 static LSET footprintEditorLayers = LSET::AllLayersMask() & ~LSET::ForbiddenFootprintLayers();
150
151 if( m_boardFrame )
153 else
154 return footprintEditorLayers;
155}
156
157
158// Returns a color index from the layer id
160{
161 if( m_boardFrame )
162 {
163 return m_boardFrame->GetColorSettings()->GetColor( aLayer );
164 }
165 else
166 {
167 SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager();
169 COLOR_SETTINGS* current = mgr.GetColorSettings( settings->m_ColorTheme );
170
171 return current->GetColor( aLayer );
172 }
173}
174
175
176// Returns the name of the layer id
177wxString PCB_LAYER_BOX_SELECTOR::getLayerName( int aLayer ) const
178{
179 if( m_boardFrame )
180 return m_boardFrame->GetBoard()->GetLayerName( ToLAYER_ID( aLayer ) );
181 else
182 return BOARD::GetStandardLayerName( ToLAYER_ID( aLayer ) );
183}
wxString m_ColorTheme
Active color theme name.
Definition: app_settings.h:187
LSET GetEnabledLayers() const
A proxy function that calls the corresponding function in m_BoardSettings.
Definition: board.cpp:485
static wxString GetStandardLayerName(PCB_LAYER_ID aLayerId)
Return an "English Standard" name of a PCB layer when given aLayerNumber.
Definition: board.h:689
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
Definition: board.cpp:384
Color settings are a bit different than most of the settings objects in that there can be more than o...
COLOR4D GetColor(int aLayer) const
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:104
static void DrawColorSwatch(wxBitmap &aLayerbmp, const COLOR4D &aBackground, const COLOR4D &aColor)
LSET is a set of PCB_LAYER_IDs.
Definition: layer_ids.h:530
LSEQ UIOrder() const
Definition: lset.cpp:916
static LSET AllLayersMask()
Definition: lset.cpp:808
static TOOL_ACTION layerInner12
Definition: pcb_actions.h:291
static TOOL_ACTION layerInner8
Definition: pcb_actions.h:287
static TOOL_ACTION layerInner3
Definition: pcb_actions.h:282
static TOOL_ACTION layerInner2
Definition: pcb_actions.h:281
static TOOL_ACTION layerInner25
Definition: pcb_actions.h:304
static TOOL_ACTION layerInner24
Definition: pcb_actions.h:303
static TOOL_ACTION layerInner29
Definition: pcb_actions.h:308
static TOOL_ACTION layerInner11
Definition: pcb_actions.h:290
static TOOL_ACTION layerInner16
Definition: pcb_actions.h:295
static TOOL_ACTION layerInner26
Definition: pcb_actions.h:305
static TOOL_ACTION layerInner18
Definition: pcb_actions.h:297
static TOOL_ACTION layerInner14
Definition: pcb_actions.h:293
static TOOL_ACTION layerInner6
Definition: pcb_actions.h:285
static TOOL_ACTION layerInner22
Definition: pcb_actions.h:301
static TOOL_ACTION layerInner5
Definition: pcb_actions.h:284
static TOOL_ACTION layerInner20
Definition: pcb_actions.h:299
static TOOL_ACTION layerInner7
Definition: pcb_actions.h:286
static TOOL_ACTION layerInner27
Definition: pcb_actions.h:306
static TOOL_ACTION layerInner1
Definition: pcb_actions.h:280
static TOOL_ACTION layerInner10
Definition: pcb_actions.h:289
static TOOL_ACTION layerInner15
Definition: pcb_actions.h:294
static TOOL_ACTION layerInner17
Definition: pcb_actions.h:296
static TOOL_ACTION layerBottom
Definition: pcb_actions.h:310
static TOOL_ACTION layerInner19
Definition: pcb_actions.h:298
static TOOL_ACTION layerInner9
Definition: pcb_actions.h:288
static TOOL_ACTION layerInner30
Definition: pcb_actions.h:309
static TOOL_ACTION layerTop
Definition: pcb_actions.h:279
static TOOL_ACTION layerInner4
Definition: pcb_actions.h:283
static TOOL_ACTION layerInner13
Definition: pcb_actions.h:292
static TOOL_ACTION layerInner21
Definition: pcb_actions.h:300
static TOOL_ACTION layerInner23
Definition: pcb_actions.h:302
static TOOL_ACTION layerInner28
Definition: pcb_actions.h:307
BOARD * GetBoard() const
virtual COLOR_SETTINGS * GetColorSettings(bool aForceRefresh=false) const override
Helper to retrieve the current color settings.
COLOR4D getLayerColor(int aLayer) const override
bool isLayerEnabled(int aLayer) const override
wxString getLayerName(int aLayer) const override
T * GetAppSettings(bool aLoadNow=true)
Returns a handle to the a given settings by type If the settings have already been loaded,...
COLOR_SETTINGS * GetColorSettings(const wxString &aName="user")
Retrieves a color settings object that applications can read colors from.
Represent a single user action.
Definition: tool_action.h:68
int GetHotKey() const
Return the hotkey keycode which initiates the action.
Definition: tool_action.h:111
#define _(s)
#define BM_SIZE
wxString AddHotkeyName(const wxString &aText, int aHotKey, HOTKEY_ACTION_TYPE aStyle)
@ IS_COMMENT
Definition: hotkeys_basic.h:78
@ LAYER_PCB_BACKGROUND
PCB background color.
Definition: layer_ids.h:220
PCB_LAYER_ID
A quick note on layer IDs:
Definition: layer_ids.h:59
@ In22_Cu
Definition: layer_ids.h:86
@ In11_Cu
Definition: layer_ids.h:75
@ In29_Cu
Definition: layer_ids.h:93
@ In30_Cu
Definition: layer_ids.h:94
@ In17_Cu
Definition: layer_ids.h:81
@ In9_Cu
Definition: layer_ids.h:73
@ In19_Cu
Definition: layer_ids.h:83
@ In7_Cu
Definition: layer_ids.h:71
@ In28_Cu
Definition: layer_ids.h:92
@ In26_Cu
Definition: layer_ids.h:90
@ B_Cu
Definition: layer_ids.h:95
@ In21_Cu
Definition: layer_ids.h:85
@ In23_Cu
Definition: layer_ids.h:87
@ In15_Cu
Definition: layer_ids.h:79
@ In2_Cu
Definition: layer_ids.h:66
@ In10_Cu
Definition: layer_ids.h:74
@ In4_Cu
Definition: layer_ids.h:68
@ UNDEFINED_LAYER
Definition: layer_ids.h:60
@ In16_Cu
Definition: layer_ids.h:80
@ In24_Cu
Definition: layer_ids.h:88
@ In1_Cu
Definition: layer_ids.h:65
@ In13_Cu
Definition: layer_ids.h:77
@ In8_Cu
Definition: layer_ids.h:72
@ In14_Cu
Definition: layer_ids.h:78
@ In12_Cu
Definition: layer_ids.h:76
@ In27_Cu
Definition: layer_ids.h:91
@ In6_Cu
Definition: layer_ids.h:70
@ In5_Cu
Definition: layer_ids.h:69
@ In3_Cu
Definition: layer_ids.h:67
@ In20_Cu
Definition: layer_ids.h:84
@ F_Cu
Definition: layer_ids.h:64
@ In18_Cu
Definition: layer_ids.h:82
@ In25_Cu
Definition: layer_ids.h:89
PCB_LAYER_ID ToLAYER_ID(int aLayer)
Definition: lset.cpp:926
static TOOL_ACTION * layer2action(PCB_LAYER_ID aLayer)
see class PGM_BASE
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:111