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 (C) 1992-2023 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/combobox.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 = KiIconScale( this );
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
192 {
194 m_auxiliaryToolBar->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
223 // Set up toolbar
224 if( Kiface().IsSingle() )
225 {
228 }
229
231
234
239
243
246
254
264
269
271
272 if( !Kiface().IsSingle() )
274 else
276
278
281
282 // Access to the scripting console
283 if( SCRIPTING::IsWxAvailable() )
284 {
288 }
289
290 // after adding the buttons to the toolbar, must call Realize() to reflect the changes
292}
293
294
296{
297 // Note:
298 // To rebuild the aui toolbar, the more easy way is to clear ( calling m_mainToolBar.Clear() )
299 // all wxAuiToolBarItems.
300 // However the wxAuiToolBarItems are not the owners of controls managed by
301 // them and therefore do not delete them
302 // So we do not recreate them after clearing the tools.
303
304 wxWindowUpdateLocker dummy( this );
305
306 if( m_optionsToolBar )
307 {
309 }
310 else
311 {
313 wxDefaultPosition, wxDefaultSize,
314 KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
316 }
317
320
326
329
333
337
341
342 if( ADVANCED_CFG::GetCfg().m_ExtraZoneDisplayModes )
343 {
346 }
347
352
353 if( ADVANCED_CFG::GetCfg().m_DrawBoundingBoxes )
355
356 // Tools to show/hide toolbars:
360
362 std::unique_ptr<ACTION_MENU> gridMenu = std::make_unique<ACTION_MENU>( false, selTool );
363 gridMenu->Add( ACTIONS::gridProperties );
364 gridMenu->Add( ACTIONS::gridOrigin );
366
368}
369
370
372{
373 wxWindowUpdateLocker dummy( this );
374
375 if( m_drawToolBar )
376 {
378 }
379 else
380 {
381 m_drawToolBar = new ACTION_TOOLBAR( this, ID_V_TOOLBAR, wxDefaultPosition, wxDefaultSize,
382 KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
384 }
385
386 // Groups contained on this toolbar
387 static ACTION_GROUP* dimensionGroup = nullptr;
388 static ACTION_GROUP* originGroup = nullptr;
389 static ACTION_GROUP* routingGroup = nullptr;
390 static ACTION_GROUP* tuneGroup = nullptr;
391
392 if( !dimensionGroup )
393 {
394 dimensionGroup = new ACTION_GROUP( "group.pcbDimensions",
400 }
401
402 if( !originGroup )
403 {
404 originGroup = new ACTION_GROUP( "group.pcbOrigins",
407 }
408
409 if( !routingGroup )
410 {
411 routingGroup = new ACTION_GROUP( "group.pcbRouting",
414 }
415
416 if( !tuneGroup )
417 {
418 tuneGroup = new ACTION_GROUP( "group.pcbTune",
422 }
423
426
434
447
451
453
454 auto makeArcMenu = [&]()
455 {
456 std::unique_ptr<ACTION_MENU> arcMenu = std::make_unique<ACTION_MENU>( false, selTool );
457
460
461 return arcMenu;
462 };
463
465
466 auto makeRouteMenu = [&]()
467 {
468 std::unique_ptr<ACTION_MENU> routeMenu = std::make_unique<ACTION_MENU>( false, selTool );
469
473
474 routeMenu->AppendSeparator();
475 routeMenu->Add( PCB_ACTIONS::routerSettingsDialog );
476
477 return routeMenu;
478 };
479
482
483 std::unique_ptr<ACTION_MENU> zoneMenu = std::make_unique<ACTION_MENU>( false, selTool );
484 zoneMenu->Add( PCB_ACTIONS::zoneFillAll );
485 zoneMenu->Add( PCB_ACTIONS::zoneUnfillAll );
486 m_drawToolBar->AddToolContextMenu( PCB_ACTIONS::drawZone, std::move( zoneMenu ) );
487
488 std::unique_ptr<ACTION_MENU> lineMenu = std::make_unique<ACTION_MENU>( false, selTool );
489 m_drawToolBar->AddToolContextMenu( PCB_ACTIONS::drawLine, std::move( lineMenu ) );
490
492}
493
494
496{
497 wxWindowUpdateLocker dummy( this );
498
500 {
502 }
503 else
504 {
505 m_auxiliaryToolBar = new ACTION_TOOLBAR( this, ID_AUX_TOOLBAR, wxDefaultPosition,
506 wxDefaultSize,
507 KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT );
508
509 // The layer indicator is special, so we register a callback directly that will
510 // regenerate the bitmap instead of using the conditions system.
511 auto layerIndicatorUpdate =
512 [this] ( wxUpdateUIEvent& )
513 {
515 };
516
517 Bind( wxEVT_UPDATE_UI, layerIndicatorUpdate, PCB_ACTIONS::selectLayerPair.GetUIId() );
518
520 }
521
522 /* Set up toolbar items */
523
524 // Creates box to display and choose tracks widths:
525 if( m_SelTrackWidthBox == nullptr )
527 wxDefaultPosition, wxDefaultSize, 0, nullptr );
528
531 m_SelTrackWidthBox->SetToolTip( _( "Select the default width for new tracks. Note that this "
532 "width can be overridden by the board minimum width, or by "
533 "the width of an existing track if the 'Use Existing Track "
534 "Width' feature is enabled." ) );
535
537 KiScaledBitmap( BITMAPS::auto_track_width, this ),
538 _( "When routing from an existing track use its width instead "
539 "of the current width setting" ),
540 wxITEM_CHECK );
541
543
544 // Creates box to display and choose vias diameters:
545
546 if( m_SelViaSizeBox == nullptr )
548 wxDefaultPosition, wxDefaultSize, 0, nullptr );
549
551 m_auxiliaryToolBar->AddControl( m_SelViaSizeBox );
552
554
555 if( m_SelLayerBox == nullptr )
556 {
559 }
560
561 ReCreateLayerBox( false );
562 m_auxiliaryToolBar->AddControl( m_SelLayerBox );
563
565 PrepareLayerIndicator( true ); // Force rebuild of the bitmap with the active layer colors
566
567 // Add the box to display and select the current grid size:
569
570 if( m_gridSelectBox == nullptr )
572 wxDefaultPosition, wxDefaultSize, 0, nullptr );
573
575
576 m_auxiliaryToolBar->AddControl( m_gridSelectBox );
577
578 // Add the box to display and select the current Zoom
580
581 if( m_zoomSelectBox == nullptr )
583 wxDefaultPosition, wxDefaultSize, 0, nullptr );
584
586 m_auxiliaryToolBar->AddControl( m_zoomSelectBox );
587
588 // Go through and ensure the comboboxes are the correct size, since the strings in the
589 // box could have changed widths.
595
596 // after adding the buttons to the toolbar, must call Realize()
598}
599
600
602{
603 if( m_mainToolBar )
604 {
605 // Update the item widths
606 }
607
609 {
610 // Update the item widths
616 }
617}
618
619
620static wxString ComboBoxUnits( EDA_UNITS aUnits, double aValue, bool aIncludeLabel = true )
621{
622 wxString text;
623 const wxChar* format;
624
625 switch( aUnits )
626 {
627 default:
628 wxASSERT_MSG( false, wxT( "Invalid unit" ) );
630 case EDA_UNITS::UNSCALED: format = wxT( "%.0f" ); break;
631 case EDA_UNITS::MILLIMETRES: format = wxT( "%.3f" ); break;
632 case EDA_UNITS::MILS: format = wxT( "%.2f" ); break;
633 case EDA_UNITS::INCHES: format = wxT( "%.5f" ); break;
634 }
635
636 text.Printf( format, EDA_UNIT_UTILS::UI::ToUserUnit( pcbIUScale, aUnits, aValue ) );
637
638 if( aIncludeLabel )
640
641 return text;
642}
643
644
645void PCB_EDIT_FRAME::UpdateTrackWidthSelectBox( wxChoice* aTrackWidthSelectBox, bool aShowNetclass,
646 bool aShowEdit )
647{
648 if( aTrackWidthSelectBox == nullptr )
649 return;
650
651 EDA_UNITS primaryUnit;
652 EDA_UNITS secondaryUnit;
653
654 GetUnitPair( primaryUnit, secondaryUnit );
655
656 wxString msg;
657
658 aTrackWidthSelectBox->Clear();
659
660 if( aShowNetclass )
661 aTrackWidthSelectBox->Append( _( "Track: use netclass width" ) );
662
663 for( unsigned ii = 1; ii < GetDesignSettings().m_TrackWidthList.size(); ii++ )
664 {
665 int size = GetDesignSettings().m_TrackWidthList[ii];
666
667 msg.Printf( _( "Track: %s (%s)" ), ComboBoxUnits( primaryUnit, size ),
668 ComboBoxUnits( secondaryUnit, size ) );
669
670 aTrackWidthSelectBox->Append( msg );
671 }
672
673 if( aShowEdit )
674 {
675 aTrackWidthSelectBox->Append( wxT( "---" ) );
676 aTrackWidthSelectBox->Append( _( "Edit Pre-defined Sizes..." ) );
677 }
678
679 if( GetDesignSettings().GetTrackWidthIndex() >= GetDesignSettings().m_TrackWidthList.size() )
681
682 aTrackWidthSelectBox->SetSelection( GetDesignSettings().GetTrackWidthIndex() );
683}
684
685
686void PCB_EDIT_FRAME::UpdateViaSizeSelectBox( wxChoice* aViaSizeSelectBox, bool aShowNetclass,
687 bool aShowEdit )
688{
689 if( aViaSizeSelectBox == nullptr )
690 return;
691
692 aViaSizeSelectBox->Clear();
693
695
696 EDA_UNITS primaryUnit = GetUserUnits();
697 EDA_UNITS secondaryUnit = EDA_UNITS::MILS;
698
699 if( EDA_UNIT_UTILS::IsImperialUnit( primaryUnit ) )
700 {
701 if( cmnTool )
702 secondaryUnit = cmnTool->GetLastMetricUnits();
703 else
704 secondaryUnit = EDA_UNITS::MILLIMETRES;
705 }
706 else
707 {
708 if( cmnTool )
709 secondaryUnit = cmnTool->GetLastImperialUnits();
710 else
711 secondaryUnit = EDA_UNITS::MILS;
712 }
713
714 if( aShowNetclass )
715 aViaSizeSelectBox->Append( _( "Via: use netclass sizes" ) );
716
717 for( unsigned ii = 1; ii < GetDesignSettings().m_ViasDimensionsList.size(); ii++ )
718 {
720 wxString msg, priStr, secStr;
721
722 double diam = viaDimension.m_Diameter;
723 double hole = viaDimension.m_Drill;
724
725 if( hole > 0 )
726 {
727 priStr = ComboBoxUnits( primaryUnit, diam, false ) + wxT( " / " )
728 + ComboBoxUnits( primaryUnit, hole, true );
729 secStr = ComboBoxUnits( secondaryUnit, diam, false ) + wxT( " / " )
730 + ComboBoxUnits( secondaryUnit, hole, true );
731 }
732 else
733 {
734 priStr = ComboBoxUnits( primaryUnit, diam, true );
735 secStr = ComboBoxUnits( secondaryUnit, diam, true );
736 }
737
738 msg.Printf( _( "Via: %s (%s)" ), priStr, secStr );
739
740 aViaSizeSelectBox->Append( msg );
741 }
742
743 if( aShowEdit )
744 {
745 aViaSizeSelectBox->Append( wxT( "---" ) );
746 aViaSizeSelectBox->Append( _( "Edit Pre-defined Sizes..." ) );
747 }
748
749 if( GetDesignSettings().GetViaSizeIndex() >= GetDesignSettings().m_ViasDimensionsList.size() )
751
752 aViaSizeSelectBox->SetSelection( GetDesignSettings().GetViaSizeIndex() );
753}
754
755
756void PCB_EDIT_FRAME::ReCreateLayerBox( bool aForceResizeToolbar )
757{
758 if( m_SelLayerBox == nullptr || m_auxiliaryToolBar == nullptr )
759 return;
760
761 m_SelLayerBox->SetToolTip( _( "+/- to switch" ) );
763
764 if( aForceResizeToolbar )
766}
767
768
770{
772 wxAuiPaneInfo& layersManager = m_auimgr.GetPane( "LayersManager" );
773 wxAuiPaneInfo& selectionFilter = m_auimgr.GetPane( "SelectionFilter" );
774
775 // show auxiliary Vertical layers and visibility manager toolbar
777
778 layersManager.Show( m_show_layer_manager_tools );
779 selectionFilter.Show( m_show_layer_manager_tools );
780
782 {
783 SetAuiPaneSize( m_auimgr, layersManager, settings->m_AuiPanels.right_panel_width, -1 );
784 }
785 else
786 {
787 settings->m_AuiPanels.right_panel_width = m_appearancePanel->GetSize().x;
788 m_auimgr.Update();
789 }
790}
791
792
794{
796
797 // Ensure m_show_search is up to date (the pane can be closed outside the menu)
798 m_show_search = m_auimgr.GetPane( SearchPaneName() ).IsShown();
799
801
802 wxAuiPaneInfo& searchPaneInfo = m_auimgr.GetPane( SearchPaneName() );
803 searchPaneInfo.Show( m_show_search );
804
805 if( m_show_search )
806 {
807 searchPaneInfo.Direction( settings->m_AuiPanels.search_panel_dock_direction );
808
809 if( settings->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_TOP
810 || settings->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_BOTTOM )
811 {
812 SetAuiPaneSize( m_auimgr, searchPaneInfo,
813 -1, settings->m_AuiPanels.search_panel_height );
814 }
815 else if( settings->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_LEFT
816 || settings->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_RIGHT )
817 {
818 SetAuiPaneSize( m_auimgr, searchPaneInfo,
819 settings->m_AuiPanels.search_panel_width, -1 );
820 }
822 }
823 else
824 {
825 settings->m_AuiPanels.search_panel_height = m_searchPane->GetSize().y;
826 settings->m_AuiPanels.search_panel_width = m_searchPane->GetSize().x;
827 settings->m_AuiPanels.search_panel_dock_direction = searchPaneInfo.dock_direction;
828 m_auimgr.Update();
829 }
830}
831
832
833void PCB_EDIT_FRAME::OnUpdateSelectTrackWidth( wxUpdateUIEvent& aEvent )
834{
835 if( aEvent.GetId() == ID_AUX_TOOLBAR_PCB_TRACK_WIDTH )
836 {
838 int sel;
839
840 if( bds.UseCustomTrackViaSize() )
841 sel = wxNOT_FOUND;
842 else
843 sel = bds.GetTrackWidthIndex();
844
845 if( m_SelTrackWidthBox->GetSelection() != sel )
846 m_SelTrackWidthBox->SetSelection( sel );
847 }
848}
849
850
851void PCB_EDIT_FRAME::OnUpdateSelectViaSize( wxUpdateUIEvent& aEvent )
852{
853 if( aEvent.GetId() == ID_AUX_TOOLBAR_PCB_VIA_SIZE )
854 {
856 int sel = 0;
857
858 if( bds.UseCustomTrackViaSize() )
859 sel = wxNOT_FOUND;
860 else
861 sel = bds.GetViaSizeIndex();
862
863 if( m_SelViaSizeBox->GetSelection() != sel )
864 m_SelViaSizeBox->SetSelection( sel );
865 }
866}
867
868
869void PCB_EDIT_FRAME::OnUpdateSelectAutoWidth( wxUpdateUIEvent& aEvent )
870{
872
873 aEvent.Check( bds.m_UseConnectedTrackWidth );
874}
875
876
877void PCB_EDIT_FRAME::OnUpdateLayerSelectBox( wxUpdateUIEvent& aEvent )
878{
881}
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:147
static TOOL_ACTION gridProperties
Definition: actions.h:174
static TOOL_ACTION updatePcbFromSchematic
Definition: actions.h:199
static TOOL_ACTION toggleGrid
Definition: actions.h:172
static TOOL_ACTION zoomRedraw
Definition: actions.h:114
static TOOL_ACTION millimetersUnits
Definition: actions.h:180
static TOOL_ACTION show3DViewer
Definition: actions.h:194
static TOOL_ACTION zoomOutCenter
Definition: actions.h:118
static TOOL_ACTION togglePolarCoords
Definition: actions.h:183
static TOOL_ACTION milsUnits
Definition: actions.h:179
static TOOL_ACTION toggleBoundingBoxes
Definition: actions.h:135
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:66
static TOOL_ACTION inchesUnits
Definition: actions.h:178
static TOOL_ACTION highContrastMode
Definition: actions.h:133
static TOOL_ACTION toggleCursorStyle
Definition: actions.h:132
static TOOL_ACTION gridOrigin
Definition: actions.h:175
static TOOL_ACTION measureTool
Definition: actions.h:188
static TOOL_ACTION selectionTool
Definition: actions.h:187
static TOOL_ACTION save
Definition: actions.h:51
static TOOL_ACTION zoomFitScreen
Definition: actions.h:124
static TOOL_ACTION redo
Definition: actions.h:67
static TOOL_ACTION deleteTool
Definition: actions.h:76
static TOOL_ACTION zoomTool
Definition: actions.h:127
static TOOL_ACTION showFootprintEditor
Definition: actions.h:198
static TOOL_ACTION print
Definition: actions.h:57
static TOOL_ACTION showProperties
Definition: actions.h:201
static TOOL_ACTION doNew
Definition: actions.h:47
static TOOL_ACTION zoomFitObjects
Definition: actions.h:125
static TOOL_ACTION zoomInCenter
Definition: actions.h:117
static TOOL_ACTION gridSetOrigin
Definition: actions.h:169
static TOOL_ACTION showFootprintBrowser
Definition: actions.h:197
static TOOL_ACTION toggleGridOverrides
Definition: actions.h:173
static TOOL_ACTION find
Definition: actions.h:99
A group of actions that will be displayed together on a toolbar palette.
static constexpr bool CHECK
Definition: action_menu.h:201
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,...
ACTION_TOOLBAR * m_mainToolBar
void GetUnitPair(EDA_UNITS &aPrimaryUnit, EDA_UNITS &aSecondaryUnits) override
Get the pair or units in current use.
ACTION_TOOLBAR * m_drawToolBar
SEARCH_PANE * m_searchPane
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:311
wxColour ToColour() const
Definition: color4d.cpp:220
int SetLayerSelection(int layer)
AUI_PANELS m_AuiPanels
static TOOL_ACTION toggleHV45Mode
Definition: pcb_actions.h:512
static TOOL_ACTION drawRuleArea
Definition: pcb_actions.h:215
static TOOL_ACTION placeText
Definition: pcb_actions.h:201
static TOOL_ACTION pointEditorArcKeepCenter
Definition: pcb_actions.h:290
static TOOL_ACTION drawOrthogonalDimension
Definition: pcb_actions.h:211
static TOOL_ACTION drawRectangle
Definition: pcb_actions.h:197
static TOOL_ACTION padDisplayMode
Definition: pcb_actions.h:325
static TOOL_ACTION placeReferenceImage
Definition: pcb_actions.h:200
static TOOL_ACTION routerSettingsDialog
Activation of the Push and Shove settings dialogs.
Definition: pcb_actions.h:261
static TOOL_ACTION showRatsnest
Definition: pcb_actions.h:320
static TOOL_ACTION zoneFillAll
Definition: pcb_actions.h:392
static TOOL_ACTION showLayersManager
Definition: pcb_actions.h:439
static TOOL_ACTION toggleNetHighlight
Definition: pcb_actions.h:548
static TOOL_ACTION drawCircle
Definition: pcb_actions.h:198
static TOOL_ACTION mirrorH
Mirroring of selected items.
Definition: pcb_actions.h:139
static TOOL_ACTION routeDiffPair
Activation of the Push and Shove router (differential pair mode)
Definition: pcb_actions.h:246
static TOOL_ACTION tuneDiffPair
Definition: pcb_actions.h:249
static TOOL_ACTION drawTable
Definition: pcb_actions.h:203
static TOOL_ACTION drawTextBox
Definition: pcb_actions.h:202
static TOOL_ACTION routerHighlightMode
Actions to enable switching modes via hotkey assignments.
Definition: pcb_actions.h:265
static TOOL_ACTION routerWalkaroundMode
Definition: pcb_actions.h:267
static TOOL_ACTION routerShoveMode
Definition: pcb_actions.h:266
static TOOL_ACTION drawPolygon
Definition: pcb_actions.h:196
static TOOL_ACTION group
Definition: pcb_actions.h:520
static TOOL_ACTION zoneDisplayFilled
Definition: pcb_actions.h:327
static TOOL_ACTION drawRadialDimension
Definition: pcb_actions.h:210
static TOOL_ACTION tuneSingleTrack
Definition: pcb_actions.h:248
static TOOL_ACTION viaDisplayMode
Definition: pcb_actions.h:326
static TOOL_ACTION drawLeader
Definition: pcb_actions.h:212
static TOOL_ACTION drillOrigin
Definition: pcb_actions.h:530
static TOOL_ACTION tuneSkew
Definition: pcb_actions.h:250
static TOOL_ACTION trackDisplayMode
Definition: pcb_actions.h:324
static TOOL_ACTION selectLayerPair
Definition: pcb_actions.h:186
static TOOL_ACTION zoneDisplayTriangulated
Definition: pcb_actions.h:330
static TOOL_ACTION ungroup
Definition: pcb_actions.h:521
static TOOL_ACTION zoneDisplayFractured
Definition: pcb_actions.h:329
static TOOL_ACTION drawVia
Definition: pcb_actions.h:214
static TOOL_ACTION drawArc
Definition: pcb_actions.h:199
static TOOL_ACTION runDRC
Definition: pcb_actions.h:434
static TOOL_ACTION importNetlist
Definition: pcb_actions.h:420
static TOOL_ACTION pointEditorArcKeepEndpoint
Definition: pcb_actions.h:291
static TOOL_ACTION boardSetup
Definition: pcb_actions.h:406
static TOOL_ACTION showEeschema
Definition: pcb_actions.h:534
static TOOL_ACTION drawCenterDimension
Definition: pcb_actions.h:209
static TOOL_ACTION zoneUnfillAll
Definition: pcb_actions.h:395
static TOOL_ACTION zoneDisplayOutline
Definition: pcb_actions.h:328
static TOOL_ACTION ratsnestLineMode
Definition: pcb_actions.h:321
static TOOL_ACTION mirrorV
Definition: pcb_actions.h:140
static TOOL_ACTION unlock
Definition: pcb_actions.h:517
static TOOL_ACTION placeFootprint
Definition: pcb_actions.h:220
static TOOL_ACTION routeSingleTrack
Activation of the Push and Shove router.
Definition: pcb_actions.h:243
static TOOL_ACTION showPythonConsole
Definition: pcb_actions.h:440
static TOOL_ACTION drawLine
Definition: pcb_actions.h:195
static TOOL_ACTION localRatsnestTool
Definition: pcb_actions.h:555
static TOOL_ACTION rotateCw
Rotation of selected objects.
Definition: pcb_actions.h:132
static TOOL_ACTION rotateCcw
Definition: pcb_actions.h:133
static TOOL_ACTION drawAlignedDimension
Definition: pcb_actions.h:208
static TOOL_ACTION drawZone
Definition: pcb_actions.h:213
static TOOL_ACTION lock
Definition: pcb_actions.h:516
COLOR_SETTINGS * GetColorSettings(bool aForceRefresh=false) const override
Helper to retrieve the current color settings.
APPEARANCE_CONTROLS * m_appearancePanel
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 OnUpdateSelectTrackWidth(wxUpdateUIEvent &aEvent)
void ReCreateHToolbar() override
void UpdateTrackWidthSelectBox(wxChoice *aTrackWidthSelectBox, bool aShowNetclass, bool aShowEdit)
void ReCreateVToolbar() override
void UpdateViaSizeSelectBox(wxChoice *aViaSizeSelectBox, bool aShowNetclass, bool aShowEdit)
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:96
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:167
#define _(s)
EDA_UNITS
Definition: eda_units.h:46
@ 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:223
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)
Function To_User_Unit convert aValue in internal units to the appropriate user units defined by aUnit...
Definition: eda_units.cpp:243
KICOMMON_API 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:110
KICOMMON_API bool IsImperialUnit(EDA_UNITS aUnit)
Definition: eda_units.cpp:31
@ 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
int GetUserUnits()
Return the currently selected user unit value for the interface.
see class PGM_BASE
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.