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
427 SetMinSize( FromDIP( GetMinSize() ) );
434 int screenHeight = wxSystemSettings::GetMetric( wxSYS_SCREEN_Y );
436 m_pointSize = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ).GetPointSize();
459 m_cbLayerPresets->SetToolTip( wxString::Format(
_(
"Save and restore layer visibility combinations.\n"
460 "Use %s+Tab to activate selector.\n"
461 "Successive Tabs while holding %s down will "
462 "cycle through presets in the popup." ),
466 m_cbViewports->SetToolTip( wxString::Format(
_(
"Save and restore view location and zoom.\n"
467 "Use %s+Tab to activate selector.\n"
468 "Successive Tabs while holding %s down will "
469 "cycle through viewports in the popup." ),
493 auto setHighContrastMode =
499 m_frame->SetDisplayOptions( opts );
504 [=]( wxCommandEvent& aEvent )
510 [=]( wxCommandEvent& aEvent )
516 [=]( wxCommandEvent& aEvent )
524 [&]( wxCommandEvent& aEvent )
530 [&]( wxCommandEvent& aEvent )
534 editframe->ShowBoardSetupDialog(
_(
"Net Classes" ) );
541 [&]( wxCommandEvent& aEvent )
552 m_netsGrid->RegisterDataType( wxT(
"COLOR4D" ),
560 m_netsGrid->SetSelectionMode( wxGrid::wxGridSelectRows );
564 const int cellPadding = 6;
566 const int rowHeightPadding = 5;
568 const int rowHeightPadding = 3;
578 m_netsGrid->SetDefaultRowSize( font.GetPixelSize().y + rowHeightPadding );
585 m_netsGrid->ShowScrollbars( wxSHOW_SB_NEVER, wxSHOW_SB_DEFAULT );
593 if( cfg->m_AuiPanels.appearance_expand_layer_display )
596 if( cfg->m_AuiPanels.appearance_expand_net_display )
636 wxBoxSizer* layerDisplayOptionsSizer;
637 layerDisplayOptionsSizer =
new wxBoxSizer( wxVERTICAL );
644 msg =
_(
"Inactive layers:" );
651 wxBoxSizer* contrastModeSizer;
652 contrastModeSizer =
new wxBoxSizer( wxHORIZONTAL );
655 wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
661 contrastModeSizer->AddStretchSpacer();
668 contrastModeSizer->AddStretchSpacer();
675 contrastModeSizer->AddStretchSpacer();
677 layerDisplayOptionsSizer->Add( contrastModeSizer, 0, wxEXPAND, 5 );
680 wxDefaultSize, wxLI_HORIZONTAL );
683 m_cbFlipBoard =
new wxCheckBox( layerDisplayPane, wxID_ANY,
_(
"Flip board view" ) );
685 layerDisplayOptionsSizer->Add(
m_cbFlipBoard, 0, wxTOP | wxBOTTOM, 3 );
687 layerDisplayPane->SetSizer( layerDisplayOptionsSizer );
688 layerDisplayPane->Layout();
689 layerDisplayOptionsSizer->Fit( layerDisplayPane );
694 [&]( wxCommandEvent& aEvent )
709 wxBoxSizer* netDisplayOptionsSizer =
new wxBoxSizer( wxVERTICAL );
718 msg =
_(
"Net colors:" );
727 wxBoxSizer* netColorSizer =
new wxBoxSizer( wxHORIZONTAL );
729 m_rbNetColorAll =
new wxRadioButton( netDisplayPane, wxID_ANY,
_(
"All" ), wxDefaultPosition,
730 wxDefaultSize, wxRB_GROUP );
732 m_rbNetColorAll->SetToolTip(
_(
"Net and netclass colors are shown on all copper items" ) );
735 netColorSizer->AddStretchSpacer();
743 netColorSizer->AddStretchSpacer();
745 m_rbNetColorOff =
new wxRadioButton( netDisplayPane, wxID_ANY,
_(
"None" ) );
747 m_rbNetColorOff->SetToolTip(
_(
"Net and netclass colors are not shown" ) );
751 netDisplayOptionsSizer->Add( netColorSizer, 0, wxEXPAND | wxBOTTOM, 5 );
760 msg =
_(
"Ratsnest display:" );
769 wxBoxSizer* ratsnestDisplayModeSizer =
new wxBoxSizer( wxHORIZONTAL );
772 wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
778 ratsnestDisplayModeSizer->AddStretchSpacer();
785 ratsnestDisplayModeSizer->AddStretchSpacer();
793 netDisplayOptionsSizer->Add( ratsnestDisplayModeSizer, 0, wxEXPAND | wxBOTTOM, 5 );
797 netDisplayPane->SetSizer( netDisplayOptionsSizer );
798 netDisplayPane->Layout();
799 netDisplayOptionsSizer->Fit( netDisplayPane );
804 [&]( wxCommandEvent& aEvent )
847 int page = aEvent.GetSelection();
850 m_notebook->ChangeSelection(
static_cast<unsigned>( page ) );
879 if( wxBitmapButton* btn =
dynamic_cast<wxBitmapButton*
>( aEvent.GetEventObject() ) )
881 wxCommandEvent evt( wxEVT_BUTTON );
882 wxPostEvent( btn, evt );
899 int row =
event.GetRow();
900 int col =
event.GetCol();
917 int row =
event.GetRow();
918 int col =
event.GetCol();
949 menu.Append(
new wxMenuItem( &menu,
ID_SET_NET_COLOR,
_(
"Set Net Color" ), wxEmptyString,
951 menu.Append(
new wxMenuItem( &menu,
ID_CLEAR_NET_COLOR,
_(
"Clear Net Color" ), wxEmptyString,
954 menu.AppendSeparator();
957 wxString::Format(
_(
"Highlight %s" ), netName ), wxEmptyString,
960 wxString::Format(
_(
"Select Tracks and Vias in %s" ), netName ),
961 wxEmptyString, wxITEM_NORMAL ) );
963 wxString::Format(
_(
"Unselect Tracks and Vias in %s" ), netName ),
964 wxEmptyString, wxITEM_NORMAL ) );
966 menu.AppendSeparator();
968 menu.Append(
new wxMenuItem( &menu,
ID_SHOW_ALL_NETS,
_(
"Show All Nets" ), wxEmptyString,
971 wxEmptyString, wxITEM_NORMAL ) );
981 wxPoint pos =
m_netsGrid->CalcUnscrolledPosition( aEvent.GetPosition() );
982 wxGridCellCoords cell =
m_netsGrid->XYToCell( pos );
984 if( aEvent.Moving() || aEvent.Entering() )
1002 wxString showOrHide = net.
visible ?
_(
"Click to hide ratsnest for %s" )
1003 :
_(
"Click to show ratsnest for %s" );
1007 tip.Printf( showOrHide,
name );
1009 tip =
_(
"Double click (or middle click) to change color; right click for more actions" );
1011 m_netsGrid->GetGridWindow()->SetToolTip( tip );
1013 else if( aEvent.Leaving() )
1018 else if( aEvent.Dragging() )
1026 else if( aEvent.ButtonUp( wxMOUSE_BTN_MIDDLE ) && !!cell )
1028 int row = cell.GetRow();
1029 int col = cell.GetCol();
1127 int row =
m_netsTable->GetRowByNetcode( aNetCode );
1145 bool rebuild = std::any_of( aBoardItems.begin(), aBoardItems.end(),
1148 return a->Type() == PCB_NETINFO_T;
1198 std::vector<BOARD_ITEM*>& aAddedItems,
1199 std::vector<BOARD_ITEM*>& aRemovedItems,
1200 std::vector<BOARD_ITEM*>& aChangedItems )
1248 if( child && child->GetWindow() )
1253 m_netsGrid->RegisterDataType( wxT(
"COLOR4D" ),
1259 if( pair.second->ctl_color )
1260 pair.second->ctl_color->OnDarkModeToggle();
1269 for(
const std::unique_ptr<APPEARANCE_SETTING>& setting :
m_layerSettings )
1279 if( r < 240 || g < 240 || b < 240 )
1281 r = wxChar( std::min( (
int) r + 15, 255 ) );
1282 g = wxChar( std::min( (
int) g + 15, 255 ) );
1283 b = wxChar( std::min( (
int) b + 15, 255 ) );
1287 r = wxChar( std::max( (
int) r - 15, 0 ) );
1288 g = wxChar( std::max( (
int) g - 15, 0 ) );
1289 b = wxChar( std::max( (
int) b - 15, 0 ) );
1302 newSetting->
ctl_panel->SetBackgroundColour( wxColour( r, g, b ) );
1314 if( visible.test( layer ) == isVisible )
1317 visible.
set( layer, isVisible );
1320 m_frame->GetCanvas()->GetView()->SetLayerVisible( layer, isVisible );
1343 m_frame->Update3DView(
true,
m_frame->GetPcbNewSettings()->m_Display.m_Live3DRefresh );
1345 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer, isVisible );
1346 m_frame->GetCanvas()->Refresh();
1361 board->SetVisibleLayers( aLayers );
1371 return dynamic_cast<PCB_VIA*
>( aItem ) ||
dynamic_cast<PAD*
>( aItem );
1374 m_frame->Update3DView(
true,
m_frame->GetPcbNewSettings()->m_Display.m_Live3DRefresh );
1425 if( s_setting.id == gal_ly )
1433 m_frame->Update3DView(
true,
m_frame->GetPcbNewSettings()->m_Display.m_Live3DRefresh );
1452 return board->GetVisibleLayers();
1467 for(
size_t i = 0; i < set.size(); i++ )
1474 return board->GetVisibleElements();
1505 if( !cfg->m_Display.m_ShowGlobalRatsnest )
1522 std::vector<LAYER_PRESET> ret;
1524 for(
const std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
1526 if( !pair.second.readOnly )
1527 ret.emplace_back( pair.second );
1577 wxCommandEvent
dummy;
1599 std::vector<VIEWPORT> ret;
1601 for(
const std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
1602 ret.emplace_back( pair.second );
1612 for(
const VIEWPORT& viewport : aViewportList )
1630 wxCommandEvent
dummy;
1660 m_windowLayersSizerItem->SetFlag( m_windowLayersSizerItem->GetFlag() & ~wxTOP );
1664 [&]( std::unique_ptr<APPEARANCE_SETTING>& aSetting )
1666 int layer = aSetting->id;
1669 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
1670 panel->SetSizer( sizer );
1674 aSetting->visible = visible[layer];
1682 swatch->SetToolTip(
_(
"Double click or middle click for color change, right click for menu" ) );
1687 aSetting->visible );
1688 btn_visible->SetToolTip(
_(
"Show or hide this layer" ) );
1690 wxStaticText* label =
new wxStaticText( panel, layer, aSetting->label );
1692 label->SetToolTip( aSetting->tooltip );
1694 sizer->AddSpacer( 1 );
1695 sizer->Add( indicator, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1696 sizer->AddSpacer( 5 );
1697 sizer->Add( swatch, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1698 sizer->AddSpacer( 6 );
1699 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1700 sizer->AddSpacer( 5 );
1701 sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxTOP, 2 );
1705 aSetting->ctl_panel = panel;
1706 aSetting->ctl_indicator = indicator;
1707 aSetting->ctl_visibility = btn_visible;
1708 aSetting->ctl_color = swatch;
1709 aSetting->ctl_text = label;
1716 btn_visible->Bind( TOGGLE_CHANGED,
1717 [&]( wxCommandEvent& aEvent )
1719 wxObject* btn = aEvent.GetEventObject();
1720 int layerId =
static_cast<wxWindow*
>( btn )->GetId();
1737 [&]( std::unique_ptr<APPEARANCE_SETTING>& aSetting )
1739 int layer = aSetting->id;
1740 aSetting->visible = visible[layer];
1741 aSetting->ctl_panel->Show();
1742 aSetting->ctl_panel->SetId( layer );
1743 aSetting->ctl_indicator->SetWindowID( layer );
1744 aSetting->ctl_color->SetWindowID( layer );
1745 aSetting->ctl_color->SetSwatchColor( theme->
GetColor( layer ),
false );
1746 aSetting->ctl_visibility->SetWindowID( layer );
1747 aSetting->ctl_text->SetLabelText( aSetting->label );
1748 aSetting->ctl_text->SetId( layer );
1749 aSetting->ctl_text->SetToolTip( aSetting->tooltip );
1755 static const struct {
1761 {
F_Paste,
_HKI(
"Solder paste on board's front" ) },
1762 {
B_Paste,
_HKI(
"Solder paste on board's back" ) },
1763 {
F_SilkS,
_HKI(
"Silkscreen on board's front" ) },
1764 {
B_SilkS,
_HKI(
"Silkscreen on board's back" ) },
1765 {
F_Mask,
_HKI(
"Solder mask on board's front" ) },
1766 {
B_Mask,
_HKI(
"Solder mask on board's back" ) },
1772 {
Margin,
_HKI(
"Board's edge setback outline" ) },
1773 {
F_CrtYd,
_HKI(
"Footprint courtyards on board's front" ) },
1774 {
B_CrtYd,
_HKI(
"Footprint courtyards on board's back" ) },
1775 {
F_Fab,
_HKI(
"Footprint assembly on board's front" ) },
1776 {
B_Fab,
_HKI(
"Footprint assembly on board's back" ) },
1839 std::size_t total_layers = enabled.
CuStack().size();
1841 for(
const auto& entry : non_cu_seq )
1843 if( enabled[entry.layerId] )
1853 for( std::size_t ii = total_layers; ii <
m_layerSettings.size(); ++ii )
1868 case F_Cu: dsc =
_(
"Front copper layer" );
break;
1869 case B_Cu: dsc =
_(
"Back copper layer" );
break;
1870 default: dsc =
_(
"Inner copper layer" );
break;
1873 std::unique_ptr<APPEARANCE_SETTING>& setting = *layer_it;
1876 setting->id = layer;
1877 setting->tooltip = dsc;
1879 if( setting->ctl_panel ==
nullptr )
1880 appendLayer( setting );
1882 updateLayer( setting );
1888 setting->ctl_text->Disable();
1889 setting->ctl_color->SetToolTip( wxEmptyString );
1895 for(
const auto& entry : non_cu_seq )
1899 if( !enabled[layer] )
1902 std::unique_ptr<APPEARANCE_SETTING>& setting = *layer_it;
1918 setting->id = layer;
1921 setting->tooltip = wxGetTranslation( entry.tooltip );
1923 if( setting->ctl_panel ==
nullptr )
1924 appendLayer( setting );
1926 updateLayer( setting );
1932 setting->ctl_text->Disable();
1933 setting->ctl_color->SetToolTip( wxEmptyString );
1951 msg =
_(
"Inactive layers:" );
2008 if(
m_frame->GetBoard() &&
m_frame->GetBoard()->GetCopperLayerCount() > 2 )
2038 switch( aEvent.GetId() )
2063 if( !visible.test( current ) && visible.count() > 0 )
2064 m_frame->SetActiveLayer( *visible.
Seq().begin() );
2072 if( !visible.test( current ) && visible.count() > 0 )
2073 m_frame->SetActiveLayer( *visible.
Seq().begin() );
2114 m_frame->GetCanvas()->SyncLayersVisibility( board );
2116 m_frame->GetCanvas()->Refresh();
2130 if( aTab >= 0 &&
static_cast<size_t>( aTab ) < max )
2146 int layer = setting->id;
2148 if( setting->ctl_visibility )
2149 setting->ctl_visibility->SetValue( visible[layer] );
2151 if( setting->ctl_color )
2154 setting->ctl_color->SetSwatchColor( color,
false );
2155 setting->ctl_color->SetReadOnly( readOnly );
2163 if( setting->ctl_visibility )
2164 setting->ctl_visibility->SetValue( objects.
Contains( layer ) );
2166 if( setting->ctl_color )
2169 setting->ctl_color->SetSwatchColor( color,
false );
2170 setting->ctl_color->SetReadOnly( readOnly );
2185 wxWindow* eventSource =
static_cast<wxWindow*
>( aEvent.GetEventObject() );
2192 m_frame->SetActiveLayer( layer );
2209 visibleLayers.
set( aLayer, !visibleLayers.test( aLayer ) );
2211 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer, visibleLayers.test( aLayer ) );
2214 m_frame->GetCanvas()->Refresh();
2227 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer,
true );
2231 m_frame->GetPcbNewSettings()->m_Display.m_ShowGlobalRatsnest = isVisible;
2234 m_frame->GetBoard()->SetElementVisibility( aLayer, isVisible );
2236 m_frame->OnDisplayOptionsChanged();
2237 m_frame->GetCanvas()->RedrawRatsnest();
2244 m_frame->SetGridVisibility( isVisible );
2245 m_frame->GetCanvas()->Refresh();
2280 if( visible.
Contains( aLayer ) != isVisible )
2282 visible.
set( aLayer, isVisible );
2284 m_frame->GetCanvas()->GetView()->SetLayerVisible( aLayer, isVisible );
2290 m_frame->GetCanvas()->Refresh();
2301 int swatchWidth =
m_windowObjects->ConvertDialogToPixels( wxSize( 8, 0 ) ).x;
2311 [&](
const std::unique_ptr<APPEARANCE_SETTING>& aSetting )
2314 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
2315 panel->SetSizer( sizer );
2316 int layer = aSetting->id;
2326 swatch->SetToolTip(
_(
"Left double click or middle click for color change, "
2327 "right click for menu" ) );
2329 sizer->Add( swatch, 0, wxALIGN_CENTER_VERTICAL, 0 );
2330 aSetting->ctl_color = swatch;
2338 sizer->AddSpacer( swatchWidth );
2344 if( aSetting->can_control_visibility )
2349 aSetting->visible );
2351 tip.Printf(
_(
"Show or hide %s" ), aSetting->label.Lower() );
2352 btn_visible->SetToolTip( tip );
2354 aSetting->ctl_visibility = btn_visible;
2356 btn_visible->Bind( TOGGLE_CHANGED,
2357 [&]( wxCommandEvent& aEvent )
2359 int id =
static_cast<wxWindow*
>( aEvent.GetEventObject() )->GetId();
2360 bool isVisible = aEvent.GetInt();
2365 sizer->AddSpacer( 5 );
2367 wxStaticText* label =
new wxStaticText( panel, layer, aSetting->label );
2369 label->SetToolTip( aSetting->tooltip );
2371 if( aSetting->can_control_opacity )
2373 label->SetMinSize( wxSize( labelWidth, -1 ) );
2376 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 10 );
2378 sizer->AddSpacer( btnWidth );
2380 sizer->AddSpacer( 5 );
2381 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 10 );
2384 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL, 0 );
2386 sizer->AddSpacer( btnWidth );
2388 sizer->AddSpacer( 5 );
2389 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL, 0 );
2392 wxSlider* slider =
new wxSlider( panel, wxID_ANY, 100, 0, 100,
2393 wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL );
2395 slider->SetMinSize( wxSize( 80, 16 ) );
2397 slider->SetMinSize( wxSize( 80, -1 ) );
2400 tip.Printf(
_(
"Set opacity of %s" ), aSetting->label.Lower() );
2401 slider->SetToolTip( tip );
2403 sizer->Add( slider, 1, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 5 );
2404 aSetting->ctl_opacity = slider;
2406 auto opacitySliderHandler =
2407 [
this, layer]( wxCommandEvent& aEvent )
2409 wxSlider* ctrl =
static_cast<wxSlider*
>( aEvent.GetEventObject() );
2410 int value = ctrl->GetValue();
2414 slider->Bind( wxEVT_SCROLL_CHANGED, opacitySliderHandler );
2415 slider->Bind( wxEVT_SCROLL_THUMBTRACK, opacitySliderHandler );
2421 sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL, 0 );
2423 sizer->AddSpacer( btnWidth );
2425 sizer->AddSpacer( 5 );
2426 sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL, 0 );
2429 aSetting->ctl_text = label;
2432 if( !aSetting->can_control_opacity )
2441 m_objectSettings.emplace_back( std::make_unique<APPEARANCE_SETTING>( s_setting ) );
2447 setting->tooltip = wxGetTranslation( s_setting.tooltip );
2448 setting->label = wxGetTranslation( s_setting.label );
2450 if( setting->can_control_opacity )
2453 labelWidth = std::max( labelWidth, width );
2456 if( !s_setting.spacer )
2460 for(
const std::unique_ptr<APPEARANCE_SETTING>& setting :
m_objectSettings )
2462 if( setting->spacer )
2465 appendObject( setting );
2481 if( setting->spacer )
2486 if( setting->ctl_visibility )
2487 setting->ctl_visibility->SetValue( visible.
Contains( layer ) );
2489 if( setting->ctl_color )
2491 COLOR4D color =
m_frame->GetColorSettings()->GetColor( setting->id );
2492 setting->ctl_color->SetSwatchColor( color,
false );
2513 const wxString& aName )
2522 if( !isDefaultClass)
2524 aMenu.Append(
new wxMenuItem( &aMenu,
ID_SET_NET_COLOR,
_(
"Set Netclass Color" ),
2525 wxEmptyString, wxITEM_NORMAL ) );
2528 _(
"Use Color from Schematic" ),
2529 wxEmptyString, wxITEM_NORMAL );
2530 std::shared_ptr<NETCLASS> nc = netSettings->GetNetClassByName( aName );
2532 aMenu.Append( schematicColor );
2535 schematicColor->Enable(
false );
2538 wxEmptyString, wxITEM_NORMAL ) );
2539 aMenu.AppendSeparator();
2545 wxString::Format(
_(
"Highlight Nets in %s" ),
name ),
2546 wxEmptyString, wxITEM_NORMAL ) );
2548 wxString::Format(
_(
"Select Tracks and Vias in %s" ),
name ),
2549 wxEmptyString, wxITEM_NORMAL ) );
2551 wxString::Format(
_(
"Unselect Tracks and Vias in %s" ),
name ),
2552 wxEmptyString, wxITEM_NORMAL ) );
2554 aMenu.AppendSeparator();
2556 aMenu.Append(
new wxMenuItem( &aMenu,
ID_SHOW_ALL_NETS,
_(
"Show All Netclasses" ),
2557 wxEmptyString, wxITEM_NORMAL ) );
2558 aMenu.Append(
new wxMenuItem( &aMenu,
ID_HIDE_OTHER_NETS,
_(
"Hide All Other Netclasses" ),
2559 wxEmptyString, wxITEM_NORMAL ) );
2581 const std::set<wxString>& hiddenClasses =
m_frame->Prj().GetLocalSettings().m_HiddenNetclasses;
2585 auto appendNetclass =
2586 [&](
int aId,
const std::shared_ptr<NETCLASS>& aClass,
bool isDefaultClass = false )
2588 wxString
name = aClass->GetName();
2595 wxBoxSizer* sizer =
new wxBoxSizer( wxHORIZONTAL );
2599 ? netSettings->GetNetClassByName(
name )->GetPcbColor()
2604 setting->
ctl_color->SetToolTip(
_(
"Left double click or middle click for color "
2605 "change, right click for menu" ) );
2607 setting->
ctl_color->Bind( COLOR_SWATCH_CHANGED,
2611 if( isDefaultClass )
2617 !hiddenClasses.count(
name ) );
2620 tip.Printf(
_(
"Show or hide ratsnest for nets in %s" ),
name );
2626 int flags = wxALIGN_CENTER_VERTICAL;
2628 sizer->Add( setting->
ctl_color, 0, flags | wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5 );
2629 sizer->AddSpacer( 7 );
2631 sizer->AddSpacer( 3 );
2632 sizer->Add( setting->
ctl_text, 1, flags, 5 );
2642 [&,
name, isDefaultClass]( wxMouseEvent& aEvent )
2651 setting->
ctl_panel->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2653 setting->
ctl_color->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2654 setting->
ctl_text->Bind( wxEVT_RIGHT_DOWN, menuHandler );
2657 std::vector<wxString> names;
2659 for(
const auto& [
name, netclass] : netSettings->GetNetclasses() )
2660 names.emplace_back(
name );
2662 std::sort( names.begin(), names.end() );
2666 int idx = wxID_HIGHEST;
2669 appendNetclass( idx++, netSettings->GetDefaultNetclass(),
true );
2671 for(
const wxString&
name : names )
2674 appendNetclass( idx++, netSettings->GetNetclasses().at(
name ) );
2687 msg =
_(
"Net colors:" );
2693 m_rbNetColorAll->SetToolTip(
_(
"Net and netclass colors are shown on all copper items" ) );
2699 m_rbNetColorOff->SetToolTip(
_(
"Net and netclass colors are not shown" ) );
2706 msg =
_(
"Ratsnest display:" );
2739 int default_idx = 0;
2740 std::vector<std::pair<wxString, void*>> userPresets;
2746 const wxString translatedName = wxGetTranslation(
name );
2747 void* userData =
static_cast<void*
>( &preset );
2749 if( preset.readOnly )
2752 userPresets.push_back( {
name, userData } );
2763 if( !userPresets.empty() )
2767 for(
auto& [
name, userData] : userPresets )
2794 [&](
const std::pair<const wxString, LAYER_PRESET>& aPair )
2796 return ( aPair.second.layers == visibleLayers
2797 && aPair.second.renderLayers == visibleObjects
2798 && aPair.second.flipBoard == flipBoard );
2805 bool do_translate = it->second.readOnly;
2806 wxString
text = do_translate ? wxGetTranslation( it->first ) : it->first;
2825 wxString ui_label = aName;
2827 for( std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
2829 if( pair.first != aName )
2832 if( pair.second.readOnly ==
true )
2833 ui_label = wxGetTranslation( aName );
2857 auto resetSelection =
2866 if(
index == count - 2 )
2874 wxTextEntryDialog dlg( wxGetTopLevelParent(
this ),
_(
"Layer preset name:" ),
2875 _(
"Save Layer Preset" ),
name );
2877 if( dlg.ShowModal() != wxID_OK )
2883 name = dlg.GetValue();
2901 wxMessageBox(
_(
"Default presets cannot be modified.\nPlease use a different name." ),
2902 _(
"Error" ), wxOK | wxICON_ERROR, wxGetTopLevelParent(
this ) );
2909 if( !
IsOK( wxGetTopLevelParent(
this ),
_(
"Overwrite existing preset?" ) ) )
2931 else if(
index == count - 1 )
2934 wxArrayString headers;
2935 std::vector<wxArrayString> items;
2937 headers.Add(
_(
"Presets" ) );
2939 for( std::pair<const wxString, LAYER_PRESET>& pair :
m_layerPresets )
2941 if( !pair.second.readOnly )
2944 item.Add( pair.first );
2945 items.emplace_back( item );
2957 if( idx != wxNOT_FOUND )
2965 if(
m_presetMRU.Index( presetName ) != wxNOT_FOUND )
3007 const wxString translatedName = wxGetTranslation(
m_currentPreset->name );
3009 if(
m_presetMRU.Index( translatedName ) != wxNOT_FOUND )
3036 activeLayer = *aPreset.
layers.
Seq().begin();
3041 m_frame->SetActiveLayer( activeLayer );
3044 m_frame->GetCanvas()->SyncLayersVisibility( board );
3048 m_frame->SetDisplayOptions( options,
false );
3050 m_frame->GetCanvas()->Refresh();
3064 for( std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
3065 m_cbViewports->Append( pair.first,
static_cast<void*
>( &pair.second ) );
3102 wxCHECK( viewport, );
3106 if( !viewport->
name.IsEmpty() )
3114 else if(
index == count - 2 )
3119 wxTextEntryDialog dlg( wxGetTopLevelParent(
this ),
_(
"Viewport name:" ),
_(
"Save Viewport" ),
name );
3121 if( dlg.ShowModal() != wxID_OK )
3131 name = dlg.GetValue();
3154 else if(
index == count - 1 )
3157 wxArrayString headers;
3158 std::vector<wxArrayString> items;
3160 headers.Add(
_(
"Viewports" ) );
3162 for( std::pair<const wxString, VIEWPORT>& pair :
m_viewports )
3165 item.Add( pair.first );
3166 items.emplace_back( item );
3177 if( idx != wxNOT_FOUND )
3201 m_frame->GetCanvas()->GetView()->SetViewport( aViewport.
rect );
3202 m_frame->GetCanvas()->Refresh();
3210 int layer = swatch->GetId();
3215 m_frame->GetSettingsManager()->SaveColorSettings( cs,
"board" );
3217 m_frame->GetCanvas()->UpdateColors();
3235 m_frame->GetCanvas()->Refresh();
3238 m_frame->SetDrawBgColor( newColor );
3259 m_frame->SetDisplayOptions( options );
3266 wxASSERT(
m_netsGrid->GetSelectedRows().size() == 1 );
3273 switch( aEvent.GetId() )
3294 m_frame->GetCanvas()->Refresh();
3299 m_frame->GetCanvas()->Refresh();
3304 m_frame->GetCanvas()->Refresh();
3326 bool show = aEvent.GetInt();
3343 if( net->GetNetClass()->ContainsNetclassWithName( aClassName ) )
3347 net->GetNetCode() );
3349 int row =
m_netsTable->GetRowByNetcode( net->GetNetCode() );
3364 m_frame->GetCanvas()->RedrawRatsnest();
3365 m_frame->GetCanvas()->Refresh();
3381 std::shared_ptr<NETCLASS> nc = netSettings->GetNetClassByName( netclassName );
3384 netSettings->RecomputeEffectiveNetclasses();
3386 m_frame->GetCanvas()->GetView()->UpdateAllLayersColor();
3387 m_frame->GetCanvas()->RedrawRatsnest();
3388 m_frame->GetCanvas()->Refresh();
3395 int classId = s->GetId();
3413 m_frame->SetDisplayOptions( options );
3414 m_frame->GetCanvas()->GetView()->UpdateAllLayersColor();
3425 cfg->m_Display.m_ShowGlobalRatsnest =
true;
3430 cfg->m_Display.m_ShowGlobalRatsnest =
true;
3435 cfg->m_Display.m_ShowGlobalRatsnest =
false;
3442 editframe->SetElementVisibility(
LAYER_RATSNEST, cfg->m_Display.m_ShowGlobalRatsnest );
3444 editframe->OnDisplayOptionsChanged();
3445 editframe->GetCanvas()->RedrawRatsnest();
3446 editframe->GetCanvas()->Refresh();
3470 setting = it->second;
3472 auto runOnNetsOfClass =
3473 [&](
const wxString& netClassName, std::function<void(
NETINFO_ITEM* )> aFunction )
3477 if( net->GetNetClass()->ContainsNetclassWithName( netClassName ) )
3482 switch( aEvent.GetId() )
3495 netSettings->RecomputeEffectiveNetclasses();
3511 netSettings->RecomputeEffectiveNetclasses();
3529 netSettings->RecomputeEffectiveNetclasses();
3544 static bool first =
true;
3592 for(
const auto& [
name, netclass] : netSettings->GetNetclasses() )
3610 for(
const auto& [
name, netclass] : netSettings->GetNetclasses() )
3627 m_frame->GetCanvas()->RedrawRatsnest();
3628 m_frame->GetCanvas()->Refresh();
3645 infobar->
AddLink(
_(
"Open Preferences" ),
3646 [&]( wxHyperlinkEvent& aEvent )
3648 m_frame->ShowPreferences( wxEmptyString, wxEmptyString );
3652 infobar->
ShowMessageFor(
_(
"The current color theme is read-only. Create a new theme in Preferences to "
3653 "enable color editing." ),
3654 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 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)
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 #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 #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
const KICOMMON_API wxEventTypeTag< wxCommandEvent > WX_COLLAPSIBLE_PANE_CHANGED