54#include <wx/checkbox.h>
55#include <wx/hyperlink.h>
57#include <wx/radiobut.h>
60#include <wx/statline.h>
61#include <wx/textdlg.h>
62#include <wx/bmpbuttn.h>
76 m_labelAttr->SetBackgroundColour( aBackgroundColor );
89 wxGridCellAttr* attr =
nullptr;
108 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
115 default:
return wxEmptyString;
122 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
134 net.
visible = ( aValue != wxT(
"0" ) );
154 case COL_LABEL:
return wxGRID_VALUE_STRING;
155 default:
return wxGRID_VALUE_STRING;
162 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
165 return m_nets[aRow].visible;
171 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
174 m_nets[aRow].visible = aValue;
182 wxASSERT( aTypeName == wxT(
"COLOR4D" ) );
183 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
192 wxASSERT( aTypeName == wxT(
"COLOR4D" ) );
193 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
202 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
212 return aEntry.code == aCode;
218 return std::distance(
m_nets.cbegin(), it );
232 int deleted = (int)
m_nets.size();
237 wxGridTableMessage msg(
this, wxGRIDTABLE_NOTIFY_ROWS_DELETED, 0, deleted );
238 GetView()->ProcessTableMessage( msg );
241 for(
const std::pair<const wxString, NETINFO_ITEM*>& pair : nets )
243 int netCode = pair.second->GetNetCode();
245 if( netCode > 0 && !pair.first.StartsWith( wxT(
"unconnected-(" ) ) )
247 COLOR4D color = netColors.count( netCode ) ? netColors.at( netCode )
250 bool visible = hiddenNets.count( netCode ) == 0;
260 return a.name < b.name;
265 wxGridTableMessage msg(
this, wxGRIDTABLE_NOTIFY_ROWS_APPENDED, (
int)
m_nets.size() );
266 GetView()->ProcessTableMessage( msg );
280 GetView()->ForceRefresh();
288 net.visible = ( net.code == aNet.
code );
293 GetView()->ForceRefresh();
302 m_frame->GetToolManager()->RunAction( action, aNet.
code );
311 std::map<int, KIGFX::COLOR4D>& netColors = renderSettings->
GetNetColorMap();
316 netColors.erase( aNet.
code );
318 m_frame->GetCanvas()->GetView()->UpdateAllLayersColor();
319 m_frame->GetCanvas()->RedrawRatsnest();
320 m_frame->GetCanvas()->Refresh();
327#define RR APPEARANCE_CONTROLS::APPEARANCE_SETTING
418 SetMinSize( FromDIP( GetMinSize() ) );
425 int screenHeight = wxSystemSettings::GetMetric( wxSYS_SCREEN_Y );
427 m_pointSize = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ).GetPointSize();
450 m_cbLayerPresets->SetToolTip( wxString::Format(
_(
"Save and restore layer visibility combinations.\n"
451 "Use %s+Tab to activate selector.\n"
452 "Successive Tabs while holding %s down will "
453 "cycle through presets in the popup." ),
457 m_cbViewports->SetToolTip( wxString::Format(
_(
"Save and restore view location and zoom.\n"
458 "Use %s+Tab to activate selector.\n"
459 "Successive Tabs while holding %s down will "
460 "cycle through viewports in the popup." ),
484 auto setHighContrastMode =
490 m_frame->SetDisplayOptions( opts );
495 [=]( wxCommandEvent& aEvent )
501 [=]( wxCommandEvent& aEvent )
507 [=]( wxCommandEvent& aEvent )
515 [&]( wxCommandEvent& aEvent )
521 [&]( wxCommandEvent& aEvent )
525 editframe->ShowBoardSetupDialog(
_(
"Net Classes" ) );
532 [&]( wxCommandEvent& aEvent )
543 m_netsGrid->RegisterDataType( wxT(
"COLOR4D" ),
551 m_netsGrid->SetSelectionMode( wxGrid::wxGridSelectRows );
555 const int cellPadding = 6;
557 const int rowHeightPadding = 5;
559 const int rowHeightPadding = 3;
569 m_netsGrid->SetDefaultRowSize( font.GetPixelSize().y + rowHeightPadding );
576 m_netsGrid->ShowScrollbars( wxSHOW_SB_NEVER, wxSHOW_SB_DEFAULT );
584 if( cfg->m_AuiPanels.appearance_expand_layer_display )
587 if( cfg->m_AuiPanels.appearance_expand_net_display )
622 _(
"Layer Display Options" ) );
628 wxBoxSizer* layerDisplayOptionsSizer;
629 layerDisplayOptionsSizer =
new wxBoxSizer( wxVERTICAL );
636 msg =
_(
"Inactive layers:" );
643 wxBoxSizer* contrastModeSizer;
644 contrastModeSizer =
new wxBoxSizer( wxHORIZONTAL );
647 wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
653 contrastModeSizer->AddStretchSpacer();
660 contrastModeSizer->AddStretchSpacer();
667 contrastModeSizer->AddStretchSpacer();
669 layerDisplayOptionsSizer->Add( contrastModeSizer, 0, wxEXPAND, 5 );
672 wxDefaultSize, wxLI_HORIZONTAL );
675 m_cbFlipBoard =
new wxCheckBox( layerDisplayPane, wxID_ANY,
_(
"Flip board view" ) );
677 layerDisplayOptionsSizer->Add(
m_cbFlipBoard, 0, wxTOP | wxBOTTOM, 3 );
679 layerDisplayPane->SetSizer( layerDisplayOptionsSizer );
680 layerDisplayPane->Layout();
681 layerDisplayOptionsSizer->Fit( layerDisplayPane );
686 [&]( wxCommandEvent& aEvent )
697 _(
"Net Display Options" ) );
702 wxBoxSizer* netDisplayOptionsSizer =
new wxBoxSizer( wxVERTICAL );
711 msg =
_(
"Net colors:" );
720 wxBoxSizer* netColorSizer =
new wxBoxSizer( wxHORIZONTAL );
722 m_rbNetColorAll =
new wxRadioButton( netDisplayPane, wxID_ANY,
_(
"All" ), wxDefaultPosition,
723 wxDefaultSize, wxRB_GROUP );
725 m_rbNetColorAll->SetToolTip(
_(
"Net and netclass colors are shown on all copper items" ) );
728 netColorSizer->AddStretchSpacer();
736 netColorSizer->AddStretchSpacer();
738 m_rbNetColorOff =
new wxRadioButton( netDisplayPane, wxID_ANY,
_(
"None" ) );
740 m_rbNetColorOff->SetToolTip(
_(
"Net and netclass colors are not shown" ) );
744 netDisplayOptionsSizer->Add( netColorSizer, 0, wxEXPAND | wxBOTTOM, 5 );
753 msg =
_(
"Ratsnest display:" );
762 wxBoxSizer* ratsnestDisplayModeSizer =
new wxBoxSizer( wxHORIZONTAL );
765 wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
771 ratsnestDisplayModeSizer->AddStretchSpacer();
778 ratsnestDisplayModeSizer->AddStretchSpacer();
786 netDisplayOptionsSizer->Add( ratsnestDisplayModeSizer, 0, wxEXPAND | wxBOTTOM, 5 );
790 netDisplayPane->SetSizer( netDisplayOptionsSizer );
791 netDisplayPane->Layout();
792 netDisplayOptionsSizer->Fit( netDisplayPane );
797 [&]( wxCommandEvent& aEvent )
840 int page = aEvent.GetSelection();
843 m_notebook->ChangeSelection(
static_cast<unsigned>( page ) );
872 if( wxBitmapButton* btn =
dynamic_cast<wxBitmapButton*
>( aEvent.GetEventObject() ) )
874 wxCommandEvent evt( wxEVT_BUTTON );
875 wxPostEvent( btn, evt );
892 int row =
event.GetRow();
893 int col =
event.GetCol();
910 int row =
event.GetRow();
911 int col =
event.GetCol();
933 menu.Append(
new wxMenuItem( &menu,
ID_SET_NET_COLOR,
_(
"Set Net Color" ), wxEmptyString,
935 menu.Append(
new wxMenuItem( &menu,
ID_CLEAR_NET_COLOR,
_(
"Clear Net Color" ), wxEmptyString,
938 menu.AppendSeparator();
941 wxString::Format(
_(
"Highlight %s" ), netName ), wxEmptyString,
944 wxString::Format(
_(
"Select Tracks and Vias in %s" ), netName ),
945 wxEmptyString, wxITEM_NORMAL ) );
947 wxString::Format(
_(
"Unselect Tracks and Vias in %s" ), netName ),
948 wxEmptyString, wxITEM_NORMAL ) );
950 menu.AppendSeparator();
952 menu.Append(
new wxMenuItem( &menu,
ID_SHOW_ALL_NETS,
_(
"Show All Nets" ), wxEmptyString,
955 wxEmptyString, wxITEM_NORMAL ) );
965 wxPoint pos =
m_netsGrid->CalcUnscrolledPosition( aEvent.GetPosition() );
966 wxGridCellCoords cell =
m_netsGrid->XYToCell( pos );
968 if( aEvent.Moving() || aEvent.Entering() )
986 wxString showOrHide = net.
visible ?
_(
"Click to hide ratsnest for %s" )
987 :
_(
"Click to show ratsnest for %s" );
991 tip.Printf( showOrHide,
name );
993 tip =
_(
"Double click (or middle click) to change color; right click for more actions" );
995 m_netsGrid->GetGridWindow()->SetToolTip( tip );
997 else if( aEvent.Leaving() )
1002 else if( aEvent.Dragging() )
1010 else if( aEvent.ButtonUp( wxMOUSE_BTN_MIDDLE ) && !!cell )
1012 int row = cell.GetRow();
1013 int col = cell.GetCol();
1095 int row =
m_netsTable->GetRowByNetcode( aNetCode );
1113 bool rebuild = std::any_of( aBoardItems.begin(), aBoardItems.end(),
1116 return a->Type() == PCB_NETINFO_T;
1166 std::vector<BOARD_ITEM*>& aAddedItems,
1167 std::vector<BOARD_ITEM*>& aRemovedItems,
1168 std::vector<BOARD_ITEM*>& aChangedItems )
1210 if( child && child->GetWindow() )
1215 m_netsGrid->RegisterDataType( wxT(
"COLOR4D" ),
1221 if( pair.second->ctl_color )
1222 pair.second->ctl_color->OnDarkModeToggle();
1231 for(
const std::unique_ptr<APPEARANCE_SETTING>& setting :
m_layerSettings )
1241 if( r < 240 || g < 240 || b < 240 )
1243 r = wxChar( std::min( (
int) r + 15, 255 ) );
1244 g = wxChar( std::min( (
int) g + 15, 255 ) );
1245 b = wxChar( std::min( (
int) b + 15, 255 ) );
1249 r = wxChar( std::max( (
int) r - 15, 0 ) );
1250 g = wxChar( std::max( (
int) g - 15, 0 ) );
1251 b = wxChar( std::max( (
int) b - 15, 0 ) );
1264 newSetting->
ctl_panel->SetBackgroundColour( wxColour( r, g, b ) );
1276 if( visible.test( layer ) == isVisible )
1279 visible.
set( layer, isVisible );
1282 m_frame->GetCanvas()->GetView()->SetLayerVisible( layer, isVisible );
1298 m_frame->GetBoard()->SetElementVisibility( aLayer, isVisible );
1300 m_frame->Update3DView(
true,
m_frame->GetPcbNewSettings()->m_Display.m_Live3DRefresh );
1302 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer, isVisible );
1303 m_frame->GetCanvas()->Refresh();
1318 m_frame->GetBoard()->SetVisibleLayers( aLayers );
1328 return dynamic_cast<PCB_VIA*
>( aItem ) ||
dynamic_cast<PAD*
>( aItem );
1331 m_frame->Update3DView(
true,
m_frame->GetPcbNewSettings()->m_Display.m_Live3DRefresh );
1362 m_frame->GetBoard()->SetVisibleElements( aLayers );
1374 if( s_setting.id == gal_ly )
1382 m_frame->Update3DView(
true,
m_frame->GetPcbNewSettings()->m_Display.m_Live3DRefresh );
1401 return m_frame->GetBoard()->GetVisibleLayers();
1414 for(
size_t i = 0; i < set.size(); i++ )
1421 return m_frame->GetBoard()->GetVisibleElements();
1450 if( !cfg->m_Display.m_ShowGlobalRatsnest )
1467 std::vector<LAYER_PRESET> ret;
1469 for(
const std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
1471 if( !pair.second.readOnly )
1472 ret.emplace_back( pair.second );
1522 wxCommandEvent
dummy;
1544 std::vector<VIEWPORT> ret;
1546 for(
const std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
1547 ret.emplace_back( pair.second );
1557 for(
const VIEWPORT& viewport : aViewportList )
1575 wxCommandEvent
dummy;
1601 m_windowLayersSizerItem->SetFlag( m_windowLayersSizerItem->GetFlag() & ~wxTOP );
1605 [&]( std::unique_ptr<APPEARANCE_SETTING>& aSetting )
1607 int layer = aSetting->id;
1610 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
1611 panel->SetSizer( sizer );
1615 aSetting->visible = visible[layer];
1623 swatch->SetToolTip(
_(
"Double click or middle click for color change, right click for menu" ) );
1628 aSetting->visible );
1629 btn_visible->SetToolTip(
_(
"Show or hide this layer" ) );
1631 wxStaticText* label =
new wxStaticText( panel, layer, aSetting->label );
1633 label->SetToolTip( aSetting->tooltip );
1635 sizer->AddSpacer( 1 );
1636 sizer->Add( indicator, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1637 sizer->AddSpacer( 5 );
1638 sizer->Add( swatch, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1639 sizer->AddSpacer( 6 );
1640 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1641 sizer->AddSpacer( 5 );
1642 sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1646 aSetting->ctl_panel = panel;
1647 aSetting->ctl_indicator = indicator;
1648 aSetting->ctl_visibility = btn_visible;
1649 aSetting->ctl_color = swatch;
1650 aSetting->ctl_text = label;
1657 btn_visible->Bind( TOGGLE_CHANGED,
1658 [&]( wxCommandEvent& aEvent )
1660 wxObject* btn = aEvent.GetEventObject();
1661 int layerId =
static_cast<wxWindow*
>( btn )->GetId();
1678 [&]( std::unique_ptr<APPEARANCE_SETTING>& aSetting )
1680 int layer = aSetting->id;
1681 aSetting->visible = visible[layer];
1682 aSetting->ctl_panel->Show();
1683 aSetting->ctl_panel->SetId( layer );
1684 aSetting->ctl_indicator->SetWindowID( layer );
1685 aSetting->ctl_color->SetWindowID( layer );
1686 aSetting->ctl_color->SetSwatchColor( theme->
GetColor( layer ),
false );
1687 aSetting->ctl_visibility->SetWindowID( layer );
1688 aSetting->ctl_text->SetLabelText( aSetting->label );
1689 aSetting->ctl_text->SetId( layer );
1690 aSetting->ctl_text->SetToolTip( aSetting->tooltip );
1696 static const struct {
1702 {
F_Paste,
_HKI(
"Solder paste on board's front" ) },
1703 {
B_Paste,
_HKI(
"Solder paste on board's back" ) },
1704 {
F_SilkS,
_HKI(
"Silkscreen on board's front" ) },
1705 {
B_SilkS,
_HKI(
"Silkscreen on board's back" ) },
1706 {
F_Mask,
_HKI(
"Solder mask on board's front" ) },
1707 {
B_Mask,
_HKI(
"Solder mask on board's back" ) },
1713 {
Margin,
_HKI(
"Board's edge setback outline" ) },
1714 {
F_CrtYd,
_HKI(
"Footprint courtyards on board's front" ) },
1715 {
B_CrtYd,
_HKI(
"Footprint courtyards on board's back" ) },
1716 {
F_Fab,
_HKI(
"Footprint assembly on board's front" ) },
1717 {
B_Fab,
_HKI(
"Footprint assembly on board's back" ) },
1780 std::size_t total_layers = enabled.
CuStack().size();
1782 for(
const auto& entry : non_cu_seq )
1784 if( enabled[entry.layerId] )
1794 for( std::size_t ii = total_layers; ii <
m_layerSettings.size(); ++ii )
1809 case F_Cu: dsc =
_(
"Front copper layer" );
break;
1810 case B_Cu: dsc =
_(
"Back copper layer" );
break;
1811 default: dsc =
_(
"Inner copper layer" );
break;
1814 std::unique_ptr<APPEARANCE_SETTING>& setting = *layer_it;
1817 setting->id = layer;
1818 setting->tooltip = dsc;
1820 if( setting->ctl_panel ==
nullptr )
1821 appendLayer( setting );
1823 updateLayer( setting );
1829 setting->ctl_text->Disable();
1830 setting->ctl_color->SetToolTip( wxEmptyString );
1836 for(
const auto& entry : non_cu_seq )
1840 if( !enabled[layer] )
1843 std::unique_ptr<APPEARANCE_SETTING>& setting = *layer_it;
1859 setting->id = layer;
1862 setting->tooltip = wxGetTranslation( entry.tooltip );
1864 if( setting->ctl_panel ==
nullptr )
1865 appendLayer( setting );
1867 updateLayer( setting );
1873 setting->ctl_text->Disable();
1874 setting->ctl_color->SetToolTip( wxEmptyString );
1892 msg =
_(
"Inactive layers:" );
1949 if(
m_frame->GetBoard()->GetCopperLayerCount() > 2 )
1974 switch( aEvent.GetId() )
1999 if( !visible.test( current ) && visible.count() > 0 )
2000 m_frame->SetActiveLayer( *visible.
Seq().begin() );
2008 if( !visible.test( current ) && visible.count() > 0 )
2009 m_frame->SetActiveLayer( *visible.
Seq().begin() );
2050 m_frame->GetCanvas()->SyncLayersVisibility( board );
2052 m_frame->GetCanvas()->Refresh();
2066 if( aTab >= 0 &&
static_cast<size_t>( aTab ) < max )
2082 int layer = setting->id;
2084 if( setting->ctl_visibility )
2085 setting->ctl_visibility->SetValue( visible[layer] );
2087 if( setting->ctl_color )
2090 setting->ctl_color->SetSwatchColor( color,
false );
2091 setting->ctl_color->SetReadOnly( readOnly );
2099 if( setting->ctl_visibility )
2100 setting->ctl_visibility->SetValue( objects.
Contains( layer ) );
2102 if( setting->ctl_color )
2105 setting->ctl_color->SetSwatchColor( color,
false );
2106 setting->ctl_color->SetReadOnly( readOnly );
2121 wxWindow* eventSource =
static_cast<wxWindow*
>( aEvent.GetEventObject() );
2128 m_frame->SetActiveLayer( layer );
2145 visibleLayers.
set( aLayer, !visibleLayers.test( aLayer ) );
2147 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer, visibleLayers.test( aLayer ) );
2150 m_frame->GetCanvas()->Refresh();
2163 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer,
true );
2167 m_frame->GetPcbNewSettings()->m_Display.m_ShowGlobalRatsnest = isVisible;
2168 m_frame->GetBoard()->SetElementVisibility( aLayer, isVisible );
2169 m_frame->OnDisplayOptionsChanged();
2170 m_frame->GetCanvas()->RedrawRatsnest();
2177 m_frame->SetGridVisibility( isVisible );
2178 m_frame->GetCanvas()->Refresh();
2213 if( visible.
Contains( aLayer ) != isVisible )
2215 visible.
set( aLayer, isVisible );
2217 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer, isVisible );
2223 m_frame->GetCanvas()->Refresh();
2234 int swatchWidth =
m_windowObjects->ConvertDialogToPixels( wxSize( 8, 0 ) ).x;
2244 [&](
const std::unique_ptr<APPEARANCE_SETTING>& aSetting )
2246 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
2247 int layer = aSetting->id;
2257 swatch->SetToolTip(
_(
"Left double click or middle click for color change, "
2258 "right click for menu" ) );
2260 sizer->Add( swatch, 0, wxALIGN_CENTER_VERTICAL, 0 );
2261 aSetting->ctl_color = swatch;
2269 sizer->AddSpacer( swatchWidth );
2275 if( aSetting->can_control_visibility )
2280 aSetting->visible );
2282 tip.Printf(
_(
"Show or hide %s" ), aSetting->label.Lower() );
2283 btn_visible->SetToolTip( tip );
2285 aSetting->ctl_visibility = btn_visible;
2287 btn_visible->Bind( TOGGLE_CHANGED,
2288 [&]( wxCommandEvent& aEvent )
2290 int id =
static_cast<wxWindow*
>( aEvent.GetEventObject() )->GetId();
2291 bool isVisible = aEvent.GetInt();
2296 sizer->AddSpacer( 5 );
2298 wxStaticText* label =
new wxStaticText(
m_windowObjects, layer, aSetting->label );
2300 label->SetToolTip( aSetting->tooltip );
2302 if( aSetting->can_control_opacity )
2304 label->SetMinSize( wxSize( labelWidth, -1 ) );
2307 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 10 );
2309 sizer->AddSpacer( btnWidth );
2311 sizer->AddSpacer( 5 );
2312 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 10 );
2315 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL, 0 );
2317 sizer->AddSpacer( btnWidth );
2319 sizer->AddSpacer( 5 );
2320 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL, 0 );
2323 wxSlider* slider =
new wxSlider(
m_windowObjects, wxID_ANY, 100, 0, 100,
2324 wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL );
2326 slider->SetMinSize( wxSize( 80, 16 ) );
2328 slider->SetMinSize( wxSize( 80, -1 ) );
2331 tip.Printf(
_(
"Set opacity of %s" ), aSetting->label.Lower() );
2332 slider->SetToolTip( tip );
2334 sizer->Add( slider, 1, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 5 );
2335 aSetting->ctl_opacity = slider;
2337 auto opacitySliderHandler =
2338 [
this, layer]( wxCommandEvent& aEvent )
2340 wxSlider* ctrl =
static_cast<wxSlider*
>( aEvent.GetEventObject() );
2341 int value = ctrl->GetValue();
2345 slider->Bind( wxEVT_SCROLL_CHANGED, opacitySliderHandler );
2346 slider->Bind( wxEVT_SCROLL_THUMBTRACK, opacitySliderHandler );
2352 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL, 0 );
2354 sizer->AddSpacer( btnWidth );
2356 sizer->AddSpacer( 5 );
2357 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL, 0 );
2360 aSetting->ctl_text = label;
2363 if( !aSetting->can_control_opacity )
2372 m_objectSettings.emplace_back( std::make_unique<APPEARANCE_SETTING>( s_setting ) );
2378 setting->tooltip = wxGetTranslation( s_setting.tooltip );
2379 setting->label = wxGetTranslation( s_setting.label );
2381 if( setting->can_control_opacity )
2384 labelWidth = std::max( labelWidth, width );
2387 if( !s_setting.spacer )
2391 for(
const std::unique_ptr<APPEARANCE_SETTING>& setting :
m_objectSettings )
2393 if( setting->spacer )
2396 appendObject( setting );
2411 if( setting->spacer )
2416 if( setting->ctl_visibility )
2417 setting->ctl_visibility->SetValue( visible.
Contains( layer ) );
2419 if( setting->ctl_color )
2421 COLOR4D color =
m_frame->GetColorSettings()->GetColor( setting->id );
2422 setting->ctl_color->SetSwatchColor( color,
false );
2443 const wxString& aName )
2448 if( !isDefaultClass)
2450 aMenu.Append(
new wxMenuItem( &aMenu,
ID_SET_NET_COLOR,
_(
"Set Netclass Color" ),
2451 wxEmptyString, wxITEM_NORMAL ) );
2454 _(
"Use Color from Schematic" ),
2455 wxEmptyString, wxITEM_NORMAL );
2456 std::shared_ptr<NETCLASS> nc = netSettings->GetNetClassByName( aName );
2458 aMenu.Append( schematicColor );
2461 schematicColor->Enable(
false );
2464 wxEmptyString, wxITEM_NORMAL ) );
2465 aMenu.AppendSeparator();
2471 wxString::Format(
_(
"Highlight Nets in %s" ),
name ),
2472 wxEmptyString, wxITEM_NORMAL ) );
2474 wxString::Format(
_(
"Select Tracks and Vias in %s" ),
name ),
2475 wxEmptyString, wxITEM_NORMAL ) );
2477 wxString::Format(
_(
"Unselect Tracks and Vias in %s" ),
name ),
2478 wxEmptyString, wxITEM_NORMAL ) );
2480 aMenu.AppendSeparator();
2482 aMenu.Append(
new wxMenuItem( &aMenu,
ID_SHOW_ALL_NETS,
_(
"Show All Netclasses" ),
2483 wxEmptyString, wxITEM_NORMAL ) );
2484 aMenu.Append(
new wxMenuItem( &aMenu,
ID_HIDE_OTHER_NETS,
_(
"Hide All Other Netclasses" ),
2485 wxEmptyString, wxITEM_NORMAL ) );
2507 const std::set<wxString>& hiddenClasses =
m_frame->Prj().GetLocalSettings().m_HiddenNetclasses;
2511 auto appendNetclass =
2512 [&](
int aId,
const std::shared_ptr<NETCLASS>& aClass,
bool isDefaultClass = false )
2514 wxString
name = aClass->GetName();
2521 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
2525 ? netSettings->GetNetClassByName(
name )->GetPcbColor()
2530 setting->
ctl_color->SetToolTip(
_(
"Left double click or middle click for color "
2531 "change, right click for menu" ) );
2533 setting->
ctl_color->Bind( COLOR_SWATCH_CHANGED,
2537 if( isDefaultClass )
2543 !hiddenClasses.count(
name ) );
2546 tip.Printf(
_(
"Show or hide ratsnest for nets in %s" ),
name );
2552 int flags = wxALIGN_CENTER_VERTICAL;
2554 sizer->Add( setting->
ctl_color, 0, flags | wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5 );
2555 sizer->AddSpacer( 7 );
2557 sizer->AddSpacer( 3 );
2558 sizer->Add( setting->
ctl_text, 1, flags, 5 );
2568 [&,
name, isDefaultClass]( wxMouseEvent& aEvent )
2577 setting->
ctl_panel->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2579 setting->
ctl_color->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2580 setting->
ctl_text->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2583 std::vector<wxString> names;
2585 for(
const auto& [
name, netclass] : netSettings->GetNetclasses() )
2586 names.emplace_back(
name );
2588 std::sort( names.begin(), names.end() );
2592 int idx = wxID_HIGHEST;
2595 appendNetclass( idx++, netSettings->GetDefaultNetclass(),
true );
2597 for(
const wxString&
name : names )
2600 appendNetclass( idx++, netSettings->GetNetclasses().at(
name ) );
2613 msg =
_(
"Net colors:" );
2619 m_rbNetColorAll->SetToolTip(
_(
"Net and netclass colors are shown on all copper items" ) );
2625 m_rbNetColorOff->SetToolTip(
_(
"Net and netclass colors are not shown" ) );
2632 msg =
_(
"Ratsnest display:" );
2666 int default_idx = 0;
2667 std::vector<std::pair<wxString, void*>> userPresets;
2673 const wxString translatedName = wxGetTranslation(
name );
2674 void* userData =
static_cast<void*
>( &preset );
2676 if( preset.readOnly )
2679 userPresets.push_back( {
name, userData } );
2690 if( !userPresets.empty() )
2694 for(
auto& [
name, userData] : userPresets )
2721 [&](
const std::pair<const wxString, LAYER_PRESET>& aPair )
2723 return ( aPair.second.layers == visibleLayers
2724 && aPair.second.renderLayers == visibleObjects
2725 && aPair.second.flipBoard == flipBoard );
2732 bool do_translate = it->second.readOnly;
2733 wxString
text = do_translate ? wxGetTranslation( it->first ) : it->first;
2752 wxString ui_label = aName;
2754 for( std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
2756 if( pair.first != aName )
2759 if( pair.second.readOnly ==
true )
2760 ui_label = wxGetTranslation( aName );
2784 auto resetSelection =
2793 if(
index == count - 2 )
2801 wxTextEntryDialog dlg( wxGetTopLevelParent(
this ),
_(
"Layer preset name:" ),
2802 _(
"Save Layer Preset" ),
name );
2804 if( dlg.ShowModal() != wxID_OK )
2810 name = dlg.GetValue();
2828 wxMessageBox(
_(
"Default presets cannot be modified.\nPlease use a different name." ),
2829 _(
"Error" ), wxOK | wxICON_ERROR, wxGetTopLevelParent(
this ) );
2836 if( !
IsOK( wxGetTopLevelParent(
this ),
_(
"Overwrite existing preset?" ) ) )
2858 else if(
index == count - 1 )
2861 wxArrayString headers;
2862 std::vector<wxArrayString> items;
2864 headers.Add(
_(
"Presets" ) );
2866 for( std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
2868 if( !pair.second.readOnly )
2871 item.Add( pair.first );
2872 items.emplace_back( item );
2884 if( idx != wxNOT_FOUND )
2892 if(
m_presetMRU.Index( presetName ) != wxNOT_FOUND )
2934 const wxString translatedName = wxGetTranslation(
m_currentPreset->name );
2936 if(
m_presetMRU.Index( translatedName ) != wxNOT_FOUND )
2961 activeLayer = *aPreset.
layers.
Seq().begin();
2966 m_frame->SetActiveLayer( activeLayer );
2969 m_frame->GetCanvas()->SyncLayersVisibility( board );
2977 m_frame->GetCanvas()->Refresh();
2991 for( std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
2992 m_cbViewports->Append( pair.first,
static_cast<void*
>( &pair.second ) );
3029 wxCHECK( viewport, );
3033 if( !viewport->
name.IsEmpty() )
3041 else if(
index == count - 2 )
3046 wxTextEntryDialog dlg( wxGetTopLevelParent(
this ),
_(
"Viewport name:" ),
_(
"Save Viewport" ),
name );
3048 if( dlg.ShowModal() != wxID_OK )
3058 name = dlg.GetValue();
3081 else if(
index == count - 1 )
3084 wxArrayString headers;
3085 std::vector<wxArrayString> items;
3087 headers.Add(
_(
"Viewports" ) );
3089 for( std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
3092 item.Add( pair.first );
3093 items.emplace_back( item );
3104 if( idx != wxNOT_FOUND )
3128 m_frame->GetCanvas()->GetView()->SetViewport( aViewport.
rect );
3129 m_frame->GetCanvas()->Refresh();
3137 int layer = swatch->GetId();
3142 m_frame->GetSettingsManager()->SaveColorSettings( cs,
"board" );
3144 m_frame->GetCanvas()->UpdateColors();
3162 m_frame->GetCanvas()->Refresh();
3165 m_frame->SetDrawBgColor( newColor );
3186 m_frame->SetDisplayOptions( options );
3193 wxASSERT(
m_netsGrid->GetSelectedRows().size() == 1 );
3200 switch( aEvent.GetId() )
3215 m_frame->GetCanvas()->Refresh();
3220 m_frame->GetCanvas()->Refresh();
3225 m_frame->GetCanvas()->Refresh();
3247 bool show = aEvent.GetInt();
3259 if( net->GetNetClass()->ContainsNetclassWithName( aClassName ) )
3263 net->GetNetCode() );
3265 int row =
m_netsTable->GetRowByNetcode( net->GetNetCode() );
3280 m_frame->GetCanvas()->RedrawRatsnest();
3281 m_frame->GetCanvas()->Refresh();
3293 std::shared_ptr<NETCLASS> nc = netSettings->GetNetClassByName( netclassName );
3296 netSettings->RecomputeEffectiveNetclasses();
3298 m_frame->GetCanvas()->GetView()->UpdateAllLayersColor();
3299 m_frame->GetCanvas()->RedrawRatsnest();
3300 m_frame->GetCanvas()->Refresh();
3307 int classId = s->GetId();
3325 m_frame->SetDisplayOptions( options );
3326 m_frame->GetCanvas()->GetView()->UpdateAllLayersColor();
3337 cfg->m_Display.m_ShowGlobalRatsnest =
true;
3342 cfg->m_Display.m_ShowGlobalRatsnest =
true;
3347 cfg->m_Display.m_ShowGlobalRatsnest =
false;
3354 editframe->SetElementVisibility(
LAYER_RATSNEST, cfg->m_Display.m_ShowGlobalRatsnest );
3356 editframe->OnDisplayOptionsChanged();
3357 editframe->GetCanvas()->RedrawRatsnest();
3358 editframe->GetCanvas()->Refresh();
3378 setting = it->second;
3380 auto runOnNetsOfClass =
3381 [&](
const wxString& netClassName, std::function<void(
NETINFO_ITEM* )> aFunction )
3385 if( net->GetNetClass()->ContainsNetclassWithName( netClassName ) )
3390 switch( aEvent.GetId() )
3403 netSettings->RecomputeEffectiveNetclasses();
3419 netSettings->RecomputeEffectiveNetclasses();
3437 netSettings->RecomputeEffectiveNetclasses();
3452 static bool first =
true;
3500 for(
const auto& [
name, netclass] : netSettings->GetNetclasses() )
3518 for(
const auto& [
name, netclass] : netSettings->GetNetclasses() )
3535 m_frame->GetCanvas()->RedrawRatsnest();
3536 m_frame->GetCanvas()->Refresh();
3552 wxHyperlinkCtrl* button =
new wxHyperlinkCtrl( infobar, wxID_ANY,
_(
"Open Preferences" ), wxEmptyString );
3554 button->Bind( wxEVT_COMMAND_HYPERLINK, std::function<
void( wxHyperlinkEvent& aEvent )>(
3555 [&]( wxHyperlinkEvent& aEvent )
3557 m_frame->ShowPreferences( wxEmptyString, wxEmptyString );
3564 infobar->
ShowMessageFor(
_(
"The current color theme is read-only. Create a new theme in Preferences to "
3565 "enable color editing." ),
3566 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