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 );
233 int deleted = (int)
m_nets.size();
238 wxGridTableMessage msg(
this, wxGRIDTABLE_NOTIFY_ROWS_DELETED, 0, deleted );
239 GetView()->ProcessTableMessage( msg );
242 for(
const std::pair<const wxString, NETINFO_ITEM*>& pair : nets )
244 int netCode = pair.second->GetNetCode();
246 if( netCode > 0 && !pair.first.StartsWith( wxT(
"unconnected-(" ) ) )
248 COLOR4D color = netColors.count( netCode ) ? netColors.at( netCode )
251 bool visible = hiddenNets.count( netCode ) == 0;
261 return a.name < b.name;
266 wxGridTableMessage msg(
this, wxGRIDTABLE_NOTIFY_ROWS_APPENDED, (
int)
m_nets.size() );
267 GetView()->ProcessTableMessage( msg );
281 GetView()->ForceRefresh();
289 net.visible = ( net.code == aNet.
code );
294 GetView()->ForceRefresh();
303 m_frame->GetToolManager()->RunAction( action, aNet.
code );
312 std::map<int, KIGFX::COLOR4D>& netColors = renderSettings->
GetNetColorMap();
317 netColors.erase( aNet.
code );
319 m_frame->GetCanvas()->GetView()->UpdateAllLayersColor();
320 m_frame->GetCanvas()->RedrawRatsnest();
321 m_frame->GetCanvas()->Refresh();
328#define RR APPEARANCE_CONTROLS::APPEARANCE_SETTING
419 SetMinSize( FromDIP( GetMinSize() ) );
426 int screenHeight = wxSystemSettings::GetMetric( wxSYS_SCREEN_Y );
428 m_pointSize = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ).GetPointSize();
451 m_cbLayerPresets->SetToolTip( wxString::Format(
_(
"Save and restore layer visibility combinations.\n"
452 "Use %s+Tab to activate selector.\n"
453 "Successive Tabs while holding %s down will "
454 "cycle through presets in the popup." ),
458 m_cbViewports->SetToolTip( wxString::Format(
_(
"Save and restore view location and zoom.\n"
459 "Use %s+Tab to activate selector.\n"
460 "Successive Tabs while holding %s down will "
461 "cycle through viewports in the popup." ),
485 auto setHighContrastMode =
491 m_frame->SetDisplayOptions( opts );
496 [=]( wxCommandEvent& aEvent )
502 [=]( wxCommandEvent& aEvent )
508 [=]( wxCommandEvent& aEvent )
516 [&]( wxCommandEvent& aEvent )
522 [&]( wxCommandEvent& aEvent )
526 editframe->ShowBoardSetupDialog(
_(
"Net Classes" ) );
533 [&]( wxCommandEvent& aEvent )
544 m_netsGrid->RegisterDataType( wxT(
"COLOR4D" ),
552 m_netsGrid->SetSelectionMode( wxGrid::wxGridSelectRows );
556 const int cellPadding = 6;
558 const int rowHeightPadding = 5;
560 const int rowHeightPadding = 3;
570 m_netsGrid->SetDefaultRowSize( font.GetPixelSize().y + rowHeightPadding );
577 m_netsGrid->ShowScrollbars( wxSHOW_SB_NEVER, wxSHOW_SB_DEFAULT );
585 if( cfg->m_AuiPanels.appearance_expand_layer_display )
588 if( cfg->m_AuiPanels.appearance_expand_net_display )
623 _(
"Layer Display Options" ) );
629 wxBoxSizer* layerDisplayOptionsSizer;
630 layerDisplayOptionsSizer =
new wxBoxSizer( wxVERTICAL );
637 msg =
_(
"Inactive layers:" );
644 wxBoxSizer* contrastModeSizer;
645 contrastModeSizer =
new wxBoxSizer( wxHORIZONTAL );
648 wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
654 contrastModeSizer->AddStretchSpacer();
661 contrastModeSizer->AddStretchSpacer();
668 contrastModeSizer->AddStretchSpacer();
670 layerDisplayOptionsSizer->Add( contrastModeSizer, 0, wxEXPAND, 5 );
673 wxDefaultSize, wxLI_HORIZONTAL );
676 m_cbFlipBoard =
new wxCheckBox( layerDisplayPane, wxID_ANY,
_(
"Flip board view" ) );
678 layerDisplayOptionsSizer->Add(
m_cbFlipBoard, 0, wxTOP | wxBOTTOM, 3 );
680 layerDisplayPane->SetSizer( layerDisplayOptionsSizer );
681 layerDisplayPane->Layout();
682 layerDisplayOptionsSizer->Fit( layerDisplayPane );
687 [&]( wxCommandEvent& aEvent )
698 _(
"Net Display Options" ) );
703 wxBoxSizer* netDisplayOptionsSizer =
new wxBoxSizer( wxVERTICAL );
712 msg =
_(
"Net colors:" );
721 wxBoxSizer* netColorSizer =
new wxBoxSizer( wxHORIZONTAL );
723 m_rbNetColorAll =
new wxRadioButton( netDisplayPane, wxID_ANY,
_(
"All" ), wxDefaultPosition,
724 wxDefaultSize, wxRB_GROUP );
726 m_rbNetColorAll->SetToolTip(
_(
"Net and netclass colors are shown on all copper items" ) );
729 netColorSizer->AddStretchSpacer();
737 netColorSizer->AddStretchSpacer();
739 m_rbNetColorOff =
new wxRadioButton( netDisplayPane, wxID_ANY,
_(
"None" ) );
741 m_rbNetColorOff->SetToolTip(
_(
"Net and netclass colors are not shown" ) );
745 netDisplayOptionsSizer->Add( netColorSizer, 0, wxEXPAND | wxBOTTOM, 5 );
754 msg =
_(
"Ratsnest display:" );
763 wxBoxSizer* ratsnestDisplayModeSizer =
new wxBoxSizer( wxHORIZONTAL );
766 wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
772 ratsnestDisplayModeSizer->AddStretchSpacer();
779 ratsnestDisplayModeSizer->AddStretchSpacer();
787 netDisplayOptionsSizer->Add( ratsnestDisplayModeSizer, 0, wxEXPAND | wxBOTTOM, 5 );
791 netDisplayPane->SetSizer( netDisplayOptionsSizer );
792 netDisplayPane->Layout();
793 netDisplayOptionsSizer->Fit( netDisplayPane );
798 [&]( wxCommandEvent& aEvent )
841 int page = aEvent.GetSelection();
844 m_notebook->ChangeSelection(
static_cast<unsigned>( page ) );
873 if( wxBitmapButton* btn =
dynamic_cast<wxBitmapButton*
>( aEvent.GetEventObject() ) )
875 wxCommandEvent evt( wxEVT_BUTTON );
876 wxPostEvent( btn, evt );
893 int row =
event.GetRow();
894 int col =
event.GetCol();
911 int row =
event.GetRow();
912 int col =
event.GetCol();
934 menu.Append(
new wxMenuItem( &menu,
ID_SET_NET_COLOR,
_(
"Set Net Color" ), wxEmptyString,
936 menu.Append(
new wxMenuItem( &menu,
ID_CLEAR_NET_COLOR,
_(
"Clear Net Color" ), wxEmptyString,
939 menu.AppendSeparator();
942 wxString::Format(
_(
"Highlight %s" ), netName ), wxEmptyString,
945 wxString::Format(
_(
"Select Tracks and Vias in %s" ), netName ),
946 wxEmptyString, wxITEM_NORMAL ) );
948 wxString::Format(
_(
"Unselect Tracks and Vias in %s" ), netName ),
949 wxEmptyString, wxITEM_NORMAL ) );
951 menu.AppendSeparator();
953 menu.Append(
new wxMenuItem( &menu,
ID_SHOW_ALL_NETS,
_(
"Show All Nets" ), wxEmptyString,
956 wxEmptyString, wxITEM_NORMAL ) );
966 wxPoint pos =
m_netsGrid->CalcUnscrolledPosition( aEvent.GetPosition() );
967 wxGridCellCoords cell =
m_netsGrid->XYToCell( pos );
969 if( aEvent.Moving() || aEvent.Entering() )
987 wxString showOrHide = net.
visible ?
_(
"Click to hide ratsnest for %s" )
988 :
_(
"Click to show ratsnest for %s" );
992 tip.Printf( showOrHide,
name );
994 tip =
_(
"Double click (or middle click) to change color; right click for more actions" );
996 m_netsGrid->GetGridWindow()->SetToolTip( tip );
998 else if( aEvent.Leaving() )
1003 else if( aEvent.Dragging() )
1011 else if( aEvent.ButtonUp( wxMOUSE_BTN_MIDDLE ) && !!cell )
1013 int row = cell.GetRow();
1014 int col = cell.GetCol();
1096 int row =
m_netsTable->GetRowByNetcode( aNetCode );
1114 bool rebuild = std::any_of( aBoardItems.begin(), aBoardItems.end(),
1117 return a->Type() == PCB_NETINFO_T;
1167 std::vector<BOARD_ITEM*>& aAddedItems,
1168 std::vector<BOARD_ITEM*>& aRemovedItems,
1169 std::vector<BOARD_ITEM*>& aChangedItems )
1211 if( child && child->GetWindow() )
1216 m_netsGrid->RegisterDataType( wxT(
"COLOR4D" ),
1222 if( pair.second->ctl_color )
1223 pair.second->ctl_color->OnDarkModeToggle();
1232 for(
const std::unique_ptr<APPEARANCE_SETTING>& setting :
m_layerSettings )
1242 if( r < 240 || g < 240 || b < 240 )
1244 r = wxChar( std::min( (
int) r + 15, 255 ) );
1245 g = wxChar( std::min( (
int) g + 15, 255 ) );
1246 b = wxChar( std::min( (
int) b + 15, 255 ) );
1250 r = wxChar( std::max( (
int) r - 15, 0 ) );
1251 g = wxChar( std::max( (
int) g - 15, 0 ) );
1252 b = wxChar( std::max( (
int) b - 15, 0 ) );
1265 newSetting->
ctl_panel->SetBackgroundColour( wxColour( r, g, b ) );
1277 if( visible.test( layer ) == isVisible )
1280 visible.
set( layer, isVisible );
1283 m_frame->GetCanvas()->GetView()->SetLayerVisible( layer, isVisible );
1299 m_frame->GetBoard()->SetElementVisibility( aLayer, isVisible );
1301 m_frame->Update3DView(
true,
m_frame->GetPcbNewSettings()->m_Display.m_Live3DRefresh );
1303 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer, isVisible );
1304 m_frame->GetCanvas()->Refresh();
1319 m_frame->GetBoard()->SetVisibleLayers( aLayers );
1329 return dynamic_cast<PCB_VIA*
>( aItem ) ||
dynamic_cast<PAD*
>( aItem );
1332 m_frame->Update3DView(
true,
m_frame->GetPcbNewSettings()->m_Display.m_Live3DRefresh );
1363 m_frame->GetBoard()->SetVisibleElements( aLayers );
1375 if( s_setting.id == gal_ly )
1383 m_frame->Update3DView(
true,
m_frame->GetPcbNewSettings()->m_Display.m_Live3DRefresh );
1402 return m_frame->GetBoard()->GetVisibleLayers();
1415 for(
size_t i = 0; i < set.size(); i++ )
1422 return m_frame->GetBoard()->GetVisibleElements();
1451 if( !cfg->m_Display.m_ShowGlobalRatsnest )
1468 std::vector<LAYER_PRESET> ret;
1470 for(
const std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
1472 if( !pair.second.readOnly )
1473 ret.emplace_back( pair.second );
1523 wxCommandEvent
dummy;
1545 std::vector<VIEWPORT> ret;
1547 for(
const std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
1548 ret.emplace_back( pair.second );
1558 for(
const VIEWPORT& viewport : aViewportList )
1576 wxCommandEvent
dummy;
1602 m_windowLayersSizerItem->SetFlag( m_windowLayersSizerItem->GetFlag() & ~wxTOP );
1606 [&]( std::unique_ptr<APPEARANCE_SETTING>& aSetting )
1608 int layer = aSetting->id;
1611 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
1612 panel->SetSizer( sizer );
1616 aSetting->visible = visible[layer];
1624 swatch->SetToolTip(
_(
"Double click or middle click for color change, right click for menu" ) );
1629 aSetting->visible );
1630 btn_visible->SetToolTip(
_(
"Show or hide this layer" ) );
1632 wxStaticText* label =
new wxStaticText( panel, layer, aSetting->label );
1634 label->SetToolTip( aSetting->tooltip );
1636 sizer->AddSpacer( 1 );
1637 sizer->Add( indicator, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1638 sizer->AddSpacer( 5 );
1639 sizer->Add( swatch, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1640 sizer->AddSpacer( 6 );
1641 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1642 sizer->AddSpacer( 5 );
1643 sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1647 aSetting->ctl_panel = panel;
1648 aSetting->ctl_indicator = indicator;
1649 aSetting->ctl_visibility = btn_visible;
1650 aSetting->ctl_color = swatch;
1651 aSetting->ctl_text = label;
1658 btn_visible->Bind( TOGGLE_CHANGED,
1659 [&]( wxCommandEvent& aEvent )
1661 wxObject* btn = aEvent.GetEventObject();
1662 int layerId =
static_cast<wxWindow*
>( btn )->GetId();
1679 [&]( std::unique_ptr<APPEARANCE_SETTING>& aSetting )
1681 int layer = aSetting->id;
1682 aSetting->visible = visible[layer];
1683 aSetting->ctl_panel->Show();
1684 aSetting->ctl_panel->SetId( layer );
1685 aSetting->ctl_indicator->SetWindowID( layer );
1686 aSetting->ctl_color->SetWindowID( layer );
1687 aSetting->ctl_color->SetSwatchColor( theme->
GetColor( layer ),
false );
1688 aSetting->ctl_visibility->SetWindowID( layer );
1689 aSetting->ctl_text->SetLabelText( aSetting->label );
1690 aSetting->ctl_text->SetId( layer );
1691 aSetting->ctl_text->SetToolTip( aSetting->tooltip );
1697 static const struct {
1703 {
F_Paste,
_HKI(
"Solder paste on board's front" ) },
1704 {
B_Paste,
_HKI(
"Solder paste on board's back" ) },
1705 {
F_SilkS,
_HKI(
"Silkscreen on board's front" ) },
1706 {
B_SilkS,
_HKI(
"Silkscreen on board's back" ) },
1707 {
F_Mask,
_HKI(
"Solder mask on board's front" ) },
1708 {
B_Mask,
_HKI(
"Solder mask on board's back" ) },
1714 {
Margin,
_HKI(
"Board's edge setback outline" ) },
1715 {
F_CrtYd,
_HKI(
"Footprint courtyards on board's front" ) },
1716 {
B_CrtYd,
_HKI(
"Footprint courtyards on board's back" ) },
1717 {
F_Fab,
_HKI(
"Footprint assembly on board's front" ) },
1718 {
B_Fab,
_HKI(
"Footprint assembly on board's back" ) },
1781 std::size_t total_layers = enabled.
CuStack().size();
1783 for(
const auto& entry : non_cu_seq )
1785 if( enabled[entry.layerId] )
1795 for( std::size_t ii = total_layers; ii <
m_layerSettings.size(); ++ii )
1810 case F_Cu: dsc =
_(
"Front copper layer" );
break;
1811 case B_Cu: dsc =
_(
"Back copper layer" );
break;
1812 default: dsc =
_(
"Inner copper layer" );
break;
1815 std::unique_ptr<APPEARANCE_SETTING>& setting = *layer_it;
1818 setting->id = layer;
1819 setting->tooltip = dsc;
1821 if( setting->ctl_panel ==
nullptr )
1822 appendLayer( setting );
1824 updateLayer( setting );
1830 setting->ctl_text->Disable();
1831 setting->ctl_color->SetToolTip( wxEmptyString );
1837 for(
const auto& entry : non_cu_seq )
1841 if( !enabled[layer] )
1844 std::unique_ptr<APPEARANCE_SETTING>& setting = *layer_it;
1860 setting->id = layer;
1863 setting->tooltip = wxGetTranslation( entry.tooltip );
1865 if( setting->ctl_panel ==
nullptr )
1866 appendLayer( setting );
1868 updateLayer( setting );
1874 setting->ctl_text->Disable();
1875 setting->ctl_color->SetToolTip( wxEmptyString );
1893 msg =
_(
"Inactive layers:" );
1950 if(
m_frame->GetBoard()->GetCopperLayerCount() > 2 )
1975 switch( aEvent.GetId() )
2000 if( !visible.test( current ) && visible.count() > 0 )
2001 m_frame->SetActiveLayer( *visible.
Seq().begin() );
2009 if( !visible.test( current ) && visible.count() > 0 )
2010 m_frame->SetActiveLayer( *visible.
Seq().begin() );
2051 m_frame->GetCanvas()->SyncLayersVisibility( board );
2053 m_frame->GetCanvas()->Refresh();
2067 if( aTab >= 0 &&
static_cast<size_t>( aTab ) < max )
2083 int layer = setting->id;
2085 if( setting->ctl_visibility )
2086 setting->ctl_visibility->SetValue( visible[layer] );
2088 if( setting->ctl_color )
2091 setting->ctl_color->SetSwatchColor( color,
false );
2092 setting->ctl_color->SetReadOnly( readOnly );
2100 if( setting->ctl_visibility )
2101 setting->ctl_visibility->SetValue( objects.
Contains( layer ) );
2103 if( setting->ctl_color )
2106 setting->ctl_color->SetSwatchColor( color,
false );
2107 setting->ctl_color->SetReadOnly( readOnly );
2122 wxWindow* eventSource =
static_cast<wxWindow*
>( aEvent.GetEventObject() );
2129 m_frame->SetActiveLayer( layer );
2146 visibleLayers.
set( aLayer, !visibleLayers.test( aLayer ) );
2148 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer, visibleLayers.test( aLayer ) );
2151 m_frame->GetCanvas()->Refresh();
2164 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer,
true );
2168 m_frame->GetPcbNewSettings()->m_Display.m_ShowGlobalRatsnest = isVisible;
2169 m_frame->GetBoard()->SetElementVisibility( aLayer, isVisible );
2170 m_frame->OnDisplayOptionsChanged();
2171 m_frame->GetCanvas()->RedrawRatsnest();
2178 m_frame->SetGridVisibility( isVisible );
2179 m_frame->GetCanvas()->Refresh();
2214 if( visible.
Contains( aLayer ) != isVisible )
2216 visible.
set( aLayer, isVisible );
2218 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer, isVisible );
2224 m_frame->GetCanvas()->Refresh();
2235 int swatchWidth =
m_windowObjects->ConvertDialogToPixels( wxSize( 8, 0 ) ).x;
2245 [&](
const std::unique_ptr<APPEARANCE_SETTING>& aSetting )
2247 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
2248 int layer = aSetting->id;
2258 swatch->SetToolTip(
_(
"Left double click or middle click for color change, "
2259 "right click for menu" ) );
2261 sizer->Add( swatch, 0, wxALIGN_CENTER_VERTICAL, 0 );
2262 aSetting->ctl_color = swatch;
2270 sizer->AddSpacer( swatchWidth );
2276 if( aSetting->can_control_visibility )
2281 aSetting->visible );
2283 tip.Printf(
_(
"Show or hide %s" ), aSetting->label.Lower() );
2284 btn_visible->SetToolTip( tip );
2286 aSetting->ctl_visibility = btn_visible;
2288 btn_visible->Bind( TOGGLE_CHANGED,
2289 [&]( wxCommandEvent& aEvent )
2291 int id =
static_cast<wxWindow*
>( aEvent.GetEventObject() )->GetId();
2292 bool isVisible = aEvent.GetInt();
2297 sizer->AddSpacer( 5 );
2299 wxStaticText* label =
new wxStaticText(
m_windowObjects, layer, aSetting->label );
2301 label->SetToolTip( aSetting->tooltip );
2303 if( aSetting->can_control_opacity )
2305 label->SetMinSize( wxSize( labelWidth, -1 ) );
2308 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 10 );
2310 sizer->AddSpacer( btnWidth );
2312 sizer->AddSpacer( 5 );
2313 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 10 );
2316 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL, 0 );
2318 sizer->AddSpacer( btnWidth );
2320 sizer->AddSpacer( 5 );
2321 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL, 0 );
2324 wxSlider* slider =
new wxSlider(
m_windowObjects, wxID_ANY, 100, 0, 100,
2325 wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL );
2327 slider->SetMinSize( wxSize( 80, 16 ) );
2329 slider->SetMinSize( wxSize( 80, -1 ) );
2332 tip.Printf(
_(
"Set opacity of %s" ), aSetting->label.Lower() );
2333 slider->SetToolTip( tip );
2335 sizer->Add( slider, 1, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 5 );
2336 aSetting->ctl_opacity = slider;
2338 auto opacitySliderHandler =
2339 [
this, layer]( wxCommandEvent& aEvent )
2341 wxSlider* ctrl =
static_cast<wxSlider*
>( aEvent.GetEventObject() );
2342 int value = ctrl->GetValue();
2346 slider->Bind( wxEVT_SCROLL_CHANGED, opacitySliderHandler );
2347 slider->Bind( wxEVT_SCROLL_THUMBTRACK, opacitySliderHandler );
2353 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL, 0 );
2355 sizer->AddSpacer( btnWidth );
2357 sizer->AddSpacer( 5 );
2358 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL, 0 );
2361 aSetting->ctl_text = label;
2364 if( !aSetting->can_control_opacity )
2373 m_objectSettings.emplace_back( std::make_unique<APPEARANCE_SETTING>( s_setting ) );
2379 setting->tooltip = wxGetTranslation( s_setting.tooltip );
2380 setting->label = wxGetTranslation( s_setting.label );
2382 if( setting->can_control_opacity )
2385 labelWidth = std::max( labelWidth, width );
2388 if( !s_setting.spacer )
2392 for(
const std::unique_ptr<APPEARANCE_SETTING>& setting :
m_objectSettings )
2394 if( setting->spacer )
2397 appendObject( setting );
2412 if( setting->spacer )
2417 if( setting->ctl_visibility )
2418 setting->ctl_visibility->SetValue( visible.
Contains( layer ) );
2420 if( setting->ctl_color )
2422 COLOR4D color =
m_frame->GetColorSettings()->GetColor( setting->id );
2423 setting->ctl_color->SetSwatchColor( color,
false );
2444 const wxString& aName )
2449 if( !isDefaultClass)
2451 aMenu.Append(
new wxMenuItem( &aMenu,
ID_SET_NET_COLOR,
_(
"Set Netclass Color" ),
2452 wxEmptyString, wxITEM_NORMAL ) );
2455 _(
"Use Color from Schematic" ),
2456 wxEmptyString, wxITEM_NORMAL );
2457 std::shared_ptr<NETCLASS> nc = netSettings->GetNetClassByName( aName );
2459 aMenu.Append( schematicColor );
2462 schematicColor->Enable(
false );
2465 wxEmptyString, wxITEM_NORMAL ) );
2466 aMenu.AppendSeparator();
2472 wxString::Format(
_(
"Highlight Nets in %s" ),
name ),
2473 wxEmptyString, wxITEM_NORMAL ) );
2475 wxString::Format(
_(
"Select Tracks and Vias in %s" ),
name ),
2476 wxEmptyString, wxITEM_NORMAL ) );
2478 wxString::Format(
_(
"Unselect Tracks and Vias in %s" ),
name ),
2479 wxEmptyString, wxITEM_NORMAL ) );
2481 aMenu.AppendSeparator();
2483 aMenu.Append(
new wxMenuItem( &aMenu,
ID_SHOW_ALL_NETS,
_(
"Show All Netclasses" ),
2484 wxEmptyString, wxITEM_NORMAL ) );
2485 aMenu.Append(
new wxMenuItem( &aMenu,
ID_HIDE_OTHER_NETS,
_(
"Hide All Other Netclasses" ),
2486 wxEmptyString, wxITEM_NORMAL ) );
2508 const std::set<wxString>& hiddenClasses =
m_frame->Prj().GetLocalSettings().m_HiddenNetclasses;
2512 auto appendNetclass =
2513 [&](
int aId,
const std::shared_ptr<NETCLASS>& aClass,
bool isDefaultClass = false )
2515 wxString
name = aClass->GetName();
2522 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
2526 ? netSettings->GetNetClassByName(
name )->GetPcbColor()
2531 setting->
ctl_color->SetToolTip(
_(
"Left double click or middle click for color "
2532 "change, right click for menu" ) );
2534 setting->
ctl_color->Bind( COLOR_SWATCH_CHANGED,
2538 if( isDefaultClass )
2544 !hiddenClasses.count(
name ) );
2547 tip.Printf(
_(
"Show or hide ratsnest for nets in %s" ),
name );
2553 int flags = wxALIGN_CENTER_VERTICAL;
2555 sizer->Add( setting->
ctl_color, 0, flags | wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5 );
2556 sizer->AddSpacer( 7 );
2558 sizer->AddSpacer( 3 );
2559 sizer->Add( setting->
ctl_text, 1, flags, 5 );
2569 [&,
name, isDefaultClass]( wxMouseEvent& aEvent )
2578 setting->
ctl_panel->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2580 setting->
ctl_color->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2581 setting->
ctl_text->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2584 std::vector<wxString> names;
2586 for(
const auto& [
name, netclass] : netSettings->GetNetclasses() )
2587 names.emplace_back(
name );
2589 std::sort( names.begin(), names.end() );
2593 int idx = wxID_HIGHEST;
2596 appendNetclass( idx++, netSettings->GetDefaultNetclass(),
true );
2598 for(
const wxString&
name : names )
2601 appendNetclass( idx++, netSettings->GetNetclasses().at(
name ) );
2614 msg =
_(
"Net colors:" );
2620 m_rbNetColorAll->SetToolTip(
_(
"Net and netclass colors are shown on all copper items" ) );
2626 m_rbNetColorOff->SetToolTip(
_(
"Net and netclass colors are not shown" ) );
2633 msg =
_(
"Ratsnest display:" );
2667 int default_idx = 0;
2668 std::vector<std::pair<wxString, void*>> userPresets;
2674 const wxString translatedName = wxGetTranslation(
name );
2675 void* userData =
static_cast<void*
>( &preset );
2677 if( preset.readOnly )
2680 userPresets.push_back( {
name, userData } );
2691 if( !userPresets.empty() )
2695 for(
auto& [
name, userData] : userPresets )
2722 [&](
const std::pair<const wxString, LAYER_PRESET>& aPair )
2724 return ( aPair.second.layers == visibleLayers
2725 && aPair.second.renderLayers == visibleObjects
2726 && aPair.second.flipBoard == flipBoard );
2733 bool do_translate = it->second.readOnly;
2734 wxString
text = do_translate ? wxGetTranslation( it->first ) : it->first;
2753 wxString ui_label = aName;
2755 for( std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
2757 if( pair.first != aName )
2760 if( pair.second.readOnly ==
true )
2761 ui_label = wxGetTranslation( aName );
2785 auto resetSelection =
2794 if(
index == count - 2 )
2802 wxTextEntryDialog dlg( wxGetTopLevelParent(
this ),
_(
"Layer preset name:" ),
2803 _(
"Save Layer Preset" ),
name );
2805 if( dlg.ShowModal() != wxID_OK )
2811 name = dlg.GetValue();
2829 wxMessageBox(
_(
"Default presets cannot be modified.\nPlease use a different name." ),
2830 _(
"Error" ), wxOK | wxICON_ERROR, wxGetTopLevelParent(
this ) );
2837 if( !
IsOK( wxGetTopLevelParent(
this ),
_(
"Overwrite existing preset?" ) ) )
2859 else if(
index == count - 1 )
2862 wxArrayString headers;
2863 std::vector<wxArrayString> items;
2865 headers.Add(
_(
"Presets" ) );
2867 for( std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
2869 if( !pair.second.readOnly )
2872 item.Add( pair.first );
2873 items.emplace_back( item );
2885 if( idx != wxNOT_FOUND )
2893 if(
m_presetMRU.Index( presetName ) != wxNOT_FOUND )
2935 const wxString translatedName = wxGetTranslation(
m_currentPreset->name );
2937 if(
m_presetMRU.Index( translatedName ) != wxNOT_FOUND )
2962 activeLayer = *aPreset.
layers.
Seq().begin();
2967 m_frame->SetActiveLayer( activeLayer );
2970 m_frame->GetCanvas()->SyncLayersVisibility( board );
2978 m_frame->GetCanvas()->Refresh();
2992 for( std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
2993 m_cbViewports->Append( pair.first,
static_cast<void*
>( &pair.second ) );
3030 wxCHECK( viewport, );
3034 if( !viewport->
name.IsEmpty() )
3042 else if(
index == count - 2 )
3047 wxTextEntryDialog dlg( wxGetTopLevelParent(
this ),
_(
"Viewport name:" ),
_(
"Save Viewport" ),
name );
3049 if( dlg.ShowModal() != wxID_OK )
3059 name = dlg.GetValue();
3082 else if(
index == count - 1 )
3085 wxArrayString headers;
3086 std::vector<wxArrayString> items;
3088 headers.Add(
_(
"Viewports" ) );
3090 for( std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
3093 item.Add( pair.first );
3094 items.emplace_back( item );
3105 if( idx != wxNOT_FOUND )
3129 m_frame->GetCanvas()->GetView()->SetViewport( aViewport.
rect );
3130 m_frame->GetCanvas()->Refresh();
3138 int layer = swatch->GetId();
3143 m_frame->GetSettingsManager()->SaveColorSettings( cs,
"board" );
3145 m_frame->GetCanvas()->UpdateColors();
3163 m_frame->GetCanvas()->Refresh();
3166 m_frame->SetDrawBgColor( newColor );
3187 m_frame->SetDisplayOptions( options );
3194 wxASSERT(
m_netsGrid->GetSelectedRows().size() == 1 );
3201 switch( aEvent.GetId() )
3216 m_frame->GetCanvas()->Refresh();
3221 m_frame->GetCanvas()->Refresh();
3226 m_frame->GetCanvas()->Refresh();
3248 bool show = aEvent.GetInt();
3260 if( net->GetNetClass()->ContainsNetclassWithName( aClassName ) )
3264 net->GetNetCode() );
3266 int row =
m_netsTable->GetRowByNetcode( net->GetNetCode() );
3281 m_frame->GetCanvas()->RedrawRatsnest();
3282 m_frame->GetCanvas()->Refresh();
3294 std::shared_ptr<NETCLASS> nc = netSettings->GetNetClassByName( netclassName );
3297 netSettings->RecomputeEffectiveNetclasses();
3299 m_frame->GetCanvas()->GetView()->UpdateAllLayersColor();
3300 m_frame->GetCanvas()->RedrawRatsnest();
3301 m_frame->GetCanvas()->Refresh();
3308 int classId = s->GetId();
3326 m_frame->SetDisplayOptions( options );
3327 m_frame->GetCanvas()->GetView()->UpdateAllLayersColor();
3338 cfg->m_Display.m_ShowGlobalRatsnest =
true;
3343 cfg->m_Display.m_ShowGlobalRatsnest =
true;
3348 cfg->m_Display.m_ShowGlobalRatsnest =
false;
3355 editframe->SetElementVisibility(
LAYER_RATSNEST, cfg->m_Display.m_ShowGlobalRatsnest );
3357 editframe->OnDisplayOptionsChanged();
3358 editframe->GetCanvas()->RedrawRatsnest();
3359 editframe->GetCanvas()->Refresh();
3379 setting = it->second;
3381 auto runOnNetsOfClass =
3382 [&](
const wxString& netClassName, std::function<void(
NETINFO_ITEM* )> aFunction )
3386 if( net->GetNetClass()->ContainsNetclassWithName( netClassName ) )
3391 switch( aEvent.GetId() )
3404 netSettings->RecomputeEffectiveNetclasses();
3420 netSettings->RecomputeEffectiveNetclasses();
3438 netSettings->RecomputeEffectiveNetclasses();
3453 static bool first =
true;
3501 for(
const auto& [
name, netclass] : netSettings->GetNetclasses() )
3519 for(
const auto& [
name, netclass] : netSettings->GetNetclasses() )
3536 m_frame->GetCanvas()->RedrawRatsnest();
3537 m_frame->GetCanvas()->Refresh();
3553 wxHyperlinkCtrl* button =
new wxHyperlinkCtrl( infobar, wxID_ANY,
_(
"Open Preferences" ), wxEmptyString );
3555 button->Bind( wxEVT_COMMAND_HYPERLINK, std::function<
void( wxHyperlinkEvent& aEvent )>(
3556 [&]( wxHyperlinkEvent& aEvent )
3558 m_frame->ShowPreferences( wxEmptyString, wxEmptyString );
3565 infobar->
ShowMessageFor(
_(
"The current color theme is read-only. Create a new theme in Preferences to "
3566 "enable color editing." ),
3567 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
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.
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.
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 SetMirror(bool aMirrorX, bool aMirrorY)
Control the mirroring 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 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.
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
void Refresh()
Update the board display after modifying it by a python script (note: it is automatically called by a...
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