KiCad PCB EDA Suite
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, [email protected]
5 * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <[email protected]>
6 * Copyright (C) 2012 Wayne Stambaugh <[email protected]>
7 * Copyright (C) 1992-2022 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
29#include <advanced_config.h>
30#include <bitmaps.h>
31#include <board.h>
33#include <kiface_base.h>
34#include <macros.h>
35#include <pcb_edit_frame.h>
37#include <pcbnew_id.h>
38#include <pcbnew_settings.h>
39#include <pgm_base.h>
41#include <router/router_tool.h>
43#include <tool/action_toolbar.h>
44#include <tool/actions.h>
45#include <tool/common_tools.h>
46#include <tool/tool_manager.h>
47#include <tools/pcb_actions.h>
53#include <wx/wupdlock.h>
54#include <wx/dcmemory.h>
55#include <wx/choice.h>
56
57#include "../scripting/python_scripting.h"
58
59
60/* Data to build the layer pair indicator button */
61static std::unique_ptr<wxBitmap> LayerPairBitmap;
62
63#define BM_LAYERICON_SIZE 24
65{
66 // 0 = draw pixel with white
67 // 1 = draw pixel with black
68 // 2 = draw pixel with top layer from router pair
69 // 3 = draw pixel with bottom layer from router pair
70 { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3 },
71 { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3 },
72 { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3 },
73 { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3 },
74 { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3 },
75 { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3 },
76 { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3, 3 },
77 { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3, 3 },
78 { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
79 { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
80 { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
81 { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
82 { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
83 { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
84 { 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
85 { 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
86 { 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
87 { 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
88 { 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
89 { 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
90 { 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
91 { 2, 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
92 { 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
93 { 2, 2, 2, 2, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
94};
95
96static COLOR4D ICON_WHITE { 0.86, 0.86, 0.86, 1.0 };
97static COLOR4D ICON_BLACK { 0.28, 0.28, 0.28, 1.0 };
98
99
101{
102 int ii, jj;
103 COLOR4D top_color, bottom_color, background_color;
104 bool change = aForceRebuild;
105
106 int requested_scale = Pgm().GetCommonSettings()->m_Appearance.icon_scale;
107
108 if( m_prevIconVal.previous_requested_scale != requested_scale )
109 {
110 m_prevIconVal.previous_requested_scale = requested_scale;
111 change = true;
112 }
113
114 top_color = GetColorSettings()->GetColor( GetScreen()->m_Route_Layer_TOP );
115
117 {
119 change = true;
120 }
121
122 bottom_color = GetColorSettings()->GetColor( GetScreen()->m_Route_Layer_BOTTOM );
123
125 {
127 change = true;
128 }
129
130 background_color = GetColorSettings()->GetColor( LAYER_PCB_BACKGROUND );
131
132 if( m_prevIconVal.previous_background_color != background_color )
133 {
134 m_prevIconVal.previous_background_color = background_color;
135 change = true;
136 }
137
138 if( change || !LayerPairBitmap )
139 {
140 LayerPairBitmap = std::make_unique<wxBitmap>( 24, 24 );
141
142 // Draw the icon, with colors according to the router's layer pair
143 wxMemoryDC iconDC;
144 iconDC.SelectObject( *LayerPairBitmap );
145 wxBrush brush;
146 wxPen pen;
147 int buttonColor = -1;
148
149 brush.SetStyle( wxBRUSHSTYLE_SOLID );
150 brush.SetColour( background_color.WithAlpha(1.0).ToColour() );
151 iconDC.SetBrush( brush );
152 iconDC.DrawRectangle( 0, 0, BM_LAYERICON_SIZE, BM_LAYERICON_SIZE );
153
154 for( ii = 0; ii < BM_LAYERICON_SIZE; ii++ )
155 {
156 for( jj = 0; jj < BM_LAYERICON_SIZE; jj++ )
157 {
158 if( s_BitmapLayerIcon[ii][jj] != buttonColor )
159 {
160 switch( s_BitmapLayerIcon[ii][jj] )
161 {
162 default:
163 case 0: pen.SetColour( ICON_WHITE.ToColour() ); break;
164 case 1: pen.SetColour( ICON_BLACK.ToColour() ); break;
165 case 2: pen.SetColour( top_color.ToColour() ); break;
166 case 3: pen.SetColour( bottom_color.ToColour() ); break;
167 }
168
169 buttonColor = s_BitmapLayerIcon[ii][jj];
170 iconDC.SetPen( pen );
171 }
172
173 iconDC.DrawPoint( jj, ii );
174 }
175 }
176
177 // Deselect the bitmap from the DC in order to delete the MemoryDC safely without
178 // deleting the bitmap
179 iconDC.SelectObject( wxNullBitmap );
180
181 // Scale the bitmap
182 const int scale = ( requested_scale <= 0 ) ? KiIconScale( this ) : requested_scale;
183 wxImage image = LayerPairBitmap->ConvertToImage();
184
185 // "NEAREST" causes less mixing of colors
186 image.Rescale( scale * image.GetWidth() / 4, scale * image.GetHeight() / 4,
187 wxIMAGE_QUALITY_NEAREST );
188
189 LayerPairBitmap = std::make_unique<wxBitmap>( image );
190
191 if( m_mainToolBar )
192 {
194 m_mainToolBar->Refresh();
195 }
196 }
197}
198
199
201{
202 // Note:
203 // To rebuild the aui toolbar, the more easy way is to clear ( calling m_mainToolBar.Clear() )
204 // all wxAuiToolBarItems.
205 // However the wxAuiToolBarItems are not the owners of controls managed by
206 // them and therefore do not delete them
207 // So we do not recreate them after clearing the tools.
208
209 wxWindowUpdateLocker dummy( this );
210
211 if( m_mainToolBar )
212 {
214 }
215 else
216 {
217 m_mainToolBar = new ACTION_TOOLBAR( this, ID_H_TOOLBAR, wxDefaultPosition, wxDefaultSize,
218 KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT |
219 wxAUI_TB_HORIZONTAL );
221
222 // The layer indicator is special, so we register a callback directly that will
223 // regenerate the bitmap instead of using the conditions system.
224 auto layerIndicatorUpdate =
225 [this] ( wxUpdateUIEvent& )
226 {
228 };
229
230 Bind( wxEVT_UPDATE_UI, layerIndicatorUpdate, PCB_ACTIONS::selectLayerPair.GetUIId() );
231 }
232
233 // Set up toolbar
234 if( Kiface().IsSingle() )
235 {
238 }
239
241
244
249
253
256
264
274
278
280
281 if( !Kiface().IsSingle() )
283 else
285
287
289
290 if( m_SelLayerBox == nullptr )
291 {
294 }
295
296 ReCreateLayerBox( false );
297 m_mainToolBar->AddControl( m_SelLayerBox );
298
300 PrepareLayerIndicator( true ); // Force rebuild of the bitmap with the active layer colors
301
304
305 // Access to the scripting console
306 if( SCRIPTING::IsWxAvailable() )
307 {
311 }
312
313 // Go through and ensure the comboboxes are the correct size, since the strings in the
314 // box could have changed widths.
316
317 // after adding the buttons to the toolbar, must call Realize() to reflect the changes
319}
320
321
323{
324 // Note:
325 // To rebuild the aui toolbar, the more easy way is to clear ( calling m_mainToolBar.Clear() )
326 // all wxAuiToolBarItems.
327 // However the wxAuiToolBarItems are not the owners of controls managed by
328 // them and therefore do not delete them
329 // So we do not recreate them after clearing the tools.
330
331 wxWindowUpdateLocker dummy( this );
332
333 if( m_optionsToolBar )
334 {
336 }
337 else
338 {
340 wxDefaultPosition, wxDefaultSize,
341 KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
343 }
344
346
352
355
359
363
367
368 if( ADVANCED_CFG::GetCfg().m_ExtraZoneDisplayModes )
369 {
372 }
373
378
379 if( ADVANCED_CFG::GetCfg().m_DrawBoundingBoxes )
381
382 // Tools to show/hide toolbars:
386
388 std::unique_ptr<ACTION_MENU> gridMenu = std::make_unique<ACTION_MENU>( false, selTool );
389 gridMenu->Add( ACTIONS::gridProperties );
391
393}
394
395
397{
398 wxWindowUpdateLocker dummy( this );
399
400 if( m_drawToolBar )
401 {
403 }
404 else
405 {
406 m_drawToolBar = new ACTION_TOOLBAR( this, ID_V_TOOLBAR, wxDefaultPosition, wxDefaultSize,
407 KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
409 }
410
411 // Groups contained on this toolbar
412 static ACTION_GROUP* dimensionGroup = nullptr;
413 static ACTION_GROUP* originGroup = nullptr;
414 static ACTION_GROUP* routingGroup = nullptr;
415 static ACTION_GROUP* tuneGroup = nullptr;
416
417 if( !dimensionGroup )
418 {
419 dimensionGroup = new ACTION_GROUP( "group.pcbDimensions",
425 }
426
427 if( !originGroup )
428 {
429 originGroup = new ACTION_GROUP( "group.pcbOrigins",
432 }
433
434 if( !routingGroup )
435 {
436 routingGroup = new ACTION_GROUP( "group.pcbRouting",
439 }
440
441 if( !tuneGroup )
442 {
443 tuneGroup = new ACTION_GROUP( "group.pcbTune",
447 }
448
451
459
471
475
477
478 auto makeArcMenu = [&]()
479 {
480 std::unique_ptr<ACTION_MENU> arcMenu = std::make_unique<ACTION_MENU>( false, selTool );
481
484
485 return arcMenu;
486 };
487
489
490 auto makeRouteMenu = [&]()
491 {
492 std::unique_ptr<ACTION_MENU> routeMenu = std::make_unique<ACTION_MENU>( false, selTool );
493
497
498 routeMenu->AppendSeparator();
499 routeMenu->Add( PCB_ACTIONS::routerSettingsDialog );
500
501 return routeMenu;
502 };
503
506
507 auto makeTuneMenu =
508 [&]()
509 {
510 std::unique_ptr<ACTION_MENU> tuneMenu = std::make_unique<ACTION_MENU>( false, selTool );
512 return tuneMenu;
513 };
514
518
519 std::unique_ptr<ACTION_MENU> zoneMenu = std::make_unique<ACTION_MENU>( false, selTool );
520 zoneMenu->Add( PCB_ACTIONS::zoneFillAll );
521 zoneMenu->Add( PCB_ACTIONS::zoneUnfillAll );
522 m_drawToolBar->AddToolContextMenu( PCB_ACTIONS::drawZone, std::move( zoneMenu ) );
523
524 std::unique_ptr<ACTION_MENU> lineMenu = std::make_unique<ACTION_MENU>( false, selTool );
525 m_drawToolBar->AddToolContextMenu( PCB_ACTIONS::drawLine, std::move( lineMenu ) );
526
528}
529
530
532{
533 wxWindowUpdateLocker dummy( this );
534
536 {
538 }
539 else
540 {
541 m_auxiliaryToolBar = new ACTION_TOOLBAR( this, ID_AUX_TOOLBAR, wxDefaultPosition,
542 wxDefaultSize,
543 KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT );
545 }
546
547 /* Set up toolbar items */
548
549 // Creates box to display and choose tracks widths:
550 if( m_SelTrackWidthBox == nullptr )
552 wxDefaultPosition, wxDefaultSize, 0, nullptr );
553
556 m_SelTrackWidthBox->SetToolTip( _( "Select the default width for new tracks. Note that this "
557 "width can be overridden by the board minimum width, or by "
558 "the width of an existing track if the 'Use Existing Track "
559 "Width' feature is enabled." ) );
560
563 _( "When routing from an existing track use its width instead "
564 "of the current width setting" ),
565 wxITEM_CHECK );
566
568
569 // Creates box to display and choose vias diameters:
570
571 if( m_SelViaSizeBox == nullptr )
573 wxDefaultPosition, wxDefaultSize, 0, nullptr );
574
576 m_auxiliaryToolBar->AddControl( m_SelViaSizeBox );
577
578 // Add the box to display and select the current grid size:
580
581 if( m_gridSelectBox == nullptr )
583 wxDefaultPosition, wxDefaultSize, 0, nullptr );
584
586
587 m_auxiliaryToolBar->AddControl( m_gridSelectBox );
588
589 // Add the box to display and select the current Zoom
591
592 if( m_zoomSelectBox == nullptr )
594 wxDefaultPosition, wxDefaultSize, 0, nullptr );
595
597 m_auxiliaryToolBar->AddControl( m_zoomSelectBox );
598
599 // Go through and ensure the comboboxes are the correct size, since the strings in the
600 // box could have changed widths.
605
606 // after adding the buttons to the toolbar, must call Realize()
608}
609
610
612{
613 if( m_mainToolBar )
614 {
615 // Update the item widths
617 }
618
620 {
621 // Update the item widths
626 }
627}
628
629
630static wxString ComboBoxUnits( EDA_UNITS aUnits, double aValue, bool aIncludeLabel = true )
631{
632 wxString text;
633 const wxChar* format;
634
635 switch( aUnits )
636 {
637 default:
638 wxASSERT_MSG( false, wxT( "Invalid unit" ) );
640 case EDA_UNITS::UNSCALED: format = wxT( "%.0f" ); break;
641 case EDA_UNITS::MILLIMETRES: format = wxT( "%.3f" ); break;
642 case EDA_UNITS::MILS: format = wxT( "%.2f" ); break;
643 case EDA_UNITS::INCHES: format = wxT( "%.5f" ); break;
644 }
645
646 text.Printf( format, EDA_UNIT_UTILS::UI::ToUserUnit( pcbIUScale, aUnits, aValue ) );
647
648 if( aIncludeLabel )
650
651 return text;
652}
653
654
655void PCB_EDIT_FRAME::UpdateTrackWidthSelectBox( wxChoice* aTrackWidthSelectBox, bool aEdit )
656{
657 if( aTrackWidthSelectBox == nullptr )
658 return;
659
660 EDA_UNITS primaryUnit;
661 EDA_UNITS secondaryUnit;
662
663 GetUnitPair( primaryUnit, secondaryUnit );
664
665 wxString msg;
666
667 aTrackWidthSelectBox->Clear();
668
669 aTrackWidthSelectBox->Append( _( "Track: use netclass width" ) );
670
671 for( unsigned ii = 1; ii < GetDesignSettings().m_TrackWidthList.size(); ii++ )
672 {
673 int size = GetDesignSettings().m_TrackWidthList[ii];
674
675 msg.Printf( _( "Track: %s (%s)" ), ComboBoxUnits( primaryUnit, size ),
676 ComboBoxUnits( secondaryUnit, size ) );
677
678 aTrackWidthSelectBox->Append( msg );
679 }
680
681 if( aEdit )
682 {
683 aTrackWidthSelectBox->Append( wxT( "---" ) );
684 aTrackWidthSelectBox->Append( _( "Edit Pre-defined Sizes..." ) );
685 }
686
687 if( GetDesignSettings().GetTrackWidthIndex() >= GetDesignSettings().m_TrackWidthList.size() )
689
690 aTrackWidthSelectBox->SetSelection( GetDesignSettings().GetTrackWidthIndex() );
691}
692
693
694void PCB_EDIT_FRAME::UpdateViaSizeSelectBox( wxChoice* aViaSizeSelectBox, bool aEdit )
695{
696 if( aViaSizeSelectBox == nullptr )
697 return;
698
699 aViaSizeSelectBox->Clear();
700
702
703 EDA_UNITS primaryUnit = GetUserUnits();
704 EDA_UNITS secondaryUnit = EDA_UNITS::MILS;
705
706 if( EDA_UNIT_UTILS::IsImperialUnit( primaryUnit ) )
707 {
708 if( cmnTool )
709 secondaryUnit = cmnTool->GetLastMetricUnits();
710 else
711 secondaryUnit = EDA_UNITS::MILLIMETRES;
712 }
713 else
714 {
715 if( cmnTool )
716 secondaryUnit = cmnTool->GetLastImperialUnits();
717 else
718 secondaryUnit = EDA_UNITS::MILS;
719 }
720
721 aViaSizeSelectBox->Append( _( "Via: use netclass sizes" ) );
722
723 for( unsigned ii = 1; ii < GetDesignSettings().m_ViasDimensionsList.size(); ii++ )
724 {
726 wxString msg, priStr, secStr;
727
728 double diam = viaDimension.m_Diameter;
729 double hole = viaDimension.m_Drill;
730
731 if( hole > 0 )
732 {
733 priStr = ComboBoxUnits( primaryUnit, diam, false ) + wxT( " / " )
734 + ComboBoxUnits( primaryUnit, hole, true );
735 secStr = ComboBoxUnits( secondaryUnit, diam, false ) + wxT( " / " )
736 + ComboBoxUnits( secondaryUnit, hole, true );
737 }
738 else
739 {
740 priStr = ComboBoxUnits( primaryUnit, diam, true );
741 secStr = ComboBoxUnits( secondaryUnit, diam, true );
742 }
743
744 msg.Printf( _( "Via: %s (%s)" ), priStr, secStr );
745
746 aViaSizeSelectBox->Append( msg );
747 }
748
749 if( aEdit )
750 {
751 aViaSizeSelectBox->Append( wxT( "---" ) );
752 aViaSizeSelectBox->Append( _( "Edit Pre-defined Sizes..." ) );
753 }
754
755 if( GetDesignSettings().GetViaSizeIndex() >= GetDesignSettings().m_ViasDimensionsList.size() )
757
758 aViaSizeSelectBox->SetSelection( GetDesignSettings().GetViaSizeIndex() );
759}
760
761
762void PCB_EDIT_FRAME::ReCreateLayerBox( bool aForceResizeToolbar )
763{
764 if( m_SelLayerBox == nullptr || m_mainToolBar == nullptr )
765 return;
766
767 m_SelLayerBox->SetToolTip( _( "+/- to switch" ) );
769
770 if( aForceResizeToolbar )
772}
773
774
776{
778 wxAuiPaneInfo& layersManager = m_auimgr.GetPane( "LayersManager" );
779 wxAuiPaneInfo& selectionFilter = m_auimgr.GetPane( "SelectionFilter" );
780
781 // show auxiliary Vertical layers and visibility manager toolbar
783
784 layersManager.Show( m_show_layer_manager_tools );
785 selectionFilter.Show( m_show_layer_manager_tools );
786
788 {
789 SetAuiPaneSize( m_auimgr, layersManager, settings->m_AuiPanels.right_panel_width, -1 );
790 }
791 else
792 {
793 settings->m_AuiPanels.right_panel_width = m_appearancePanel->GetSize().x;
794 m_auimgr.Update();
795 }
796}
797
798
800{
801 if( !m_propertiesPanel )
802 return;
803
805
807
808 wxAuiPaneInfo& propertiesPaneInfo = m_auimgr.GetPane( "PropertiesManager" );
809 propertiesPaneInfo.Show( m_show_properties );
810
812 {
813 SetAuiPaneSize( m_auimgr, propertiesPaneInfo,
814 settings->m_AuiPanels.properties_panel_width, -1 );
815 }
816 else
817 {
819 m_auimgr.Update();
820 }
821}
822
823
825{
827
828 // Ensure m_show_search is up to date (the pane can be closed outside the menu)
829 m_show_search = m_auimgr.GetPane( SearchPaneName() ).IsShown();
830
832
833 wxAuiPaneInfo& searchPaneInfo = m_auimgr.GetPane( SearchPaneName() );
834 searchPaneInfo.Show( m_show_search );
835
836 if( m_show_search )
837 {
838 SetAuiPaneSize( m_auimgr, searchPaneInfo, -1, settings->m_AuiPanels.search_panel_height );
840 }
841 else
842 {
843 settings->m_AuiPanels.search_panel_height = m_searchPane->GetSize().y;
844 m_auimgr.Update();
845 }
846}
847
848
849void PCB_EDIT_FRAME::OnUpdateSelectTrackWidth( wxUpdateUIEvent& aEvent )
850{
851 if( aEvent.GetId() == ID_AUX_TOOLBAR_PCB_TRACK_WIDTH )
852 {
854 int sel;
855
856 if( bds.UseCustomTrackViaSize() )
857 sel = wxNOT_FOUND;
858 else
859 sel = bds.GetTrackWidthIndex();
860
861 if( m_SelTrackWidthBox->GetSelection() != sel )
862 m_SelTrackWidthBox->SetSelection( sel );
863 }
864}
865
866
867void PCB_EDIT_FRAME::OnUpdateSelectViaSize( wxUpdateUIEvent& aEvent )
868{
869 if( aEvent.GetId() == ID_AUX_TOOLBAR_PCB_VIA_SIZE )
870 {
872 int sel = 0;
873
874 if( bds.UseCustomTrackViaSize() )
875 sel = wxNOT_FOUND;
876 else
877 sel = bds.GetViaSizeIndex();
878
879 if( m_SelViaSizeBox->GetSelection() != sel )
880 m_SelViaSizeBox->SetSelection( sel );
881 }
882}
883
884
885void PCB_EDIT_FRAME::OnUpdateSelectAutoWidth( wxUpdateUIEvent& aEvent )
886{
888
889 aEvent.Check( bds.m_UseConnectedTrackWidth );
890}
891
892
893void PCB_EDIT_FRAME::OnUpdateLayerSelectBox( wxUpdateUIEvent& aEvent )
894{
897}
constexpr EDA_IU_SCALE pcbIUScale
Definition: base_units.h:109
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
int KiIconScale(wxWindow *aWindow)
Return the automatic scale factor that would be used for a given window by KiScaledBitmap and KiScale...
Definition: bitmap.cpp:122
wxBitmap KiScaledBitmap(BITMAPS aBitmap, wxWindow *aWindow, int aHeight, bool aQuantized)
Construct a wxBitmap from a memory record, scaling it if device DPI demands it.
Definition: bitmap.cpp:156
@ auto_track_width
static TOOL_ACTION gridProperties
Definition: actions.h:144
static TOOL_ACTION updatePcbFromSchematic
Definition: actions.h:167
static TOOL_ACTION toggleGrid
Definition: actions.h:143
static TOOL_ACTION zoomRedraw
Definition: actions.h:92
static TOOL_ACTION millimetersUnits
Definition: actions.h:149
static TOOL_ACTION zoomOutCenter
Definition: actions.h:96
static TOOL_ACTION togglePolarCoords
Definition: actions.h:152
static TOOL_ACTION milsUnits
Definition: actions.h:148
static TOOL_ACTION toggleBoundingBoxes
Definition: actions.h:107
static TOOL_ACTION plot
Definition: actions.h:58
static TOOL_ACTION open
Definition: actions.h:50
static TOOL_ACTION pageSettings
Definition: actions.h:56
static TOOL_ACTION undo
Definition: actions.h:65
static TOOL_ACTION inchesUnits
Definition: actions.h:147
static TOOL_ACTION highContrastMode
Definition: actions.h:105
static TOOL_ACTION toggleCursorStyle
Definition: actions.h:104
static TOOL_ACTION measureTool
Definition: actions.h:157
static TOOL_ACTION selectionTool
Definition: actions.h:156
static TOOL_ACTION save
Definition: actions.h:51
static TOOL_ACTION zoomFitScreen
Definition: actions.h:98
static TOOL_ACTION redo
Definition: actions.h:66
static TOOL_ACTION deleteTool
Definition: actions.h:74
static TOOL_ACTION zoomTool
Definition: actions.h:101
static TOOL_ACTION showFootprintEditor
Definition: actions.h:166
static TOOL_ACTION print
Definition: actions.h:57
static TOOL_ACTION doNew
Definition: actions.h:47
static TOOL_ACTION zoomFitObjects
Definition: actions.h:99
static TOOL_ACTION zoomInCenter
Definition: actions.h:95
static TOOL_ACTION gridSetOrigin
Definition: actions.h:140
static TOOL_ACTION showFootprintBrowser
Definition: actions.h:165
static TOOL_ACTION find
Definition: actions.h:78
A group of actions that will be displayed together on a toolbar palette.
static constexpr bool CHECK
Definition: action_menu.h:189
Define the structure of a toolbar with buttons that invoke ACTIONs.
static constexpr bool TOGGLE
static constexpr bool CANCEL
void SetAuiManager(wxAuiManager *aManager)
Set the AUI manager that this toolbar belongs to.
void UpdateControlWidth(int aID)
Update the toolbar item width of a control using its best size.
void AddToolContextMenu(const TOOL_ACTION &aAction, std::unique_ptr< ACTION_MENU > aMenu)
Add a context menu to a specific tool item on the toolbar.
void AddScaledSeparator(wxWindow *aWindow)
Add a separator that introduces space on either side to not squash the tools when scaled.
bool KiRealize()
Use this over Realize() to avoid a rendering glitch with fixed orientation toolbars.
void ClearToolbar()
Clear the toolbar and remove all associated menus.
void SetToolBitmap(const TOOL_ACTION &aAction, const wxBitmap &aBitmap)
Updates the bitmap of a particular tool.
void AddGroup(ACTION_GROUP *aGroup, bool aIsToggleEntry=false)
Add a set of actions to a toolbar as a group.
void Add(const TOOL_ACTION &aAction, bool aIsToggleEntry=false, bool aIsCancellable=false)
Add a TOOL_ACTION-based button to the toolbar.
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 SetTrackWidthIndex(unsigned aIndex)
Set the current track width list index to aIndex.
void SetViaSizeIndex(unsigned aIndex)
Set the current via size list index to aIndex.
unsigned GetTrackWidthIndex() const
unsigned GetViaSizeIndex() const
std::vector< int > m_TrackWidthList
std::vector< VIA_DIMENSION > m_ViasDimensionsList
COLOR4D GetColor(int aLayer) const
Handles action that are shared between different applications.
Definition: common_tools.h:38
EDA_UNITS GetLastImperialUnits()
Definition: common_tools.h:77
EDA_UNITS GetLastMetricUnits()
Definition: common_tools.h:76
static constexpr int KICAD_AUI_TB_STYLE
< Default style flags used for wxAUI toolbars.
wxAuiManager m_auimgr
wxChoice * m_gridSelectBox
ACTION_TOOLBAR * m_optionsToolBar
void UpdateGridSelectBox()
Rebuild the grid combobox to respond to any changes in the GUI (units, user grid changes,...
void UpdateZoomSelectBox()
Rebuild the grid combobox to respond to any changes in the GUI (units, user grid changes,...
void GetUnitPair(EDA_UNITS &aPrimaryUnit, EDA_UNITS &aSecondaryUnits)
Get the pair or units in current use.
ACTION_TOOLBAR * m_mainToolBar
ACTION_TOOLBAR * m_drawToolBar
SEARCH_PANE * m_searchPane
The current canvas type.
wxChoice * m_zoomSelectBox
ACTION_TOOLBAR * m_auxiliaryToolBar
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:104
COLOR4D WithAlpha(double aAlpha) const
Return a color with the same color, but the given alpha.
Definition: color4d.h:327
int SetLayerSelection(int layer)
AUI_PANELS m_AuiPanels
static TOOL_ACTION toggleHV45Mode
Definition: pcb_actions.h:466
static TOOL_ACTION drawRuleArea
Definition: pcb_actions.h:185
static TOOL_ACTION placeText
Definition: pcb_actions.h:176
static TOOL_ACTION pointEditorArcKeepCenter
Definition: pcb_actions.h:248
static TOOL_ACTION drawOrthogonalDimension
Definition: pcb_actions.h:181
static TOOL_ACTION drawRectangle
Definition: pcb_actions.h:172
static TOOL_ACTION padDisplayMode
Definition: pcb_actions.h:280
static TOOL_ACTION routerSettingsDialog
Activation of the Push and Shove settings dialogs.
Definition: pcb_actions.h:231
static TOOL_ACTION showRatsnest
Definition: pcb_actions.h:275
static TOOL_ACTION zoneFillAll
Definition: pcb_actions.h:344
static TOOL_ACTION showLayersManager
Definition: pcb_actions.h:389
static TOOL_ACTION toggleNetHighlight
Definition: pcb_actions.h:499
static TOOL_ACTION drawCircle
Definition: pcb_actions.h:173
static TOOL_ACTION mirrorH
Mirroring of selected items.
Definition: pcb_actions.h:129
static TOOL_ACTION routeDiffPair
Activation of the Push and Shove router (differential pair mode)
Definition: pcb_actions.h:211
static TOOL_ACTION placeImage
Definition: pcb_actions.h:175
static TOOL_ACTION routerTuneDiffPair
Activation of the Push and Shove router (diff pair tuning mode)
Definition: pcb_actions.h:217
static TOOL_ACTION drawTextBox
Definition: pcb_actions.h:177
static TOOL_ACTION routerHighlightMode
Actions to enable switching modes via hotkey assignments.
Definition: pcb_actions.h:236
static TOOL_ACTION routerWalkaroundMode
Definition: pcb_actions.h:238
static TOOL_ACTION routerShoveMode
Definition: pcb_actions.h:237
static TOOL_ACTION drawPolygon
Definition: pcb_actions.h:171
static TOOL_ACTION group
Definition: pcb_actions.h:474
static TOOL_ACTION zoneDisplayFilled
Definition: pcb_actions.h:282
static TOOL_ACTION drawRadialDimension
Definition: pcb_actions.h:180
static TOOL_ACTION showProperties
Definition: pcb_actions.h:390
static TOOL_ACTION routerTuneDiffPairSkew
Activation of the Push and Shove router (skew tuning mode)
Definition: pcb_actions.h:220
static TOOL_ACTION viaDisplayMode
Definition: pcb_actions.h:281
static TOOL_ACTION drawLeader
Definition: pcb_actions.h:182
static TOOL_ACTION drillOrigin
Definition: pcb_actions.h:484
static TOOL_ACTION routerTuneSingleTrace
Activation of the Push and Shove router (tune single line mode)
Definition: pcb_actions.h:214
static TOOL_ACTION trackDisplayMode
Definition: pcb_actions.h:279
static TOOL_ACTION selectLayerPair
Definition: pcb_actions.h:161
static TOOL_ACTION zoneDisplayTriangulated
Definition: pcb_actions.h:285
static TOOL_ACTION ungroup
Definition: pcb_actions.h:475
static TOOL_ACTION zoneDisplayFractured
Definition: pcb_actions.h:284
static TOOL_ACTION drawVia
Definition: pcb_actions.h:184
static TOOL_ACTION drawArc
Definition: pcb_actions.h:174
static TOOL_ACTION runDRC
Definition: pcb_actions.h:384
static TOOL_ACTION importNetlist
Definition: pcb_actions.h:371
static TOOL_ACTION pointEditorArcKeepEndpoint
Definition: pcb_actions.h:249
static TOOL_ACTION boardSetup
Definition: pcb_actions.h:358
static TOOL_ACTION showEeschema
Definition: pcb_actions.h:487
static TOOL_ACTION drawCenterDimension
Definition: pcb_actions.h:179
static TOOL_ACTION zoneUnfillAll
Definition: pcb_actions.h:347
static TOOL_ACTION zoneDisplayOutline
Definition: pcb_actions.h:283
static TOOL_ACTION ratsnestLineMode
Definition: pcb_actions.h:276
static TOOL_ACTION mirrorV
Definition: pcb_actions.h:130
static TOOL_ACTION unlock
Definition: pcb_actions.h:471
static TOOL_ACTION placeFootprint
Definition: pcb_actions.h:190
static TOOL_ACTION routeSingleTrack
Activation of the Push and Shove router.
Definition: pcb_actions.h:208
static TOOL_ACTION lengthTunerSettingsDialog
Definition: pcb_actions.h:233
static TOOL_ACTION showPythonConsole
Definition: pcb_actions.h:391
static TOOL_ACTION drawLine
Definition: pcb_actions.h:170
static TOOL_ACTION localRatsnestTool
Definition: pcb_actions.h:506
static TOOL_ACTION rotateCw
Rotation of selected objects.
Definition: pcb_actions.h:122
static TOOL_ACTION rotateCcw
Definition: pcb_actions.h:123
static TOOL_ACTION drawAlignedDimension
Definition: pcb_actions.h:178
static TOOL_ACTION drawZone
Definition: pcb_actions.h:183
static TOOL_ACTION lock
Definition: pcb_actions.h:470
COLOR_SETTINGS * GetColorSettings(bool aForceRefresh=false) const override
Helper to retrieve the current color settings.
APPEARANCE_CONTROLS * m_appearancePanel
PROPERTIES_PANEL * m_propertiesPanel
PCBNEW_SETTINGS * GetPcbNewSettings() const
virtual PCB_LAYER_ID GetActiveLayer() const
PCB_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
virtual BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Returns the BOARD_DESIGN_SETTINGS for the open project.
void UpdateTrackWidthSelectBox(wxChoice *aTrackWidthSelectBox, bool aEdit=true)
void OnUpdateSelectTrackWidth(wxUpdateUIEvent &aEvent)
void ReCreateHToolbar() override
void ReCreateVToolbar() override
void UpdateViaSizeSelectBox(wxChoice *aViaSizeSelectBox, bool aEdit=true)
LAYER_TOOLBAR_ICON_VALUES m_prevIconVal
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...
bool m_show_layer_manager_tools
void OnUpdateLayerSelectBox(wxUpdateUIEvent &aEvent)
void PrepareLayerIndicator(bool aForceRebuild=false)
void ReCreateOptToolbar() override
void ReCreateAuxiliaryToolbar() override
void OnUpdateSelectAutoWidth(wxUpdateUIEvent &aEvent)
void UpdateToolbarControlSizes() override
Update the sizes of any controls in the toolbars of the frame.
void OnUpdateSelectViaSize(wxUpdateUIEvent &aEvent)
PCB_LAYER_BOX_SELECTOR * m_SelLayerBox
wxChoice * m_SelViaSizeBox
static const wxString SearchPaneName()
wxChoice * m_SelTrackWidthBox
void AddActionPluginTools()
Append action plugin buttons to main toolbar.
Class to display a pcb layer list in a wxBitmapComboBox.
void SetBoardFrame(PCB_BASE_FRAME *aFrame)
The selection tool: currently supports:
void FocusSearch()
Definition: search_pane.cpp:88
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:170
EDA_UNITS GetUserUnits() const
#define _(s)
EDA_UNITS
Definition: eda_units.h:43
@ ID_ON_GRID_SELECT
Definition: id.h:145
@ ID_OPT_TOOLBAR
Definition: id.h:102
@ ID_V_TOOLBAR
Definition: id.h:101
@ ID_ON_ZOOM_SELECT
Definition: id.h:143
@ ID_AUX_TOOLBAR
Definition: id.h:103
@ ID_H_TOOLBAR
Definition: id.h:100
@ LAYER_PCB_BACKGROUND
PCB background color.
Definition: layer_ids.h:220
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
double ToUserUnit(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnit, double aValue)
Function To_User_Unit convert aValue in internal units to the appropriate user units defined by aUnit...
Definition: eda_units.cpp:201
wxString GetText(EDA_UNITS aUnits, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
Get the units string for a given units type.
Definition: eda_units.cpp:98
bool IsImperialUnit(EDA_UNITS aUnit)
Definition: eda_units.cpp:29
@ ID_AUX_TOOLBAR_PCB_VIA_SIZE
Definition: pcbnew_id.h:22
@ ID_AUX_TOOLBAR_PCB_SELECT_AUTO_WIDTH
Definition: pcbnew_id.h:24
@ ID_TOOLBARH_PCB_SELECT_LAYER
Definition: pcbnew_id.h:96
@ ID_AUX_TOOLBAR_PCB_TRACK_WIDTH
Definition: pcbnew_id.h:23
see class PGM_BASE
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:111
const int scale
std::vector< FAB_LAYER_COLOR > dummy
Container to handle a stock of specific vias each with unique diameter and drill sizes in the BOARD c...
static const char s_BitmapLayerIcon[BM_LAYERICON_SIZE][BM_LAYERICON_SIZE]
static COLOR4D ICON_WHITE
static wxString ComboBoxUnits(EDA_UNITS aUnits, double aValue, bool aIncludeLabel=true)
static std::unique_ptr< wxBitmap > LayerPairBitmap
#define BM_LAYERICON_SIZE
static COLOR4D ICON_BLACK
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.