55#include <wx/checkbox.h>
56#include <wx/hyperlink.h>
58#include <wx/radiobut.h>
61#include <wx/statline.h>
62#include <wx/textdlg.h>
63#include <wx/bmpbuttn.h>
77 m_labelAttr->SetBackgroundColour( aBackgroundColor );
90 wxGridCellAttr* attr =
nullptr;
109 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
116 default:
return wxEmptyString;
123 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
135 net.
visible = ( aValue != wxT(
"0" ) );
155 case COL_LABEL:
return wxGRID_VALUE_STRING;
156 default:
return wxGRID_VALUE_STRING;
163 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
166 return m_nets[aRow].visible;
172 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
175 m_nets[aRow].visible = aValue;
183 wxASSERT( aTypeName == wxT(
"COLOR4D" ) );
184 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
193 wxASSERT( aTypeName == wxT(
"COLOR4D" ) );
194 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
203 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
213 return aEntry.code == aCode;
219 return std::distance(
m_nets.cbegin(), it );
237 int deleted = (int)
m_nets.size();
242 wxGridTableMessage msg(
this, wxGRIDTABLE_NOTIFY_ROWS_DELETED, 0, deleted );
243 GetView()->ProcessTableMessage( msg );
246 for(
const std::pair<const wxString, NETINFO_ITEM*>& pair : nets )
248 int netCode = pair.second->GetNetCode();
250 if( netCode > 0 && !pair.first.StartsWith( wxT(
"unconnected-(" ) ) )
252 COLOR4D color = netColors.count( netCode ) ? netColors.at( netCode )
255 bool visible = hiddenNets.count( netCode ) == 0;
265 return a.name < b.name;
270 wxGridTableMessage msg(
this, wxGRIDTABLE_NOTIFY_ROWS_APPENDED, (
int)
m_nets.size() );
271 GetView()->ProcessTableMessage( msg );
285 GetView()->ForceRefresh();
293 net.visible = ( net.code == aNet.
code );
298 GetView()->ForceRefresh();
307 m_frame->GetToolManager()->RunAction( action, aNet.
code );
316 std::map<int, KIGFX::COLOR4D>& netColors = renderSettings->
GetNetColorMap();
321 netColors.erase( aNet.
code );
323 m_frame->GetCanvas()->GetView()->UpdateAllLayersColor();
324 m_frame->GetCanvas()->RedrawRatsnest();
325 m_frame->GetCanvas()->Refresh();
332#define RR APPEARANCE_CONTROLS::APPEARANCE_SETTING
423 SetMinSize( FromDIP( GetMinSize() ) );
430 int screenHeight = wxSystemSettings::GetMetric( wxSYS_SCREEN_Y );
432 m_pointSize = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ).GetPointSize();
455 m_cbLayerPresets->SetToolTip( wxString::Format(
_(
"Save and restore layer visibility combinations.\n"
456 "Use %s+Tab to activate selector.\n"
457 "Successive Tabs while holding %s down will "
458 "cycle through presets in the popup." ),
462 m_cbViewports->SetToolTip( wxString::Format(
_(
"Save and restore view location and zoom.\n"
463 "Use %s+Tab to activate selector.\n"
464 "Successive Tabs while holding %s down will "
465 "cycle through viewports in the popup." ),
489 auto setHighContrastMode =
495 m_frame->SetDisplayOptions( opts );
500 [=]( wxCommandEvent& aEvent )
506 [=]( wxCommandEvent& aEvent )
512 [=]( wxCommandEvent& aEvent )
520 [&]( wxCommandEvent& aEvent )
526 [&]( wxCommandEvent& aEvent )
530 editframe->ShowBoardSetupDialog(
_(
"Net Classes" ) );
537 [&]( wxCommandEvent& aEvent )
548 m_netsGrid->RegisterDataType( wxT(
"COLOR4D" ),
556 m_netsGrid->SetSelectionMode( wxGrid::wxGridSelectRows );
560 const int cellPadding = 6;
562 const int rowHeightPadding = 5;
564 const int rowHeightPadding = 3;
574 m_netsGrid->SetDefaultRowSize( font.GetPixelSize().y + rowHeightPadding );
581 m_netsGrid->ShowScrollbars( wxSHOW_SB_NEVER, wxSHOW_SB_DEFAULT );
589 if( cfg->m_AuiPanels.appearance_expand_layer_display )
592 if( cfg->m_AuiPanels.appearance_expand_net_display )
627 _(
"Layer Display Options" ) );
633 wxBoxSizer* layerDisplayOptionsSizer;
634 layerDisplayOptionsSizer =
new wxBoxSizer( wxVERTICAL );
641 msg =
_(
"Inactive layers:" );
648 wxBoxSizer* contrastModeSizer;
649 contrastModeSizer =
new wxBoxSizer( wxHORIZONTAL );
652 wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
658 contrastModeSizer->AddStretchSpacer();
665 contrastModeSizer->AddStretchSpacer();
672 contrastModeSizer->AddStretchSpacer();
674 layerDisplayOptionsSizer->Add( contrastModeSizer, 0, wxEXPAND, 5 );
677 wxDefaultSize, wxLI_HORIZONTAL );
680 m_cbFlipBoard =
new wxCheckBox( layerDisplayPane, wxID_ANY,
_(
"Flip board view" ) );
682 layerDisplayOptionsSizer->Add(
m_cbFlipBoard, 0, wxTOP | wxBOTTOM, 3 );
684 layerDisplayPane->SetSizer( layerDisplayOptionsSizer );
685 layerDisplayPane->Layout();
686 layerDisplayOptionsSizer->Fit( layerDisplayPane );
691 [&]( wxCommandEvent& aEvent )
702 _(
"Net Display Options" ) );
707 wxBoxSizer* netDisplayOptionsSizer =
new wxBoxSizer( wxVERTICAL );
716 msg =
_(
"Net colors:" );
725 wxBoxSizer* netColorSizer =
new wxBoxSizer( wxHORIZONTAL );
727 m_rbNetColorAll =
new wxRadioButton( netDisplayPane, wxID_ANY,
_(
"All" ), wxDefaultPosition,
728 wxDefaultSize, wxRB_GROUP );
730 m_rbNetColorAll->SetToolTip(
_(
"Net and netclass colors are shown on all copper items" ) );
733 netColorSizer->AddStretchSpacer();
741 netColorSizer->AddStretchSpacer();
743 m_rbNetColorOff =
new wxRadioButton( netDisplayPane, wxID_ANY,
_(
"None" ) );
745 m_rbNetColorOff->SetToolTip(
_(
"Net and netclass colors are not shown" ) );
749 netDisplayOptionsSizer->Add( netColorSizer, 0, wxEXPAND | wxBOTTOM, 5 );
758 msg =
_(
"Ratsnest display:" );
767 wxBoxSizer* ratsnestDisplayModeSizer =
new wxBoxSizer( wxHORIZONTAL );
770 wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
776 ratsnestDisplayModeSizer->AddStretchSpacer();
783 ratsnestDisplayModeSizer->AddStretchSpacer();
791 netDisplayOptionsSizer->Add( ratsnestDisplayModeSizer, 0, wxEXPAND | wxBOTTOM, 5 );
795 netDisplayPane->SetSizer( netDisplayOptionsSizer );
796 netDisplayPane->Layout();
797 netDisplayOptionsSizer->Fit( netDisplayPane );
802 [&]( wxCommandEvent& aEvent )
845 int page = aEvent.GetSelection();
848 m_notebook->ChangeSelection(
static_cast<unsigned>( page ) );
877 if( wxBitmapButton* btn =
dynamic_cast<wxBitmapButton*
>( aEvent.GetEventObject() ) )
879 wxCommandEvent evt( wxEVT_BUTTON );
880 wxPostEvent( btn, evt );
897 int row =
event.GetRow();
898 int col =
event.GetCol();
915 int row =
event.GetRow();
916 int col =
event.GetCol();
947 menu.Append(
new wxMenuItem( &menu,
ID_SET_NET_COLOR,
_(
"Set Net Color" ), wxEmptyString,
949 menu.Append(
new wxMenuItem( &menu,
ID_CLEAR_NET_COLOR,
_(
"Clear Net Color" ), wxEmptyString,
952 menu.AppendSeparator();
955 wxString::Format(
_(
"Highlight %s" ), netName ), wxEmptyString,
958 wxString::Format(
_(
"Select Tracks and Vias in %s" ), netName ),
959 wxEmptyString, wxITEM_NORMAL ) );
961 wxString::Format(
_(
"Unselect Tracks and Vias in %s" ), netName ),
962 wxEmptyString, wxITEM_NORMAL ) );
964 menu.AppendSeparator();
966 menu.Append(
new wxMenuItem( &menu,
ID_SHOW_ALL_NETS,
_(
"Show All Nets" ), wxEmptyString,
969 wxEmptyString, wxITEM_NORMAL ) );
979 wxPoint pos =
m_netsGrid->CalcUnscrolledPosition( aEvent.GetPosition() );
980 wxGridCellCoords cell =
m_netsGrid->XYToCell( pos );
982 if( aEvent.Moving() || aEvent.Entering() )
1000 wxString showOrHide = net.
visible ?
_(
"Click to hide ratsnest for %s" )
1001 :
_(
"Click to show ratsnest for %s" );
1005 tip.Printf( showOrHide,
name );
1007 tip =
_(
"Double click (or middle click) to change color; right click for more actions" );
1009 m_netsGrid->GetGridWindow()->SetToolTip( tip );
1011 else if( aEvent.Leaving() )
1016 else if( aEvent.Dragging() )
1024 else if( aEvent.ButtonUp( wxMOUSE_BTN_MIDDLE ) && !!cell )
1026 int row = cell.GetRow();
1027 int col = cell.GetCol();
1125 int row =
m_netsTable->GetRowByNetcode( aNetCode );
1143 bool rebuild = std::any_of( aBoardItems.begin(), aBoardItems.end(),
1146 return a->Type() == PCB_NETINFO_T;
1196 std::vector<BOARD_ITEM*>& aAddedItems,
1197 std::vector<BOARD_ITEM*>& aRemovedItems,
1198 std::vector<BOARD_ITEM*>& aChangedItems )
1246 if( child && child->GetWindow() )
1251 m_netsGrid->RegisterDataType( wxT(
"COLOR4D" ),
1257 if( pair.second->ctl_color )
1258 pair.second->ctl_color->OnDarkModeToggle();
1267 for(
const std::unique_ptr<APPEARANCE_SETTING>& setting :
m_layerSettings )
1277 if( r < 240 || g < 240 || b < 240 )
1279 r = wxChar( std::min( (
int) r + 15, 255 ) );
1280 g = wxChar( std::min( (
int) g + 15, 255 ) );
1281 b = wxChar( std::min( (
int) b + 15, 255 ) );
1285 r = wxChar( std::max( (
int) r - 15, 0 ) );
1286 g = wxChar( std::max( (
int) g - 15, 0 ) );
1287 b = wxChar( std::max( (
int) b - 15, 0 ) );
1300 newSetting->
ctl_panel->SetBackgroundColour( wxColour( r, g, b ) );
1312 if( visible.test( layer ) == isVisible )
1315 visible.
set( layer, isVisible );
1318 m_frame->GetCanvas()->GetView()->SetLayerVisible( layer, isVisible );
1341 m_frame->Update3DView(
true,
m_frame->GetPcbNewSettings()->m_Display.m_Live3DRefresh );
1343 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer, isVisible );
1344 m_frame->GetCanvas()->Refresh();
1359 board->SetVisibleLayers( aLayers );
1369 return dynamic_cast<PCB_VIA*
>( aItem ) ||
dynamic_cast<PAD*
>( aItem );
1372 m_frame->Update3DView(
true,
m_frame->GetPcbNewSettings()->m_Display.m_Live3DRefresh );
1423 if( s_setting.id == gal_ly )
1431 m_frame->Update3DView(
true,
m_frame->GetPcbNewSettings()->m_Display.m_Live3DRefresh );
1450 return board->GetVisibleLayers();
1465 for(
size_t i = 0; i < set.size(); i++ )
1472 return board->GetVisibleElements();
1503 if( !cfg->m_Display.m_ShowGlobalRatsnest )
1520 std::vector<LAYER_PRESET> ret;
1522 for(
const std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
1524 if( !pair.second.readOnly )
1525 ret.emplace_back( pair.second );
1575 wxCommandEvent
dummy;
1597 std::vector<VIEWPORT> ret;
1599 for(
const std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
1600 ret.emplace_back( pair.second );
1610 for(
const VIEWPORT& viewport : aViewportList )
1628 wxCommandEvent
dummy;
1658 m_windowLayersSizerItem->SetFlag( m_windowLayersSizerItem->GetFlag() & ~wxTOP );
1662 [&]( std::unique_ptr<APPEARANCE_SETTING>& aSetting )
1664 int layer = aSetting->id;
1667 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
1668 panel->SetSizer( sizer );
1672 aSetting->visible = visible[layer];
1680 swatch->SetToolTip(
_(
"Double click or middle click for color change, right click for menu" ) );
1685 aSetting->visible );
1686 btn_visible->SetToolTip(
_(
"Show or hide this layer" ) );
1688 wxStaticText* label =
new wxStaticText( panel, layer, aSetting->label );
1690 label->SetToolTip( aSetting->tooltip );
1692 sizer->AddSpacer( 1 );
1693 sizer->Add( indicator, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1694 sizer->AddSpacer( 5 );
1695 sizer->Add( swatch, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1696 sizer->AddSpacer( 6 );
1697 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1698 sizer->AddSpacer( 5 );
1699 sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1703 aSetting->ctl_panel = panel;
1704 aSetting->ctl_indicator = indicator;
1705 aSetting->ctl_visibility = btn_visible;
1706 aSetting->ctl_color = swatch;
1707 aSetting->ctl_text = label;
1714 btn_visible->Bind( TOGGLE_CHANGED,
1715 [&]( wxCommandEvent& aEvent )
1717 wxObject* btn = aEvent.GetEventObject();
1718 int layerId =
static_cast<wxWindow*
>( btn )->GetId();
1735 [&]( std::unique_ptr<APPEARANCE_SETTING>& aSetting )
1737 int layer = aSetting->id;
1738 aSetting->visible = visible[layer];
1739 aSetting->ctl_panel->Show();
1740 aSetting->ctl_panel->SetId( layer );
1741 aSetting->ctl_indicator->SetWindowID( layer );
1742 aSetting->ctl_color->SetWindowID( layer );
1743 aSetting->ctl_color->SetSwatchColor( theme->
GetColor( layer ),
false );
1744 aSetting->ctl_visibility->SetWindowID( layer );
1745 aSetting->ctl_text->SetLabelText( aSetting->label );
1746 aSetting->ctl_text->SetId( layer );
1747 aSetting->ctl_text->SetToolTip( aSetting->tooltip );
1753 static const struct {
1759 {
F_Paste,
_HKI(
"Solder paste on board's front" ) },
1760 {
B_Paste,
_HKI(
"Solder paste on board's back" ) },
1761 {
F_SilkS,
_HKI(
"Silkscreen on board's front" ) },
1762 {
B_SilkS,
_HKI(
"Silkscreen on board's back" ) },
1763 {
F_Mask,
_HKI(
"Solder mask on board's front" ) },
1764 {
B_Mask,
_HKI(
"Solder mask on board's back" ) },
1770 {
Margin,
_HKI(
"Board's edge setback outline" ) },
1771 {
F_CrtYd,
_HKI(
"Footprint courtyards on board's front" ) },
1772 {
B_CrtYd,
_HKI(
"Footprint courtyards on board's back" ) },
1773 {
F_Fab,
_HKI(
"Footprint assembly on board's front" ) },
1774 {
B_Fab,
_HKI(
"Footprint assembly on board's back" ) },
1837 std::size_t total_layers = enabled.
CuStack().size();
1839 for(
const auto& entry : non_cu_seq )
1841 if( enabled[entry.layerId] )
1851 for( std::size_t ii = total_layers; ii <
m_layerSettings.size(); ++ii )
1866 case F_Cu: dsc =
_(
"Front copper layer" );
break;
1867 case B_Cu: dsc =
_(
"Back copper layer" );
break;
1868 default: dsc =
_(
"Inner copper layer" );
break;
1871 std::unique_ptr<APPEARANCE_SETTING>& setting = *layer_it;
1874 setting->id = layer;
1875 setting->tooltip = dsc;
1877 if( setting->ctl_panel ==
nullptr )
1878 appendLayer( setting );
1880 updateLayer( setting );
1886 setting->ctl_text->Disable();
1887 setting->ctl_color->SetToolTip( wxEmptyString );
1893 for(
const auto& entry : non_cu_seq )
1897 if( !enabled[layer] )
1900 std::unique_ptr<APPEARANCE_SETTING>& setting = *layer_it;
1916 setting->id = layer;
1919 setting->tooltip = wxGetTranslation( entry.tooltip );
1921 if( setting->ctl_panel ==
nullptr )
1922 appendLayer( setting );
1924 updateLayer( setting );
1930 setting->ctl_text->Disable();
1931 setting->ctl_color->SetToolTip( wxEmptyString );
1949 msg =
_(
"Inactive layers:" );
2006 if(
m_frame->GetBoard() &&
m_frame->GetBoard()->GetCopperLayerCount() > 2 )
2036 switch( aEvent.GetId() )
2061 if( !visible.test( current ) && visible.count() > 0 )
2062 m_frame->SetActiveLayer( *visible.
Seq().begin() );
2070 if( !visible.test( current ) && visible.count() > 0 )
2071 m_frame->SetActiveLayer( *visible.
Seq().begin() );
2112 m_frame->GetCanvas()->SyncLayersVisibility( board );
2114 m_frame->GetCanvas()->Refresh();
2128 if( aTab >= 0 &&
static_cast<size_t>( aTab ) < max )
2144 int layer = setting->id;
2146 if( setting->ctl_visibility )
2147 setting->ctl_visibility->SetValue( visible[layer] );
2149 if( setting->ctl_color )
2152 setting->ctl_color->SetSwatchColor( color,
false );
2153 setting->ctl_color->SetReadOnly( readOnly );
2161 if( setting->ctl_visibility )
2162 setting->ctl_visibility->SetValue( objects.
Contains( layer ) );
2164 if( setting->ctl_color )
2167 setting->ctl_color->SetSwatchColor( color,
false );
2168 setting->ctl_color->SetReadOnly( readOnly );
2183 wxWindow* eventSource =
static_cast<wxWindow*
>( aEvent.GetEventObject() );
2190 m_frame->SetActiveLayer( layer );
2207 visibleLayers.
set( aLayer, !visibleLayers.test( aLayer ) );
2209 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer, visibleLayers.test( aLayer ) );
2212 m_frame->GetCanvas()->Refresh();
2225 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer,
true );
2229 m_frame->GetPcbNewSettings()->m_Display.m_ShowGlobalRatsnest = isVisible;
2232 m_frame->GetBoard()->SetElementVisibility( aLayer, isVisible );
2234 m_frame->OnDisplayOptionsChanged();
2235 m_frame->GetCanvas()->RedrawRatsnest();
2242 m_frame->SetGridVisibility( isVisible );
2243 m_frame->GetCanvas()->Refresh();
2278 if( visible.
Contains( aLayer ) != isVisible )
2280 visible.
set( aLayer, isVisible );
2282 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer, isVisible );
2288 m_frame->GetCanvas()->Refresh();
2299 int swatchWidth =
m_windowObjects->ConvertDialogToPixels( wxSize( 8, 0 ) ).x;
2309 [&](
const std::unique_ptr<APPEARANCE_SETTING>& aSetting )
2312 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
2313 panel->SetSizer( sizer );
2314 int layer = aSetting->id;
2324 swatch->SetToolTip(
_(
"Left double click or middle click for color change, "
2325 "right click for menu" ) );
2327 sizer->Add( swatch, 0, wxALIGN_CENTER_VERTICAL, 0 );
2328 aSetting->ctl_color = swatch;
2336 sizer->AddSpacer( swatchWidth );
2342 if( aSetting->can_control_visibility )
2347 aSetting->visible );
2349 tip.Printf(
_(
"Show or hide %s" ), aSetting->label.Lower() );
2350 btn_visible->SetToolTip( tip );
2352 aSetting->ctl_visibility = btn_visible;
2354 btn_visible->Bind( TOGGLE_CHANGED,
2355 [&]( wxCommandEvent& aEvent )
2357 int id =
static_cast<wxWindow*
>( aEvent.GetEventObject() )->GetId();
2358 bool isVisible = aEvent.GetInt();
2363 sizer->AddSpacer( 5 );
2365 wxStaticText* label =
new wxStaticText( panel, layer, aSetting->label );
2367 label->SetToolTip( aSetting->tooltip );
2369 if( aSetting->can_control_opacity )
2371 label->SetMinSize( wxSize( labelWidth, -1 ) );
2374 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 10 );
2376 sizer->AddSpacer( btnWidth );
2378 sizer->AddSpacer( 5 );
2379 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 10 );
2382 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL, 0 );
2384 sizer->AddSpacer( btnWidth );
2386 sizer->AddSpacer( 5 );
2387 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL, 0 );
2390 wxSlider* slider =
new wxSlider( panel, wxID_ANY, 100, 0, 100,
2391 wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL );
2393 slider->SetMinSize( wxSize( 80, 16 ) );
2395 slider->SetMinSize( wxSize( 80, -1 ) );
2398 tip.Printf(
_(
"Set opacity of %s" ), aSetting->label.Lower() );
2399 slider->SetToolTip( tip );
2401 sizer->Add( slider, 1, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 5 );
2402 aSetting->ctl_opacity = slider;
2404 auto opacitySliderHandler =
2405 [
this, layer]( wxCommandEvent& aEvent )
2407 wxSlider* ctrl =
static_cast<wxSlider*
>( aEvent.GetEventObject() );
2408 int value = ctrl->GetValue();
2412 slider->Bind( wxEVT_SCROLL_CHANGED, opacitySliderHandler );
2413 slider->Bind( wxEVT_SCROLL_THUMBTRACK, opacitySliderHandler );
2419 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL, 0 );
2421 sizer->AddSpacer( btnWidth );
2423 sizer->AddSpacer( 5 );
2424 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL, 0 );
2427 aSetting->ctl_text = label;
2430 if( !aSetting->can_control_opacity )
2439 m_objectSettings.emplace_back( std::make_unique<APPEARANCE_SETTING>( s_setting ) );
2445 setting->tooltip = wxGetTranslation( s_setting.tooltip );
2446 setting->label = wxGetTranslation( s_setting.label );
2448 if( setting->can_control_opacity )
2451 labelWidth = std::max( labelWidth, width );
2454 if( !s_setting.spacer )
2458 for(
const std::unique_ptr<APPEARANCE_SETTING>& setting :
m_objectSettings )
2460 if( setting->spacer )
2463 appendObject( setting );
2479 if( setting->spacer )
2484 if( setting->ctl_visibility )
2485 setting->ctl_visibility->SetValue( visible.
Contains( layer ) );
2487 if( setting->ctl_color )
2489 COLOR4D color =
m_frame->GetColorSettings()->GetColor( setting->id );
2490 setting->ctl_color->SetSwatchColor( color,
false );
2511 const wxString& aName )
2520 if( !isDefaultClass)
2522 aMenu.Append(
new wxMenuItem( &aMenu,
ID_SET_NET_COLOR,
_(
"Set Netclass Color" ),
2523 wxEmptyString, wxITEM_NORMAL ) );
2526 _(
"Use Color from Schematic" ),
2527 wxEmptyString, wxITEM_NORMAL );
2528 std::shared_ptr<NETCLASS> nc = netSettings->GetNetClassByName( aName );
2530 aMenu.Append( schematicColor );
2533 schematicColor->Enable(
false );
2536 wxEmptyString, wxITEM_NORMAL ) );
2537 aMenu.AppendSeparator();
2543 wxString::Format(
_(
"Highlight Nets in %s" ),
name ),
2544 wxEmptyString, wxITEM_NORMAL ) );
2546 wxString::Format(
_(
"Select Tracks and Vias in %s" ),
name ),
2547 wxEmptyString, wxITEM_NORMAL ) );
2549 wxString::Format(
_(
"Unselect Tracks and Vias in %s" ),
name ),
2550 wxEmptyString, wxITEM_NORMAL ) );
2552 aMenu.AppendSeparator();
2554 aMenu.Append(
new wxMenuItem( &aMenu,
ID_SHOW_ALL_NETS,
_(
"Show All Netclasses" ),
2555 wxEmptyString, wxITEM_NORMAL ) );
2556 aMenu.Append(
new wxMenuItem( &aMenu,
ID_HIDE_OTHER_NETS,
_(
"Hide All Other Netclasses" ),
2557 wxEmptyString, wxITEM_NORMAL ) );
2579 const std::set<wxString>& hiddenClasses =
m_frame->Prj().GetLocalSettings().m_HiddenNetclasses;
2583 auto appendNetclass =
2584 [&](
int aId,
const std::shared_ptr<NETCLASS>& aClass,
bool isDefaultClass = false )
2586 wxString
name = aClass->GetName();
2593 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
2597 ? netSettings->GetNetClassByName(
name )->GetPcbColor()
2602 setting->
ctl_color->SetToolTip(
_(
"Left double click or middle click for color "
2603 "change, right click for menu" ) );
2605 setting->
ctl_color->Bind( COLOR_SWATCH_CHANGED,
2609 if( isDefaultClass )
2615 !hiddenClasses.count(
name ) );
2618 tip.Printf(
_(
"Show or hide ratsnest for nets in %s" ),
name );
2624 int flags = wxALIGN_CENTER_VERTICAL;
2626 sizer->Add( setting->
ctl_color, 0, flags | wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5 );
2627 sizer->AddSpacer( 7 );
2629 sizer->AddSpacer( 3 );
2630 sizer->Add( setting->
ctl_text, 1, flags, 5 );
2640 [&,
name, isDefaultClass]( wxMouseEvent& aEvent )
2649 setting->
ctl_panel->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2651 setting->
ctl_color->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2652 setting->
ctl_text->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2655 std::vector<wxString> names;
2657 for(
const auto& [
name, netclass] : netSettings->GetNetclasses() )
2658 names.emplace_back(
name );
2660 std::sort( names.begin(), names.end() );
2664 int idx = wxID_HIGHEST;
2667 appendNetclass( idx++, netSettings->GetDefaultNetclass(),
true );
2669 for(
const wxString&
name : names )
2672 appendNetclass( idx++, netSettings->GetNetclasses().at(
name ) );
2685 msg =
_(
"Net colors:" );
2691 m_rbNetColorAll->SetToolTip(
_(
"Net and netclass colors are shown on all copper items" ) );
2697 m_rbNetColorOff->SetToolTip(
_(
"Net and netclass colors are not shown" ) );
2704 msg =
_(
"Ratsnest display:" );
2738 int default_idx = 0;
2739 std::vector<std::pair<wxString, void*>> userPresets;
2745 const wxString translatedName = wxGetTranslation(
name );
2746 void* userData =
static_cast<void*
>( &preset );
2748 if( preset.readOnly )
2751 userPresets.push_back( {
name, userData } );
2762 if( !userPresets.empty() )
2766 for(
auto& [
name, userData] : userPresets )
2793 [&](
const std::pair<const wxString, LAYER_PRESET>& aPair )
2795 return ( aPair.second.layers == visibleLayers
2796 && aPair.second.renderLayers == visibleObjects
2797 && aPair.second.flipBoard == flipBoard );
2804 bool do_translate = it->second.readOnly;
2805 wxString
text = do_translate ? wxGetTranslation( it->first ) : it->first;
2824 wxString ui_label = aName;
2826 for( std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
2828 if( pair.first != aName )
2831 if( pair.second.readOnly ==
true )
2832 ui_label = wxGetTranslation( aName );
2856 auto resetSelection =
2865 if(
index == count - 2 )
2873 wxTextEntryDialog dlg( wxGetTopLevelParent(
this ),
_(
"Layer preset name:" ),
2874 _(
"Save Layer Preset" ),
name );
2876 if( dlg.ShowModal() != wxID_OK )
2882 name = dlg.GetValue();
2900 wxMessageBox(
_(
"Default presets cannot be modified.\nPlease use a different name." ),
2901 _(
"Error" ), wxOK | wxICON_ERROR, wxGetTopLevelParent(
this ) );
2908 if( !
IsOK( wxGetTopLevelParent(
this ),
_(
"Overwrite existing preset?" ) ) )
2930 else if(
index == count - 1 )
2933 wxArrayString headers;
2934 std::vector<wxArrayString> items;
2936 headers.Add(
_(
"Presets" ) );
2938 for( std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
2940 if( !pair.second.readOnly )
2943 item.Add( pair.first );
2944 items.emplace_back( item );
2956 if( idx != wxNOT_FOUND )
2964 if(
m_presetMRU.Index( presetName ) != wxNOT_FOUND )
3006 const wxString translatedName = wxGetTranslation(
m_currentPreset->name );
3008 if(
m_presetMRU.Index( translatedName ) != wxNOT_FOUND )
3035 activeLayer = *aPreset.
layers.
Seq().begin();
3040 m_frame->SetActiveLayer( activeLayer );
3043 m_frame->GetCanvas()->SyncLayersVisibility( board );
3047 m_frame->SetDisplayOptions( options,
false );
3049 m_frame->GetCanvas()->Refresh();
3063 for( std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
3064 m_cbViewports->Append( pair.first,
static_cast<void*
>( &pair.second ) );
3101 wxCHECK( viewport, );
3105 if( !viewport->
name.IsEmpty() )
3113 else if(
index == count - 2 )
3118 wxTextEntryDialog dlg( wxGetTopLevelParent(
this ),
_(
"Viewport name:" ),
_(
"Save Viewport" ),
name );
3120 if( dlg.ShowModal() != wxID_OK )
3130 name = dlg.GetValue();
3153 else if(
index == count - 1 )
3156 wxArrayString headers;
3157 std::vector<wxArrayString> items;
3159 headers.Add(
_(
"Viewports" ) );
3161 for( std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
3164 item.Add( pair.first );
3165 items.emplace_back( item );
3176 if( idx != wxNOT_FOUND )
3200 m_frame->GetCanvas()->GetView()->SetViewport( aViewport.
rect );
3201 m_frame->GetCanvas()->Refresh();
3209 int layer = swatch->GetId();
3214 m_frame->GetSettingsManager()->SaveColorSettings( cs,
"board" );
3216 m_frame->GetCanvas()->UpdateColors();
3234 m_frame->GetCanvas()->Refresh();
3237 m_frame->SetDrawBgColor( newColor );
3258 m_frame->SetDisplayOptions( options );
3265 wxASSERT(
m_netsGrid->GetSelectedRows().size() == 1 );
3272 switch( aEvent.GetId() )
3293 m_frame->GetCanvas()->Refresh();
3298 m_frame->GetCanvas()->Refresh();
3303 m_frame->GetCanvas()->Refresh();
3325 bool show = aEvent.GetInt();
3342 if( net->GetNetClass()->ContainsNetclassWithName( aClassName ) )
3346 net->GetNetCode() );
3348 int row =
m_netsTable->GetRowByNetcode( net->GetNetCode() );
3363 m_frame->GetCanvas()->RedrawRatsnest();
3364 m_frame->GetCanvas()->Refresh();
3380 std::shared_ptr<NETCLASS> nc = netSettings->GetNetClassByName( netclassName );
3383 netSettings->RecomputeEffectiveNetclasses();
3385 m_frame->GetCanvas()->GetView()->UpdateAllLayersColor();
3386 m_frame->GetCanvas()->RedrawRatsnest();
3387 m_frame->GetCanvas()->Refresh();
3394 int classId = s->GetId();
3412 m_frame->SetDisplayOptions( options );
3413 m_frame->GetCanvas()->GetView()->UpdateAllLayersColor();
3424 cfg->m_Display.m_ShowGlobalRatsnest =
true;
3429 cfg->m_Display.m_ShowGlobalRatsnest =
true;
3434 cfg->m_Display.m_ShowGlobalRatsnest =
false;
3441 editframe->SetElementVisibility(
LAYER_RATSNEST, cfg->m_Display.m_ShowGlobalRatsnest );
3443 editframe->OnDisplayOptionsChanged();
3444 editframe->GetCanvas()->RedrawRatsnest();
3445 editframe->GetCanvas()->Refresh();
3469 setting = it->second;
3471 auto runOnNetsOfClass =
3472 [&](
const wxString& netClassName, std::function<void(
NETINFO_ITEM* )> aFunction )
3476 if( net->GetNetClass()->ContainsNetclassWithName( netClassName ) )
3481 switch( aEvent.GetId() )
3494 netSettings->RecomputeEffectiveNetclasses();
3510 netSettings->RecomputeEffectiveNetclasses();
3528 netSettings->RecomputeEffectiveNetclasses();
3543 static bool first =
true;
3591 for(
const auto& [
name, netclass] : netSettings->GetNetclasses() )
3609 for(
const auto& [
name, netclass] : netSettings->GetNetclasses() )
3626 m_frame->GetCanvas()->RedrawRatsnest();
3627 m_frame->GetCanvas()->Refresh();
3643 wxHyperlinkCtrl* button =
new wxHyperlinkCtrl( infobar, wxID_ANY,
_(
"Open Preferences" ), wxEmptyString );
3645 button->Bind( wxEVT_COMMAND_HYPERLINK, std::function<
void( wxHyperlinkEvent& aEvent )>(
3646 [&]( wxHyperlinkEvent& aEvent )
3648 m_frame->ShowPreferences( wxEmptyString, wxEmptyString );
3655 infobar->
ShowMessageFor(
_(
"The current color theme is read-only. Create a new theme in Preferences to "
3656 "enable color editing." ),
3657 10000, wxICON_INFORMATION );
static std::set< int > s_allowedInFpEditor
These GAL layers are shown in the Objects tab in the footprint editor.
wxBitmap KiBitmap(BITMAPS aBitmap, int aHeightTag)
Construct a wxBitmap from an image identifier Returns the image from the active theme if the image ha...
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap, int aMinHeight)
@ show_front_assembly_layers
@ show_back_assembly_layers
HIGH_CONTRAST_MODE
Determine how inactive layers should be displayed.
@ NORMAL
Inactive layers are shown normally (no high-contrast mode)
@ HIDDEN
Inactive layers are hidden.
@ DIMMED
Inactive layers are dimmed (old high-contrast mode)
@ RATSNEST
Net/netclass colors are shown on ratsnest lines only.
@ ALL
Net/netclass colors are shown on all net copper.
@ OFF
Net (and netclass) colors are not shown.
@ VISIBLE
Ratsnest lines are drawn to items on visible layers only.
@ ALL
Ratsnest lines are drawn to items on all layers (default)
static TOOL_ACTION highContrastModeCycle
wxPanel * m_panelNetsAndClasses
wxBoxSizer * m_sizerOuter
wxBoxSizer * m_netsTabOuterSizer
wxStaticText * m_staticTextNetClasses
wxChoice * m_cbLayerPresets
wxBoxSizer * m_netclassOuterSizer
wxScrolledCanvas * m_windowLayers
wxStaticText * m_viewportsLabel
BITMAP_BUTTON * m_btnConfigureNetClasses
APPEARANCE_CONTROLS_BASE(wxWindow *parent, wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(-1,-1), long style=wxTAB_TRAVERSAL, const wxString &name=wxEmptyString)
wxBoxSizer * m_panelLayersSizer
wxTextCtrl * m_txtNetFilter
BITMAP_BUTTON * m_btnNetInspector
wxScrolledCanvas * m_windowObjects
wxScrolledWindow * m_netclassScrolledWindow
wxStaticText * m_staticTextNets
wxStaticText * m_presetsLabel
void OnBoardNetSettingsChanged(BOARD &aBoard) override
void doApplyLayerPreset(const LAYER_PRESET &aPreset)
std::map< PCB_LAYER_ID, APPEARANCE_SETTING * > m_layerSettingsMap
wxArrayString m_presetMRU
wxStaticText * m_inactiveLayersLabel
void syncColorsAndVisibility()
std::map< GAL_LAYER_ID, APPEARANCE_SETTING * > m_objectSettingsMap
void ApplyLayerPreset(const wxString &aPresetName)
static LAYER_PRESET m_lastBuiltinPreset
wxRadioButton * m_rbHighContrastNormal
void onObjectVisibilityChanged(GAL_LAYER_ID aLayer, bool isVisible, bool isFinal)
static LAYER_PRESET presetFrontAssembly
void OnBoardItemAdded(BOARD &aBoard, BOARD_ITEM *aItem) override
void syncLayerPresetSelection()
static LAYER_PRESET presetBackAssembly
void OnNetGridClick(wxGridEvent &event) override
void setVisibleObjects(GAL_SET aObjects)
wxRadioButton * m_rbRatsnestNone
WX_COLLAPSIBLE_PANE * m_paneLayerDisplayOptions
void buildNetClassMenu(wxMenu &aMenu, bool isDefaultClass, const wxString &aName)
void onLayerVisibilityToggled(PCB_LAYER_ID aLayer)
void onLayerPresetChanged(wxCommandEvent &aEvent) override
wxBitmapBundle m_visibleBitmapBundle
void OnBoardItemRemoved(BOARD &aBoard, BOARD_ITEM *aItem) override
wxMenu * m_layerContextMenu
wxRadioButton * m_rbRatsnestVisLayers
@ ID_PRESET_FRONT_ASSEMBLY
@ ID_SHOW_ALL_COPPER_LAYERS
@ ID_HIDE_ALL_COPPER_LAYERS
@ ID_USE_SCHEMATIC_NET_COLOR
@ ID_PRESET_BACK_ASSEMBLY
wxRadioButton * m_rbNetColorAll
bool doesBoardItemNeedRebuild(BOARD_ITEM *aBoardItem)
wxCheckBox * m_cbFlipBoard
void SetUserLayerPresets(std::vector< LAYER_PRESET > &aPresetList)
std::vector< LAYER_PRESET > GetUserLayerPresets() const
Update the current layer presets from those saved in the project file.
static LAYER_PRESET presetInnerCopper
void updateViewportSelection(const wxString &aName)
std::map< wxString, VIEWPORT > m_viewports
void onViewportChanged(wxCommandEvent &aEvent) override
NET_GRID_TABLE * m_netsTable
std::vector< std::unique_ptr< APPEARANCE_SETTING > > m_layerSettings
void loadDefaultLayerPresets()
std::vector< std::unique_ptr< APPEARANCE_SETTING > > m_objectSettings
void onObjectOpacitySlider(int aLayer, float aOpacity)
bool isLayerEnabled(PCB_LAYER_ID aLayer) const
void setVisibleLayers(const LSET &aLayers)
void rebuildViewportsWidget()
wxRadioButton * m_rbRatsnestAllLayers
wxBoxSizer * m_objectsOuterSizer
wxSize GetBestSize() const
Update the panel contents from the application and board models.
LAYER_PRESET * m_lastSelectedUserPreset
wxString m_contextMenuNetclass
The name of the netclass that was right-clicked.
wxRadioButton * m_rbNetColorRatsnest
void rebuildLayerPresetsWidget(bool aReset)
void onRatsnestMode(wxCommandEvent &aEvent)
wxRadioButton * m_rbNetColorOff
static LAYER_PRESET presetFront
void doApplyViewport(const VIEWPORT &aViewport)
static const APPEARANCE_SETTING s_objectSettings[]
Template for object appearance settings.
void OnNetGridMouseEvent(wxMouseEvent &aEvent)
WX_COLLAPSIBLE_PANE * m_paneNetDisplayOptions
void OnNotebookPageChanged(wxNotebookEvent &event) override
int GetTabIndex() const
Set the current notebook tab.
bool IsLayerOptionsExpanded()
void onNetclassVisibilityChanged(wxCommandEvent &aEvent)
void OnBoardItemsRemoved(BOARD &aBoard, std::vector< BOARD_ITEM * > &aItems) override
void onNetContextMenu(wxCommandEvent &aEvent)
void OnColorSwatchChanged(wxCommandEvent &aEvent)
void updateLayerPresetSelection(const wxString &aName)
ROW_ICON_PROVIDER * m_iconProvider
std::map< wxString, LAYER_PRESET > m_layerPresets
bool IsTogglingNetclassRatsnestVisibility()
static LAYER_PRESET presetBack
void rebuildLayerContextMenu()
void RefreshCollapsiblePanes()
Function to force a redraw of the collapsible panes in this control.
static LAYER_PRESET presetNoLayers
void idleFocusHandler(wxIdleEvent &aEvent)
void rightClickHandler(wxMouseEvent &aEvent)
wxBitmapBundle m_notVisibileBitmapBundle
void OnNetGridRightClick(wxGridEvent &event) override
void OnBoardItemsChanged(BOARD &aBoard, std::vector< BOARD_ITEM * > &aItems) override
wxBoxSizer * m_layersOuterSizer
void UpdateDisplayOptions()
Return a list of the layer presets created by the user.
std::vector< std::unique_ptr< APPEARANCE_SETTING > > m_netclassSettings
wxRadioButton * m_rbHighContrastOff
void OnBoardCompositeUpdate(BOARD &aBoard, std::vector< BOARD_ITEM * > &aAddedItems, std::vector< BOARD_ITEM * > &aRemovedItems, std::vector< BOARD_ITEM * > &aChangedItems) override
Update the colors on all the widgets from the new chosen color theme.
void OnBoardItemsAdded(BOARD &aBoard, std::vector< BOARD_ITEM * > &aItems) override
void OnColorThemeChanged()
Respond to change in OS's DarkMode.
LAYER_PRESET * m_currentPreset
std::map< wxString, APPEARANCE_SETTING * > m_netclassSettingsMap
GAL_SET getVisibleObjects()
void OnSetFocus(wxFocusEvent &aEvent) override
void OnLanguageChanged(wxCommandEvent &aEvent)
static LAYER_PRESET presetAllCopper
void SetUserViewports(std::vector< VIEWPORT > &aPresetList)
void handleBoardItemsChanged()
wxRadioButton * m_rbHighContrastDim
void OnSize(wxSizeEvent &aEvent) override
wxString netclassNameFromEvent(wxEvent &aEvent)
wxGridCellCoords m_hoveredCell
Grid cell that is being hovered over, for tooltips.
void showNetclass(const wxString &aClassName, bool aShow=true)
wxStaticText * m_txtRatsnestVisibility
void onLayerLeftClick(wxMouseEvent &aEvent)
std::vector< VIEWPORT > GetUserViewports() const
Update the current viewports from those saved in the project file.
VIEWPORT * m_lastSelectedViewport
wxArrayString m_viewportMRU
void SetTabIndex(int aTab)
wxColour m_layerPanelColour
void CommonSettingsChanged(int aFlag)
std::map< int, wxString > m_netclassIdMap
Stores wxIDs for each netclass for control event mapping.
void OnLayerContextMenu(wxCommandEvent &aEvent)
Return the index of the current tab (0-2).
void onNetColorMode(wxCommandEvent &aEvent)
void OnNetVisibilityChanged(int aNetCode, bool aVisibility)
Notifies the panel when a net has been hidden or shown via the external tool.
bool IsNetOptionsExpanded()
void OnDarkModeToggle()
Update the widget when the active board layer is changed.
static LAYER_PRESET presetAllLayers
bool m_togglingNetclassRatsnestVisibility
void onNetclassContextMenu(wxCommandEvent &aEvent)
wxStaticText * m_txtNetDisplayTitle
wxStaticLine * m_layerDisplaySeparator
void syncObjectSettings()
APPEARANCE_CONTROLS(PCB_BASE_FRAME *aParent, wxWindow *aFocusOwner, bool aFpEditor=false)
void SetObjectVisible(GAL_LAYER_ID aLayer, bool isVisible=true)
void OnNetGridDoubleClick(wxGridEvent &event) override
void SetLayerVisible(int aLayer, bool isVisible)
void OnBoardItemChanged(BOARD &aBoard, BOARD_ITEM *aItem) override
void onNetclassColorChanged(wxCommandEvent &aEvent)
void ApplyViewport(const wxString &aPresetName)
GRID_BITMAP_TOGGLE_RENDERER * m_toggleGridRenderer
BASE_SET & set(size_t pos)
A checkbox control except with custom bitmaps for the checked and unchecked states.
void SetValue(bool aValue)
Set the checkbox state.
std::shared_ptr< NET_SETTINGS > m_NetSettings
std::map< std::string, wxString > m_UserLayerNames
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Information pertinent to a Pcbnew printed circuit board.
const NETINFO_LIST & GetNetInfo() const
static wxString GetStandardLayerName(PCB_LAYER_ID aLayerId)
Return an "English Standard" name of a PCB layer when given aLayerNumber.
LSET GetLayerSet() const override
Return a std::bitset of all layers on which the item physically resides.
void SetHighLightNet(int aNetCode, bool aMulti=false)
Select the netcode to be highlighted.
void SetElementVisibility(GAL_LAYER_ID aLayer, bool aNewState)
Change the visibility of an element category.
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
PROJECT * GetProject() const
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
const LSET & GetEnabledLayers() const
A proxy function that calls the corresponding function in m_BoardSettings.
void HighLightON(bool aValue=true)
Enable or disable net highlighting.
void SetVisibleElements(const GAL_SET &aMask)
A proxy function that calls the correspondent function in m_BoardSettings.
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
Color settings are a bit different than most of the settings objects in that there can be more than o...
void SetColor(int aLayer, const COLOR4D &aColor)
COLOR4D GetColor(int aLayer) const
COLOR4D GetDefaultColor(int aLayer)
A simple color swatch of the kind used to set layer colors.
void SetSwatchColor(const KIGFX::COLOR4D &aColor, bool aSendEvent)
Set the current swatch color directly.
void GetNewSwatchColor()
Prompt for a new colour, using the colour picker dialog.
KIGFX::COLOR4D GetSwatchColor() const
void SetReadOnlyCallback(std::function< void()> aCallback)
Register a handler for when the user tries to interact with a read-only swatch.
void SetReadOnly(bool aReadOnly=true)
Class to handle configuration and automatic determination of the DPI scale to use for canvases.
double GetScaleFactor() const override
Get the DPI scale from all known sources in order:
KICAD_T Type() const
Returns the type of object.
wxString GetTextSelection(int aColumn=0)
Return the selected text from aColumn in the wxListCtrl in the dialog.
void SetListLabel(const wxString &aLabel)
Helper for storing and iterating over GAL_LAYER_IDs.
bool Contains(GAL_LAYER_ID aPos)
static GAL_SET DefaultVisible()
A toggle button renderer for a wxGrid, similar to BITMAP_TOGGLE.
A text renderer that can unescape text for display This is useful where it's desired to keep the unde...
Represent a row indicator icon for use in places like the layer widget.
void SetIndicatorState(ICON_ID aIconId)
Set the row indicator to the given state.
A color representation with 4 components: red, green, blue, alpha.
bool SetFromWxString(const wxString &aColorString)
Set color values by parsing a string using wxColour::Set().
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
PCB specific render settings.
std::set< int > & GetHiddenNets()
std::map< int, KIGFX::COLOR4D > & GetNetColorMap()
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
void SetHighlight(bool aEnabled, int aNetcode=-1, bool aMulti=false)
Turns on/off highlighting.
An abstract base class for deriving all objects that can be added to a VIEW.
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
void UpdateAllLayersColor()
Apply the new coloring scheme to all layers.
void SetLayerVisible(int aLayer, bool aVisible=true)
Control the visibility of a particular layer.
void UpdateLayerColor(int aLayer)
Apply the new coloring scheme held by RENDER_SETTINGS in case that it has changed.
bool IsLayerVisible(int aLayer) const
Return information about visibility of a particular layer.
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
void UpdateAllItemsConditionally(int aUpdateFlags, std::function< bool(VIEW_ITEM *)> aCondition)
Update items in the view according to the given flags and condition.
LSET is a set of PCB_LAYER_IDs.
static const LSET & FrontMask()
Return a mask holding all technical layers and the external CU layer on front side.
static const LSET & BackAssembly()
Return a complete set of all bottom assembly layers which is all B_SilkS and B_Mask.
static const LSET & BackMask()
Return a mask holding all technical layers and the external CU layer on back side.
static const LSET & FrontAssembly()
Return a complete set of all top assembly layers which is all F_SilkS and F_Mask.
LSEQ CuStack() const
Return a sequence of copper layers in starting from the front/top and extending to the back/bottom.
LSEQ Seq(const LSEQ &aSequence) const
Return an LSEQ from the union of this LSET and a desired sequence.
static LSET AllCuMask(int aCuLayerCount)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
static const LSET & AllLayersMask()
static const LSET & InternalCuMask()
Return a complete set of internal copper layers which is all Cu layers except F_Cu and B_Cu.
static wxString Name(PCB_LAYER_ID aLayerId)
Return the fixed name association with aLayerId.
bool Contains(PCB_LAYER_ID aLayer) const
See if the layer set contains a PCB layer.
static const char Default[]
the name of the default NETCLASS
Handle the data for a net.
const NETNAMES_MAP & NetsByName() const
Return the name map, at least for python.
void SetValue(int aRow, int aCol, const wxString &aValue) override
void SetValueAsCustom(int aRow, int aCol, const wxString &aTypeName, void *aValue) override
std::vector< NET_GRID_ENTRY > m_nets
void updateNetColor(const NET_GRID_ENTRY &aNet)
NET_GRID_ENTRY & GetEntry(int aRow)
void SetValueAsBool(int aRow, int aCol, bool aValue) override
void * GetValueAsCustom(int aRow, int aCol, const wxString &aTypeName) override
NET_GRID_TABLE(PCB_BASE_FRAME *aFrame, wxColor aBackgroundColor)
void updateNetVisibility(const NET_GRID_ENTRY &aNet)
wxString GetValue(int aRow, int aCol) override
wxGridCellAttr * m_labelAttr
void HideOtherNets(const NET_GRID_ENTRY &aNet)
wxGridCellAttr * m_defaultAttr
bool GetValueAsBool(int aRow, int aCol) override
wxGridCellAttr * GetAttr(int aRow, int aCol, wxGridCellAttr::wxAttrKind) override
static void * ColorToVoid(COLOR4D &aColor)
int GetRowByNetcode(int aCode) const
wxString GetTypeName(int aRow, int aCol) override
static COLOR4D VoidToColor(void *aColor)
static TOOL_ACTION highlightNet
static TOOL_ACTION hideNetInRatsnest
static TOOL_ACTION showNetInRatsnest
static TOOL_ACTION showNetInspector
static TOOL_ACTION ratsnestModeCycle
static TOOL_ACTION netColorModeCycle
static TOOL_ACTION selectNet
Select all connections belonging to a single net.
static TOOL_ACTION flipBoard
static TOOL_ACTION deselectNet
Remove all connections belonging to a single net from the active selection.
Base PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.
double m_TrackOpacity
Opacity override for all tracks.
bool m_FlipBoardView
true if the board is flipped to show the mirrored view
double m_FilledShapeOpacity
Opacity override for graphic shapes.
double m_ZoneOpacity
Opacity override for filled zone areas.
double m_ImageOpacity
Opacity override for user images.
double m_PadOpacity
Opacity override for SMD pads and PTHs.
double m_ViaOpacity
Opacity override for all types of via.
HIGH_CONTRAST_MODE m_ContrastModeDisplay
How inactive layers are displayed.
NET_COLOR_MODE m_NetColorMode
How to use color overrides on specific nets and netclasses.
The main frame for Pcbnew.
The project local settings are things that are attached to a particular project, but also might be pa...
std::set< wxString > m_HiddenNetclasses
Icon provider for the "standard" row indicators, for example in layer selection lists.
@ OFF
Row "off" or "deselected".
@ ON
Row "on" or "selected".
A better wxCollapsiblePane that.
A modified version of the wxInfoBar class that allows us to:
void RemoveAllButtons()
Remove all the buttons that have been added by the user.
void ShowMessageFor(const wxString &aMessage, int aTime, int aFlags=wxICON_INFORMATION, MESSAGE_TYPE aType=WX_INFOBAR::MESSAGE_TYPE::GENERIC)
Show the infobar with the provided message and icon for a specific period of time.
void AddButton(wxButton *aButton)
Add an already created button to the infobar.
void AddCloseButton(const wxString &aTooltip=_("Hide this message."))
Add the default close button to the infobar on the right side.
void SetBorders(bool aLeft, bool aRight, bool aTop, bool aBottom)
static const wxSize SWATCH_SIZE_SMALL_DU(8, 6)
bool IsOK(wxWindow *aParent, const wxString &aMessage)
Display a yes/no dialog with aMessage and returns the user response.
This file is part of the common library.
#define VIEWPORT_SWITCH_KEY
#define PRESET_SWITCH_KEY
wxString KeyNameFromKeyCode(int aKeycode, bool *aIsFound)
Return the key name from the key code.
GAL_LAYER_ID ToGalLayer(int aInteger)
int GetNetnameLayer(int aLayer)
Return a netname layer corresponding to the given layer.
bool IsCopperLayer(int aLayerId)
Test whether a layer is a copper layer.
GAL_LAYER_ID
GAL layers are "virtual" layers, i.e.
@ LAYER_POINTS
PCB reference/manual snap points visibility.
@ LAYER_LOCKED_ITEM_SHADOW
Shadow layer for locked items.
@ LAYER_FILLED_SHAPES
Copper graphic shape opacity/visibility (color ignored).
@ LAYER_CONFLICTS_SHADOW
Shadow layer for items flagged conflicting.
@ LAYER_FOOTPRINTS_FR
Show footprints on front.
@ LAYER_DRAWINGSHEET
Sheet frame and title block.
@ LAYER_DRAW_BITMAPS
Draw images.
@ LAYER_FP_REFERENCES
Show footprints references (when texts are visible).
@ LAYER_BOARD_OUTLINE_AREA
PCB board outline.
@ LAYER_DRC_EXCLUSION
Layer for DRC markers which have been individually excluded.
@ LAYER_PCB_BACKGROUND
PCB background color.
@ LAYER_ZONES
Control for copper zone opacity/visibility (color ignored).
@ LAYER_PADS
Meta control for all pads opacity/visibility (color ignored).
@ LAYER_DRC_WARNING
Layer for DRC markers with #SEVERITY_WARNING.
@ LAYER_ZONE_START
Virtual layers for stacking zones and tracks on a given copper layer.
@ LAYER_FOOTPRINTS_BK
Show footprints on back.
@ LAYER_ANCHOR
Anchor of items having an anchor point (texts, footprints).
@ LAYER_FP_VALUES
Show footprints values (when texts are visible).
@ LAYER_DRC_ERROR
Layer for DRC markers with #SEVERITY_ERROR.
@ LAYER_VIAS
Meta control for all vias opacity/visibility.
#define CLEARANCE_LAYER_FOR(boardLayer)
#define VIA_COPPER_LAYER_FOR(boardLayer)
PCB_LAYER_ID
A quick note on layer IDs:
#define ZONE_LAYER_FOR(boardLayer)
#define PAD_COPPER_LAYER_FOR(boardLayer)
#define GAL_LAYER_INDEX(x)
Use this macro to convert a GAL layer to a 0-indexed offset from LAYER_VIAS.
PCB_LAYER_ID ToLAYER_ID(int aLayer)
@ ALL
All except INITIAL_ADD.
@ TARGET_NONCACHED
Auxiliary rendering target (noncached)
KICOMMON_API wxFont GetInfoFont(wxWindow *aWindow)
KICOMMON_API wxMenuItem * AddMenuItem(wxMenu *aMenu, int aId, const wxString &aText, const wxBitmapBundle &aImage, wxItemKind aType=wxITEM_NORMAL)
Create and insert a menu item with an icon into aMenu.
const int c_IndicatorSizeDIP
std::map< wxString, NETINFO_ITEM * > NETNAMES_MAP
T * GetAppSettings(const char *aFilename)
std::vector< FAB_LAYER_COLOR > dummy
wxString UnescapeString(const wxString &aSource)
Container for an appearance setting (can control a single board layer, or GAL layer,...
bool can_control_visibility
BITMAP_TOGGLE * ctl_visibility
INDICATOR_ICON * ctl_indicator
A saved set of layers that are visible.
GAL_SET renderLayers
Render layers (e.g. object types) that are visible.
wxString name
A name for this layer set.
bool flipBoard
True if the flip board is enabled.
LSET layers
Board layers that are visible.
bool readOnly
True if this is a read-only (built-in) preset.
PCB_LAYER_ID activeLayer
Optional layer to set active when this preset is loaded.
@ PCB_NETINFO_T
class NETINFO_ITEM, a description of a net