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 )
2248 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
2249 panel->SetSizer( sizer );
2250 int layer = aSetting->id;
2260 swatch->SetToolTip(
_(
"Left double click or middle click for color change, "
2261 "right click for menu" ) );
2263 sizer->Add( swatch, 0, wxALIGN_CENTER_VERTICAL, 0 );
2264 aSetting->ctl_color = swatch;
2272 sizer->AddSpacer( swatchWidth );
2278 if( aSetting->can_control_visibility )
2283 aSetting->visible );
2285 tip.Printf(
_(
"Show or hide %s" ), aSetting->label.Lower() );
2286 btn_visible->SetToolTip( tip );
2288 aSetting->ctl_visibility = btn_visible;
2290 btn_visible->Bind( TOGGLE_CHANGED,
2291 [&]( wxCommandEvent& aEvent )
2293 int id =
static_cast<wxWindow*
>( aEvent.GetEventObject() )->GetId();
2294 bool isVisible = aEvent.GetInt();
2299 sizer->AddSpacer( 5 );
2301 wxStaticText* label =
new wxStaticText( panel, layer, aSetting->label );
2303 label->SetToolTip( aSetting->tooltip );
2305 if( aSetting->can_control_opacity )
2307 label->SetMinSize( wxSize( labelWidth, -1 ) );
2310 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 10 );
2312 sizer->AddSpacer( btnWidth );
2314 sizer->AddSpacer( 5 );
2315 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 10 );
2318 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL, 0 );
2320 sizer->AddSpacer( btnWidth );
2322 sizer->AddSpacer( 5 );
2323 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL, 0 );
2326 wxSlider* slider =
new wxSlider( panel, wxID_ANY, 100, 0, 100,
2327 wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL );
2329 slider->SetMinSize( wxSize( 80, 16 ) );
2331 slider->SetMinSize( wxSize( 80, -1 ) );
2334 tip.Printf(
_(
"Set opacity of %s" ), aSetting->label.Lower() );
2335 slider->SetToolTip( tip );
2337 sizer->Add( slider, 1, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 5 );
2338 aSetting->ctl_opacity = slider;
2340 auto opacitySliderHandler =
2341 [
this, layer]( wxCommandEvent& aEvent )
2343 wxSlider* ctrl =
static_cast<wxSlider*
>( aEvent.GetEventObject() );
2344 int value = ctrl->GetValue();
2348 slider->Bind( wxEVT_SCROLL_CHANGED, opacitySliderHandler );
2349 slider->Bind( wxEVT_SCROLL_THUMBTRACK, opacitySliderHandler );
2355 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL, 0 );
2357 sizer->AddSpacer( btnWidth );
2359 sizer->AddSpacer( 5 );
2360 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL, 0 );
2363 aSetting->ctl_text = label;
2366 if( !aSetting->can_control_opacity )
2375 m_objectSettings.emplace_back( std::make_unique<APPEARANCE_SETTING>( s_setting ) );
2381 setting->tooltip = wxGetTranslation( s_setting.tooltip );
2382 setting->label = wxGetTranslation( s_setting.label );
2384 if( setting->can_control_opacity )
2387 labelWidth = std::max( labelWidth, width );
2390 if( !s_setting.spacer )
2394 for(
const std::unique_ptr<APPEARANCE_SETTING>& setting :
m_objectSettings )
2396 if( setting->spacer )
2399 appendObject( setting );
2415 if( setting->spacer )
2420 if( setting->ctl_visibility )
2421 setting->ctl_visibility->SetValue( visible.
Contains( layer ) );
2423 if( setting->ctl_color )
2425 COLOR4D color =
m_frame->GetColorSettings()->GetColor( setting->id );
2426 setting->ctl_color->SetSwatchColor( color,
false );
2447 const wxString& aName )
2452 if( !isDefaultClass)
2454 aMenu.Append(
new wxMenuItem( &aMenu,
ID_SET_NET_COLOR,
_(
"Set Netclass Color" ),
2455 wxEmptyString, wxITEM_NORMAL ) );
2458 _(
"Use Color from Schematic" ),
2459 wxEmptyString, wxITEM_NORMAL );
2460 std::shared_ptr<NETCLASS> nc = netSettings->GetNetClassByName( aName );
2462 aMenu.Append( schematicColor );
2465 schematicColor->Enable(
false );
2468 wxEmptyString, wxITEM_NORMAL ) );
2469 aMenu.AppendSeparator();
2475 wxString::Format(
_(
"Highlight Nets in %s" ),
name ),
2476 wxEmptyString, wxITEM_NORMAL ) );
2478 wxString::Format(
_(
"Select Tracks and Vias in %s" ),
name ),
2479 wxEmptyString, wxITEM_NORMAL ) );
2481 wxString::Format(
_(
"Unselect Tracks and Vias in %s" ),
name ),
2482 wxEmptyString, wxITEM_NORMAL ) );
2484 aMenu.AppendSeparator();
2486 aMenu.Append(
new wxMenuItem( &aMenu,
ID_SHOW_ALL_NETS,
_(
"Show All Netclasses" ),
2487 wxEmptyString, wxITEM_NORMAL ) );
2488 aMenu.Append(
new wxMenuItem( &aMenu,
ID_HIDE_OTHER_NETS,
_(
"Hide All Other Netclasses" ),
2489 wxEmptyString, wxITEM_NORMAL ) );
2511 const std::set<wxString>& hiddenClasses =
m_frame->Prj().GetLocalSettings().m_HiddenNetclasses;
2515 auto appendNetclass =
2516 [&](
int aId,
const std::shared_ptr<NETCLASS>& aClass,
bool isDefaultClass = false )
2518 wxString
name = aClass->GetName();
2525 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
2529 ? netSettings->GetNetClassByName(
name )->GetPcbColor()
2534 setting->
ctl_color->SetToolTip(
_(
"Left double click or middle click for color "
2535 "change, right click for menu" ) );
2537 setting->
ctl_color->Bind( COLOR_SWATCH_CHANGED,
2541 if( isDefaultClass )
2547 !hiddenClasses.count(
name ) );
2550 tip.Printf(
_(
"Show or hide ratsnest for nets in %s" ),
name );
2556 int flags = wxALIGN_CENTER_VERTICAL;
2558 sizer->Add( setting->
ctl_color, 0, flags | wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5 );
2559 sizer->AddSpacer( 7 );
2561 sizer->AddSpacer( 3 );
2562 sizer->Add( setting->
ctl_text, 1, flags, 5 );
2572 [&,
name, isDefaultClass]( wxMouseEvent& aEvent )
2581 setting->
ctl_panel->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2583 setting->
ctl_color->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2584 setting->
ctl_text->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2587 std::vector<wxString> names;
2589 for(
const auto& [
name, netclass] : netSettings->GetNetclasses() )
2590 names.emplace_back(
name );
2592 std::sort( names.begin(), names.end() );
2596 int idx = wxID_HIGHEST;
2599 appendNetclass( idx++, netSettings->GetDefaultNetclass(),
true );
2601 for(
const wxString&
name : names )
2604 appendNetclass( idx++, netSettings->GetNetclasses().at(
name ) );
2617 msg =
_(
"Net colors:" );
2623 m_rbNetColorAll->SetToolTip(
_(
"Net and netclass colors are shown on all copper items" ) );
2629 m_rbNetColorOff->SetToolTip(
_(
"Net and netclass colors are not shown" ) );
2636 msg =
_(
"Ratsnest display:" );
2670 int default_idx = 0;
2671 std::vector<std::pair<wxString, void*>> userPresets;
2677 const wxString translatedName = wxGetTranslation(
name );
2678 void* userData =
static_cast<void*
>( &preset );
2680 if( preset.readOnly )
2683 userPresets.push_back( {
name, userData } );
2694 if( !userPresets.empty() )
2698 for(
auto& [
name, userData] : userPresets )
2725 [&](
const std::pair<const wxString, LAYER_PRESET>& aPair )
2727 return ( aPair.second.layers == visibleLayers
2728 && aPair.second.renderLayers == visibleObjects
2729 && aPair.second.flipBoard == flipBoard );
2736 bool do_translate = it->second.readOnly;
2737 wxString
text = do_translate ? wxGetTranslation( it->first ) : it->first;
2756 wxString ui_label = aName;
2758 for( std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
2760 if( pair.first != aName )
2763 if( pair.second.readOnly ==
true )
2764 ui_label = wxGetTranslation( aName );
2788 auto resetSelection =
2797 if(
index == count - 2 )
2805 wxTextEntryDialog dlg( wxGetTopLevelParent(
this ),
_(
"Layer preset name:" ),
2806 _(
"Save Layer Preset" ),
name );
2808 if( dlg.ShowModal() != wxID_OK )
2814 name = dlg.GetValue();
2832 wxMessageBox(
_(
"Default presets cannot be modified.\nPlease use a different name." ),
2833 _(
"Error" ), wxOK | wxICON_ERROR, wxGetTopLevelParent(
this ) );
2840 if( !
IsOK( wxGetTopLevelParent(
this ),
_(
"Overwrite existing preset?" ) ) )
2862 else if(
index == count - 1 )
2865 wxArrayString headers;
2866 std::vector<wxArrayString> items;
2868 headers.Add(
_(
"Presets" ) );
2870 for( std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
2872 if( !pair.second.readOnly )
2875 item.Add( pair.first );
2876 items.emplace_back( item );
2888 if( idx != wxNOT_FOUND )
2896 if(
m_presetMRU.Index( presetName ) != wxNOT_FOUND )
2938 const wxString translatedName = wxGetTranslation(
m_currentPreset->name );
2940 if(
m_presetMRU.Index( translatedName ) != wxNOT_FOUND )
2965 activeLayer = *aPreset.
layers.
Seq().begin();
2970 m_frame->SetActiveLayer( activeLayer );
2973 m_frame->GetCanvas()->SyncLayersVisibility( board );
2981 m_frame->GetCanvas()->Refresh();
2995 for( std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
2996 m_cbViewports->Append( pair.first,
static_cast<void*
>( &pair.second ) );
3033 wxCHECK( viewport, );
3037 if( !viewport->
name.IsEmpty() )
3045 else if(
index == count - 2 )
3050 wxTextEntryDialog dlg( wxGetTopLevelParent(
this ),
_(
"Viewport name:" ),
_(
"Save Viewport" ),
name );
3052 if( dlg.ShowModal() != wxID_OK )
3062 name = dlg.GetValue();
3085 else if(
index == count - 1 )
3088 wxArrayString headers;
3089 std::vector<wxArrayString> items;
3091 headers.Add(
_(
"Viewports" ) );
3093 for( std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
3096 item.Add( pair.first );
3097 items.emplace_back( item );
3108 if( idx != wxNOT_FOUND )
3132 m_frame->GetCanvas()->GetView()->SetViewport( aViewport.
rect );
3133 m_frame->GetCanvas()->Refresh();
3141 int layer = swatch->GetId();
3146 m_frame->GetSettingsManager()->SaveColorSettings( cs,
"board" );
3148 m_frame->GetCanvas()->UpdateColors();
3166 m_frame->GetCanvas()->Refresh();
3169 m_frame->SetDrawBgColor( newColor );
3190 m_frame->SetDisplayOptions( options );
3197 wxASSERT(
m_netsGrid->GetSelectedRows().size() == 1 );
3204 switch( aEvent.GetId() )
3219 m_frame->GetCanvas()->Refresh();
3224 m_frame->GetCanvas()->Refresh();
3229 m_frame->GetCanvas()->Refresh();
3251 bool show = aEvent.GetInt();
3263 if( net->GetNetClass()->ContainsNetclassWithName( aClassName ) )
3267 net->GetNetCode() );
3269 int row =
m_netsTable->GetRowByNetcode( net->GetNetCode() );
3284 m_frame->GetCanvas()->RedrawRatsnest();
3285 m_frame->GetCanvas()->Refresh();
3297 std::shared_ptr<NETCLASS> nc = netSettings->GetNetClassByName( netclassName );
3300 netSettings->RecomputeEffectiveNetclasses();
3302 m_frame->GetCanvas()->GetView()->UpdateAllLayersColor();
3303 m_frame->GetCanvas()->RedrawRatsnest();
3304 m_frame->GetCanvas()->Refresh();
3311 int classId = s->GetId();
3329 m_frame->SetDisplayOptions( options );
3330 m_frame->GetCanvas()->GetView()->UpdateAllLayersColor();
3341 cfg->m_Display.m_ShowGlobalRatsnest =
true;
3346 cfg->m_Display.m_ShowGlobalRatsnest =
true;
3351 cfg->m_Display.m_ShowGlobalRatsnest =
false;
3358 editframe->SetElementVisibility(
LAYER_RATSNEST, cfg->m_Display.m_ShowGlobalRatsnest );
3360 editframe->OnDisplayOptionsChanged();
3361 editframe->GetCanvas()->RedrawRatsnest();
3362 editframe->GetCanvas()->Refresh();
3382 setting = it->second;
3384 auto runOnNetsOfClass =
3385 [&](
const wxString& netClassName, std::function<void(
NETINFO_ITEM* )> aFunction )
3389 if( net->GetNetClass()->ContainsNetclassWithName( netClassName ) )
3394 switch( aEvent.GetId() )
3407 netSettings->RecomputeEffectiveNetclasses();
3423 netSettings->RecomputeEffectiveNetclasses();
3441 netSettings->RecomputeEffectiveNetclasses();
3456 static bool first =
true;
3504 for(
const auto& [
name, netclass] : netSettings->GetNetclasses() )
3522 for(
const auto& [
name, netclass] : netSettings->GetNetclasses() )
3539 m_frame->GetCanvas()->RedrawRatsnest();
3540 m_frame->GetCanvas()->Refresh();
3556 wxHyperlinkCtrl* button =
new wxHyperlinkCtrl( infobar, wxID_ANY,
_(
"Open Preferences" ), wxEmptyString );
3558 button->Bind( wxEVT_COMMAND_HYPERLINK, std::function<
void( wxHyperlinkEvent& aEvent )>(
3559 [&]( wxHyperlinkEvent& aEvent )
3561 m_frame->ShowPreferences( wxEmptyString, wxEmptyString );
3568 infobar->
ShowMessageFor(
_(
"The current color theme is read-only. Create a new theme in Preferences to "
3569 "enable color editing." ),
3570 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