53#include <wx/checkbox.h>
54#include <wx/hyperlink.h>
55#include <wx/radiobut.h>
58#include <wx/statline.h>
59#include <wx/textdlg.h>
60#include <wx/bmpbuttn.h>
73 m_labelAttr->SetBackgroundColour( aBackgroundColor );
86 wxGridCellAttr* attr =
nullptr;
105 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
112 default:
return wxEmptyString;
119 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
131 net.
visible = ( aValue != wxT(
"0" ) );
151 case COL_LABEL:
return wxGRID_VALUE_STRING;
152 default:
return wxGRID_VALUE_STRING;
159 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
162 return m_nets[aRow].visible;
168 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
171 m_nets[aRow].visible = aValue;
179 wxASSERT( aTypeName == wxT(
"COLOR4D" ) );
180 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
189 wxASSERT( aTypeName == wxT(
"COLOR4D" ) );
190 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
199 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
209 return aEntry.code == aCode;
215 return std::distance(
m_nets.cbegin(), it );
230 int deleted =
m_nets.size();
235 wxGridTableMessage msg(
this, wxGRIDTABLE_NOTIFY_ROWS_DELETED, 0, deleted );
236 GetView()->ProcessTableMessage( msg );
239 for(
const std::pair<const wxString, NETINFO_ITEM*>& pair : nets )
241 int netCode = pair.second->GetNetCode();
243 if( netCode > 0 && !pair.first.StartsWith( wxT(
"unconnected-(" ) ) )
245 COLOR4D color = netColors.count( netCode ) ? netColors.at( netCode ) :
246 COLOR4D::UNSPECIFIED;
248 bool visible = hiddenNets.count( netCode ) == 0;
258 return a.name < b.name;
263 wxGridTableMessage msg(
this, wxGRIDTABLE_NOTIFY_ROWS_APPENDED,
m_nets.size() );
264 GetView()->ProcessTableMessage( msg );
278 GetView()->ForceRefresh();
286 net.visible = ( net.code == aNet.
code );
291 GetView()->ForceRefresh();
309 std::map<int, KIGFX::COLOR4D>& netColors = renderSettings->
GetNetColorMap();
311 if( aNet.
color != COLOR4D::UNSPECIFIED )
314 netColors.erase( aNet.
code );
325#define RR APPEARANCE_CONTROLS::APPEARANCE_SETTING
401 bool aFpEditorMode ) :
404 m_focusOwner( aFocusOwner ),
406 m_isFpEditor( aFpEditorMode ),
407 m_currentPreset( nullptr ),
408 m_lastSelectedUserPreset( nullptr ),
409 m_layerContextMenu( nullptr ),
410 m_togglingNetclassRatsnestVisibility( false )
413 SetMinSize( FromDIP( GetMinSize() ) );
418 int screenHeight = wxSystemSettings::GetMetric( wxSYS_SCREEN_Y );
420 m_pointSize = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ).GetPointSize();
444 m_cbLayerPresets->SetToolTip( wxString::Format(
_(
"Save and restore layer visibility combinations.\n"
445 "Use %s+Tab to activate selector.\n"
446 "Successive Tabs while holding %s down will "
447 "cycle through presets in the popup." ),
451 m_cbViewports->SetToolTip( wxString::Format(
_(
"Save and restore view location and zoom.\n"
452 "Use %s+Tab to activate selector.\n"
453 "Successive Tabs while holding %s down will "
454 "cycle through viewports in the popup." ),
468 if( screenHeight <= 900 && m_pointSize >= indicatorSize )
478 auto setHighContrastMode =
489 [=]( wxCommandEvent& aEvent )
491 setHighContrastMode( HIGH_CONTRAST_MODE::NORMAL );
495 [=]( wxCommandEvent& aEvent )
497 setHighContrastMode( HIGH_CONTRAST_MODE::DIMMED );
501 [=]( wxCommandEvent& aEvent )
503 setHighContrastMode( HIGH_CONTRAST_MODE::HIDDEN );
509 [&]( wxCommandEvent& aEvent )
516 [&]( wxCommandEvent& aEvent )
520 editframe->ShowBoardSetupDialog(
_(
"Net Classes" ) );
527 [&]( wxCommandEvent& aEvent )
538 m_netsGrid->RegisterDataType( wxT(
"COLOR4D" ),
546 m_netsGrid->SetSelectionMode( wxGrid::wxGridSelectRows );
550 const int cellPadding = 6;
552 const int rowHeightPadding = 5;
554 const int rowHeightPadding = 3;
560 size =
KiBitmapBundle( BITMAPS::visibility ).GetPreferredBitmapSizeFor(
this );
564 m_netsGrid->SetDefaultRowSize( font.GetPixelSize().y + rowHeightPadding );
573 m_netsGrid->ShowScrollbars( wxSHOW_SB_NEVER, wxSHOW_SB_DEFAULT );
617 _(
"Layer Display Options" ) );
623 wxBoxSizer* layerDisplayOptionsSizer;
624 layerDisplayOptionsSizer =
new wxBoxSizer( wxVERTICAL );
631 msg =
_(
"Inactive layers:" );
638 wxBoxSizer* contrastModeSizer;
639 contrastModeSizer =
new wxBoxSizer( wxHORIZONTAL );
642 wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
648 contrastModeSizer->AddStretchSpacer();
655 contrastModeSizer->AddStretchSpacer();
662 contrastModeSizer->AddStretchSpacer();
664 layerDisplayOptionsSizer->Add( contrastModeSizer, 0, wxEXPAND, 5 );
667 wxDefaultSize, wxLI_HORIZONTAL );
670 m_cbFlipBoard =
new wxCheckBox( layerDisplayPane, wxID_ANY,
_(
"Flip board view" ) );
672 layerDisplayOptionsSizer->Add(
m_cbFlipBoard, 0, wxTOP | wxBOTTOM, 5 );
674 layerDisplayPane->SetSizer( layerDisplayOptionsSizer );
675 layerDisplayPane->Layout();
676 layerDisplayOptionsSizer->Fit( layerDisplayPane );
681 [&]( wxCommandEvent& aEvent )
692 _(
"Net Display Options" ) );
697 wxBoxSizer* netDisplayOptionsSizer =
new wxBoxSizer( wxVERTICAL );
706 msg =
_(
"Net colors:" );
715 wxBoxSizer* netColorSizer =
new wxBoxSizer( wxHORIZONTAL );
717 m_rbNetColorAll =
new wxRadioButton( netDisplayPane, wxID_ANY,
_(
"All" ), wxDefaultPosition,
718 wxDefaultSize, wxRB_GROUP );
720 m_rbNetColorAll->SetToolTip(
_(
"Net and netclass colors are shown on all copper items" ) );
723 netColorSizer->AddStretchSpacer();
731 netColorSizer->AddStretchSpacer();
733 m_rbNetColorOff =
new wxRadioButton( netDisplayPane, wxID_ANY,
_(
"None" ) );
735 m_rbNetColorOff->SetToolTip(
_(
"Net and netclass colors are not shown" ) );
739 netDisplayOptionsSizer->Add( netColorSizer, 0, wxEXPAND | wxBOTTOM, 5 );
748 msg =
_(
"Ratsnest display:" );
757 wxBoxSizer* ratsnestDisplayModeSizer =
new wxBoxSizer( wxHORIZONTAL );
760 wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
766 ratsnestDisplayModeSizer->AddStretchSpacer();
773 ratsnestDisplayModeSizer->AddStretchSpacer();
781 netDisplayOptionsSizer->Add( ratsnestDisplayModeSizer, 0, wxEXPAND | wxBOTTOM, 5 );
785 netDisplayPane->SetSizer( netDisplayOptionsSizer );
786 netDisplayPane->Layout();
787 netDisplayOptionsSizer->Fit( netDisplayPane );
792 [&]( wxCommandEvent& aEvent )
835 int page = aEvent.GetSelection();
838 m_notebook->ChangeSelection(
static_cast<unsigned>( page ) );
867 if( wxBitmapButton* btn =
dynamic_cast<wxBitmapButton*
>( aEvent.GetEventObject() ) )
869 wxCommandEvent evt( wxEVT_BUTTON );
870 wxPostEvent( btn, evt );
887 int row =
event.GetRow();
888 int col =
event.GetCol();
905 int row =
event.GetRow();
906 int col =
event.GetCol();
928 menu.Append(
new wxMenuItem( &menu,
ID_SET_NET_COLOR,
_(
"Set Net Color" ), wxEmptyString,
930 menu.Append(
new wxMenuItem( &menu,
ID_CLEAR_NET_COLOR,
_(
"Clear Net Color" ), wxEmptyString,
933 menu.AppendSeparator();
936 wxString::Format(
_(
"Highlight %s" ), netName ), wxEmptyString,
939 wxString::Format(
_(
"Select Tracks and Vias in %s" ), netName ),
940 wxEmptyString, wxITEM_NORMAL ) );
942 wxString::Format(
_(
"Unselect Tracks and Vias in %s" ), netName ),
943 wxEmptyString, wxITEM_NORMAL ) );
945 menu.AppendSeparator();
947 menu.Append(
new wxMenuItem( &menu,
ID_SHOW_ALL_NETS,
_(
"Show All Nets" ), wxEmptyString,
950 wxEmptyString, wxITEM_NORMAL ) );
960 wxPoint pos =
m_netsGrid->CalcUnscrolledPosition( aEvent.GetPosition() );
961 wxGridCellCoords cell =
m_netsGrid->XYToCell( pos );
963 if( aEvent.Moving() || aEvent.Entering() )
981 wxString showOrHide = net.
visible ?
_(
"Click to hide ratsnest for %s" )
982 :
_(
"Click to show ratsnest for %s" );
987 tip.Printf( showOrHide,
name );
991 tip =
_(
"Double click (or middle click) to change color; "
992 "right click for more actions" );
995 m_netsGrid->GetGridWindow()->SetToolTip( tip );
997 else if( aEvent.Leaving() )
1002 else if( aEvent.Dragging() )
1010 else if( aEvent.ButtonUp( wxMOUSE_BTN_MIDDLE ) && !!cell )
1012 int row = cell.GetRow();
1013 int col = cell.GetCol();
1109 bool rebuild = std::any_of( aBoardItems.begin(), aBoardItems.end(),
1112 return a->Type() == PCB_NETINFO_T;
1191 if( child && child->GetWindow() )
1196 m_netsGrid->RegisterDataType( wxT(
"COLOR4D" ),
1202 if( pair.second->ctl_color )
1203 pair.second->ctl_color->OnDarkModeToggle();
1212 for(
const std::unique_ptr<APPEARANCE_SETTING>& setting :
m_layerSettings )
1222 if( r < 240 || g < 240 || b < 240 )
1224 r = wxChar( std::min( (
int) r + 15, 255 ) );
1225 g = wxChar( std::min( (
int) g + 15, 255 ) );
1226 b = wxChar( std::min( (
int) b + 15, 255 ) );
1230 r = wxChar( std::max( (
int) r - 15, 0 ) );
1231 g = wxChar( std::max( (
int) g - 15, 0 ) );
1232 b = wxChar( std::max( (
int) b - 15, 0 ) );
1245 newSetting->
ctl_panel->SetBackgroundColour( wxColour( r, g, b ) );
1257 if( visible.test( layer ) == isVisible )
1260 visible.set( layer, isVisible );
1307 return dynamic_cast<PCB_VIA*
>( aItem ) ||
dynamic_cast<PAD*
>( aItem );
1364 for(
size_t i = 0; i < set.size(); i++ )
1416 std::vector<LAYER_PRESET> ret;
1418 for(
const std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
1420 if( !pair.second.readOnly )
1421 ret.emplace_back( pair.second );
1469 wxCommandEvent
dummy;
1491 std::vector<VIEWPORT> ret;
1493 for(
const std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
1494 ret.emplace_back( pair.second );
1504 for(
const VIEWPORT& viewport : aViewportList )
1522 wxCommandEvent
dummy;
1546 m_windowLayersSizerItem->SetFlag( m_windowLayersSizerItem->GetFlag() & ~wxTOP );
1550 [&]( std::unique_ptr<APPEARANCE_SETTING>& aSetting )
1552 int layer = aSetting->id;
1555 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
1556 panel->SetSizer( sizer );
1560 aSetting->visible = visible[layer];
1570 swatch->SetToolTip(
_(
"Double click or middle click for color change, "
1571 "right click for menu" ) );
1576 btn_visible->SetToolTip(
_(
"Show or hide this layer" ) );
1578 wxStaticText* label =
new wxStaticText( panel, layer, aSetting->label );
1580 label->SetToolTip( aSetting->tooltip );
1582 sizer->AddSpacer( 1 );
1583 sizer->Add( indicator, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1584 sizer->AddSpacer( 5 );
1585 sizer->Add( swatch, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1586 sizer->AddSpacer( 6 );
1587 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1588 sizer->AddSpacer( 5 );
1589 sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1593 aSetting->ctl_panel = panel;
1594 aSetting->ctl_indicator = indicator;
1595 aSetting->ctl_visibility = btn_visible;
1596 aSetting->ctl_color = swatch;
1597 aSetting->ctl_text = label;
1604 btn_visible->Bind( TOGGLE_CHANGED,
1605 [&]( wxCommandEvent& aEvent )
1607 wxObject* btn = aEvent.GetEventObject();
1608 int layerId =
static_cast<wxWindow*
>( btn )->GetId();
1627 [&]( std::unique_ptr<APPEARANCE_SETTING>& aSetting )
1629 int layer = aSetting->id;
1630 aSetting->visible = visible[layer];
1631 aSetting->ctl_panel->Show();
1632 aSetting->ctl_panel->SetId( layer );
1633 aSetting->ctl_indicator->SetWindowID( layer );
1634 aSetting->ctl_color->SetWindowID( layer );
1635 aSetting->ctl_color->SetSwatchColor( theme->
GetColor( layer ), false );
1636 aSetting->ctl_visibility->SetWindowID( layer );
1637 aSetting->ctl_text->SetLabelText( aSetting->label );
1638 aSetting->ctl_text->SetId( layer );
1639 aSetting->ctl_text->SetToolTip( aSetting->tooltip );
1645 static const struct {
1651 {
F_Paste,
_HKI(
"Solder paste on board's front" ) },
1652 {
B_Paste,
_HKI(
"Solder paste on board's back" ) },
1653 {
F_SilkS,
_HKI(
"Silkscreen on board's front" ) },
1654 {
B_SilkS,
_HKI(
"Silkscreen on board's back" ) },
1655 {
F_Mask,
_HKI(
"Solder mask on board's front" ) },
1656 {
B_Mask,
_HKI(
"Solder mask on board's back" ) },
1662 {
Margin,
_HKI(
"Board's edge setback outline" ) },
1663 {
F_CrtYd,
_HKI(
"Footprint courtyards on board's front" ) },
1664 {
B_CrtYd,
_HKI(
"Footprint courtyards on board's back" ) },
1665 {
F_Fab,
_HKI(
"Footprint assembly on board's front" ) },
1666 {
B_Fab,
_HKI(
"Footprint assembly on board's back" ) },
1693 std::size_t total_layers = enabled.
CuStack().size();
1695 for(
const auto& entry : non_cu_seq )
1697 if( enabled[entry.layerId] )
1707 for( std::size_t ii = total_layers; ii <
m_layerSettings.size(); ++ii )
1716 for(
LSEQ cu_stack = enabled.
CuStack(); cu_stack; ++cu_stack, ++layer_it )
1723 case F_Cu: dsc =
_(
"Front copper layer" );
break;
1724 case B_Cu: dsc =
_(
"Back copper layer" );
break;
1725 default: dsc =
_(
"Inner copper layer" );
break;
1728 std::unique_ptr<APPEARANCE_SETTING>& setting = *layer_it;
1731 setting->id = layer;
1732 setting->tooltip = dsc;
1734 if( setting->ctl_panel ==
nullptr )
1735 appendLayer( setting );
1737 updateLayer( setting );
1743 setting->ctl_text->Disable();
1744 setting->ctl_color->SetToolTip( wxEmptyString );
1748 for(
const auto& entry : non_cu_seq )
1752 if( !enabled[layer] )
1755 std::unique_ptr<APPEARANCE_SETTING>& setting = *layer_it;
1758 setting->id = layer;
1761 setting->tooltip = wxGetTranslation( entry.tooltip );
1763 if( setting->ctl_panel ==
nullptr )
1764 appendLayer( setting );
1766 updateLayer( setting );
1772 setting->ctl_text->Disable();
1773 setting->ctl_color->SetToolTip( wxEmptyString );
1791 msg =
_(
"Inactive layers:" );
1814 KiBitmap( BITMAPS::show_all_copper_layers ) );
1816 KiBitmap( BITMAPS::show_no_copper_layers ) );
1821 _(
"Hide All Layers But Active" ),
KiBitmap( BITMAPS::select_w_layer ) );
1826 _(
"Show All Non Copper Layers" ),
1827 KiBitmap( BITMAPS::show_no_copper_layers ) );
1830 _(
"Hide All Non Copper Layers" ),
1831 KiBitmap( BITMAPS::show_all_copper_layers ) );
1836 KiBitmap( BITMAPS::show_all_layers ) );
1839 KiBitmap( BITMAPS::show_no_layers ) );
1844 _(
"Show Only Front Assembly Layers" ),
1845 KiBitmap( BITMAPS::show_front_assembly_layers ) );
1848 KiBitmap( BITMAPS::show_all_front_layers ) );
1854 _(
"Show Only Inner Layers" ),
1855 KiBitmap( BITMAPS::show_all_copper_layers ) );
1859 KiBitmap( BITMAPS::show_all_back_layers ) );
1862 _(
"Show Only Back Assembly Layers" ),
1863 KiBitmap( BITMAPS::show_back_assembly_layers ) );
1878 switch( aEvent.GetId() )
1901 visible &= ~presetAllCopper.layers;
1903 if( !visible.test( current ) && visible.count() > 0 )
1912 if( !visible.test( current ) && visible.count() > 0 )
1919 visible |= ~presetAllCopper.layers;
1970 if( aTab >= 0 &&
static_cast<size_t>( aTab ) < max )
1986 int layer = setting->id;
1988 if( setting->ctl_visibility )
1989 setting->ctl_visibility->SetValue( visible[layer] );
1991 if( setting->ctl_color )
1994 setting->ctl_color->SetSwatchColor(
color,
false );
1995 setting->ctl_color->SetReadOnly( readOnly );
2003 if( setting->ctl_visibility )
2004 setting->ctl_visibility->SetValue( objects.
Contains( layer ) );
2006 if( setting->ctl_color )
2009 setting->ctl_color->SetSwatchColor(
color,
false );
2010 setting->ctl_color->SetReadOnly( readOnly );
2025 wxWindow* eventSource =
static_cast<wxWindow*
>( aEvent.GetEventObject() );
2049 visibleLayers.set( aLayer, !visibleLayers.test( aLayer ) );
2118 if( visible.
Contains( aLayer ) != isVisible )
2120 visible.
set( aLayer, isVisible );
2139 int swatchWidth =
m_windowObjects->ConvertDialogToPixels( wxSize( 8, 0 ) ).x;
2147 [&](
const std::unique_ptr<APPEARANCE_SETTING>& aSetting )
2149 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
2150 int layer = aSetting->id;
2156 if(
color != COLOR4D::UNSPECIFIED )
2160 swatch->SetToolTip(
_(
"Left double click or middle click for color change, "
2161 "right click for menu" ) );
2163 sizer->Add( swatch, 0, wxALIGN_CENTER_VERTICAL, 0 );
2164 aSetting->ctl_color = swatch;
2174 sizer->AddSpacer( swatchWidth );
2182 tip.Printf(
_(
"Show or hide %s" ), aSetting->label.Lower() );
2183 btn_visible->SetToolTip( tip );
2185 aSetting->ctl_visibility = btn_visible;
2187 sizer->AddSpacer( 5 );
2189 btn_visible->Bind( TOGGLE_CHANGED,
2190 [&]( wxCommandEvent& aEvent )
2192 int id =
static_cast<wxWindow*
>( aEvent.GetEventObject() )->GetId();
2193 bool isVisible = aEvent.GetInt();
2197 wxStaticText* label =
new wxStaticText(
m_windowObjects, layer, aSetting->label );
2199 label->SetToolTip( aSetting->tooltip );
2201 if( aSetting->can_control_opacity )
2203 label->SetMinSize( wxSize( labelWidth, -1 ) );
2205 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 10 );
2206 sizer->AddSpacer( 5 );
2207 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 10 );
2209 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL, 0 );
2210 sizer->AddSpacer( 5 );
2211 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL, 0 );
2214 wxSlider* slider =
new wxSlider(
m_windowObjects, wxID_ANY, 100, 0, 100,
2215 wxDefaultPosition, wxDefaultSize,
2218 slider->SetMinSize( wxSize( 80, 16 ) );
2220 slider->SetMinSize( wxSize( 80, -1 ) );
2223 tip.Printf(
_(
"Set opacity of %s" ), aSetting->label.Lower() );
2224 slider->SetToolTip( tip );
2226 sizer->Add( slider, 1, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 5 );
2227 aSetting->ctl_opacity = slider;
2229 auto opacitySliderHandler =
2230 [=]( wxCommandEvent& aEvent )
2232 wxSlider* ctrl =
static_cast<wxSlider*
>( aEvent.GetEventObject() );
2233 int value = ctrl->GetValue();
2237 slider->Bind( wxEVT_SCROLL_CHANGED, opacitySliderHandler );
2238 slider->Bind( wxEVT_SCROLL_THUMBTRACK, opacitySliderHandler );
2243 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL, 0 );
2244 sizer->AddSpacer( 5 );
2245 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL, 0 );
2248 aSetting->ctl_text = label;
2251 if( !aSetting->can_control_opacity )
2260 m_objectSettings.emplace_back( std::make_unique<APPEARANCE_SETTING>( s_setting ) );
2266 setting->tooltip = wxGetTranslation( s_setting.tooltip );
2267 setting->label = wxGetTranslation( s_setting.label );
2269 if( setting->can_control_opacity )
2272 labelWidth = std::max( labelWidth, width );
2275 if( !s_setting.spacer )
2279 for(
const std::unique_ptr<APPEARANCE_SETTING>& setting :
m_objectSettings )
2281 if( setting->spacer )
2284 appendObject( setting );
2299 if( setting->spacer )
2304 if( setting->ctl_visibility )
2305 setting->ctl_visibility->SetValue( visible.
Contains( layer ) );
2307 if( setting->ctl_color )
2310 setting->ctl_color->SetSwatchColor(
color,
false );
2329 const wxString& aName )
2334 if( !isDefaultClass)
2336 aMenu.Append(
new wxMenuItem( &aMenu,
ID_SET_NET_COLOR,
_(
"Set Netclass Color" ),
2337 wxEmptyString, wxITEM_NORMAL ) );
2339 wxMenuItem* schematicColor =
2341 wxEmptyString, wxITEM_NORMAL );
2342 std::shared_ptr<NETCLASS> nc = netSettings->GetNetClassByName( aName );
2344 aMenu.Append( schematicColor );
2347 schematicColor->Enable(
false );
2350 wxEmptyString, wxITEM_NORMAL ) );
2351 aMenu.AppendSeparator();
2357 wxString::Format(
_(
"Highlight Nets in %s" ),
name ),
2358 wxEmptyString, wxITEM_NORMAL ) );
2360 wxString::Format(
_(
"Select Tracks and Vias in %s" ),
name ),
2361 wxEmptyString, wxITEM_NORMAL ) );
2363 wxString::Format(
_(
"Unselect Tracks and Vias in %s" ),
name ),
2364 wxEmptyString, wxITEM_NORMAL ) );
2366 aMenu.AppendSeparator();
2368 aMenu.Append(
new wxMenuItem( &aMenu,
ID_SHOW_ALL_NETS,
_(
"Show All Netclasses" ),
2369 wxEmptyString, wxITEM_NORMAL ) );
2370 aMenu.Append(
new wxMenuItem( &aMenu,
ID_HIDE_OTHER_NETS,
_(
"Hide All Other Netclasses" ),
2371 wxEmptyString, wxITEM_NORMAL ) );
2399 auto appendNetclass =
2400 [&](
int aId,
const std::shared_ptr<NETCLASS>& aClass,
bool isDefaultClass = false )
2402 wxString
name = aClass->GetName();
2409 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
2412 COLOR4D::UNSPECIFIED;
2416 setting->
ctl_color->SetToolTip(
_(
"Left double click or middle click for color "
2417 "change, right click for menu" ) );
2419 setting->
ctl_color->Bind( COLOR_SWATCH_CHANGED,
2423 if( isDefaultClass )
2431 tip.Printf(
_(
"Show or hide ratsnest for nets in %s" ),
name );
2437 int flags = wxALIGN_CENTER_VERTICAL;
2439 sizer->Add( setting->
ctl_color, 0, flags | wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5 );
2440 sizer->AddSpacer( 7 );
2442 sizer->AddSpacer( 3 );
2443 sizer->Add( setting->
ctl_text, 1, flags, 5 );
2453 [&,
name, isDefaultClass]( wxMouseEvent& aEvent )
2462 setting->
ctl_panel->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2464 setting->
ctl_color->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2465 setting->
ctl_text->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2470 std::vector<wxString> names;
2472 for(
const auto& [
name, netclass ] : netSettings->m_NetClasses )
2473 names.emplace_back(
name );
2475 std::sort( names.begin(), names.end() );
2479 int idx = wxID_HIGHEST;
2482 appendNetclass( idx++, netSettings->m_DefaultNetClass,
true );
2484 for(
const wxString&
name : names )
2487 appendNetclass( idx++, netSettings->m_NetClasses.at(
name ) );
2500 msg =
_(
"Net colors:" );
2506 m_rbNetColorAll->SetToolTip(
_(
"Net and netclass colors are shown on all copper items" ) );
2512 m_rbNetColorOff->SetToolTip(
_(
"Net and netclass colors are not shown" ) );
2519 msg =
_(
"Ratsnest display:" );
2550 int default_idx = 0;
2552 for( std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
2555 static_cast<void*
>( &pair.second ) );
2583 [&](
const std::pair<const wxString, LAYER_PRESET>& aPair )
2585 return ( aPair.second.layers == visibleLayers
2586 && aPair.second.renderLayers == visibleObjects
2587 && aPair.second.flipBoard == flipBoard );
2594 bool do_translate = it->second.readOnly;
2595 wxString
text = do_translate ? wxGetTranslation( it->first ) : it->first;
2615 wxString ui_label = aName;
2617 for( std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
2619 if( pair.first != aName )
2622 if( pair.second.readOnly ==
true )
2623 ui_label = wxGetTranslation( aName );
2647 auto resetSelection =
2656 if( index == count - 3 )
2662 else if( index == count - 2 )
2670 wxTextEntryDialog dlg( wxGetTopLevelParent(
this ),
_(
"Layer preset name:" ),
2671 _(
"Save Layer Preset" ),
name );
2673 if( dlg.ShowModal() != wxID_OK )
2679 name = dlg.GetValue();
2696 wxMessageBox(
_(
"Default presets cannot be modified.\nPlease use a different name." ),
2697 _(
"Error" ), wxOK | wxICON_ERROR, wxGetTopLevelParent(
this ) );
2704 if( !
IsOK( wxGetTopLevelParent(
this ),
_(
"Overwrite existing preset?" ) ) )
2724 else if( index == count - 1 )
2727 wxArrayString headers;
2728 std::vector<wxArrayString> items;
2730 headers.Add(
_(
"Presets" ) );
2732 for( std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
2734 if( !pair.second.readOnly )
2737 item.Add( pair.first );
2738 items.emplace_back( item );
2745 if( dlg.ShowModal() == wxID_OK )
2750 if( idx != wxNOT_FOUND )
2816 activeLayer = *aPreset.
layers.
Seq().begin();
2846 for( std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
2847 m_cbViewports->Append( pair.first,
static_cast<void*
>( &pair.second ) );
2880 if( index >= 0 && index < count - 3 )
2884 wxCHECK( viewport, );
2888 if( !viewport->
name.IsEmpty() )
2894 else if( index == count - 2 )
2899 wxTextEntryDialog dlg( wxGetTopLevelParent(
this ),
2900 _(
"Viewport name:" ),
_(
"Save Viewport" ),
name );
2902 if( dlg.ShowModal() != wxID_OK )
2912 name = dlg.GetValue();
2933 else if( index == count - 1 )
2936 wxArrayString headers;
2937 std::vector<wxArrayString> items;
2939 headers.Add(
_(
"Viewports" ) );
2941 for( std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
2944 item.Add( pair.first );
2945 items.emplace_back( item );
2951 if( dlg.ShowModal() == wxID_OK )
2956 if( idx != wxNOT_FOUND )
2987 int layer = swatch->GetId();
3005 else if( layer ==
B_Cu )
3042 wxASSERT(
m_netsGrid->GetSelectedRows().size() == 1 );
3049 switch( aEvent.GetId() )
3096 bool show = aEvent.GetInt();
3108 if( net->GetNetClass()->GetName() == aClassName )
3112 net->GetNetCode() );
3142 netSettings->m_NetClasses[netclassName]->SetPcbColor( swatch->
GetSwatchColor() );
3158 int classId = s->GetId();
3204 editframe->OnDisplayOptionsChanged();
3205 editframe->GetCanvas()->RedrawRatsnest();
3206 editframe->GetCanvas()->Refresh();
3225 setting = it->second;
3227 auto runOnNetsOfClass =
3228 [&](
const wxString& netClassName, std::function<
void(
NETINFO_ITEM* )> aFunction )
3232 if( net->GetNetClass()->GetName() == netClassName )
3237 switch( aEvent.GetId() )
3249 if(
color != COLOR4D::UNSPECIFIED )
3279 std::shared_ptr<NETCLASS> nc =
3301 static bool first =
true;
3349 for(
const auto& [
name, netclass ] : netSettings->m_NetClasses )
3367 for(
const auto& [
name, netclass ] : netSettings->m_NetClasses )
3401 wxHyperlinkCtrl* button =
new wxHyperlinkCtrl( infobar, wxID_ANY,
_(
"Open Preferences" ),
3404 button->Bind( wxEVT_COMMAND_HYPERLINK, std::function<
void( wxHyperlinkEvent& aEvent )>(
3405 [&]( wxHyperlinkEvent& aEvent )
3414 infobar->
ShowMessageFor(
_(
"The current color theme is read-only. Create a new theme in "
3415 "Preferences to enable color editing." ),
3416 10000, wxICON_INFORMATION );
static std::set< int > s_allowedInFpEditor
These GAL layers are shown in the Objects tab in the footprint editor.
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap)
wxBitmap KiBitmap(BITMAPS aBitmap, int aHeightTag)
Construct a wxBitmap from an image identifier Returns the image from the active theme if the image ha...
HIGH_CONTRAST_MODE
Determine how inactive layers should be displayed.
static TOOL_ACTION highContrastModeCycle
Class APPEARANCE_CONTROLS_BASE.
wxPanel * m_panelNetsAndClasses
wxBoxSizer * m_sizerOuter
wxBoxSizer * m_netsTabOuterSizer
wxStaticText * m_staticTextNetClasses
wxChoice * m_cbLayerPresets
wxBoxSizer * m_netclassOuterSizer
wxScrolledCanvas * m_windowLayers
wxStaticText * m_viewportsLabel
BITMAP_BUTTON * m_btnConfigureNetClasses
wxBoxSizer * m_panelLayersSizer
wxTextCtrl * m_txtNetFilter
BITMAP_BUTTON * m_btnNetInspector
wxScrolledCanvas * m_windowObjects
wxScrolledWindow * m_netclassScrolledWindow
wxStaticText * m_staticTextNets
wxStaticText * m_presetsLabel
void OnBoardNetSettingsChanged(BOARD &aBoard) override
void doApplyLayerPreset(const LAYER_PRESET &aPreset)
std::map< PCB_LAYER_ID, APPEARANCE_SETTING * > m_layerSettingsMap
wxArrayString m_presetMRU
wxStaticText * m_inactiveLayersLabel
void syncColorsAndVisibility()
std::map< GAL_LAYER_ID, APPEARANCE_SETTING * > m_objectSettingsMap
void ApplyLayerPreset(const wxString &aPresetName)
static LAYER_PRESET m_lastBuiltinPreset
wxRadioButton * m_rbHighContrastNormal
void onObjectVisibilityChanged(GAL_LAYER_ID aLayer, bool isVisible, bool isFinal)
static LAYER_PRESET presetFrontAssembly
void OnBoardItemAdded(BOARD &aBoard, BOARD_ITEM *aItem) override
void syncLayerPresetSelection()
static LAYER_PRESET presetBackAssembly
void OnNetGridClick(wxGridEvent &event) override
void setVisibleObjects(GAL_SET aObjects)
wxRadioButton * m_rbRatsnestNone
WX_COLLAPSIBLE_PANE * m_paneLayerDisplayOptions
void buildNetClassMenu(wxMenu &aMenu, bool isDefaultClass, const wxString &aName)
void onLayerVisibilityToggled(PCB_LAYER_ID aLayer)
void onLayerPresetChanged(wxCommandEvent &aEvent) override
void OnBoardItemRemoved(BOARD &aBoard, BOARD_ITEM *aItem) override
wxMenu * m_layerContextMenu
wxRadioButton * m_rbRatsnestVisLayers
@ ID_PRESET_FRONT_ASSEMBLY
@ ID_SHOW_ALL_COPPER_LAYERS
@ ID_HIDE_ALL_COPPER_LAYERS
@ ID_USE_SCHEMATIC_NET_COLOR
@ ID_PRESET_BACK_ASSEMBLY
wxRadioButton * m_rbNetColorAll
bool doesBoardItemNeedRebuild(BOARD_ITEM *aBoardItem)
wxCheckBox * m_cbFlipBoard
void SetUserLayerPresets(std::vector< LAYER_PRESET > &aPresetList)
std::vector< LAYER_PRESET > GetUserLayerPresets() const
Update the current layer presets from those saved in the project file.
static LAYER_PRESET presetInnerCopper
void updateViewportSelection(const wxString &aName)
std::map< wxString, VIEWPORT > m_viewports
void onViewportChanged(wxCommandEvent &aEvent) override
NET_GRID_TABLE * m_netsTable
std::vector< std::unique_ptr< APPEARANCE_SETTING > > m_layerSettings
void loadDefaultLayerPresets()
std::vector< std::unique_ptr< APPEARANCE_SETTING > > m_objectSettings
void onObjectOpacitySlider(int aLayer, float aOpacity)
void rebuildViewportsWidget()
wxRadioButton * m_rbRatsnestAllLayers
wxBoxSizer * m_objectsOuterSizer
wxSize GetBestSize() const
Update the panel contents from the application and board models.
void setVisibleLayers(LSET aLayers)
LAYER_PRESET * m_lastSelectedUserPreset
wxString m_contextMenuNetclass
The name of the netclass that was right-clicked.
wxRadioButton * m_rbNetColorRatsnest
void onRatsnestMode(wxCommandEvent &aEvent)
wxRadioButton * m_rbNetColorOff
static LAYER_PRESET presetFront
void doApplyViewport(const VIEWPORT &aViewport)
static const APPEARANCE_SETTING s_objectSettings[]
Template for object appearance settings.
void OnNetGridMouseEvent(wxMouseEvent &aEvent)
WX_COLLAPSIBLE_PANE * m_paneNetDisplayOptions
void OnNotebookPageChanged(wxNotebookEvent &event) override
int GetTabIndex() const
Set the current notebook tab.
bool IsLayerOptionsExpanded()
void onNetclassVisibilityChanged(wxCommandEvent &aEvent)
void OnBoardItemsRemoved(BOARD &aBoard, std::vector< BOARD_ITEM * > &aItems) override
void onNetContextMenu(wxCommandEvent &aEvent)
void OnColorSwatchChanged(wxCommandEvent &aEvent)
void updateLayerPresetSelection(const wxString &aName)
ROW_ICON_PROVIDER * m_iconProvider
std::map< wxString, LAYER_PRESET > m_layerPresets
bool IsTogglingNetclassRatsnestVisibility()
static LAYER_PRESET presetBack
void rebuildLayerContextMenu()
void RefreshCollapsiblePanes()
Function to force a redraw of the collapsible panes in this control.
static LAYER_PRESET presetNoLayers
void idleFocusHandler(wxIdleEvent &aEvent)
void rightClickHandler(wxMouseEvent &aEvent)
void OnNetGridRightClick(wxGridEvent &event) override
void OnBoardItemsChanged(BOARD &aBoard, std::vector< BOARD_ITEM * > &aItems) override
Update the colors on all the widgets from the new chosen color theme.
wxBoxSizer * m_layersOuterSizer
void UpdateDisplayOptions()
Return a list of the layer presets created by the user.
std::vector< std::unique_ptr< APPEARANCE_SETTING > > m_netclassSettings
wxRadioButton * m_rbHighContrastOff
void OnBoardItemsAdded(BOARD &aBoard, std::vector< BOARD_ITEM * > &aItems) override
void OnColorThemeChanged()
Respond to change in OS's DarkMode.
LAYER_PRESET * m_currentPreset
std::map< wxString, APPEARANCE_SETTING * > m_netclassSettingsMap
GAL_SET getVisibleObjects()
void OnSetFocus(wxFocusEvent &aEvent) override
void OnLanguageChanged(wxCommandEvent &aEvent)
static LAYER_PRESET presetAllCopper
void SetUserViewports(std::vector< VIEWPORT > &aPresetList)
void handleBoardItemsChanged()
wxRadioButton * m_rbHighContrastDim
void OnSize(wxSizeEvent &aEvent) override
wxString netclassNameFromEvent(wxEvent &aEvent)
wxGridCellCoords m_hoveredCell
Grid cell that is being hovered over, for tooltips.
void showNetclass(const wxString &aClassName, bool aShow=true)
wxStaticText * m_txtRatsnestVisibility
void rebuildLayerPresetsWidget()
void onLayerLeftClick(wxMouseEvent &aEvent)
std::vector< VIEWPORT > GetUserViewports() const
Update the current viewports from those saved in the project file.
VIEWPORT * m_lastSelectedViewport
wxArrayString m_viewportMRU
void SetTabIndex(int aTab)
wxColour m_layerPanelColour
std::map< int, wxString > m_netclassIdMap
Stores wxIDs for each netclass for control event mapping.
void OnLayerContextMenu(wxCommandEvent &aEvent)
Return the index of the current tab (0-2).
void onNetColorMode(wxCommandEvent &aEvent)
void OnNetVisibilityChanged(int aNetCode, bool aVisibility)
Notifies the panel when a net has been hidden or shown via the external tool.
bool IsNetOptionsExpanded()
void OnDarkModeToggle()
Update the widget when the active board layer is changed.
static LAYER_PRESET presetAllLayers
bool m_togglingNetclassRatsnestVisibility
void onNetclassContextMenu(wxCommandEvent &aEvent)
wxStaticText * m_txtNetDisplayTitle
wxStaticLine * m_layerDisplaySeparator
void syncObjectSettings()
APPEARANCE_CONTROLS(PCB_BASE_FRAME *aParent, wxWindow *aFocusOwner, bool aFpEditor=false)
void SetObjectVisible(GAL_LAYER_ID aLayer, bool isVisible=true)
void OnNetGridDoubleClick(wxGridEvent &event) override
void SetLayerVisible(int aLayer, bool isVisible)
void OnBoardItemChanged(BOARD &aBoard, BOARD_ITEM *aItem) override
void onNetclassColorChanged(wxCommandEvent &aEvent)
void ApplyViewport(const wxString &aPresetName)
GRID_BITMAP_TOGGLE_RENDERER * m_toggleGridRenderer
A checkbox control except with custom bitmaps for the checked and unchecked states.
void SetValue(bool aValue)
Read the checkbox state.
std::shared_ptr< NET_SETTINGS > m_NetSettings
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
virtual LSET GetLayerSet() const
Return a std::bitset of all layers on which the item physically resides.
Information pertinent to a Pcbnew printed circuit board.
const NETINFO_LIST & GetNetInfo() const
LSET GetEnabledLayers() const
A proxy function that calls the corresponding function in m_BoardSettings.
LSET GetVisibleLayers() const
A proxy function that calls the correspondent function in m_BoardSettings.
void AddListener(BOARD_LISTENER *aListener)
Add a listener to the board to receive calls whenever something on the board has been modified.
GAL_SET GetVisibleElements() const
Return a set of all the element categories that are visible.
void SetHighLightNet(int aNetCode, bool aMulti=false)
Select the netcode to be highlighted.
int GetCopperLayerCount() const
void SetVisibleLayers(LSET aLayerMask)
A proxy function that calls the correspondent function in m_BoardSettings changes the bit-mask of vis...
void SetElementVisibility(GAL_LAYER_ID aLayer, bool aNewState)
Change the visibility of an element category.
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
PROJECT * GetProject() const
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
void HighLightON(bool aValue=true)
Enable or disable net highlighting.
void SetVisibleElements(const GAL_SET &aMask)
A proxy function that calls the correspondent function in m_BoardSettings.
Color settings are a bit different than most of the settings objects in that there can be more than o...
void SetColor(int aLayer, const COLOR4D &aColor)
COLOR4D GetColor(int aLayer) const
COLOR4D GetDefaultColor(int aLayer)
A simple color swatch of the kind used to set layer colors.
void SetSwatchColor(const KIGFX::COLOR4D &aColor, bool aSendEvent)
Set the current swatch color directly.
void GetNewSwatchColor()
Prompt for a new colour, using the colour picker dialog.
KIGFX::COLOR4D GetSwatchColor() const
void SetReadOnlyCallback(std::function< void()> aCallback)
Registers a handler for when the user tries to interact with a read-only swatch.
void SetReadOnly(bool aReadOnly=true)
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.
double GetScaleFactor() const override
Get the DPI scale from all known sources in order:
SETTINGS_MANAGER * GetSettingsManager() const
void ShowPreferences(wxString aStartPage, wxString aStartParentPage)
Displays the preferences and settings of all opened editors paged dialog, starting with a particular ...
bool IsType(FRAME_T aType) const
WX_INFOBAR * GetInfoBar()
virtual void SetGridVisibility(bool aVisible)
bool IsGridVisible() const
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
KICAD_T Type() const
Returns the type of object.
wxString GetTextSelection(int aColumn=0)
Return the selected text from aColumn in the wxListCtrl in the dialog.
void SetListLabel(const wxString &aLabel)
Helper for storing and iterating over GAL_LAYER_IDs.
bool Contains(GAL_LAYER_ID aPos)
static GAL_SET DefaultVisible()
A toggle button renderer for a wxGrid, similar to BITMAP_TOGGLE.
A text renderer that can unescape text for display This is useful where it's desired to keep the unde...
representing a row indicator icon for use in places like the layer widget
void SetIndicatorState(ICON_ID aIconId)
Set the row indicator to the given state.
A color representation with 4 components: red, green, blue, alpha.
bool SetFromWxString(const wxString &aColorString)
Set color values by parsing a string using wxColour::Set().
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
virtual RENDER_SETTINGS * GetSettings()=0
Return a pointer to current settings that are going to be used when drawing items.
PCB specific render settings.
std::set< int > & GetHiddenNets()
std::map< int, KIGFX::COLOR4D > & GetNetColorMap()
std::map< wxString, KIGFX::COLOR4D > & GetNetclassColorMap()
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
void SetHighlight(bool aEnabled, int aNetcode=-1, bool aMulti=false)
Turns on/off highlighting.
An abstract base class for deriving all objects that can be added to a VIEW.
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
void SetMirror(bool aMirrorX, bool aMirrorY)
Control the mirroring of the VIEW.
BOX2D GetViewport() const
Return the current viewport visible area rectangle.
void SetViewport(const BOX2D &aViewport)
Set the visible area of the VIEW.
void UpdateAllLayersColor()
Apply the new coloring scheme to all layers.
void SetLayerVisible(int aLayer, bool aVisible=true)
Control the visibility of a particular layer.
bool IsMirroredX() const
Return true if view is flipped across the X axis.
void RecacheAllItems()
Rebuild GAL display lists.
bool IsMirroredY() const
Return true if view is flipped across the Y axis.
void UpdateLayerColor(int aLayer)
Apply the new coloring scheme held by RENDER_SETTINGS in case that it has changed.
bool IsLayerVisible(int aLayer) const
Return information about visibility of a particular layer.
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
void MarkTargetDirty(int aTarget)
Set or clear target 'dirty' flag.
void UpdateAllItemsConditionally(int aUpdateFlags, std::function< bool(VIEW_ITEM *)> aCondition)
Update items in the view according to the given flags and condition.
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
LSEQ is a sequence (and therefore also a set) of PCB_LAYER_IDs.
LSET is a set of PCB_LAYER_IDs.
static LSET AllLayersMask()
LSEQ Seq(const PCB_LAYER_ID *aWishListSequence, unsigned aCount) const
Return an LSEQ from the union of this LSET and a desired sequence.
bool Contains(PCB_LAYER_ID aLayer)
See if the layer set contains a PCB layer.
LSEQ CuStack() const
Return a sequence of copper layers in starting from the front/top and extending to the back/bottom.
static LSET FrontAssembly()
Return a complete set of all top assembly layers which is all F_SilkS and F_Mask.
static LSET InternalCuMask()
Return a complete set of internal copper layers which is all Cu layers except F_Cu and B_Cu.
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
static LSET ForbiddenFootprintLayers()
Layers which are not allowed within footprint definitions.
static LSET BackAssembly()
Return a complete set of all bottom assembly layers which is all B_SilkS and B_Mask.
static LSET FrontMask()
Return a mask holding all technical layers and the external CU layer on front side.
static LSET BackMask()
Return a mask holding all technical layers and the external CU layer on back side.
static const char Default[]
the name of the default NETCLASS
Handle the data for a net.
const NETNAMES_MAP & NetsByName() const
Return the name map, at least for python.
void SetValue(int aRow, int aCol, const wxString &aValue) override
void SetValueAsCustom(int aRow, int aCol, const wxString &aTypeName, void *aValue) override
std::vector< NET_GRID_ENTRY > m_nets
void updateNetColor(const NET_GRID_ENTRY &aNet)
NET_GRID_ENTRY & GetEntry(int aRow)
void SetValueAsBool(int aRow, int aCol, bool aValue) override
void * GetValueAsCustom(int aRow, int aCol, const wxString &aTypeName) override
NET_GRID_TABLE(PCB_BASE_FRAME *aFrame, wxColor aBackgroundColor)
void updateNetVisibility(const NET_GRID_ENTRY &aNet)
wxString GetValue(int aRow, int aCol) override
wxGridCellAttr * m_labelAttr
void HideOtherNets(const NET_GRID_ENTRY &aNet)
wxGridCellAttr * m_defaultAttr
bool GetValueAsBool(int aRow, int aCol) override
wxGridCellAttr * GetAttr(int aRow, int aCol, wxGridCellAttr::wxAttrKind) override
static void * ColorToVoid(COLOR4D &aColor)
int GetRowByNetcode(int aCode) const
wxString GetTypeName(int aRow, int aCol) override
static COLOR4D VoidToColor(void *aColor)
DISPLAY_OPTIONS m_Display
static TOOL_ACTION listNets
static TOOL_ACTION highlightNet
static TOOL_ACTION hideNetInRatsnest
static TOOL_ACTION showNetInRatsnest
static TOOL_ACTION ratsnestModeCycle
static TOOL_ACTION netColorModeCycle
static TOOL_ACTION selectNet
Select all connections belonging to a single net.
static TOOL_ACTION flipBoard
static TOOL_ACTION deselectNet
Remove all connections belonging to a single net from the active selection.
Base PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.
virtual void OnDisplayOptionsChanged()
const PCB_DISPLAY_OPTIONS & GetDisplayOptions() const
Display options control the way tracks, vias, outlines and other things are shown (for instance solid...
PCBNEW_SETTINGS * GetPcbNewSettings() const
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.
void SetDrawBgColor(const COLOR4D &aColor) override
void SetDisplayOptions(const PCB_DISPLAY_OPTIONS &aOptions, bool aRefresh=true)
Updates the current display options from the given options struct.
virtual void SetActiveLayer(PCB_LAYER_ID aLayer)
virtual COLOR_SETTINGS * GetColorSettings(bool aForceRefresh=false) const override
Helper to retrieve the current color settings.
virtual void Update3DView(bool aMarkDirty, bool aRefresh, const wxString *aTitle=nullptr)
Update the 3D view, if the viewer is opened by this frame.
double m_TrackOpacity
Opacity override for all tracks.
double m_ZoneOpacity
Opacity override for filled zone areas.
double m_ImageOpacity
Opacity override for user images.
double m_PadOpacity
Opacity override for SMD pads and PTHs.
double m_ViaOpacity
Opacity override for all types of via.
HIGH_CONTRAST_MODE m_ContrastModeDisplay
How inactive layers are displayed.
NET_COLOR_MODE m_NetColorMode
How to use color overrides on specific nets and netclasses.
void UpdateColors()
Update the color settings in the painter and GAL.
virtual KIGFX::PCB_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
void SyncLayersVisibility(const BOARD *aBoard)
Update "visibility" property of each layer of a given BOARD.
void RedrawRatsnest()
Return the bounding box of the view that should be used if model is not valid.
The main frame for Pcbnew.
void ReCreateLayerBox(bool aForceResizeToolbar=true)
Recreate the layer box by clearing the old list and building a new one from the new layer names and c...
The project local settings are things that are attached to a particular project, but also might be pa...
std::set< wxString > m_HiddenNetclasses
virtual PROJECT_LOCAL_SETTINGS & GetLocalSettings() const
Icon provider for the "standard" row indicators, for example in layer selection lists.
@ OFF
Row "off" or "deselected".
@ ON
Row "on" or "selected".
void SaveColorSettings(COLOR_SETTINGS *aSettings, const std::string &aNamespace="")
Safely saves a COLOR_SETTINGS to disk, preserving any changes outside the given namespace.
A better wxCollapsiblePane that.
void Collapse(bool aCollapse=true)
void SetLabel(const wxString &aLabel) override
bool SetBackgroundColour(const wxColour &aColor) override
void SetTable(wxGridTableBase *table, bool aTakeOwnership=false)
Hide wxGrid's SetTable() method with one which doesn't mess up the grid column widths when setting th...
void SetColLabelSize(int aHeight)
Hide wxGrid's SetColLabelSize() method with one which makes sure the size is tall enough for the syst...
A modified version of the wxInfoBar class that allows us to:
void RemoveAllButtons()
Remove all the buttons that have been added by the user.
void ShowMessageFor(const wxString &aMessage, int aTime, int aFlags=wxICON_INFORMATION, MESSAGE_TYPE aType=WX_INFOBAR::MESSAGE_TYPE::GENERIC)
Show the infobar with the provided message and icon for a specific period of time.
void AddButton(wxButton *aButton)
Add an already created button to the infobar.
void AddCloseButton(const wxString &aTooltip=_("Hide this message."))
Add the default close button to the infobar on the right side.
void SetBorders(bool aLeft, bool aRight, bool aTop, bool aBottom)
static const wxSize SWATCH_SIZE_SMALL_DU(8, 6)
bool IsOK(wxWindow *aParent, const wxString &aMessage)
Display a yes/no dialog with aMessage and returns the user response.
This file is part of the common library.
#define VIEWPORT_SWITCH_KEY
#define PRESET_SWITCH_KEY
wxString KeyNameFromKeyCode(int aKeycode, bool *aIsFound)
Return the key name from the key code.
GAL_LAYER_ID ToGalLayer(int aInteger)
int GetNetnameLayer(int aLayer)
Returns a netname layer corresponding to the given layer.
bool IsCopperLayer(int aLayerId)
Tests whether a layer is a copper layer.
GAL_LAYER_ID
GAL layers are "virtual" layers, i.e.
@ LAYER_LOCKED_ITEM_SHADOW
shadow layer for locked items
@ LAYER_CONFLICTS_SHADOW
shadow layer for items flagged conficting
@ LAYER_FOOTPRINTS_FR
show footprints on front
@ LAYER_DRAWINGSHEET
drawingsheet frame and titleblock
@ LAYER_DRAW_BITMAPS
to handle and draw images bitmaps
@ LAYER_FP_REFERENCES
show footprints references (when texts are visible)
@ LAYER_DRC_EXCLUSION
layer for drc markers which have been individually excluded
@ LAYER_PCB_BACKGROUND
PCB background color.
@ LAYER_ZONES
Control for copper zone opacity/visibility (color ignored)
@ LAYER_PADS
Meta control for all pads opacity/visibility (color ignored)
@ LAYER_DRC_WARNING
layer for drc markers with SEVERITY_WARNING
@ LAYER_HIDDEN_TEXT
text marked as invisible
@ LAYER_ZONE_START
Virtual layers for stacking zones and tracks on a given copper layer.
@ LAYER_FOOTPRINTS_BK
show footprints on back
@ LAYER_ANCHOR
anchor of items having an anchor point (texts, footprints)
@ LAYER_PADS_SMD_BK
smd pads, back layer
@ LAYER_PADS_TH
multilayer pads, usually with holes
@ LAYER_PADS_SMD_FR
smd pads, front layer
@ LAYER_FP_VALUES
show footprints values (when texts are visible)
@ LAYER_DRC_ERROR
layer for drc markers with SEVERITY_ERROR
@ LAYER_VIAS
Meta control for all vias opacity/visibility.
PCB_LAYER_ID
A quick note on layer IDs:
#define ZONE_LAYER_FOR(boardLayer)
#define GAL_LAYER_INDEX(x)
Use this macro to convert a GAL layer to a 0-indexed offset from LAYER_VIAS.
PCB_LAYER_ID ToLAYER_ID(int aLayer)
@ ALL
All except INITIAL_ADD.
@ TARGET_NONCACHED
Auxiliary rendering target (noncached)
wxFont GetInfoFont(wxWindow *aWindow)
wxMenuItem * AddMenuItem(wxMenu *aMenu, int aId, const wxString &aText, const wxBitmap &aImage, wxItemKind aType=wxITEM_NORMAL)
Create and insert a menu item with an icon into aMenu.
void Refresh()
Update the board display after modifying it by a python script (note: it is automatically called by a...
std::vector< FAB_LAYER_COLOR > dummy
wxString UnescapeString(const wxString &aSource)
Container for an appearance setting (can control a single board layer, or GAL layer,...
BITMAP_TOGGLE * ctl_visibility
INDICATOR_ICON * ctl_indicator
A saved set of layers that are visible.
GAL_SET renderLayers
Render layers (e.g. object types) that are visible.
wxString name
A name for this layer set.
bool flipBoard
True if the flip board is enabled.
LSET layers
Board layers that are visible.
bool readOnly
True if this is a read-only (built-in) preset.
PCB_LAYER_ID activeLayer
Optional layer to set active when this preset is loaded.
bool appearance_expand_layer_display
bool appearance_expand_net_display
RATSNEST_MODE m_RatsnestMode
bool m_ShowGlobalRatsnest
@ PCB_NETINFO_T
class NETINFO_ITEM, a description of a net