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 Thaw();
101}
102
103
104// Returns true if the layer id is enabled (i.e. is it should be displayed)
106{
107 return getEnabledLayers().test( aLayer );
108}
109
110
112{
113 static LSET footprintEditorLayers = LSET::AllLayersMask() & ~LSET::ForbiddenFootprintLayers();
114
115 if( m_boardFrame )
117 else
118 return footprintEditorLayers;
119}
120
121
122// Returns a color index from the layer id
124{
125 if( m_boardFrame )
126 {
127 return m_boardFrame->GetColorSettings()->GetColor( aLayer );
128 }
129 else
130 {
131 SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager();
133 COLOR_SETTINGS* current = mgr.GetColorSettings( settings->m_ColorTheme );
134
135 return current->GetColor( aLayer );
136 }
137}
138
139
140// Returns the name of the layer id
141wxString PCB_LAYER_BOX_SELECTOR::getLayerName( int aLayer ) const
142{
143 if( m_boardFrame )
144 return m_boardFrame->GetBoard()->GetLayerName( ToLAYER_ID( aLayer ) );
145 else
146 return BOARD::GetStandardLayerName( ToLAYER_ID( aLayer ) );
147}
wxString m_ColorTheme
Active color theme name.
Definition: app_settings.h:172
LSET GetEnabledLayers() const
A proxy function that calls the corresponding function in m_BoardSettings.
Definition: board.cpp:628
static wxString GetStandardLayerName(PCB_LAYER_ID aLayerId)
Return an "English Standard" name of a PCB layer when given aLayerNumber.
Definition: board.h:742
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
Definition: board.cpp:515
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:556
LSEQ UIOrder() const
Definition: lset.cpp:931
static LSET AllLayersMask()
Definition: lset.cpp:817
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
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:221
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:941
see class PGM_BASE
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:119