KiCad PCB EDA Suite
Loading...
Searching...
No Matches
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#include <dpi_scaling_common.h>
36
37
38// class to display a layer list in a wxBitmapComboBox.
39
40// Reload the Layers
42{
43 Freeze();
44 Clear();
45
46#ifdef __WXMSW__
47 DPI_SCALING_COMMON dpi( nullptr, this );
48 int size = static_cast<int>( 14 / dpi.GetContentScaleFactor() );
49#else
50 const int size = 14;
51#endif
52
53 LSET show = LSET::AllLayersMask() & ~m_layerMaskDisable;
54 LSET activated = getEnabledLayers() & ~m_layerMaskDisable;
55 wxString layerstatus;
56
57 for( PCB_LAYER_ID layerid : show.UIOrder() )
58 {
59 if( !m_showNotEnabledBrdlayers && !activated[layerid] )
60 continue;
61 else if( !activated[layerid] )
62 layerstatus = wxT( " " ) + _( "(not activated)" );
63 else
64 layerstatus.Empty();
65
66 wxBitmap bmp( size, size );
68
69 wxString layername = getLayerName( layerid ) + layerstatus;
70
71 if( m_layerhotkeys )
72 {
73 TOOL_ACTION* action = PCB_ACTIONS::LayerIDToAction( layerid );
74
75 if( action )
76 layername = AddHotkeyName( layername, action->GetHotKey(), IS_COMMENT );
77 }
78
79 Append( layername, bmp, (void*)(intptr_t) layerid );
80 }
81
82 if( !m_undefinedLayerName.IsEmpty() )
83 Append( m_undefinedLayerName, wxNullBitmap, (void*)(intptr_t)UNDEFINED_LAYER );
84
85 // Ensure the size of the widget is enough to show the text and the icon
86 // We have to have a selected item when doing this, because otherwise GTK
87 // will just choose a random size that might not fit the actual data
88 // (such as in cases where the font size is very large). So we select
89 // the first item, get the size of the control and make that the minimum size,
90 // then remove the selection (which was the initial state).
91 SetSelection( 0 );
92
93 SetMinSize( wxSize( -1, -1 ) );
94 wxSize bestSize = GetBestSize();
95
96 bestSize.x = GetBestSize().x + size + 10;
97 SetMinSize( bestSize );
98
99 SetSelection( wxNOT_FOUND );
100 Fit();
101 Thaw();
102}
103
104
105// Returns true if the layer id is enabled (i.e. is it should be displayed)
107{
108 return getEnabledLayers().test( aLayer );
109}
110
111
113{
114 static LSET footprintEditorLayers = LSET::AllLayersMask() & ~LSET::ForbiddenFootprintLayers();
115
116 if( m_boardFrame )
118 else
119 return footprintEditorLayers;
120}
121
122
123// Returns a color index from the layer id
125{
126 if( m_boardFrame )
127 {
128 return m_boardFrame->GetColorSettings()->GetColor( aLayer );
129 }
130 else
131 {
134 COLOR_SETTINGS* current = mgr.GetColorSettings( settings->m_ColorTheme );
135
136 return current->GetColor( aLayer );
137 }
138}
139
140
141// Returns the name of the layer id
142wxString PCB_LAYER_BOX_SELECTOR::getLayerName( int aLayer ) const
143{
144 if( m_boardFrame )
145 return m_boardFrame->GetBoard()->GetLayerName( ToLAYER_ID( aLayer ) );
146 else
147 return BOARD::GetStandardLayerName( ToLAYER_ID( aLayer ) );
148}
wxString m_ColorTheme
Active color theme name.
Definition: app_settings.h:173
LSET GetEnabledLayers() const
A proxy function that calls the corresponding function in m_BoardSettings.
Definition: board.cpp:680
static wxString GetStandardLayerName(PCB_LAYER_ID aLayerId)
Return an "English Standard" name of a PCB layer when given aLayerNumber.
Definition: board.h:765
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
Definition: board.cpp:567
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
Class to handle configuration and automatic determination of the DPI scale to use for canvases.
double GetContentScaleFactor() const override
Get the content scale factor, which may be different from the scale factor on some platforms.
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:574
LSEQ UIOrder() const
Definition: lset.cpp:1012
static LSET AllLayersMask()
Definition: lset.cpp:898
static TOOL_ACTION * LayerIDToAction(PCB_LAYER_ID aLayerID)
Translate a layer ID into the action that switches to that layer.
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
virtual SETTINGS_MANAGER & GetSettingsManager() const
Definition: pgm_base.h:142
T * GetAppSettings()
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:269
int GetHotKey() const
Return the hotkey keycode which initiates the action.
Definition: tool_action.h:313
#define _(s)
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:224
PCB_LAYER_ID
A quick note on layer IDs:
Definition: layer_ids.h:60
@ UNDEFINED_LAYER
Definition: layer_ids.h:61
PCB_LAYER_ID ToLAYER_ID(int aLayer)
Definition: lset.cpp:1022
PGM_BASE & Pgm()
The global Program "get" accessor.
Definition: pgm_base.cpp:1059
see class PGM_BASE