56#include <wx/checkbox.h>
57#include <wx/hyperlink.h>
59#include <wx/radiobut.h>
62#include <wx/statline.h>
63#include <wx/textdlg.h>
64#include <wx/bmpbuttn.h>
78 m_labelAttr->SetBackgroundColour( aBackgroundColor );
91 wxGridCellAttr* attr =
nullptr;
110 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
117 default:
return wxEmptyString;
124 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
136 net.
visible = ( aValue != wxT(
"0" ) );
156 case COL_LABEL:
return wxGRID_VALUE_STRING;
157 default:
return wxGRID_VALUE_STRING;
164 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
167 return m_nets[aRow].visible;
173 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
183 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
185 m_nets[aRow].visible = aVisible;
192 wxASSERT( aTypeName == wxT(
"COLOR4D" ) );
193 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
202 wxASSERT( aTypeName == wxT(
"COLOR4D" ) );
203 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
212 wxASSERT(
static_cast<size_t>( aRow ) <
m_nets.size() );
238 int deleted = (int)
m_nets.size();
244 wxGridTableMessage msg(
this, wxGRIDTABLE_NOTIFY_ROWS_DELETED, 0, deleted );
245 GetView()->ProcessTableMessage( msg );
248 for(
const std::pair<const wxString, NETINFO_ITEM*>& pair : nets )
250 int netCode = pair.second->GetNetCode();
252 if( netCode > 0 && !pair.first.StartsWith( wxT(
"unconnected-(" ) ) )
254 COLOR4D color = netColors.count( netCode ) ? netColors.at( netCode )
257 bool visible = hiddenNets.count( netCode ) == 0;
267 return a.name < b.name;
272 for(
size_t row = 0; row <
m_nets.size(); ++row )
279 wxGridTableMessage msg(
this, wxGRIDTABLE_NOTIFY_ROWS_APPENDED, (
int)
m_nets.size() );
280 GetView()->ProcessTableMessage( msg );
294 GetView()->ForceRefresh();
302 net.visible = ( net.code == aNet.
code );
307 GetView()->ForceRefresh();
316 m_frame->GetToolManager()->RunAction( action, aNet.
code );
325 std::map<int, KIGFX::COLOR4D>& netColors = renderSettings->
GetNetColorMap();
330 netColors.erase( aNet.
code );
332 m_frame->GetCanvas()->GetView()->UpdateAllLayersColor();
333 m_frame->GetCanvas()->RedrawRatsnest();
334 m_frame->GetCanvas()->Refresh();
341#define RR APPEARANCE_CONTROLS::APPEARANCE_SETTING
436 SetMinSize( FromDIP( GetMinSize() ) );
443 int screenHeight = wxSystemSettings::GetMetric( wxSYS_SCREEN_Y );
445 m_pointSize = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ).GetPointSize();
468 m_cbLayerPresets->SetToolTip( wxString::Format(
_(
"Save and restore layer visibility combinations.\n"
469 "Use %s+Tab to activate selector.\n"
470 "Successive Tabs while holding %s down will "
471 "cycle through presets in the popup." ),
475 m_cbViewports->SetToolTip( wxString::Format(
_(
"Save and restore view location and zoom.\n"
476 "Use %s+Tab to activate selector.\n"
477 "Successive Tabs while holding %s down will "
478 "cycle through viewports in the popup." ),
502 auto setHighContrastMode =
508 m_frame->SetDisplayOptions( opts );
513 [=]( wxCommandEvent& aEvent )
519 [=]( wxCommandEvent& aEvent )
525 [=]( wxCommandEvent& aEvent )
533 [&]( wxCommandEvent& aEvent )
539 [&]( wxCommandEvent& aEvent )
543 editframe->ShowBoardSetupDialog(
_(
"Net Classes" ) );
550 [&]( wxCommandEvent& aEvent )
561 m_netsGrid->RegisterDataType( wxT(
"COLOR4D" ),
569 m_netsGrid->SetSelectionMode( wxGrid::wxGridSelectRows );
573 const int cellPadding = 6;
575 const int rowHeightPadding = 5;
577 const int rowHeightPadding = 3;
587 m_netsGrid->SetDefaultRowSize( font.GetPixelSize().y + rowHeightPadding );
594 m_netsGrid->ShowScrollbars( wxSHOW_SB_NEVER, wxSHOW_SB_DEFAULT );
602 if( cfg->m_AuiPanels.appearance_expand_layer_display )
605 if( cfg->m_AuiPanels.appearance_expand_net_display )
645 wxBoxSizer* layerDisplayOptionsSizer;
646 layerDisplayOptionsSizer =
new wxBoxSizer( wxVERTICAL );
653 msg =
_(
"Inactive layers:" );
660 wxBoxSizer* contrastModeSizer;
661 contrastModeSizer =
new wxBoxSizer( wxHORIZONTAL );
664 wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
670 contrastModeSizer->AddStretchSpacer();
677 contrastModeSizer->AddStretchSpacer();
684 contrastModeSizer->AddStretchSpacer();
686 layerDisplayOptionsSizer->Add( contrastModeSizer, 0, wxEXPAND, 5 );
689 wxDefaultSize, wxLI_HORIZONTAL );
692 m_cbFlipBoard =
new wxCheckBox( layerDisplayPane, wxID_ANY,
_(
"Flip board view" ) );
694 layerDisplayOptionsSizer->Add(
m_cbFlipBoard, 0, wxTOP | wxBOTTOM, 3 );
696 layerDisplayPane->SetSizer( layerDisplayOptionsSizer );
697 layerDisplayPane->Layout();
698 layerDisplayOptionsSizer->Fit( layerDisplayPane );
703 [&]( wxCommandEvent& aEvent )
718 wxBoxSizer* netDisplayOptionsSizer =
new wxBoxSizer( wxVERTICAL );
727 msg =
_(
"Net colors:" );
736 wxBoxSizer* netColorSizer =
new wxBoxSizer( wxHORIZONTAL );
738 m_rbNetColorAll =
new wxRadioButton( netDisplayPane, wxID_ANY,
_(
"All" ), wxDefaultPosition,
739 wxDefaultSize, wxRB_GROUP );
741 m_rbNetColorAll->SetToolTip(
_(
"Net and netclass colors are shown on all copper items" ) );
744 netColorSizer->AddStretchSpacer();
752 netColorSizer->AddStretchSpacer();
754 m_rbNetColorOff =
new wxRadioButton( netDisplayPane, wxID_ANY,
_(
"None" ) );
756 m_rbNetColorOff->SetToolTip(
_(
"Net and netclass colors are not shown" ) );
760 netDisplayOptionsSizer->Add( netColorSizer, 0, wxEXPAND | wxBOTTOM, 5 );
769 msg =
_(
"Ratsnest display:" );
778 wxBoxSizer* ratsnestDisplayModeSizer =
new wxBoxSizer( wxHORIZONTAL );
781 wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
787 ratsnestDisplayModeSizer->AddStretchSpacer();
794 ratsnestDisplayModeSizer->AddStretchSpacer();
802 netDisplayOptionsSizer->Add( ratsnestDisplayModeSizer, 0, wxEXPAND | wxBOTTOM, 5 );
806 netDisplayPane->SetSizer( netDisplayOptionsSizer );
807 netDisplayPane->Layout();
808 netDisplayOptionsSizer->Fit( netDisplayPane );
813 [&]( wxCommandEvent& aEvent )
856 int page = aEvent.GetSelection();
859 m_notebook->ChangeSelection(
static_cast<unsigned>( page ) );
888 if( wxBitmapButton* btn =
dynamic_cast<wxBitmapButton*
>( aEvent.GetEventObject() ) )
890 wxCommandEvent evt( wxEVT_BUTTON );
891 wxPostEvent( btn, evt );
908 int row =
event.GetRow();
909 int col =
event.GetCol();
926 int row =
event.GetRow();
927 int col =
event.GetCol();
958 menu.Append(
new wxMenuItem( &menu,
ID_SET_NET_COLOR,
_(
"Set Net Color" ), wxEmptyString,
960 menu.Append(
new wxMenuItem( &menu,
ID_CLEAR_NET_COLOR,
_(
"Clear Net Color" ), wxEmptyString,
963 menu.AppendSeparator();
966 wxString::Format(
_(
"Highlight %s" ), netName ), wxEmptyString,
969 wxString::Format(
_(
"Select Tracks and Vias in %s" ), netName ),
970 wxEmptyString, wxITEM_NORMAL ) );
972 wxString::Format(
_(
"Unselect Tracks and Vias in %s" ), netName ),
973 wxEmptyString, wxITEM_NORMAL ) );
975 menu.AppendSeparator();
977 menu.Append(
new wxMenuItem( &menu,
ID_SHOW_ALL_NETS,
_(
"Show All Nets" ), wxEmptyString,
980 wxEmptyString, wxITEM_NORMAL ) );
990 wxPoint pos =
m_netsGrid->CalcUnscrolledPosition( aEvent.GetPosition() );
991 wxGridCellCoords cell =
m_netsGrid->XYToCell( pos );
993 if( aEvent.Moving() || aEvent.Entering() )
1011 wxString showOrHide = net.
visible ?
_(
"Click to hide ratsnest for %s" )
1012 :
_(
"Click to show ratsnest for %s" );
1016 tip.Printf( showOrHide,
name );
1018 tip =
_(
"Double click (or middle click) to change color; right click for more actions" );
1020 m_netsGrid->GetGridWindow()->SetToolTip( tip );
1022 else if( aEvent.Leaving() )
1027 else if( aEvent.Dragging() )
1035 else if( aEvent.ButtonUp( wxMOUSE_BTN_MIDDLE ) && !!cell )
1037 int row = cell.GetRow();
1038 int col = cell.GetCol();
1136 int row =
m_netsTable->GetRowByNetcode( aNetCode );
1140 m_netsTable->SetVisibilityState( row, aVisibility );
1154 bool rebuild = std::any_of( aBoardItems.begin(), aBoardItems.end(),
1157 return a->Type() == PCB_NETINFO_T;
1207 std::vector<BOARD_ITEM*>& aAddedItems,
1208 std::vector<BOARD_ITEM*>& aRemovedItems,
1209 std::vector<BOARD_ITEM*>& aChangedItems )
1257 if( child && child->GetWindow() )
1262 m_netsGrid->RegisterDataType( wxT(
"COLOR4D" ),
1268 if( pair.second->ctl_color )
1269 pair.second->ctl_color->OnDarkModeToggle();
1278 for(
const std::unique_ptr<APPEARANCE_SETTING>& setting :
m_layerSettings )
1288 if( r < 240 || g < 240 || b < 240 )
1290 r = wxChar( std::min( (
int) r + 15, 255 ) );
1291 g = wxChar( std::min( (
int) g + 15, 255 ) );
1292 b = wxChar( std::min( (
int) b + 15, 255 ) );
1296 r = wxChar( std::max( (
int) r - 15, 0 ) );
1297 g = wxChar( std::max( (
int) g - 15, 0 ) );
1298 b = wxChar( std::max( (
int) b - 15, 0 ) );
1311 newSetting->
ctl_panel->SetBackgroundColour( wxColour( r, g, b ) );
1323 if( visible.test( layer ) == isVisible )
1326 visible.
set( layer, isVisible );
1329 m_frame->GetCanvas()->GetView()->SetLayerVisible( layer, isVisible );
1352 m_frame->Update3DView(
true,
m_frame->GetPcbNewSettings()->m_Display.m_Live3DRefresh );
1354 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer, isVisible );
1355 m_frame->GetCanvas()->Refresh();
1370 const LSET before = board->GetVisibleLayers();
1371 const LSET changed = before ^ aLayers;
1373 board->SetVisibleLayers( aLayers );
1380 && anyPhysicalBefore == anyPhysicalAfter;
1398 return !narrow || ( item->
GetLayerSet() & changed ).any();
1401 m_frame->Update3DView(
true,
m_frame->GetPcbNewSettings()->m_Display.m_Live3DRefresh );
1452 if( s_setting.id == gal_ly )
1460 m_frame->Update3DView(
true,
m_frame->GetPcbNewSettings()->m_Display.m_Live3DRefresh );
1479 return board->GetVisibleLayers();
1494 for(
size_t i = 0; i < set.size(); i++ )
1501 return board->GetVisibleElements();
1532 if( !cfg->m_Display.m_ShowGlobalRatsnest )
1549 std::vector<LAYER_PRESET> ret;
1551 for(
const std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
1553 if( !pair.second.readOnly )
1554 ret.emplace_back( pair.second );
1604 wxCommandEvent
dummy;
1626 std::vector<VIEWPORT> ret;
1628 for(
const std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
1629 ret.emplace_back( pair.second );
1639 for(
const VIEWPORT& viewport : aViewportList )
1657 wxCommandEvent
dummy;
1687 m_windowLayersSizerItem->SetFlag( m_windowLayersSizerItem->GetFlag() & ~wxTOP );
1691 [&]( std::unique_ptr<APPEARANCE_SETTING>& aSetting )
1693 int layer = aSetting->id;
1696 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
1697 panel->SetSizer( sizer );
1701 aSetting->visible = visible[layer];
1709 swatch->SetToolTip(
_(
"Double click or middle click for color change, right click for menu" ) );
1714 aSetting->visible );
1715 btn_visible->SetToolTip(
_(
"Show or hide this layer" ) );
1717 wxStaticText* label =
new wxStaticText( panel, layer, aSetting->label );
1719 label->SetToolTip( aSetting->tooltip );
1721 sizer->AddSpacer( 1 );
1722 sizer->Add( indicator, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1723 sizer->AddSpacer( 5 );
1724 sizer->Add( swatch, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1725 sizer->AddSpacer( 6 );
1726 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1727 sizer->AddSpacer( 5 );
1728 sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1732 aSetting->ctl_panel = panel;
1733 aSetting->ctl_indicator = indicator;
1734 aSetting->ctl_visibility = btn_visible;
1735 aSetting->ctl_color = swatch;
1736 aSetting->ctl_text = label;
1743 btn_visible->Bind( TOGGLE_CHANGED,
1744 [&]( wxCommandEvent& aEvent )
1746 wxObject* btn = aEvent.GetEventObject();
1747 int layerId =
static_cast<wxWindow*
>( btn )->GetId();
1764 [&]( std::unique_ptr<APPEARANCE_SETTING>& aSetting )
1766 int layer = aSetting->id;
1767 aSetting->visible = visible[layer];
1768 aSetting->ctl_panel->Show();
1769 aSetting->ctl_panel->SetId( layer );
1770 aSetting->ctl_indicator->SetWindowID( layer );
1771 aSetting->ctl_color->SetWindowID( layer );
1772 aSetting->ctl_color->SetSwatchColor( theme->
GetColor( layer ),
false );
1773 aSetting->ctl_visibility->SetWindowID( layer );
1774 aSetting->ctl_text->SetLabelText( aSetting->label );
1775 aSetting->ctl_text->SetId( layer );
1776 aSetting->ctl_text->SetToolTip( aSetting->tooltip );
1782 static const struct {
1788 {
F_Paste,
_HKI(
"Solder paste on board's front" ) },
1789 {
B_Paste,
_HKI(
"Solder paste on board's back" ) },
1790 {
F_SilkS,
_HKI(
"Silkscreen on board's front" ) },
1791 {
B_SilkS,
_HKI(
"Silkscreen on board's back" ) },
1792 {
F_Mask,
_HKI(
"Solder mask on board's front" ) },
1793 {
B_Mask,
_HKI(
"Solder mask on board's back" ) },
1799 {
Margin,
_HKI(
"Board's edge setback outline" ) },
1800 {
F_CrtYd,
_HKI(
"Footprint courtyards on board's front" ) },
1801 {
B_CrtYd,
_HKI(
"Footprint courtyards on board's back" ) },
1802 {
F_Fab,
_HKI(
"Footprint assembly on board's front" ) },
1803 {
B_Fab,
_HKI(
"Footprint assembly on board's back" ) },
1866 std::size_t total_layers = enabled.
CuStack().size();
1868 for(
const auto& entry : non_cu_seq )
1870 if( enabled[entry.layerId] )
1880 for( std::size_t ii = total_layers; ii <
m_layerSettings.size(); ++ii )
1895 case F_Cu: dsc =
_(
"Front copper layer" );
break;
1896 case B_Cu: dsc =
_(
"Back copper layer" );
break;
1897 default: dsc =
_(
"Inner copper layer" );
break;
1900 std::unique_ptr<APPEARANCE_SETTING>& setting = *layer_it;
1903 setting->id = layer;
1904 setting->tooltip = dsc;
1906 if( setting->ctl_panel ==
nullptr )
1907 appendLayer( setting );
1909 updateLayer( setting );
1915 setting->ctl_text->Disable();
1916 setting->ctl_color->SetToolTip( wxEmptyString );
1922 for(
const auto& entry : non_cu_seq )
1926 if( !enabled[layer] )
1929 std::unique_ptr<APPEARANCE_SETTING>& setting = *layer_it;
1945 setting->id = layer;
1948 setting->tooltip = wxGetTranslation( entry.tooltip );
1950 if( setting->ctl_panel ==
nullptr )
1951 appendLayer( setting );
1953 updateLayer( setting );
1959 setting->ctl_text->Disable();
1960 setting->ctl_color->SetToolTip( wxEmptyString );
1978 msg =
_(
"Inactive layers:" );
2035 if(
m_frame->GetBoard() &&
m_frame->GetBoard()->GetCopperLayerCount() > 2 )
2065 switch( aEvent.GetId() )
2090 if( !visible.test( current ) && visible.count() > 0 )
2091 m_frame->SetActiveLayer( *visible.
Seq().begin() );
2099 if( !visible.test( current ) && visible.count() > 0 )
2100 m_frame->SetActiveLayer( *visible.
Seq().begin() );
2141 m_frame->GetCanvas()->SyncLayersVisibility( board );
2143 m_frame->GetCanvas()->Refresh();
2157 if( aTab >= 0 &&
static_cast<size_t>( aTab ) < max )
2173 int layer = setting->id;
2175 if( setting->ctl_visibility )
2176 setting->ctl_visibility->SetValue( visible[layer] );
2178 if( setting->ctl_color )
2181 setting->ctl_color->SetSwatchColor( color,
false );
2182 setting->ctl_color->SetReadOnly( readOnly );
2190 if( setting->ctl_visibility )
2191 setting->ctl_visibility->SetValue( objects.
Contains( layer ) );
2193 if( setting->ctl_color )
2196 setting->ctl_color->SetSwatchColor( color,
false );
2197 setting->ctl_color->SetReadOnly( readOnly );
2212 wxWindow* eventSource =
static_cast<wxWindow*
>( aEvent.GetEventObject() );
2219 m_frame->SetActiveLayer( layer );
2236 visibleLayers.
set( aLayer, !visibleLayers.test( aLayer ) );
2238 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer, visibleLayers.test( aLayer ) );
2241 m_frame->GetCanvas()->Refresh();
2254 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer,
true );
2258 m_frame->GetPcbNewSettings()->m_Display.m_ShowGlobalRatsnest = isVisible;
2261 m_frame->GetBoard()->SetElementVisibility( aLayer, isVisible );
2263 m_frame->OnDisplayOptionsChanged();
2264 m_frame->GetCanvas()->RedrawRatsnest();
2271 m_frame->SetGridVisibility( isVisible );
2272 m_frame->GetCanvas()->Refresh();
2307 if( visible.
Contains( aLayer ) != isVisible )
2309 visible.
set( aLayer, isVisible );
2311 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer, isVisible );
2317 m_frame->GetCanvas()->Refresh();
2328 int swatchWidth =
m_windowObjects->ConvertDialogToPixels( wxSize( 8, 0 ) ).x;
2338 [&](
const std::unique_ptr<APPEARANCE_SETTING>& aSetting )
2341 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
2342 panel->SetSizer( sizer );
2343 int layer = aSetting->id;
2353 swatch->SetToolTip(
_(
"Left double click or middle click for color change, "
2354 "right click for menu" ) );
2356 sizer->Add( swatch, 0, wxALIGN_CENTER_VERTICAL, 0 );
2357 aSetting->ctl_color = swatch;
2365 sizer->AddSpacer( swatchWidth );
2371 if( aSetting->can_control_visibility )
2376 aSetting->visible );
2378 tip.Printf(
_(
"Show or hide %s" ), aSetting->label.Lower() );
2379 btn_visible->SetToolTip( tip );
2381 aSetting->ctl_visibility = btn_visible;
2383 btn_visible->Bind( TOGGLE_CHANGED,
2384 [&]( wxCommandEvent& aEvent )
2386 int id =
static_cast<wxWindow*
>( aEvent.GetEventObject() )->GetId();
2387 bool isVisible = aEvent.GetInt();
2392 sizer->AddSpacer( 5 );
2394 wxStaticText* label =
new wxStaticText( panel, layer, aSetting->label );
2396 label->SetToolTip( aSetting->tooltip );
2398 if( aSetting->can_control_opacity )
2400 label->SetMinSize( wxSize( labelWidth, -1 ) );
2403 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 10 );
2405 sizer->AddSpacer( btnWidth );
2407 sizer->AddSpacer( 5 );
2408 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 10 );
2411 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL, 0 );
2413 sizer->AddSpacer( btnWidth );
2415 sizer->AddSpacer( 5 );
2416 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL, 0 );
2419 wxSlider* slider =
new wxSlider( panel, wxID_ANY, 100, 0, 100,
2420 wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL );
2422 slider->SetMinSize( wxSize( 80, 16 ) );
2424 slider->SetMinSize( wxSize( 80, -1 ) );
2427 tip.Printf(
_(
"Set opacity of %s" ), aSetting->label.Lower() );
2428 slider->SetToolTip( tip );
2430 sizer->Add( slider, 1, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 5 );
2431 aSetting->ctl_opacity = slider;
2433 auto opacitySliderHandler =
2434 [
this, layer]( wxCommandEvent& aEvent )
2436 wxSlider* ctrl =
static_cast<wxSlider*
>( aEvent.GetEventObject() );
2437 int value = ctrl->GetValue();
2441 slider->Bind( wxEVT_SCROLL_CHANGED, opacitySliderHandler );
2442 slider->Bind( wxEVT_SCROLL_THUMBTRACK, opacitySliderHandler );
2448 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL, 0 );
2450 sizer->AddSpacer( btnWidth );
2452 sizer->AddSpacer( 5 );
2453 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL, 0 );
2456 aSetting->ctl_text = label;
2459 if( !aSetting->can_control_opacity )
2468 m_objectSettings.emplace_back( std::make_unique<APPEARANCE_SETTING>( s_setting ) );
2474 setting->tooltip = wxGetTranslation( s_setting.tooltip );
2475 setting->label = wxGetTranslation( s_setting.label );
2477 if( setting->can_control_opacity )
2480 labelWidth = std::max( labelWidth, width );
2483 if( !s_setting.spacer )
2487 for(
const std::unique_ptr<APPEARANCE_SETTING>& setting :
m_objectSettings )
2489 if( setting->spacer )
2492 appendObject( setting );
2508 if( setting->spacer )
2513 if( setting->ctl_visibility )
2514 setting->ctl_visibility->SetValue( visible.
Contains( layer ) );
2516 if( setting->ctl_color )
2518 COLOR4D color =
m_frame->GetColorSettings()->GetColor( setting->id );
2519 setting->ctl_color->SetSwatchColor( color,
false );
2540 const wxString& aName )
2549 if( !isDefaultClass)
2551 aMenu.Append(
new wxMenuItem( &aMenu,
ID_SET_NET_COLOR,
_(
"Set Netclass Color" ),
2552 wxEmptyString, wxITEM_NORMAL ) );
2555 _(
"Use Color from Schematic" ),
2556 wxEmptyString, wxITEM_NORMAL );
2557 std::shared_ptr<NETCLASS> nc = netSettings->GetNetClassByName( aName );
2559 aMenu.Append( schematicColor );
2562 schematicColor->Enable(
false );
2565 wxEmptyString, wxITEM_NORMAL ) );
2566 aMenu.AppendSeparator();
2572 wxString::Format(
_(
"Highlight Nets in %s" ),
name ),
2573 wxEmptyString, wxITEM_NORMAL ) );
2575 wxString::Format(
_(
"Select Tracks and Vias in %s" ),
name ),
2576 wxEmptyString, wxITEM_NORMAL ) );
2578 wxString::Format(
_(
"Unselect Tracks and Vias in %s" ),
name ),
2579 wxEmptyString, wxITEM_NORMAL ) );
2581 aMenu.AppendSeparator();
2583 aMenu.Append(
new wxMenuItem( &aMenu,
ID_SHOW_ALL_NETS,
_(
"Show All Netclasses" ),
2584 wxEmptyString, wxITEM_NORMAL ) );
2585 aMenu.Append(
new wxMenuItem( &aMenu,
ID_HIDE_OTHER_NETS,
_(
"Hide All Other Netclasses" ),
2586 wxEmptyString, wxITEM_NORMAL ) );
2608 const std::set<wxString>& hiddenClasses =
m_frame->Prj().GetLocalSettings().m_HiddenNetclasses;
2614 auto appendNetclass =
2615 [&](
int aId,
const std::shared_ptr<NETCLASS>& aClass,
bool isDefaultClass = false )
2617 wxString
name = aClass->GetName();
2624 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
2628 ? netSettings->GetNetClassByName(
name )->GetPcbColor()
2633 setting->
ctl_color->SetToolTip(
_(
"Left double click or middle click for color "
2634 "change, right click for menu" ) );
2636 setting->
ctl_color->Bind( COLOR_SWATCH_CHANGED,
2640 if( isDefaultClass )
2646 !hiddenClasses.count(
name ) );
2649 tip.Printf(
_(
"Show or hide ratsnest for nets in %s" ),
name );
2655 int flags = wxALIGN_CENTER_VERTICAL;
2657 sizer->Add( setting->
ctl_color, 0, flags | wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5 );
2658 sizer->AddSpacer( 7 );
2660 sizer->AddSpacer( 3 );
2661 sizer->Add( setting->
ctl_text, 1, flags, 5 );
2671 [&,
name, isDefaultClass]( wxMouseEvent& aEvent )
2680 setting->
ctl_panel->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2682 setting->
ctl_color->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2683 setting->
ctl_text->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2686 std::vector<wxString> names;
2688 for(
const auto& [
name, netclass] : netSettings->GetNetclasses() )
2689 names.emplace_back(
name );
2691 std::sort( names.begin(), names.end() );
2695 int idx = wxID_HIGHEST;
2698 appendNetclass( idx++, netSettings->GetDefaultNetclass(),
true );
2700 for(
const wxString&
name : names )
2703 appendNetclass( idx++, netSettings->GetNetclasses().at(
name ) );
2716 msg =
_(
"Net colors:" );
2722 m_rbNetColorAll->SetToolTip(
_(
"Net and netclass colors are shown on all copper items" ) );
2728 m_rbNetColorOff->SetToolTip(
_(
"Net and netclass colors are not shown" ) );
2735 msg =
_(
"Ratsnest display:" );
2768 int default_idx = 0;
2769 std::vector<std::pair<wxString, void*>> userPresets;
2775 const wxString translatedName = wxGetTranslation(
name );
2776 void* userData =
static_cast<void*
>( &preset );
2778 if( preset.readOnly )
2781 userPresets.push_back( {
name, userData } );
2792 if( !userPresets.empty() )
2796 for(
auto& [
name, userData] : userPresets )
2823 [&](
const std::pair<const wxString, LAYER_PRESET>& aPair )
2826 const GAL_SET& presetObjects = aPair.second.readOnly
2827 ? m_lastBuiltinPreset.renderLayers
2828 : aPair.second.renderLayers;
2830 return ( aPair.second.layers == visibleLayers
2831 && presetObjects == visibleObjects
2832 && aPair.second.flipBoard == flipBoard );
2839 bool do_translate = it->second.readOnly;
2840 wxString
text = do_translate ? wxGetTranslation( it->first ) : it->first;
2859 wxString ui_label = aName;
2861 for( std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
2863 if( pair.first != aName )
2866 if( pair.second.readOnly ==
true )
2867 ui_label = wxGetTranslation( aName );
2891 auto resetSelection =
2900 if(
index == count - 2 )
2908 wxTextEntryDialog dlg( wxGetTopLevelParent(
this ),
_(
"Layer preset name:" ),
2909 _(
"Save Layer Preset" ),
name );
2911 if( dlg.ShowModal() != wxID_OK )
2917 name = dlg.GetValue();
2935 wxMessageBox(
_(
"Default presets cannot be modified.\nPlease use a different name." ),
2936 _(
"Error" ), wxOK | wxICON_ERROR, wxGetTopLevelParent(
this ) );
2943 if( !
IsOK( wxGetTopLevelParent(
this ),
_(
"Overwrite existing preset?" ) ) )
2965 else if(
index == count - 1 )
2968 wxArrayString headers;
2969 std::vector<wxArrayString> items;
2971 headers.Add(
_(
"Presets" ) );
2973 for( std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
2975 if( !pair.second.readOnly )
2978 item.Add( pair.first );
2979 items.emplace_back( item );
2991 if( idx != wxNOT_FOUND )
3002 if(
m_presetMRU.Index( presetName ) != wxNOT_FOUND )
3044 const wxString translatedName = wxGetTranslation(
m_currentPreset->name );
3046 if(
m_presetMRU.Index( translatedName ) != wxNOT_FOUND )
3073 activeLayer = *aPreset.
layers.
Seq().begin();
3078 m_frame->SetActiveLayer( activeLayer );
3081 m_frame->GetCanvas()->SyncLayersVisibility( board );
3085 m_frame->SetDisplayOptions( options,
false );
3087 m_frame->GetCanvas()->Refresh();
3101 for( std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
3102 m_cbViewports->Append( pair.first,
static_cast<void*
>( &pair.second ) );
3139 wxCHECK( viewport, );
3143 if( !viewport->
name.IsEmpty() )
3151 else if(
index == count - 2 )
3156 wxTextEntryDialog dlg( wxGetTopLevelParent(
this ),
_(
"Viewport name:" ),
_(
"Save Viewport" ),
name );
3158 if( dlg.ShowModal() != wxID_OK )
3168 name = dlg.GetValue();
3191 else if(
index == count - 1 )
3194 wxArrayString headers;
3195 std::vector<wxArrayString> items;
3197 headers.Add(
_(
"Viewports" ) );
3199 for( std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
3202 item.Add( pair.first );
3203 items.emplace_back( item );
3214 if( idx != wxNOT_FOUND )
3241 m_frame->GetCanvas()->GetView()->SetViewport( aViewport.
rect );
3242 m_frame->GetCanvas()->Refresh();
3250 int layer = swatch->GetId();
3255 m_frame->GetSettingsManager()->SaveColorSettings( cs,
"board" );
3257 m_frame->GetCanvas()->UpdateColors();
3275 m_frame->GetCanvas()->Refresh();
3278 m_frame->SetDrawBgColor( newColor );
3299 m_frame->SetDisplayOptions( options );
3306 wxASSERT(
m_netsGrid->GetSelectedRows().size() == 1 );
3313 switch( aEvent.GetId() )
3334 m_frame->GetCanvas()->Refresh();
3339 m_frame->GetCanvas()->Refresh();
3344 m_frame->GetCanvas()->Refresh();
3366 bool show = aEvent.GetInt();
3383 if( net->GetNetClass()->ContainsNetclassWithName( aClassName ) )
3387 net->GetNetCode() );
3389 int row =
m_netsTable->GetRowByNetcode( net->GetNetCode() );
3404 m_frame->GetCanvas()->RedrawRatsnest();
3405 m_frame->GetCanvas()->Refresh();
3421 std::shared_ptr<NETCLASS> nc = netSettings->GetNetClassByName( netclassName );
3424 netSettings->RecomputeEffectiveNetclasses();
3426 m_frame->GetCanvas()->GetView()->UpdateAllLayersColor();
3427 m_frame->GetCanvas()->RedrawRatsnest();
3428 m_frame->GetCanvas()->Refresh();
3435 int classId = s->GetId();
3453 m_frame->SetDisplayOptions( options );
3454 m_frame->GetCanvas()->GetView()->UpdateAllLayersColor();
3465 cfg->m_Display.m_ShowGlobalRatsnest =
true;
3470 cfg->m_Display.m_ShowGlobalRatsnest =
true;
3475 cfg->m_Display.m_ShowGlobalRatsnest =
false;
3482 editframe->SetElementVisibility(
LAYER_RATSNEST, cfg->m_Display.m_ShowGlobalRatsnest );
3484 editframe->OnDisplayOptionsChanged();
3485 editframe->GetCanvas()->RedrawRatsnest();
3486 editframe->GetCanvas()->Refresh();
3510 setting = it->second;
3512 auto runOnNetsOfClass =
3513 [&](
const wxString& netClassName, std::function<void(
NETINFO_ITEM* )> aFunction )
3517 if( net->GetNetClass()->ContainsNetclassWithName( netClassName ) )
3522 switch( aEvent.GetId() )
3535 netSettings->RecomputeEffectiveNetclasses();
3551 netSettings->RecomputeEffectiveNetclasses();
3569 netSettings->RecomputeEffectiveNetclasses();
3625 for(
const auto& [
name, netclass] : netSettings->GetNetclasses() )
3643 for(
const auto& [
name, netclass] : netSettings->GetNetclasses() )
3660 m_frame->GetCanvas()->RedrawRatsnest();
3661 m_frame->GetCanvas()->Refresh();
3678 infobar->
AddLink(
_(
"Open Preferences" ),
3679 [&]( wxHyperlinkEvent& aEvent )
3681 m_frame->ShowPreferences( wxEmptyString, wxEmptyString );
3685 infobar->
ShowMessageFor(
_(
"The current color theme is read-only. Create a new theme in Preferences to "
3686 "enable color editing." ),
3687 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)
Update the current layer presets from those saved in the project file.
std::vector< LAYER_PRESET > GetUserLayerPresets() const
Return a list of the layer presets created by the user.
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
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
Return the index of the current tab (0-2).
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)
void OnLayerChanged()
Update the widget when the active board layer is changed.
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()
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
void OnBoardItemsAdded(BOARD &aBoard, std::vector< BOARD_ITEM * > &aItems) override
void OnColorThemeChanged()
Update the colors on all the widgets from the new chosen color theme.
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)
Update the current viewports from those saved in the project file.
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 OnBoardChanged()
Update the panel contents from the application and board models.
void onLayerLeftClick(wxMouseEvent &aEvent)
std::vector< VIEWPORT > GetUserViewports() const
Return a list of viewports created by the user.
VIEWPORT * m_lastSelectedViewport
wxArrayString m_viewportMRU
void SetTabIndex(int aTab)
Set the current notebook tab.
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)
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()
Respond to change in OS's DarkMode.
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)
Manually update visibility for a given layer.
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...
virtual LSET GetLayerSet() const
Return a std::bitset of all layers on which the item physically resides.
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 ResetNetHighLight()
Reset all high light data to the init state.
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
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.
BOARD_DESIGN_SETTINGS & GetDesignSettings()
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.
virtual bool HasRetainedScene() const
Return true if the backend keeps cached groups in a persistent scene that it patches in place,...
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.
bool IsBOARD_ITEM() const
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.
GAL * GetGAL() const
Return the GAL this view is using to draw graphical primitives.
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_ITEM objects.
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 & PhysicalLayersMask()
Return a mask holding all layers which are physically realized.
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)
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 SetVisibilityState(int aRow, bool aVisible)
Update cached visibility without dispatching a ratsnest action.
void HideOtherNets(const NET_GRID_ENTRY &aNet)
std::unordered_map< int, int > m_netcodeToRow
wxGridCellAttr * m_defaultAttr
bool GetValueAsBool(int aRow, int aCol) override
const NET_GRID_ENTRY & GetEntry(int aRow) const
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 AddLink(const wxString &aLinkText, const std::function< void(wxHyperlinkEvent &)> &aFn)
Add a hypertext link 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)
A type-safe container of any type.
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_VIA_STITCHING
Outline of via stitching generators.
@ 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 RPT_SEVERITY_WARNING.
@ LAYER_CONSTRAINT_SHADOW
Shadow layer for items bound to a constraint.
@ 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_SUBGRIDS
Routing/placement subgrids (PCB_GRID_ITEM) visibility and color.
@ LAYER_DRC_ERROR
Layer for DRC markers with RPT_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_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
@ PCB_PAD_T
class PAD, a pad in a footprint
@ PCB_NETINFO_T
class NETINFO_ITEM, a description of a net
const KICOMMON_API wxEventTypeTag< wxCommandEvent > WX_COLLAPSIBLE_PANE_CHANGED