KiCad PCB EDA Suite
Loading...
Searching...
No Matches
toolbars_pcb_editor.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2012 Jean-Pierre Charras, jp.charras at wanadoo.fr
5 * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <[email protected]>
6 * Copyright (C) 2012 Wayne Stambaugh <[email protected]>
7 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version 2
12 * of the License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, you may find one here:
21 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
22 * or you may search the http://www.gnu.org website for the version 2 license,
23 * or you may write to the Free Software Foundation, Inc.,
24 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
25 */
26
27#include <memory>
28#include <string>
29
30#include <advanced_config.h>
32#include <bitmaps.h>
33#include <board.h>
35#include <eda_text.h>
36#include <footprint.h>
37#include <pcb_field.h>
38#include <kiface_base.h>
39#include <kiplatform/ui.h>
40#include <macros.h>
41#include <pcb_edit_frame.h>
42#include <pcb_field.h>
44#include <pcbnew_id.h>
45#include <pcbnew_settings.h>
46#include <eda_text.h>
47#include <pcb_field.h>
48#include <pgm_base.h>
51#include <router/router_tool.h>
53#include <tool/action_menu.h>
54#include <tool/action_toolbar.h>
55#include <tool/actions.h>
56#include <tool/common_tools.h>
57#include <tool/tool_manager.h>
59#include <tools/pcb_actions.h>
69#include <wx/wupdlock.h>
70#include <wx/combobox.h>
71#include <toolbars_pcb_editor.h>
73#include <eda_text.h>
74#include <tools/pcb_control.h>
75#include <pcb_draw_panel_gal.h>
77
78/* Data to build the layer pair indicator button */
79static wxBitmapBundle LayerPairBitmap;
80
81
82void PCB_EDIT_FRAME::PrepareLayerIndicator( bool aForceRebuild )
83{
84 COLOR4D top_color, bottom_color, background_color;
85 bool change = aForceRebuild;
86
88
89 if( m_prevIconVal.previous_icon_size != icon_size )
90 {
91 m_prevIconVal.previous_icon_size = icon_size;
92 change = true;
93 }
94
95 top_color = GetColorSettings()->GetColor( GetScreen()->m_Route_Layer_TOP );
96
97 if( m_prevIconVal.previous_Route_Layer_TOP_color != top_color )
98 {
99 m_prevIconVal.previous_Route_Layer_TOP_color = top_color;
100 change = true;
101 }
102
103 bottom_color = GetColorSettings()->GetColor( GetScreen()->m_Route_Layer_BOTTOM );
104
105 if( m_prevIconVal.previous_Route_Layer_BOTTOM_color != bottom_color )
106 {
107 m_prevIconVal.previous_Route_Layer_BOTTOM_color = bottom_color;
108 change = true;
109 }
110
111 if( change || !LayerPairBitmap.IsOk() )
112 {
113 LayerPairBitmap = LAYER_PRESENTATION::CreateLayerPairIcon( top_color, bottom_color, icon_size );
114
115 if( m_tbTopAux )
116 {
118 m_tbTopAux->Refresh();
119 }
120 }
121}
122
123
125 _( "Track width selector" ),
126 _( "Control to select the track width" ),
127 { FRAME_PCB_EDITOR } );
129 _( "Via diameter selector" ),
130 _( "Control to select the via diameter" ),
131 { FRAME_PCB_EDITOR } );
133 _( "Current variant" ),
134 _( "Control to select the current variant" ),
135 { FRAME_PCB_EDITOR } );
136
137
138std::optional<TOOLBAR_CONFIGURATION> PCB_EDIT_TOOLBAR_SETTINGS::DefaultToolbarConfig( TOOLBAR_LOC aToolbar )
139{
141
142 // clang-format off
143 switch( aToolbar )
144 {
146 config.AppendAction( ACTIONS::toggleGrid )
147 .WithContextMenu(
148 []( TOOL_MANAGER* aMgr ) -> std::unique_ptr<ACTION_MENU>
149 {
151 std::unique_ptr<ACTION_MENU> menu =
152 std::make_unique<ACTION_MENU>( false, selTool );
153
154 menu->Add( ACTIONS::gridProperties );
155 menu->Add( ACTIONS::gridOrigin );
156
157 return menu;
158 } )
159 .AppendAction( ACTIONS::toggleGridOverrides )
160 .AppendAction( PCB_ACTIONS::togglePolarCoords )
161 .AppendGroup( TOOLBAR_GROUP_CONFIG( _( "Units" ) )
162 .AddAction( ACTIONS::millimetersUnits )
163 .AddAction( ACTIONS::inchesUnits )
164 .AddAction( ACTIONS::milsUnits ) )
165 .AppendGroup( TOOLBAR_GROUP_CONFIG( _( "Crosshair modes" ) )
168 .AddAction( ACTIONS::cursor45Crosshairs ) );
169
170 config.AppendSeparator()
171 .AppendGroup( TOOLBAR_GROUP_CONFIG( _( "Line modes" ) )
172 .AddAction( PCB_ACTIONS::lineModeFree )
173 .AddAction( PCB_ACTIONS::lineMode90 )
174 .AddAction( PCB_ACTIONS::lineMode45 ) );
175
176 config.AppendSeparator()
177 .AppendAction( PCB_ACTIONS::showRatsnest )
178 .AppendAction( PCB_ACTIONS::ratsnestLineMode );
179
180 config.AppendSeparator()
181 .AppendAction( ACTIONS::highContrastMode )
182 .AppendAction( PCB_ACTIONS::toggleNetHighlight );
183
184 config.AppendSeparator()
185 .AppendAction( PCB_ACTIONS::zoneDisplayFilled )
186 .AppendAction( PCB_ACTIONS::zoneDisplayOutline );
187
188 if( ADVANCED_CFG::GetCfg().m_ExtraZoneDisplayModes )
189 {
192 }
193
194 config.AppendSeparator()
195 .AppendAction( PCB_ACTIONS::padDisplayMode )
196 .AppendAction( PCB_ACTIONS::viaDisplayMode )
197 .AppendAction( PCB_ACTIONS::trackDisplayMode );
198
199 if( ADVANCED_CFG::GetCfg().m_DrawBoundingBoxes )
200 config.AppendAction( ACTIONS::toggleBoundingBoxes );
201
202 // Tools to show/hide toolbars:
203 config.AppendSeparator()
204 .AppendAction( PCB_ACTIONS::showLayersManager )
205 .AppendAction( ACTIONS::showProperties );
206
207 break;
208
210 config.AppendGroup( TOOLBAR_GROUP_CONFIG( _( "Selection modes" ) )
211 .AddAction( ACTIONS::selectSetRect )
212 .AddAction( ACTIONS::selectSetLasso ) )
213 .AppendAction( PCB_ACTIONS::localRatsnestTool );
214
215 config.AppendSeparator()
216 .AppendAction( PCB_ACTIONS::placeFootprint )
217 .AppendGroup( TOOLBAR_GROUP_CONFIG( _( "Track routing tools" ) )
219 .AddAction( PCB_ACTIONS::routeDiffPair )
220 .AddContextMenu(
221 []( TOOL_MANAGER* aMgr ) -> std::unique_ptr<ACTION_MENU>
222 {
224 std::unique_ptr<ACTION_MENU> menu =
225 std::make_unique<ACTION_MENU>( false, selTool );
226
230 menu->AppendSeparator();
232
233 return menu;
234 } ) )
235 .AppendGroup( TOOLBAR_GROUP_CONFIG( _( "Track tuning tools" ) )
236 .AddAction( PCB_ACTIONS::tuneSingleTrack )
237 .AddAction( PCB_ACTIONS::tuneDiffPair )
238 .AddAction( PCB_ACTIONS::tuneSkew ) )
239 .AppendAction( PCB_ACTIONS::drawVia )
240 .AppendAction( PCB_ACTIONS::drawZone )
241 .WithContextMenu(
242 []( TOOL_MANAGER* aMgr ) -> std::unique_ptr<ACTION_MENU>
243 {
245 std::unique_ptr<ACTION_MENU> menu =
246 std::make_unique<ACTION_MENU>( false, selTool );
247
248 menu->Add( PCB_ACTIONS::zoneFillAll );
249 menu->Add( PCB_ACTIONS::zoneUnfillAll );
250
251 return menu;
252 } )
253 .AppendAction( PCB_ACTIONS::drawRuleArea );
254
255 config.AppendSeparator()
256 .AppendAction( PCB_ACTIONS::drawLine )
257 .AppendAction( PCB_ACTIONS::drawArc )
258 .WithContextMenu(
259 []( TOOL_MANAGER* aMgr ) -> std::unique_ptr<ACTION_MENU>
260 {
262 std::unique_ptr<ACTION_MENU> menu =
263 std::make_unique<ACTION_MENU>( false, selTool );
264
268
269 return menu;
270 } )
271 .AppendAction( PCB_ACTIONS::drawRectangle )
272 .AppendAction( PCB_ACTIONS::drawCircle )
273 .AppendAction( PCB_ACTIONS::drawPolygon )
274 .AppendAction( PCB_ACTIONS::drawBezier )
275 .AppendAction( PCB_ACTIONS::placeReferenceImage )
276 .AppendAction( PCB_ACTIONS::placeText )
277 .AppendAction( PCB_ACTIONS::drawTextBox )
278 .AppendAction( PCB_ACTIONS::drawTable )
279 .AppendGroup( TOOLBAR_GROUP_CONFIG( _( "Dimension objects" ) )
284 .AddAction( PCB_ACTIONS::drawLeader ) )
285 .AppendAction( PCB_ACTIONS::placeBarcode )
286 .AppendAction( ACTIONS::deleteTool );
287
288 config.AppendSeparator()
289 .AppendGroup( TOOLBAR_GROUP_CONFIG( _( "PCB origins and points" ) )
290 .AddAction( ACTIONS::gridSetOrigin )
291 .AddAction( PCB_ACTIONS::drillOrigin ) )
292 .AppendAction( PCB_ACTIONS::placePoint )
293 .AppendAction( ACTIONS::measureTool );
294
295 break;
296
298 if( Kiface().IsSingle() )
299 {
300 config.AppendAction( ACTIONS::doNew );
301 config.AppendAction( ACTIONS::open );
302 }
303
304 config.AppendAction( ACTIONS::save );
305
306 config.AppendSeparator()
307 .AppendAction( PCB_ACTIONS::boardSetup );
308
309 config.AppendSeparator()
310 .AppendAction( ACTIONS::pageSettings )
311 .AppendAction( ACTIONS::print )
312 .AppendAction( ACTIONS::plot );
313
314 config.AppendSeparator()
315 .AppendAction( ACTIONS::undo )
316 .AppendAction( ACTIONS::redo );
317
318 config.AppendSeparator()
319 .AppendAction( ACTIONS::find );
320
321 config.AppendSeparator()
322 .AppendAction( ACTIONS::zoomRedraw )
323 .AppendAction( ACTIONS::zoomInCenter )
324 .AppendAction( ACTIONS::zoomOutCenter )
325 .AppendAction( ACTIONS::zoomFitScreen )
326 .AppendAction( ACTIONS::zoomFitObjects )
327 .AppendAction( ACTIONS::zoomTool );
328
329 config.AppendSeparator()
330 .AppendAction( PCB_ACTIONS::rotateCcw )
331 .AppendAction( PCB_ACTIONS::rotateCw )
332 .AppendAction( PCB_ACTIONS::mirrorV )
333 .AppendAction( PCB_ACTIONS::mirrorH )
334 .AppendAction( ACTIONS::group )
335 .AppendAction( ACTIONS::ungroup )
336 .AppendAction( PCB_ACTIONS::lock )
337 .AppendAction( PCB_ACTIONS::unlock );
338
339 config.AppendSeparator()
340 .AppendAction( ACTIONS::showFootprintEditor )
341 .AppendAction( ACTIONS::showFootprintBrowser )
342 .AppendAction( ACTIONS::show3DViewer );
343
344 config.AppendSeparator();
345
346 if( !Kiface().IsSingle() )
348 else
349 config.AppendAction( PCB_ACTIONS::importNetlist );
350
351 config.AppendAction( PCB_ACTIONS::runDRC );
352
353 config.AppendSeparator();
354 config.AppendAction( PCB_ACTIONS::showEeschema );
357
358 break;
359
362 .AppendAction( PCB_ACTIONS::autoTrackWidth );
363
364 config.AppendSeparator()
366
367 config.AppendSeparator()
369 .AppendAction( PCB_ACTIONS::selectLayerPair );
370
371 config.AppendSeparator()
372 .AppendControl( ACTION_TOOLBAR_CONTROLS::gridSelect );
373
374 config.AppendSeparator()
375 .AppendControl( ACTION_TOOLBAR_CONTROLS::zoomSelect );
376
377 config.AppendSeparator()
379
380 break;
381 }
382
383 // clang-format on
384 return config;
385}
386
387
389{
391
392 // Box to display and choose track widths
393 auto trackWidthSelectorFactory =
394 [this]( ACTION_TOOLBAR* aToolbar )
395 {
396 if( !m_SelTrackWidthBox )
397 {
398 m_SelTrackWidthBox = new wxChoice( aToolbar, ID_AUX_TOOLBAR_PCB_TRACK_WIDTH,
399 wxDefaultPosition, wxDefaultSize, 0, nullptr );
400 }
401
402 m_SelTrackWidthBox->SetToolTip( _( "Select the default width for new tracks. Note that this "
403 "width can be overridden by the board minimum width, or by "
404 "the width of an existing track if the 'Use Existing Track "
405 "Width' feature is enabled." ) );
406
408
409 aToolbar->Add( m_SelTrackWidthBox );
410 };
411
413
414
415 // Box to display and choose vias diameters
416 auto viaDiaSelectorFactory =
417 [this]( ACTION_TOOLBAR* aToolbar )
418 {
419 if( !m_SelViaSizeBox )
420 {
421 m_SelViaSizeBox = new wxChoice( aToolbar, ID_AUX_TOOLBAR_PCB_VIA_SIZE,
422 wxDefaultPosition, wxDefaultSize, 0, nullptr );
423 }
424
426 aToolbar->Add( m_SelViaSizeBox );
427 };
428
430
431 // Variant selection drop down control on main tool bar
432 auto variantSelectionCtrlFactory =
433 [this]( ACTION_TOOLBAR* aToolbar )
434 {
436 {
438 wxDefaultPosition, wxDefaultSize, 0, nullptr );
439 }
440
441 m_CurrentVariantCtrl->SetToolTip( _( "Select the current variant to display and edit." ) );
442
444
445 aToolbar->Add( m_CurrentVariantCtrl );
446 };
447
449
450 // IPC/Scripting plugin control
451 // TODO (ISM): Clean this up to make IPC actions just normal tool actions to get rid of this entire
452 // control
453 auto pluginControlFactory =
454 [this]( ACTION_TOOLBAR* aToolbar )
455 {
456#ifdef KICAD_IPC_API
457 bool haveApiPlugins = Pgm().GetCommonSettings()->m_Api.enable_server
458 && !Pgm().GetPluginManager().GetActionsForScope( PluginActionScope() ).empty();
459#else
460 bool haveApiPlugins = false;
461#endif
462
463 if( haveApiPlugins )
464 {
465 aToolbar->AddScaledSeparator( aToolbar->GetParent() );
466 AddApiPluginTools( aToolbar );
467 }
468 };
469
471}
472
473
475{
477
478 switch( aId )
479 {
481 case ID_AUX_TOOLBAR_PCB_VIA_SIZE: m_SelViaSizeBox = nullptr; break;
483 }
484}
485
486
488{
490 return;
491
492 if( !GetBoard() )
493 return;
494
495 wxArrayString variantNames = GetBoard()->GetVariantNamesForUI();
496
497 m_CurrentVariantCtrl->Set( variantNames );
498
499 int selectionIndex = 0;
500 wxString currentVariant = GetBoard()->GetCurrentVariant();
501
502 if( !currentVariant.IsEmpty() )
503 {
504 int foundIndex = m_CurrentVariantCtrl->FindString( currentVariant );
505
506 if( foundIndex != wxNOT_FOUND )
507 selectionIndex = foundIndex;
508 }
509
510 if( m_CurrentVariantCtrl->GetCount() > 0 )
511 m_CurrentVariantCtrl->SetSelection( selectionIndex );
512}
513
514
515void PCB_EDIT_FRAME::SetCurrentVariant( const wxString& aVariantName )
516{
517 GetBoard()->SetCurrentVariant( aVariantName );
518
519 if( PCB_DRAW_PANEL_GAL* canvas = dynamic_cast<PCB_DRAW_PANEL_GAL*>( GetCanvas() ) )
520 {
521 DS_PROXY_VIEW_ITEM* ds = canvas->GetDrawingSheet();
522
523 if( ds )
524 {
525 wxString currentVariant = GetBoard()->GetCurrentVariant();
526 wxString variantDesc = GetBoard()->GetVariantDescription( currentVariant );
527
528 ds->SetVariantName( currentVariant.ToStdString() );
529 ds->SetVariantDesc( variantDesc.ToStdString() );
530 }
531 }
532}
533
534
535void PCB_EDIT_FRAME::onVariantSelected( wxCommandEvent& aEvent )
536{
538 return;
539
540 int selection = m_CurrentVariantCtrl->GetSelection();
541
542 if( selection == wxNOT_FOUND || selection == 0 )
543 {
544 // "<Default>" selected - clear the current variant
545 SetCurrentVariant( wxEmptyString );
546 }
547 else
548 {
549 wxString selectedVariant = m_CurrentVariantCtrl->GetString( selection );
550 SetCurrentVariant( selectedVariant );
551 }
552
553 // Refresh the view and properties panel to show the new variant state
555
557 [&]( KIGFX::VIEW_ITEM* aItem ) -> int
558 {
559 if( EDA_TEXT* text = dynamic_cast<EDA_TEXT*>( aItem ) )
560 {
561 if( text->HasTextVars() )
562 {
563 text->ClearRenderCache();
564 text->ClearBoundingBoxCache();
566 }
567 }
568
569 if( PCB_FIELD* field = dynamic_cast<PCB_FIELD*>( aItem ) )
570 {
571 if( FOOTPRINT* fp = field->GetParentFootprint() )
572 {
573 if( !fp->GetVariants().empty() )
574 {
575 field->ClearRenderCache();
576 field->ClearBoundingBoxCache();
578 }
579 }
580 }
581
582 return 0;
583 } );
584
585 GetCanvas()->Refresh();
586
587 Update3DView( true, GetPcbNewSettings()->m_Display.m_Live3DRefresh );
589}
590
591
592static wxString ComboBoxUnits( EDA_UNITS aUnits, double aValue, bool aIncludeLabel = true )
593{
594 wxString text;
595 const wxChar* format;
596
597 switch( aUnits )
598 {
599 default:
600 wxASSERT_MSG( false, wxT( "Invalid unit" ) );
602 case EDA_UNITS::UNSCALED: format = wxT( "%.0f" ); break;
603 case EDA_UNITS::MM: format = wxT( "%.3f" ); break;
604 case EDA_UNITS::MILS: format = wxT( "%.2f" ); break;
605 case EDA_UNITS::INCH: format = wxT( "%.5f" ); break;
606 }
607
608 text.Printf( format, EDA_UNIT_UTILS::UI::ToUserUnit( pcbIUScale, aUnits, aValue ) );
609
610 if( aIncludeLabel )
612
613 return text;
614}
615
616
617void PCB_EDIT_FRAME::UpdateTrackWidthSelectBox( wxChoice* aTrackWidthSelectBox, bool aShowNetclass,
618 bool aShowEdit )
619{
620 if( aTrackWidthSelectBox == nullptr )
621 return;
622
623 EDA_UNITS primaryUnit;
624 EDA_UNITS secondaryUnit;
625
626 GetUnitPair( primaryUnit, secondaryUnit );
627
628 wxString msg;
629
630 aTrackWidthSelectBox->Clear();
631
632 if( aShowNetclass )
633 aTrackWidthSelectBox->Append( _( "Track: use netclass width" ) );
634
635 for( unsigned ii = 1; ii < GetDesignSettings().m_TrackWidthList.size(); ii++ )
636 {
637 int size = GetDesignSettings().m_TrackWidthList[ii];
638
639 msg.Printf( _( "Track: %s (%s)" ), ComboBoxUnits( primaryUnit, size ),
640 ComboBoxUnits( secondaryUnit, size ) );
641
642 aTrackWidthSelectBox->Append( msg );
643 }
644
645 if( aShowEdit )
646 {
647 aTrackWidthSelectBox->Append( wxT( "---" ) );
648 aTrackWidthSelectBox->Append( _( "Edit Pre-defined Sizes..." ) );
649 }
650
651 if( GetDesignSettings().GetTrackWidthIndex() >= (int) GetDesignSettings().m_TrackWidthList.size() )
653
654 // GetDesignSettings().GetTrackWidthIndex() can be < 0 if no board loaded
655 // So in this case select the first select box item available (use netclass)
656 aTrackWidthSelectBox->SetSelection( std::max( 0, GetDesignSettings().GetTrackWidthIndex() ) );
657}
658
659
660void PCB_EDIT_FRAME::UpdateViaSizeSelectBox( wxChoice* aViaSizeSelectBox, bool aShowNetclass,
661 bool aShowEdit )
662{
663 if( aViaSizeSelectBox == nullptr )
664 return;
665
666 aViaSizeSelectBox->Clear();
667
668 COMMON_TOOLS* cmnTool = m_toolManager->GetTool<COMMON_TOOLS>();
669 EDA_UNITS primaryUnit = GetUserUnits();
670 EDA_UNITS secondaryUnit = EDA_UNITS::MILS;
671
672 if( EDA_UNIT_UTILS::IsImperialUnit( primaryUnit ) )
673 secondaryUnit = cmnTool ? cmnTool->GetLastMetricUnits() : EDA_UNITS::MM;
674 else
675 secondaryUnit = cmnTool ? cmnTool->GetLastImperialUnits() : EDA_UNITS::MILS;
676
677 if( aShowNetclass )
678 aViaSizeSelectBox->Append( _( "Via: use netclass sizes" ) );
679
680 for( unsigned ii = 1; ii < GetDesignSettings().m_ViasDimensionsList.size(); ii++ )
681 {
683 wxString msg, priStr, secStr;
684
685 double diam = viaDimension.m_Diameter;
686 double hole = viaDimension.m_Drill;
687
688 if( hole > 0 )
689 {
690 priStr = ComboBoxUnits( primaryUnit, diam, false ) + wxT( " / " )
691 + ComboBoxUnits( primaryUnit, hole, true );
692 secStr = ComboBoxUnits( secondaryUnit, diam, false ) + wxT( " / " )
693 + ComboBoxUnits( secondaryUnit, hole, true );
694 }
695 else
696 {
697 priStr = ComboBoxUnits( primaryUnit, diam, true );
698 secStr = ComboBoxUnits( secondaryUnit, diam, true );
699 }
700
701 msg.Printf( _( "Via: %s (%s)" ), priStr, secStr );
702
703 aViaSizeSelectBox->Append( msg );
704 }
705
706 if( aShowEdit )
707 {
708 aViaSizeSelectBox->Append( wxT( "---" ) );
709 aViaSizeSelectBox->Append( _( "Edit Pre-defined Sizes..." ) );
710 }
711
712 if( GetDesignSettings().GetViaSizeIndex() >= (int) GetDesignSettings().m_ViasDimensionsList.size() )
714
715 // GetDesignSettings().GetViaSizeIndex() can be < 0 if no board loaded
716 // So in this case select the first select box item available (use netclass)
717 aViaSizeSelectBox->SetSelection( std::max( 0, GetDesignSettings().GetViaSizeIndex() ) );
718}
719
720
721void PCB_EDIT_FRAME::ReCreateLayerBox( bool aForceResizeToolbar )
722{
723 if( m_SelLayerBox == nullptr || m_tbTopAux == nullptr )
724 return;
725
726 m_SelLayerBox->SetToolTip( _( "+/- to switch" ) );
727 m_SelLayerBox->Resync();
728
729 if( aForceResizeToolbar )
731}
732
733
735{
737 wxAuiPaneInfo& layersManager = m_auimgr.GetPane( AppearancePanelName() );
738 wxAuiPaneInfo& selectionFilter = m_auimgr.GetPane( "SelectionFilter" );
739
740 // show auxiliary Vertical layers and visibility manager toolbar
741 m_ShowLayerManagerTools = layersManager.IsShown();
742
744
745 layersManager.Show( m_ShowLayerManagerTools );
746 selectionFilter.Show( m_ShowLayerManagerTools );
747
749 {
750 SetAuiPaneSize( m_auimgr, layersManager, settings->m_AuiPanels.right_panel_width, -1 );
751 }
752 else
753 {
754 settings->m_AuiPanels.right_panel_width = m_appearancePanel->GetSize().x;
755 m_auimgr.Update();
756 }
757}
758
759
761{
763 wxAuiPaneInfo& netInspectorPanel = m_auimgr.GetPane( NetInspectorPanelName() );
764
765 m_ShowNetInspector = netInspectorPanel.IsShown();
766
768
769 netInspectorPanel.Show( m_ShowNetInspector );
770
772 {
773 SetAuiPaneSize( m_auimgr, netInspectorPanel, settings->m_AuiPanels.net_inspector_width, -1 );
774 m_netInspectorPanel->OnShowPanel();
775 }
776 else
777 {
778 m_netInspectorPanel->SaveSettings();
779 settings->m_AuiPanels.net_inspector_width = m_netInspectorPanel->GetSize().x;
780 m_auimgr.Update();
781 }
782}
783
784
786{
788
789 // Ensure m_ShowSearch is up to date (the pane can be closed outside the menu)
790 m_ShowSearch = m_auimgr.GetPane( SearchPaneName() ).IsShown();
791
793
794 wxAuiPaneInfo& searchPaneInfo = m_auimgr.GetPane( SearchPaneName() );
795 searchPaneInfo.Show( m_ShowSearch );
796
797 if( m_ShowSearch )
798 {
799 searchPaneInfo.Direction( settings->m_AuiPanels.search_panel_dock_direction );
800
801 if( settings->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_TOP
802 || settings->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_BOTTOM )
803 {
804 SetAuiPaneSize( m_auimgr, searchPaneInfo,
805 -1, settings->m_AuiPanels.search_panel_height );
806 }
807 else if( settings->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_LEFT
808 || settings->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_RIGHT )
809 {
810 SetAuiPaneSize( m_auimgr, searchPaneInfo,
811 settings->m_AuiPanels.search_panel_width, -1 );
812 }
813 m_searchPane->FocusSearch();
814 m_searchPane->RefreshSearch();
815 }
816 else
817 {
818 settings->m_AuiPanels.search_panel_height = m_searchPane->GetSize().y;
819 settings->m_AuiPanels.search_panel_width = m_searchPane->GetSize().x;
820 settings->m_AuiPanels.search_panel_dock_direction = searchPaneInfo.dock_direction;
821 m_auimgr.Update();
822 GetCanvas()->SetFocus();
823 }
824}
825
826
827void PCB_EDIT_FRAME::OnUpdateSelectTrackWidth( wxUpdateUIEvent& aEvent )
828{
829 if( aEvent.GetId() == ID_AUX_TOOLBAR_PCB_TRACK_WIDTH )
830 {
832 int sel;
833
834 if( bds.UseCustomTrackViaSize() )
835 sel = wxNOT_FOUND;
836 else
837 // if GetTrackWidthIndex() < 0, display the "use netclass" option
838 sel = std::max( 0, bds.GetTrackWidthIndex() );
839
840 if( m_SelTrackWidthBox->GetSelection() != sel )
841 m_SelTrackWidthBox->SetSelection( sel );
842 }
843}
844
845
846void PCB_EDIT_FRAME::OnUpdateSelectViaSize( wxUpdateUIEvent& aEvent )
847{
848 if( aEvent.GetId() == ID_AUX_TOOLBAR_PCB_VIA_SIZE )
849 {
851 int sel = 0;
852
853 if( bds.UseCustomTrackViaSize() )
854 sel = wxNOT_FOUND;
855 else
856 // if GetViaSizeIndex() < 0, display the "use netclass" option
857 sel = std::max( 0, bds.GetViaSizeIndex() );
858
859 if( m_SelViaSizeBox->GetSelection() != sel )
860 m_SelViaSizeBox->SetSelection( sel );
861 }
862}
863
864
866{
868
869 wxCHECK( cfg, /* void */ );
870
871 wxAuiPaneInfo& db_library_pane = m_auimgr.GetPane( DesignBlocksPaneName() );
872
873 db_library_pane.Show( !db_library_pane.IsShown() );
874
875 if( db_library_pane.IsShown() )
876 {
877 if( db_library_pane.IsFloating() )
878 {
879 db_library_pane.FloatingSize( cfg->m_AuiPanels.design_blocks_panel_float_width,
881 m_auimgr.Update();
882 }
884 {
885 // SetAuiPaneSize also updates m_auimgr
887 }
888 }
889 else
890 {
891 if( db_library_pane.IsFloating() )
892 {
893 cfg->m_AuiPanels.design_blocks_panel_float_width = db_library_pane.floating_size.x;
894 cfg->m_AuiPanels.design_blocks_panel_float_height = db_library_pane.floating_size.y;
895 }
896 else
897 {
899 }
900
901 m_auimgr.Update();
902 }
903}
constexpr EDA_IU_SCALE pcbIUScale
Definition base_units.h:112
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
static TOOL_ACTION gridProperties
Definition actions.h:200
static TOOL_ACTION updatePcbFromSchematic
Definition actions.h:264
static TOOL_ACTION toggleGrid
Definition actions.h:198
static TOOL_ACTION zoomRedraw
Definition actions.h:132
static TOOL_ACTION millimetersUnits
Definition actions.h:206
static TOOL_ACTION show3DViewer
Definition actions.h:258
static TOOL_ACTION cursorSmallCrosshairs
Definition actions.h:152
static TOOL_ACTION zoomOutCenter
Definition actions.h:136
static TOOL_ACTION togglePolarCoords
Definition actions.h:209
static TOOL_ACTION selectSetLasso
Definition actions.h:221
static TOOL_ACTION selectSetRect
Set lasso selection mode.
Definition actions.h:220
static TOOL_ACTION group
Definition actions.h:239
static TOOL_ACTION pointEditorArcKeepCenter
Definition actions.h:273
static TOOL_ACTION milsUnits
Definition actions.h:205
static TOOL_ACTION ungroup
Definition actions.h:240
static TOOL_ACTION toggleBoundingBoxes
Definition actions.h:157
static TOOL_ACTION plot
Definition actions.h:65
static TOOL_ACTION pointEditorArcKeepRadius
Definition actions.h:275
static TOOL_ACTION open
Definition actions.h:57
static TOOL_ACTION pageSettings
Definition actions.h:63
static TOOL_ACTION undo
Definition actions.h:75
static TOOL_ACTION inchesUnits
Definition actions.h:204
static TOOL_ACTION highContrastMode
Definition actions.h:155
static TOOL_ACTION gridOrigin
Definition actions.h:201
static TOOL_ACTION measureTool
Definition actions.h:252
static TOOL_ACTION save
Definition actions.h:58
static TOOL_ACTION zoomFitScreen
Definition actions.h:142
static TOOL_ACTION redo
Definition actions.h:76
static TOOL_ACTION deleteTool
Definition actions.h:86
static TOOL_ACTION zoomTool
Definition actions.h:146
static TOOL_ACTION cursor45Crosshairs
Definition actions.h:154
static TOOL_ACTION showFootprintEditor
Definition actions.h:262
static TOOL_ACTION print
Definition actions.h:64
static TOOL_ACTION showProperties
Definition actions.h:266
static TOOL_ACTION doNew
Definition actions.h:54
static TOOL_ACTION zoomFitObjects
Definition actions.h:143
static TOOL_ACTION zoomInCenter
Definition actions.h:135
static TOOL_ACTION gridSetOrigin
Definition actions.h:195
static TOOL_ACTION showFootprintBrowser
Definition actions.h:261
static TOOL_ACTION toggleGridOverrides
Definition actions.h:199
static TOOL_ACTION pointEditorArcKeepEndpoint
Definition actions.h:274
static TOOL_ACTION cursorFullCrosshairs
Definition actions.h:153
static TOOL_ACTION find
Definition actions.h:117
static constexpr bool CHECK
static ACTION_TOOLBAR_CONTROL gridSelect
static ACTION_TOOLBAR_CONTROL overrideLocks
static ACTION_TOOLBAR_CONTROL layerSelector
static ACTION_TOOLBAR_CONTROL zoomSelect
static ACTION_TOOLBAR_CONTROL ipcScripting
Class to hold basic information about controls that can be added to the toolbars.
Define the structure of a toolbar with buttons that invoke ACTIONs.
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
Container for design settings for a BOARD object.
void UseCustomTrackViaSize(bool aEnabled)
Enables/disables custom track/via size settings.
void SetViaSizeIndex(int aIndex)
Set the current via size list index to aIndex.
void SetTrackWidthIndex(int aIndex)
Set the current track width list index to aIndex.
std::vector< int > m_TrackWidthList
std::vector< VIA_DIMENSION > m_ViasDimensionsList
FOOTPRINT * GetParentFootprint() const
void SetCurrentVariant(const wxString &aVariant)
Definition board.cpp:2721
wxArrayString GetVariantNamesForUI() const
Return the variant names for UI display.
Definition board.cpp:2867
wxString GetVariantDescription(const wxString &aVariantName) const
Definition board.cpp:2831
wxString GetCurrentVariant() const
Definition board.h:398
COLOR4D GetColor(int aLayer) const
APPEARANCE m_Appearance
Handles action that are shared between different applications.
EDA_UNITS GetLastImperialUnits()
EDA_UNITS GetLastMetricUnits()
void SetVariantName(const std::string &aVariant)
Set the current variant name and description to be shown on the drawing sheet.
void SetVariantDesc(const std::string &aVariantDesc)
virtual void UpdateToolbarControlSizes()
Update the sizes of any controls in the toolbars of the frame.
void RegisterCustomToolbarControlFactory(const ACTION_TOOLBAR_CONTROL &aControlDesc, const ACTION_TOOLBAR_CONTROL_FACTORY &aControlFactory)
Register a creation factory for toolbar controls that are present in this frame.
wxAuiManager m_auimgr
ACTION_TOOLBAR * m_tbTopAux
static const wxString AppearancePanelName()
NET_INSPECTOR_PANEL * m_netInspectorPanel
virtual void AddApiPluginTools(ACTION_TOOLBAR *aToolbar)
Append actions from API plugins to the given toolbar.
static const wxString NetInspectorPanelName()
void GetUnitPair(EDA_UNITS &aPrimaryUnit, EDA_UNITS &aSecondaryUnits) override
Get the pair or units in current use.
SEARCH_PANE * m_searchPane
static const wxString DesignBlocksPaneName()
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
void SetFocus() override
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
Definition eda_text.h:91
static const TOOL_EVENT SelectedItemsModified
Selected items were moved, this can be very high frequency on the canvas, use with care.
Definition actions.h:352
A color representation with 4 components: red, green, blue, alpha.
Definition color4d.h:105
An abstract base class for deriving all objects that can be added to a VIEW.
Definition view_item.h:86
void UpdateAllItemsConditionally(int aUpdateFlags, std::function< bool(VIEW_ITEM *)> aCondition)
Update items in the view according to the given flags and condition.
Definition view.cpp:1682
static wxBitmapBundle CreateLayerPairIcon(const COLOR4D &aTopColor, const COLOR4D &aBottomColor, int aDefSize=24)
Create a layer pair "side-by-side swatch" icon.
AUI_PANELS m_AuiPanels
static TOOL_ACTION lineModeFree
Unconstrained angle mode (icon lines_any)
static TOOL_ACTION drawRuleArea
static TOOL_ACTION drawBezier
static TOOL_ACTION placeText
static TOOL_ACTION drawOrthogonalDimension
static TOOL_ACTION drawRectangle
static TOOL_ACTION padDisplayMode
static TOOL_ACTION placeReferenceImage
static TOOL_ACTION routerSettingsDialog
Activation of the Push and Shove settings dialogs.
static TOOL_ACTION showRatsnest
static TOOL_ACTION zoneFillAll
static TOOL_ACTION showLayersManager
static TOOL_ACTION toggleNetHighlight
static TOOL_ACTION drawCircle
static TOOL_ACTION mirrorH
Mirroring of selected items.
static TOOL_ACTION routeDiffPair
Activation of the Push and Shove router (differential pair mode)
static TOOL_ACTION tuneDiffPair
static TOOL_ACTION autoTrackWidth
static TOOL_ACTION drawTable
static TOOL_ACTION drawTextBox
static TOOL_ACTION routerHighlightMode
Actions to enable switching modes via hotkey assignments.
static TOOL_ACTION routerWalkaroundMode
static TOOL_ACTION routerShoveMode
static TOOL_ACTION drawPolygon
static TOOL_ACTION zoneDisplayFilled
static TOOL_ACTION drawRadialDimension
static TOOL_ACTION tuneSingleTrack
static TOOL_ACTION viaDisplayMode
static TOOL_ACTION drawLeader
static TOOL_ACTION lineMode45
45-degree-or-orthogonal mode (icon hv45mode)
static TOOL_ACTION drillOrigin
static TOOL_ACTION tuneSkew
static TOOL_ACTION trackDisplayMode
static TOOL_ACTION selectLayerPair
static TOOL_ACTION zoneDisplayTriangulated
static TOOL_ACTION zoneDisplayFractured
static TOOL_ACTION drawVia
static TOOL_ACTION drawArc
static TOOL_ACTION runDRC
static TOOL_ACTION importNetlist
static TOOL_ACTION boardSetup
static TOOL_ACTION showEeschema
static TOOL_ACTION drawCenterDimension
static TOOL_ACTION zoneUnfillAll
static TOOL_ACTION lineMode90
90-degree-only mode (icon lines90)
static TOOL_ACTION zoneDisplayOutline
static TOOL_ACTION ratsnestLineMode
static TOOL_ACTION placeBarcode
static TOOL_ACTION placePoint
static TOOL_ACTION mirrorV
static TOOL_ACTION unlock
static TOOL_ACTION placeFootprint
static TOOL_ACTION routeSingleTrack
Activation of the Push and Shove router.
static TOOL_ACTION drawLine
static TOOL_ACTION localRatsnestTool
static TOOL_ACTION rotateCw
Rotation of selected objects.
static TOOL_ACTION rotateCcw
static TOOL_ACTION drawAlignedDimension
static TOOL_ACTION drawZone
static TOOL_ACTION lock
static ACTION_TOOLBAR_CONTROL trackWidth
static ACTION_TOOLBAR_CONTROL viaDiameter
static ACTION_TOOLBAR_CONTROL currentVariant
COLOR_SETTINGS * GetColorSettings(bool aForceRefresh=false) const override
Helper to retrieve the current color settings.
PCB_LAYER_BOX_SELECTOR * m_SelLayerBox
void configureToolbars() override
void ClearToolbarControl(int aId) override
APPEARANCE_CONTROLS * m_appearancePanel
PCBNEW_SETTINGS * GetPcbNewSettings() const
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
PCB_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
BOARD * GetBoard() const
virtual BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Return the BOARD_DESIGN_SETTINGS for the open project.
virtual void Update3DView(bool aMarkDirty, bool aRefresh, const wxString *aTitle=nullptr)
Update the 3D view, if the viewer is opened by this frame.
virtual KIGFX::PCB_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
void OnUpdateSelectTrackWidth(wxUpdateUIEvent &aEvent)
void UpdateVariantSelectionCtrl()
Update the variant selection dropdown with the current board's variant names.
void UpdateTrackWidthSelectBox(wxChoice *aTrackWidthSelectBox, bool aShowNetclass, bool aShowEdit)
void UpdateViaSizeSelectBox(wxChoice *aViaSizeSelectBox, bool aShowNetclass, bool aShowEdit)
void SetCurrentVariant(const wxString &aVariantName)
Set the current variant on the board and update the drawing sheet's cached variant name and descripti...
LAYER_TOOLBAR_ICON_VALUES m_prevIconVal
void ClearToolbarControl(int aId) override
void ReCreateLayerBox(bool aForceResizeToolbar=true)
Recreate the layer box by clearing the old list and building a new one from the new layer names and c...
void PrepareLayerIndicator(bool aForceRebuild=false)
wxChoice * m_CurrentVariantCtrl
void UpdateProperties() override
PLUGIN_ACTION_SCOPE PluginActionScope() const override
void ToggleLibraryTree() override
void OnUpdateSelectViaSize(wxUpdateUIEvent &aEvent)
wxChoice * m_SelViaSizeBox
void onVariantSelected(wxCommandEvent &aEvent)
Event handler for variant selection changes in the toolbar.
void configureToolbars() override
PCB_DESIGN_BLOCK_PANE * m_designBlocksPane
static const wxString SearchPaneName()
wxChoice * m_SelTrackWidthBox
std::optional< TOOLBAR_CONFIGURATION > DefaultToolbarConfig(TOOLBAR_LOC aToolbar) override
Get the default tools to show on the specified canvas toolbar.
The selection tool: currently supports:
virtual COMMON_SETTINGS * GetCommonSettings() const
Definition pgm_base.cpp:541
TOOL_MANAGER * m_toolManager
Master controller class:
EDA_UNITS GetUserUnits() const
#define _(s)
EDA_UNITS
Definition eda_units.h:48
@ FRAME_PCB_EDITOR
Definition frame_type.h:42
This file contains miscellaneous commonly used macros and functions.
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
Definition macros.h:83
KICOMMON_API double ToUserUnit(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnit, double aValue)
Convert aValue in internal units to the appropriate user units defined by aUnit.
KICOMMON_API wxString GetText(EDA_UNITS aUnits, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
Get the units string for a given units type.
KICOMMON_API bool IsImperialUnit(EDA_UNITS aUnit)
Definition eda_units.cpp:47
@ REPAINT
Item needs to be redrawn.
Definition view_item.h:58
@ GEOMETRY
Position or shape has changed.
Definition view_item.h:55
@ ID_AUX_TOOLBAR_PCB_VARIANT_SELECT
Definition pcbnew_id.h:19
@ ID_AUX_TOOLBAR_PCB_VIA_SIZE
Definition pcbnew_id.h:17
@ ID_AUX_TOOLBAR_PCB_TRACK_WIDTH
Definition pcbnew_id.h:18
PGM_BASE & Pgm()
The global program "get" accessor.
see class PGM_BASE
Container to handle a stock of specific vias each with unique diameter and drill sizes in the BOARD c...
@ RIGHT
Toolbar on the right side of the canvas.
@ LEFT
Toolbar on the left side of the canvas.
@ TOP_AUX
Toolbar on the top of the canvas.
@ TOP_MAIN
Toolbar on the top of the canvas.
static wxBitmapBundle LayerPairBitmap
static wxString ComboBoxUnits(EDA_UNITS aUnits, double aValue, bool aIncludeLabel=true)
void SetAuiPaneSize(wxAuiManager &aManager, wxAuiPaneInfo &aPane, int aWidth, int aHeight)
Sets the size of an AUI pane, working around http://trac.wxwidgets.org/ticket/13180.