55#include <wx/checkbox.h>
56#include <wx/hyperlink.h>
58#include <wx/radiobut.h>
61#include <wx/statline.h>
62#include <wx/textdlg.h>
63#include <wx/bmpbuttn.h>
77 m_labelAttr->SetBackgroundColour( aBackgroundColor );
90 wxGridCellAttr* attr =
nullptr;
109 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
116 default:
return wxEmptyString;
123 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
135 net.
visible = ( aValue != wxT(
"0" ) );
155 case COL_LABEL:
return wxGRID_VALUE_STRING;
156 default:
return wxGRID_VALUE_STRING;
163 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
166 return m_nets[aRow].visible;
172 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
175 m_nets[aRow].visible = aValue;
183 wxASSERT( aTypeName == wxT(
"COLOR4D" ) );
184 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
193 wxASSERT( aTypeName == wxT(
"COLOR4D" ) );
194 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
203 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
213 return aEntry.code == aCode;
219 return std::distance(
m_nets.cbegin(), it );
237 int deleted = (int)
m_nets.size();
242 wxGridTableMessage msg(
this, wxGRIDTABLE_NOTIFY_ROWS_DELETED, 0, deleted );
243 GetView()->ProcessTableMessage( msg );
246 for(
const std::pair<const wxString, NETINFO_ITEM*>& pair : nets )
248 int netCode = pair.second->GetNetCode();
250 if( netCode > 0 && !pair.first.StartsWith( wxT(
"unconnected-(" ) ) )
252 COLOR4D color = netColors.count( netCode ) ? netColors.at( netCode )
255 bool visible = hiddenNets.count( netCode ) == 0;
265 return a.name < b.name;
270 wxGridTableMessage msg(
this, wxGRIDTABLE_NOTIFY_ROWS_APPENDED, (
int)
m_nets.size() );
271 GetView()->ProcessTableMessage( msg );
285 GetView()->ForceRefresh();
293 net.visible = ( net.code == aNet.
code );
298 GetView()->ForceRefresh();
307 m_frame->GetToolManager()->RunAction( action, aNet.
code );
316 std::map<int, KIGFX::COLOR4D>& netColors = renderSettings->
GetNetColorMap();
321 netColors.erase( aNet.
code );
323 m_frame->GetCanvas()->GetView()->UpdateAllLayersColor();
324 m_frame->GetCanvas()->RedrawRatsnest();
325 m_frame->GetCanvas()->Refresh();
332#define RR APPEARANCE_CONTROLS::APPEARANCE_SETTING
423 SetMinSize( FromDIP( GetMinSize() ) );
430 int screenHeight = wxSystemSettings::GetMetric( wxSYS_SCREEN_Y );
432 m_pointSize = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ).GetPointSize();
455 m_cbLayerPresets->SetToolTip( wxString::Format(
_(
"Save and restore layer visibility combinations.\n"
456 "Use %s+Tab to activate selector.\n"
457 "Successive Tabs while holding %s down will "
458 "cycle through presets in the popup." ),
462 m_cbViewports->SetToolTip( wxString::Format(
_(
"Save and restore view location and zoom.\n"
463 "Use %s+Tab to activate selector.\n"
464 "Successive Tabs while holding %s down will "
465 "cycle through viewports in the popup." ),
489 auto setHighContrastMode =
495 m_frame->SetDisplayOptions( opts );
500 [=]( wxCommandEvent& aEvent )
506 [=]( wxCommandEvent& aEvent )
512 [=]( wxCommandEvent& aEvent )
520 [&]( wxCommandEvent& aEvent )
526 [&]( wxCommandEvent& aEvent )
530 editframe->ShowBoardSetupDialog(
_(
"Net Classes" ) );
537 [&]( wxCommandEvent& aEvent )
548 m_netsGrid->RegisterDataType( wxT(
"COLOR4D" ),
556 m_netsGrid->SetSelectionMode( wxGrid::wxGridSelectRows );
560 const int cellPadding = 6;
562 const int rowHeightPadding = 5;
564 const int rowHeightPadding = 3;
574 m_netsGrid->SetDefaultRowSize( font.GetPixelSize().y + rowHeightPadding );
581 m_netsGrid->ShowScrollbars( wxSHOW_SB_NEVER, wxSHOW_SB_DEFAULT );
589 if( cfg->m_AuiPanels.appearance_expand_layer_display )
592 if( cfg->m_AuiPanels.appearance_expand_net_display )
627 _(
"Layer Display Options" ) );
633 wxBoxSizer* layerDisplayOptionsSizer;
634 layerDisplayOptionsSizer =
new wxBoxSizer( wxVERTICAL );
641 msg =
_(
"Inactive layers:" );
648 wxBoxSizer* contrastModeSizer;
649 contrastModeSizer =
new wxBoxSizer( wxHORIZONTAL );
652 wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
658 contrastModeSizer->AddStretchSpacer();
665 contrastModeSizer->AddStretchSpacer();
672 contrastModeSizer->AddStretchSpacer();
674 layerDisplayOptionsSizer->Add( contrastModeSizer, 0, wxEXPAND, 5 );
677 wxDefaultSize, wxLI_HORIZONTAL );
680 m_cbFlipBoard =
new wxCheckBox( layerDisplayPane, wxID_ANY,
_(
"Flip board view" ) );
682 layerDisplayOptionsSizer->Add(
m_cbFlipBoard, 0, wxTOP | wxBOTTOM, 3 );
684 layerDisplayPane->SetSizer( layerDisplayOptionsSizer );
685 layerDisplayPane->Layout();
686 layerDisplayOptionsSizer->Fit( layerDisplayPane );
691 [&]( wxCommandEvent& aEvent )
702 _(
"Net Display Options" ) );
707 wxBoxSizer* netDisplayOptionsSizer =
new wxBoxSizer( wxVERTICAL );
716 msg =
_(
"Net colors:" );
725 wxBoxSizer* netColorSizer =
new wxBoxSizer( wxHORIZONTAL );
727 m_rbNetColorAll =
new wxRadioButton( netDisplayPane, wxID_ANY,
_(
"All" ), wxDefaultPosition,
728 wxDefaultSize, wxRB_GROUP );
730 m_rbNetColorAll->SetToolTip(
_(
"Net and netclass colors are shown on all copper items" ) );
733 netColorSizer->AddStretchSpacer();
741 netColorSizer->AddStretchSpacer();
743 m_rbNetColorOff =
new wxRadioButton( netDisplayPane, wxID_ANY,
_(
"None" ) );
745 m_rbNetColorOff->SetToolTip(
_(
"Net and netclass colors are not shown" ) );
749 netDisplayOptionsSizer->Add( netColorSizer, 0, wxEXPAND | wxBOTTOM, 5 );
758 msg =
_(
"Ratsnest display:" );
767 wxBoxSizer* ratsnestDisplayModeSizer =
new wxBoxSizer( wxHORIZONTAL );
770 wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
776 ratsnestDisplayModeSizer->AddStretchSpacer();
783 ratsnestDisplayModeSizer->AddStretchSpacer();
791 netDisplayOptionsSizer->Add( ratsnestDisplayModeSizer, 0, wxEXPAND | wxBOTTOM, 5 );
795 netDisplayPane->SetSizer( netDisplayOptionsSizer );
796 netDisplayPane->Layout();
797 netDisplayOptionsSizer->Fit( netDisplayPane );
802 [&]( wxCommandEvent& aEvent )
845 int page = aEvent.GetSelection();
848 m_notebook->ChangeSelection(
static_cast<unsigned>( page ) );
877 if( wxBitmapButton* btn =
dynamic_cast<wxBitmapButton*
>( aEvent.GetEventObject() ) )
879 wxCommandEvent evt( wxEVT_BUTTON );
880 wxPostEvent( btn, evt );
897 int row =
event.GetRow();
898 int col =
event.GetCol();
915 int row =
event.GetRow();
916 int col =
event.GetCol();
938 menu.Append(
new wxMenuItem( &menu,
ID_SET_NET_COLOR,
_(
"Set Net Color" ), wxEmptyString,
940 menu.Append(
new wxMenuItem( &menu,
ID_CLEAR_NET_COLOR,
_(
"Clear Net Color" ), wxEmptyString,
943 menu.AppendSeparator();
946 wxString::Format(
_(
"Highlight %s" ), netName ), wxEmptyString,
949 wxString::Format(
_(
"Select Tracks and Vias in %s" ), netName ),
950 wxEmptyString, wxITEM_NORMAL ) );
952 wxString::Format(
_(
"Unselect Tracks and Vias in %s" ), netName ),
953 wxEmptyString, wxITEM_NORMAL ) );
955 menu.AppendSeparator();
957 menu.Append(
new wxMenuItem( &menu,
ID_SHOW_ALL_NETS,
_(
"Show All Nets" ), wxEmptyString,
960 wxEmptyString, wxITEM_NORMAL ) );
970 wxPoint pos =
m_netsGrid->CalcUnscrolledPosition( aEvent.GetPosition() );
971 wxGridCellCoords cell =
m_netsGrid->XYToCell( pos );
973 if( aEvent.Moving() || aEvent.Entering() )
991 wxString showOrHide = net.
visible ?
_(
"Click to hide ratsnest for %s" )
992 :
_(
"Click to show ratsnest for %s" );
996 tip.Printf( showOrHide,
name );
998 tip =
_(
"Double click (or middle click) to change color; right click for more actions" );
1000 m_netsGrid->GetGridWindow()->SetToolTip( tip );
1002 else if( aEvent.Leaving() )
1007 else if( aEvent.Dragging() )
1015 else if( aEvent.ButtonUp( wxMOUSE_BTN_MIDDLE ) && !!cell )
1017 int row = cell.GetRow();
1018 int col = cell.GetCol();
1108 int row =
m_netsTable->GetRowByNetcode( aNetCode );
1126 bool rebuild = std::any_of( aBoardItems.begin(), aBoardItems.end(),
1129 return a->Type() == PCB_NETINFO_T;
1179 std::vector<BOARD_ITEM*>& aAddedItems,
1180 std::vector<BOARD_ITEM*>& aRemovedItems,
1181 std::vector<BOARD_ITEM*>& aChangedItems )
1229 if( child && child->GetWindow() )
1234 m_netsGrid->RegisterDataType( wxT(
"COLOR4D" ),
1240 if( pair.second->ctl_color )
1241 pair.second->ctl_color->OnDarkModeToggle();
1250 for(
const std::unique_ptr<APPEARANCE_SETTING>& setting :
m_layerSettings )
1260 if( r < 240 || g < 240 || b < 240 )
1262 r = wxChar( std::min( (
int) r + 15, 255 ) );
1263 g = wxChar( std::min( (
int) g + 15, 255 ) );
1264 b = wxChar( std::min( (
int) b + 15, 255 ) );
1268 r = wxChar( std::max( (
int) r - 15, 0 ) );
1269 g = wxChar( std::max( (
int) g - 15, 0 ) );
1270 b = wxChar( std::max( (
int) b - 15, 0 ) );
1283 newSetting->
ctl_panel->SetBackgroundColour( wxColour( r, g, b ) );
1295 if( visible.test( layer ) == isVisible )
1298 visible.
set( layer, isVisible );
1301 m_frame->GetCanvas()->GetView()->SetLayerVisible( layer, isVisible );
1324 m_frame->Update3DView(
true,
m_frame->GetPcbNewSettings()->m_Display.m_Live3DRefresh );
1326 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer, isVisible );
1327 m_frame->GetCanvas()->Refresh();
1342 board->SetVisibleLayers( aLayers );
1352 return dynamic_cast<PCB_VIA*
>( aItem ) ||
dynamic_cast<PAD*
>( aItem );
1355 m_frame->Update3DView(
true,
m_frame->GetPcbNewSettings()->m_Display.m_Live3DRefresh );
1403 if( s_setting.id == gal_ly )
1411 m_frame->Update3DView(
true,
m_frame->GetPcbNewSettings()->m_Display.m_Live3DRefresh );
1430 return board->GetVisibleLayers();
1445 for(
size_t i = 0; i < set.size(); i++ )
1452 return board->GetVisibleElements();
1483 if( !cfg->m_Display.m_ShowGlobalRatsnest )
1500 std::vector<LAYER_PRESET> ret;
1502 for(
const std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
1504 if( !pair.second.readOnly )
1505 ret.emplace_back( pair.second );
1555 wxCommandEvent
dummy;
1577 std::vector<VIEWPORT> ret;
1579 for(
const std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
1580 ret.emplace_back( pair.second );
1590 for(
const VIEWPORT& viewport : aViewportList )
1608 wxCommandEvent
dummy;
1638 m_windowLayersSizerItem->SetFlag( m_windowLayersSizerItem->GetFlag() & ~wxTOP );
1642 [&]( std::unique_ptr<APPEARANCE_SETTING>& aSetting )
1644 int layer = aSetting->id;
1647 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
1648 panel->SetSizer( sizer );
1652 aSetting->visible = visible[layer];
1660 swatch->SetToolTip(
_(
"Double click or middle click for color change, right click for menu" ) );
1665 aSetting->visible );
1666 btn_visible->SetToolTip(
_(
"Show or hide this layer" ) );
1668 wxStaticText* label =
new wxStaticText( panel, layer, aSetting->label );
1670 label->SetToolTip( aSetting->tooltip );
1672 sizer->AddSpacer( 1 );
1673 sizer->Add( indicator, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1674 sizer->AddSpacer( 5 );
1675 sizer->Add( swatch, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1676 sizer->AddSpacer( 6 );
1677 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1678 sizer->AddSpacer( 5 );
1679 sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1683 aSetting->ctl_panel = panel;
1684 aSetting->ctl_indicator = indicator;
1685 aSetting->ctl_visibility = btn_visible;
1686 aSetting->ctl_color = swatch;
1687 aSetting->ctl_text = label;
1694 btn_visible->Bind( TOGGLE_CHANGED,
1695 [&]( wxCommandEvent& aEvent )
1697 wxObject* btn = aEvent.GetEventObject();
1698 int layerId =
static_cast<wxWindow*
>( btn )->GetId();
1715 [&]( std::unique_ptr<APPEARANCE_SETTING>& aSetting )
1717 int layer = aSetting->id;
1718 aSetting->visible = visible[layer];
1719 aSetting->ctl_panel->Show();
1720 aSetting->ctl_panel->SetId( layer );
1721 aSetting->ctl_indicator->SetWindowID( layer );
1722 aSetting->ctl_color->SetWindowID( layer );
1723 aSetting->ctl_color->SetSwatchColor( theme->
GetColor( layer ),
false );
1724 aSetting->ctl_visibility->SetWindowID( layer );
1725 aSetting->ctl_text->SetLabelText( aSetting->label );
1726 aSetting->ctl_text->SetId( layer );
1727 aSetting->ctl_text->SetToolTip( aSetting->tooltip );
1733 static const struct {
1739 {
F_Paste,
_HKI(
"Solder paste on board's front" ) },
1740 {
B_Paste,
_HKI(
"Solder paste on board's back" ) },
1741 {
F_SilkS,
_HKI(
"Silkscreen on board's front" ) },
1742 {
B_SilkS,
_HKI(
"Silkscreen on board's back" ) },
1743 {
F_Mask,
_HKI(
"Solder mask on board's front" ) },
1744 {
B_Mask,
_HKI(
"Solder mask on board's back" ) },
1750 {
Margin,
_HKI(
"Board's edge setback outline" ) },
1751 {
F_CrtYd,
_HKI(
"Footprint courtyards on board's front" ) },
1752 {
B_CrtYd,
_HKI(
"Footprint courtyards on board's back" ) },
1753 {
F_Fab,
_HKI(
"Footprint assembly on board's front" ) },
1754 {
B_Fab,
_HKI(
"Footprint assembly on board's back" ) },
1817 std::size_t total_layers = enabled.
CuStack().size();
1819 for(
const auto& entry : non_cu_seq )
1821 if( enabled[entry.layerId] )
1831 for( std::size_t ii = total_layers; ii <
m_layerSettings.size(); ++ii )
1846 case F_Cu: dsc =
_(
"Front copper layer" );
break;
1847 case B_Cu: dsc =
_(
"Back copper layer" );
break;
1848 default: dsc =
_(
"Inner copper layer" );
break;
1851 std::unique_ptr<APPEARANCE_SETTING>& setting = *layer_it;
1854 setting->id = layer;
1855 setting->tooltip = dsc;
1857 if( setting->ctl_panel ==
nullptr )
1858 appendLayer( setting );
1860 updateLayer( setting );
1866 setting->ctl_text->Disable();
1867 setting->ctl_color->SetToolTip( wxEmptyString );
1873 for(
const auto& entry : non_cu_seq )
1877 if( !enabled[layer] )
1880 std::unique_ptr<APPEARANCE_SETTING>& setting = *layer_it;
1896 setting->id = layer;
1899 setting->tooltip = wxGetTranslation( entry.tooltip );
1901 if( setting->ctl_panel ==
nullptr )
1902 appendLayer( setting );
1904 updateLayer( setting );
1910 setting->ctl_text->Disable();
1911 setting->ctl_color->SetToolTip( wxEmptyString );
1929 msg =
_(
"Inactive layers:" );
1986 if(
m_frame->GetBoard() &&
m_frame->GetBoard()->GetCopperLayerCount() > 2 )
2016 switch( aEvent.GetId() )
2041 if( !visible.test( current ) && visible.count() > 0 )
2042 m_frame->SetActiveLayer( *visible.
Seq().begin() );
2050 if( !visible.test( current ) && visible.count() > 0 )
2051 m_frame->SetActiveLayer( *visible.
Seq().begin() );
2092 m_frame->GetCanvas()->SyncLayersVisibility( board );
2094 m_frame->GetCanvas()->Refresh();
2108 if( aTab >= 0 &&
static_cast<size_t>( aTab ) < max )
2124 int layer = setting->id;
2126 if( setting->ctl_visibility )
2127 setting->ctl_visibility->SetValue( visible[layer] );
2129 if( setting->ctl_color )
2132 setting->ctl_color->SetSwatchColor( color,
false );
2133 setting->ctl_color->SetReadOnly( readOnly );
2141 if( setting->ctl_visibility )
2142 setting->ctl_visibility->SetValue( objects.
Contains( layer ) );
2144 if( setting->ctl_color )
2147 setting->ctl_color->SetSwatchColor( color,
false );
2148 setting->ctl_color->SetReadOnly( readOnly );
2163 wxWindow* eventSource =
static_cast<wxWindow*
>( aEvent.GetEventObject() );
2170 m_frame->SetActiveLayer( layer );
2187 visibleLayers.
set( aLayer, !visibleLayers.test( aLayer ) );
2189 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer, visibleLayers.test( aLayer ) );
2192 m_frame->GetCanvas()->Refresh();
2205 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer,
true );
2209 m_frame->GetPcbNewSettings()->m_Display.m_ShowGlobalRatsnest = isVisible;
2212 m_frame->GetBoard()->SetElementVisibility( aLayer, isVisible );
2214 m_frame->OnDisplayOptionsChanged();
2215 m_frame->GetCanvas()->RedrawRatsnest();
2222 m_frame->SetGridVisibility( isVisible );
2223 m_frame->GetCanvas()->Refresh();
2258 if( visible.
Contains( aLayer ) != isVisible )
2260 visible.
set( aLayer, isVisible );
2262 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer, isVisible );
2268 m_frame->GetCanvas()->Refresh();
2279 int swatchWidth =
m_windowObjects->ConvertDialogToPixels( wxSize( 8, 0 ) ).x;
2289 [&](
const std::unique_ptr<APPEARANCE_SETTING>& aSetting )
2292 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
2293 panel->SetSizer( sizer );
2294 int layer = aSetting->id;
2304 swatch->SetToolTip(
_(
"Left double click or middle click for color change, "
2305 "right click for menu" ) );
2307 sizer->Add( swatch, 0, wxALIGN_CENTER_VERTICAL, 0 );
2308 aSetting->ctl_color = swatch;
2316 sizer->AddSpacer( swatchWidth );
2322 if( aSetting->can_control_visibility )
2327 aSetting->visible );
2329 tip.Printf(
_(
"Show or hide %s" ), aSetting->label.Lower() );
2330 btn_visible->SetToolTip( tip );
2332 aSetting->ctl_visibility = btn_visible;
2334 btn_visible->Bind( TOGGLE_CHANGED,
2335 [&]( wxCommandEvent& aEvent )
2337 int id =
static_cast<wxWindow*
>( aEvent.GetEventObject() )->GetId();
2338 bool isVisible = aEvent.GetInt();
2343 sizer->AddSpacer( 5 );
2345 wxStaticText* label =
new wxStaticText( panel, layer, aSetting->label );
2347 label->SetToolTip( aSetting->tooltip );
2349 if( aSetting->can_control_opacity )
2351 label->SetMinSize( wxSize( labelWidth, -1 ) );
2354 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 10 );
2356 sizer->AddSpacer( btnWidth );
2358 sizer->AddSpacer( 5 );
2359 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 10 );
2362 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL, 0 );
2364 sizer->AddSpacer( btnWidth );
2366 sizer->AddSpacer( 5 );
2367 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL, 0 );
2370 wxSlider* slider =
new wxSlider( panel, wxID_ANY, 100, 0, 100,
2371 wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL );
2373 slider->SetMinSize( wxSize( 80, 16 ) );
2375 slider->SetMinSize( wxSize( 80, -1 ) );
2378 tip.Printf(
_(
"Set opacity of %s" ), aSetting->label.Lower() );
2379 slider->SetToolTip( tip );
2381 sizer->Add( slider, 1, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 5 );
2382 aSetting->ctl_opacity = slider;
2384 auto opacitySliderHandler =
2385 [
this, layer]( wxCommandEvent& aEvent )
2387 wxSlider* ctrl =
static_cast<wxSlider*
>( aEvent.GetEventObject() );
2388 int value = ctrl->GetValue();
2392 slider->Bind( wxEVT_SCROLL_CHANGED, opacitySliderHandler );
2393 slider->Bind( wxEVT_SCROLL_THUMBTRACK, opacitySliderHandler );
2399 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL, 0 );
2401 sizer->AddSpacer( btnWidth );
2403 sizer->AddSpacer( 5 );
2404 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL, 0 );
2407 aSetting->ctl_text = label;
2410 if( !aSetting->can_control_opacity )
2419 m_objectSettings.emplace_back( std::make_unique<APPEARANCE_SETTING>( s_setting ) );
2425 setting->tooltip = wxGetTranslation( s_setting.tooltip );
2426 setting->label = wxGetTranslation( s_setting.label );
2428 if( setting->can_control_opacity )
2431 labelWidth = std::max( labelWidth, width );
2434 if( !s_setting.spacer )
2438 for(
const std::unique_ptr<APPEARANCE_SETTING>& setting :
m_objectSettings )
2440 if( setting->spacer )
2443 appendObject( setting );
2459 if( setting->spacer )
2464 if( setting->ctl_visibility )
2465 setting->ctl_visibility->SetValue( visible.
Contains( layer ) );
2467 if( setting->ctl_color )
2469 COLOR4D color =
m_frame->GetColorSettings()->GetColor( setting->id );
2470 setting->ctl_color->SetSwatchColor( color,
false );
2491 const wxString& aName )
2500 if( !isDefaultClass)
2502 aMenu.Append(
new wxMenuItem( &aMenu,
ID_SET_NET_COLOR,
_(
"Set Netclass Color" ),
2503 wxEmptyString, wxITEM_NORMAL ) );
2506 _(
"Use Color from Schematic" ),
2507 wxEmptyString, wxITEM_NORMAL );
2508 std::shared_ptr<NETCLASS> nc = netSettings->GetNetClassByName( aName );
2510 aMenu.Append( schematicColor );
2513 schematicColor->Enable(
false );
2516 wxEmptyString, wxITEM_NORMAL ) );
2517 aMenu.AppendSeparator();
2523 wxString::Format(
_(
"Highlight Nets in %s" ),
name ),
2524 wxEmptyString, wxITEM_NORMAL ) );
2526 wxString::Format(
_(
"Select Tracks and Vias in %s" ),
name ),
2527 wxEmptyString, wxITEM_NORMAL ) );
2529 wxString::Format(
_(
"Unselect Tracks and Vias in %s" ),
name ),
2530 wxEmptyString, wxITEM_NORMAL ) );
2532 aMenu.AppendSeparator();
2534 aMenu.Append(
new wxMenuItem( &aMenu,
ID_SHOW_ALL_NETS,
_(
"Show All Netclasses" ),
2535 wxEmptyString, wxITEM_NORMAL ) );
2536 aMenu.Append(
new wxMenuItem( &aMenu,
ID_HIDE_OTHER_NETS,
_(
"Hide All Other Netclasses" ),
2537 wxEmptyString, wxITEM_NORMAL ) );
2559 const std::set<wxString>& hiddenClasses =
m_frame->Prj().GetLocalSettings().m_HiddenNetclasses;
2563 auto appendNetclass =
2564 [&](
int aId,
const std::shared_ptr<NETCLASS>& aClass,
bool isDefaultClass = false )
2566 wxString
name = aClass->GetName();
2573 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
2577 ? netSettings->GetNetClassByName(
name )->GetPcbColor()
2582 setting->
ctl_color->SetToolTip(
_(
"Left double click or middle click for color "
2583 "change, right click for menu" ) );
2585 setting->
ctl_color->Bind( COLOR_SWATCH_CHANGED,
2589 if( isDefaultClass )
2595 !hiddenClasses.count(
name ) );
2598 tip.Printf(
_(
"Show or hide ratsnest for nets in %s" ),
name );
2604 int flags = wxALIGN_CENTER_VERTICAL;
2606 sizer->Add( setting->
ctl_color, 0, flags | wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5 );
2607 sizer->AddSpacer( 7 );
2609 sizer->AddSpacer( 3 );
2610 sizer->Add( setting->
ctl_text, 1, flags, 5 );
2620 [&,
name, isDefaultClass]( wxMouseEvent& aEvent )
2629 setting->
ctl_panel->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2631 setting->
ctl_color->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2632 setting->
ctl_text->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2635 std::vector<wxString> names;
2637 for(
const auto& [
name, netclass] : netSettings->GetNetclasses() )
2638 names.emplace_back(
name );
2640 std::sort( names.begin(), names.end() );
2644 int idx = wxID_HIGHEST;
2647 appendNetclass( idx++, netSettings->GetDefaultNetclass(),
true );
2649 for(
const wxString&
name : names )
2652 appendNetclass( idx++, netSettings->GetNetclasses().at(
name ) );
2665 msg =
_(
"Net colors:" );
2671 m_rbNetColorAll->SetToolTip(
_(
"Net and netclass colors are shown on all copper items" ) );
2677 m_rbNetColorOff->SetToolTip(
_(
"Net and netclass colors are not shown" ) );
2684 msg =
_(
"Ratsnest display:" );
2718 int default_idx = 0;
2719 std::vector<std::pair<wxString, void*>> userPresets;
2725 const wxString translatedName = wxGetTranslation(
name );
2726 void* userData =
static_cast<void*
>( &preset );
2728 if( preset.readOnly )
2731 userPresets.push_back( {
name, userData } );
2742 if( !userPresets.empty() )
2746 for(
auto& [
name, userData] : userPresets )
2773 [&](
const std::pair<const wxString, LAYER_PRESET>& aPair )
2775 return ( aPair.second.layers == visibleLayers
2776 && aPair.second.renderLayers == visibleObjects
2777 && aPair.second.flipBoard == flipBoard );
2784 bool do_translate = it->second.readOnly;
2785 wxString
text = do_translate ? wxGetTranslation( it->first ) : it->first;
2804 wxString ui_label = aName;
2806 for( std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
2808 if( pair.first != aName )
2811 if( pair.second.readOnly ==
true )
2812 ui_label = wxGetTranslation( aName );
2836 auto resetSelection =
2845 if(
index == count - 2 )
2853 wxTextEntryDialog dlg( wxGetTopLevelParent(
this ),
_(
"Layer preset name:" ),
2854 _(
"Save Layer Preset" ),
name );
2856 if( dlg.ShowModal() != wxID_OK )
2862 name = dlg.GetValue();
2880 wxMessageBox(
_(
"Default presets cannot be modified.\nPlease use a different name." ),
2881 _(
"Error" ), wxOK | wxICON_ERROR, wxGetTopLevelParent(
this ) );
2888 if( !
IsOK( wxGetTopLevelParent(
this ),
_(
"Overwrite existing preset?" ) ) )
2910 else if(
index == count - 1 )
2913 wxArrayString headers;
2914 std::vector<wxArrayString> items;
2916 headers.Add(
_(
"Presets" ) );
2918 for( std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
2920 if( !pair.second.readOnly )
2923 item.Add( pair.first );
2924 items.emplace_back( item );
2936 if( idx != wxNOT_FOUND )
2944 if(
m_presetMRU.Index( presetName ) != wxNOT_FOUND )
2986 const wxString translatedName = wxGetTranslation(
m_currentPreset->name );
2988 if(
m_presetMRU.Index( translatedName ) != wxNOT_FOUND )
3015 activeLayer = *aPreset.
layers.
Seq().begin();
3020 m_frame->SetActiveLayer( activeLayer );
3023 m_frame->GetCanvas()->SyncLayersVisibility( board );
3027 m_frame->SetDisplayOptions( options,
false );
3029 m_frame->GetCanvas()->Refresh();
3043 for( std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
3044 m_cbViewports->Append( pair.first,
static_cast<void*
>( &pair.second ) );
3081 wxCHECK( viewport, );
3085 if( !viewport->
name.IsEmpty() )
3093 else if(
index == count - 2 )
3098 wxTextEntryDialog dlg( wxGetTopLevelParent(
this ),
_(
"Viewport name:" ),
_(
"Save Viewport" ),
name );
3100 if( dlg.ShowModal() != wxID_OK )
3110 name = dlg.GetValue();
3133 else if(
index == count - 1 )
3136 wxArrayString headers;
3137 std::vector<wxArrayString> items;
3139 headers.Add(
_(
"Viewports" ) );
3141 for( std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
3144 item.Add( pair.first );
3145 items.emplace_back( item );
3156 if( idx != wxNOT_FOUND )
3180 m_frame->GetCanvas()->GetView()->SetViewport( aViewport.
rect );
3181 m_frame->GetCanvas()->Refresh();
3189 int layer = swatch->GetId();
3194 m_frame->GetSettingsManager()->SaveColorSettings( cs,
"board" );
3196 m_frame->GetCanvas()->UpdateColors();
3214 m_frame->GetCanvas()->Refresh();
3217 m_frame->SetDrawBgColor( newColor );
3238 m_frame->SetDisplayOptions( options );
3245 wxASSERT(
m_netsGrid->GetSelectedRows().size() == 1 );
3252 switch( aEvent.GetId() )
3267 m_frame->GetCanvas()->Refresh();
3272 m_frame->GetCanvas()->Refresh();
3277 m_frame->GetCanvas()->Refresh();
3299 bool show = aEvent.GetInt();
3316 if( net->GetNetClass()->ContainsNetclassWithName( aClassName ) )
3320 net->GetNetCode() );
3322 int row =
m_netsTable->GetRowByNetcode( net->GetNetCode() );
3337 m_frame->GetCanvas()->RedrawRatsnest();
3338 m_frame->GetCanvas()->Refresh();
3354 std::shared_ptr<NETCLASS> nc = netSettings->GetNetClassByName( netclassName );
3357 netSettings->RecomputeEffectiveNetclasses();
3359 m_frame->GetCanvas()->GetView()->UpdateAllLayersColor();
3360 m_frame->GetCanvas()->RedrawRatsnest();
3361 m_frame->GetCanvas()->Refresh();
3368 int classId = s->GetId();
3386 m_frame->SetDisplayOptions( options );
3387 m_frame->GetCanvas()->GetView()->UpdateAllLayersColor();
3398 cfg->m_Display.m_ShowGlobalRatsnest =
true;
3403 cfg->m_Display.m_ShowGlobalRatsnest =
true;
3408 cfg->m_Display.m_ShowGlobalRatsnest =
false;
3415 editframe->SetElementVisibility(
LAYER_RATSNEST, cfg->m_Display.m_ShowGlobalRatsnest );
3417 editframe->OnDisplayOptionsChanged();
3418 editframe->GetCanvas()->RedrawRatsnest();
3419 editframe->GetCanvas()->Refresh();
3443 setting = it->second;
3445 auto runOnNetsOfClass =
3446 [&](
const wxString& netClassName, std::function<void(
NETINFO_ITEM* )> aFunction )
3450 if( net->GetNetClass()->ContainsNetclassWithName( netClassName ) )
3455 switch( aEvent.GetId() )
3468 netSettings->RecomputeEffectiveNetclasses();
3484 netSettings->RecomputeEffectiveNetclasses();
3502 netSettings->RecomputeEffectiveNetclasses();
3517 static bool first =
true;
3565 for(
const auto& [
name, netclass] : netSettings->GetNetclasses() )
3583 for(
const auto& [
name, netclass] : netSettings->GetNetclasses() )
3600 m_frame->GetCanvas()->RedrawRatsnest();
3601 m_frame->GetCanvas()->Refresh();
3617 wxHyperlinkCtrl* button =
new wxHyperlinkCtrl( infobar, wxID_ANY,
_(
"Open Preferences" ), wxEmptyString );
3619 button->Bind( wxEVT_COMMAND_HYPERLINK, std::function<
void( wxHyperlinkEvent& aEvent )>(
3620 [&]( wxHyperlinkEvent& aEvent )
3622 m_frame->ShowPreferences( wxEmptyString, wxEmptyString );
3629 infobar->
ShowMessageFor(
_(
"The current color theme is read-only. Create a new theme in Preferences to "
3630 "enable color editing." ),
3631 10000, wxICON_INFORMATION );
static std::set< int > s_allowedInFpEditor
These GAL layers are shown in the Objects tab in the footprint editor.
wxBitmap KiBitmap(BITMAPS aBitmap, int aHeightTag)
Construct a wxBitmap from an image identifier Returns the image from the active theme if the image ha...
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap, int aMinHeight)
@ show_front_assembly_layers
@ show_back_assembly_layers
HIGH_CONTRAST_MODE
Determine how inactive layers should be displayed.
@ NORMAL
Inactive layers are shown normally (no high-contrast mode)
@ HIDDEN
Inactive layers are hidden.
@ DIMMED
Inactive layers are dimmed (old high-contrast mode)
@ RATSNEST
Net/netclass colors are shown on ratsnest lines only.
@ ALL
Net/netclass colors are shown on all net copper.
@ OFF
Net (and netclass) colors are not shown.
@ VISIBLE
Ratsnest lines are drawn to items on visible layers only.
@ ALL
Ratsnest lines are drawn to items on all layers (default)
static TOOL_ACTION highContrastModeCycle
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
APPEARANCE_CONTROLS_BASE(wxWindow *parent, wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(-1,-1), long style=wxTAB_TRAVERSAL, const wxString &name=wxEmptyString)
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
wxBitmapBundle m_visibleBitmapBundle
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)
bool isLayerEnabled(PCB_LAYER_ID aLayer) const
void setVisibleLayers(const LSET &aLayers)
void rebuildViewportsWidget()
wxRadioButton * m_rbRatsnestAllLayers
wxBoxSizer * m_objectsOuterSizer
wxSize GetBestSize() const
Update the panel contents from the application and board models.
LAYER_PRESET * m_lastSelectedUserPreset
wxString m_contextMenuNetclass
The name of the netclass that was right-clicked.
wxRadioButton * m_rbNetColorRatsnest
void rebuildLayerPresetsWidget(bool aReset)
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)
wxBitmapBundle m_notVisibileBitmapBundle
void OnNetGridRightClick(wxGridEvent &event) override
void OnBoardItemsChanged(BOARD &aBoard, std::vector< BOARD_ITEM * > &aItems) override
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 OnBoardCompositeUpdate(BOARD &aBoard, std::vector< BOARD_ITEM * > &aAddedItems, std::vector< BOARD_ITEM * > &aRemovedItems, std::vector< BOARD_ITEM * > &aChangedItems) override
Update the colors on all the widgets from the new chosen color theme.
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 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
void CommonSettingsChanged(int aFlag)
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
BASE_SET & set(size_t pos)
A checkbox control except with custom bitmaps for the checked and unchecked states.
void SetValue(bool aValue)
Set the checkbox state.
std::shared_ptr< NET_SETTINGS > m_NetSettings
std::map< std::string, wxString > m_UserLayerNames
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Information pertinent to a Pcbnew printed circuit board.
const NETINFO_LIST & GetNetInfo() const
static wxString GetStandardLayerName(PCB_LAYER_ID aLayerId)
Return an "English Standard" name of a PCB layer when given aLayerNumber.
LSET GetLayerSet() const override
Return a std::bitset of all layers on which the item physically resides.
void SetHighLightNet(int aNetCode, bool aMulti=false)
Select the netcode to be highlighted.
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
const LSET & GetEnabledLayers() const
A proxy function that calls the corresponding function in m_BoardSettings.
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.
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
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)
Register 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 GetScaleFactor() const override
Get the DPI scale from all known sources in order:
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...
Represent 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.
PCB specific render settings.
std::set< int > & GetHiddenNets()
std::map< int, KIGFX::COLOR4D > & GetNetColorMap()
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 UpdateAllLayersColor()
Apply the new coloring scheme to all layers.
void SetLayerVisible(int aLayer, bool aVisible=true)
Control the visibility of a particular layer.
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 UpdateAllItemsConditionally(int aUpdateFlags, std::function< bool(VIEW_ITEM *)> aCondition)
Update items in the view according to the given flags and condition.
LSET is a set of PCB_LAYER_IDs.
static const LSET & FrontMask()
Return a mask holding all technical layers and the external CU layer on front side.
static const LSET & BackAssembly()
Return a complete set of all bottom assembly layers which is all B_SilkS and B_Mask.
static const LSET & BackMask()
Return a mask holding all technical layers and the external CU layer on back side.
static const LSET & FrontAssembly()
Return a complete set of all top assembly layers which is all F_SilkS and F_Mask.
LSEQ CuStack() const
Return a sequence of copper layers in starting from the front/top and extending to the back/bottom.
LSEQ Seq(const LSEQ &aSequence) const
Return an LSEQ from the union of this LSET and a desired sequence.
static LSET AllCuMask(int aCuLayerCount)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
static const LSET & AllLayersMask()
static const LSET & InternalCuMask()
Return a complete set of internal copper layers which is all Cu layers except F_Cu and B_Cu.
static wxString Name(PCB_LAYER_ID aLayerId)
Return the fixed name association with aLayerId.
bool Contains(PCB_LAYER_ID aLayer) const
See if the layer set contains a PCB layer.
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)
static TOOL_ACTION highlightNet
static TOOL_ACTION hideNetInRatsnest
static TOOL_ACTION showNetInRatsnest
static TOOL_ACTION showNetInspector
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.
double m_TrackOpacity
Opacity override for all tracks.
bool m_FlipBoardView
true if the board is flipped to show the mirrored view
double m_FilledShapeOpacity
Opacity override for graphic shapes.
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.
The main frame for Pcbnew.
The project local settings are things that are attached to a particular project, but also might be pa...
std::set< wxString > m_HiddenNetclasses
Icon provider for the "standard" row indicators, for example in layer selection lists.
@ OFF
Row "off" or "deselected".
@ ON
Row "on" or "selected".
A better wxCollapsiblePane that.
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)
Return a netname layer corresponding to the given layer.
bool IsCopperLayer(int aLayerId)
Test whether a layer is a copper layer.
GAL_LAYER_ID
GAL layers are "virtual" layers, i.e.
@ LAYER_POINTS
PCB reference/manual snap points visibility.
@ LAYER_LOCKED_ITEM_SHADOW
Shadow layer for locked items.
@ LAYER_FILLED_SHAPES
Copper graphic shape opacity/visibility (color ignored).
@ LAYER_CONFLICTS_SHADOW
Shadow layer for items flagged conflicting.
@ LAYER_FOOTPRINTS_FR
Show footprints on front.
@ LAYER_DRAWINGSHEET
Sheet frame and title block.
@ LAYER_DRAW_BITMAPS
Draw images.
@ LAYER_FP_REFERENCES
Show footprints references (when texts are visible).
@ LAYER_BOARD_OUTLINE_AREA
PCB board outline.
@ 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_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_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.
#define CLEARANCE_LAYER_FOR(boardLayer)
#define VIA_COPPER_LAYER_FOR(boardLayer)
PCB_LAYER_ID
A quick note on layer IDs:
#define ZONE_LAYER_FOR(boardLayer)
#define PAD_COPPER_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)
KICOMMON_API wxFont GetInfoFont(wxWindow *aWindow)
KICOMMON_API wxMenuItem * AddMenuItem(wxMenu *aMenu, int aId, const wxString &aText, const wxBitmapBundle &aImage, wxItemKind aType=wxITEM_NORMAL)
Create and insert a menu item with an icon into aMenu.
const int c_IndicatorSizeDIP
std::map< wxString, NETINFO_ITEM * > NETNAMES_MAP
T * GetAppSettings(const char *aFilename)
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,...
bool can_control_visibility
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.
@ PCB_NETINFO_T
class NETINFO_ITEM, a description of a net