KiCad PCB EDA Suite
Loading...
Searching...
No Matches
footprint_viewer_frame.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-2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
5 * Copyright (C) 2008-2016 Wayne Stambaugh <[email protected]>
6 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, you may find one here:
20 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
21 * or you may search the http://www.gnu.org website for the version 2 license,
22 * or you may write to the Free Software Foundation, Inc.,
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24 */
25
27#include <bitmaps.h>
28#include <board_commit.h>
29#include <board.h>
32#include <footprint.h>
33#include <confirm.h>
34#include <eda_pattern_match.h>
35#include <footprint_info.h>
38#include <kiway.h>
39#include <kiway_mail.h>
41#include <widgets/kistatusbar.h>
42#include <widgets/msgpanel.h>
43#include <widgets/wx_listbox.h>
46#include <pcb_draw_panel_gal.h>
47#include <pcb_painter.h>
48#include <pcbnew_id.h>
50#include <pgm_base.h>
51#include <pcbnew_settings.h>
52#include <project_pcb.h>
56#include <tool/action_toolbar.h>
57#include <tool/common_control.h>
58#include <tool/common_tools.h>
59#include <tool/selection.h>
61#include <tool/tool_manager.h>
62#include <tool/zoom_tool.h>
64#include <tools/pcb_actions.h>
66#include <tools/pcb_control.h>
72#include <wx/srchctrl.h>
73#include <wx/tokenzr.h>
74#include <wx/choice.h>
75#include <wx/hyperlink.h>
76
77#include "invoke_pcb_dialog.h"
78
79using namespace std::placeholders;
80
81BEGIN_EVENT_TABLE( FOOTPRINT_VIEWER_FRAME, PCB_BASE_FRAME )
82 // Window events
85
86 EVT_MENU( wxID_EXIT, FOOTPRINT_VIEWER_FRAME::OnExitKiCad )
88
89 // Toolbar events
92
95
96 // listbox events
99
100END_EVENT_TABLE()
101
102
104 PCB_BASE_FRAME( aKiway, aParent, FRAME_FOOTPRINT_VIEWER, _( "Footprint Library Browser" ),
105 wxDefaultPosition, wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE,
107 m_comp( LIB_ID(), wxEmptyString, wxEmptyString, KIID_PATH(), {} )
108{
109 m_aboutTitle = _HKI( "KiCad Footprint Library Browser" );
110
111 // Force the items to always snap
112 m_magneticItems.pads = MAGNETIC_OPTIONS::CAPTURE_ALWAYS;
113 m_magneticItems.tracks = MAGNETIC_OPTIONS::CAPTURE_ALWAYS;
114 m_magneticItems.graphics = true;
115
116 // Force the frame name used in config. the footprint viewer frame has a name
117 // depending on aFrameType (needed to identify the frame by wxWidgets),
118 // but only one configuration is preferable.
119 m_configName = FOOTPRINT_VIEWER_FRAME_NAME;
120
121 // Give an icon
122 wxIcon icon;
123 icon.CopyFromBitmap( KiBitmap( BITMAPS::icon_footprint_browser ) );
124 SetIcon( icon );
125
126 m_libListWidth = 200;
127 m_fpListWidth = 300;
128
129 wxPanel* libPanel = new wxPanel( this );
130 wxSizer* libSizer = new wxBoxSizer( wxVERTICAL );
131
132 m_libFilter = new wxSearchCtrl( libPanel, ID_MODVIEW_LIB_FILTER, wxEmptyString,
133 wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
134 m_libFilter->SetDescriptiveText( _( "Filter" ) );
135 libSizer->Add( m_libFilter, 0, wxEXPAND, 5 );
136
137 m_libList = new WX_LISTBOX( libPanel, ID_MODVIEW_LIB_LIST, wxDefaultPosition, wxDefaultSize,
138 0, nullptr, wxLB_HSCROLL | wxNO_BORDER );
139 libSizer->Add( m_libList, 1, wxEXPAND, 5 );
140
141 libPanel->SetSizer( libSizer );
142 libPanel->Fit();
143
144 wxPanel* fpPanel = new wxPanel( this );
145 wxSizer* fpSizer = new wxBoxSizer( wxVERTICAL );
146
147 m_fpFilter = new wxSearchCtrl( fpPanel, ID_MODVIEW_FOOTPRINT_FILTER, wxEmptyString,
148 wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
149 m_fpFilter->SetDescriptiveText( _( "Filter" ) );
150 m_fpFilter->SetToolTip(
151 _( "Filter on footprint name, keywords, description and pad count.\n"
152 "Search terms are separated by spaces. All search terms must match.\n"
153 "A term which is a number will also match against the pad count." ) );
154 fpSizer->Add( m_fpFilter, 0, wxEXPAND, 5 );
155
156#ifdef __WXGTK__
157 // wxSearchCtrl vertical height is not calculated correctly on some GTK setups
158 // See https://gitlab.com/kicad/code/kicad/-/issues/9019
159 m_libFilter->SetMinSize( wxSize( -1, GetTextExtent( wxT( "qb" ) ).y + 10 ) );
160 m_fpFilter->SetMinSize( wxSize( -1, GetTextExtent( wxT( "qb" ) ).y + 10 ) );
161#endif
162
163 m_fpList = new WX_LISTBOX( fpPanel, ID_MODVIEW_FOOTPRINT_LIST, wxDefaultPosition, wxDefaultSize,
164 0, nullptr, wxLB_HSCROLL | wxNO_BORDER );
165
166 m_fpList->Connect( wxEVT_LEFT_DCLICK,
168 nullptr, this );
169 fpSizer->Add( m_fpList, 1, wxEXPAND, 5 );
170
171 fpPanel->SetSizer( fpSizer );
172 fpPanel->Fit();
173
174 // Create GAL canvas
175 m_canvasType = loadCanvasTypeSetting();
176
177 PCB_DRAW_PANEL_GAL* drawPanel = new PCB_DRAW_PANEL_GAL( this, -1, wxPoint( 0, 0 ), m_frameSize,
178 GetGalDisplayOptions(), m_canvasType );
179 SetCanvas( drawPanel );
180
181 SetBoard( new BOARD() );
182
183 // This board will only be used to hold a footprint for viewing
185
186 // In viewer, the default net clearance is not known (it depends on the actual board).
187 // So we do not show the default clearance, by setting it to 0
188 // The footprint or pad specific clearance will be shown
190
191 // Don't show the default board solder mask clearance in the footprint viewer. Only the
192 // footprint or pad clearance setting should be shown if it is not 0.
194
195 // Ensure all layers and items are visible:
197 SetScreen( new PCB_SCREEN( GetPageSizeIU() ) );
198
199 GetScreen()->m_Center = true; // Center coordinate origins on screen.
200 LoadSettings( config() );
201 GetGalDisplayOptions().m_axesEnabled = true;
202
203 // Create the manager and dispatcher & route draw panel events to the dispatcher
204 m_toolManager = new TOOL_MANAGER;
205 m_toolManager->SetEnvironment( GetBoard(), drawPanel->GetView(),
206 drawPanel->GetViewControls(), config(), this );
207 m_actions = new PCB_ACTIONS();
208 m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager );
209 drawPanel->SetEventDispatcher( m_toolDispatcher );
210
211 m_toolManager->RegisterTool( new PCB_CONTROL );
212 m_toolManager->RegisterTool( new PCB_SELECTION_TOOL );
213 m_toolManager->RegisterTool( new COMMON_TOOLS ); // for std context menus (zoom & grid)
214 m_toolManager->RegisterTool( new COMMON_CONTROL );
215 m_toolManager->RegisterTool( new PCB_PICKER_TOOL ); // for setting grid origin
216 m_toolManager->RegisterTool( new ZOOM_TOOL );
217 m_toolManager->RegisterTool( new PCB_VIEWER_TOOLS );
218
219 m_toolManager->GetTool<PCB_VIEWER_TOOLS>()->SetFootprintFrame( true );
220
221 m_toolManager->InitTools();
222 m_toolManager->InvokeTool( "common.InteractiveSelection" );
223
224 setupUIConditions();
225
226 m_toolbarSettings = GetToolbarSettings<FOOTPRINT_VIEWER_TOOLBAR_SETTINGS>( "fpviewer-toolbars" );
227 configureToolbars();
228 RecreateToolbars();
229 ReCreateMenuBar();
230
231 ReCreateLibraryList();
232 UpdateTitle();
233
234 // Call resolveCanvasType after loading settings:
235 resolveCanvasType();
236
237 // If a footprint was previously loaded, reload it
238 if( getCurNickname().size() && getCurFootprintName().size() )
239 {
240 LIB_ID id;
241
242 id.SetLibNickname( getCurNickname() );
243 id.SetLibItemName( getCurFootprintName() );
244
245 FOOTPRINT* footprint = loadFootprint( id );
246
247 if( footprint )
248 {
249 GetBoard()->Add( footprint );
250 setFPWatcher( footprint );
251
252 m_toolManager->RunAction( PCB_ACTIONS::rehatchShapes );
253 }
254 }
255
256 drawPanel->DisplayBoard( m_pcb );
257
258 m_auimgr.SetManagedWindow( this );
259
260 // Horizontal items; layers 4 - 6
261 m_auimgr.AddPane( m_tbTopMain, EDA_PANE().VToolbar().Name( "TopMainToolbar" ).Top().Layer(6) );
262 m_auimgr.AddPane( m_tbLeft, EDA_PANE().VToolbar().Name( "LeftToolbar" ).Left().Layer(3) );
263 m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( "MsgPanel" ).Bottom().Layer(6) );
264
265 // Vertical items; layers 1 - 3
266 m_auimgr.AddPane( libPanel, EDA_PANE().Palette().Name( "Libraries" ).Left().Layer(2)
267 .CaptionVisible( false ).MinSize( 100, -1 ).BestSize( 200, -1 ) );
268 m_auimgr.AddPane( fpPanel, EDA_PANE().Palette().Name( "Footprints" ).Left().Layer(1)
269 .CaptionVisible( false ).MinSize( 100, -1 ).BestSize( 300, -1 ) );
270
271 m_auimgr.AddPane( GetCanvas(), EDA_PANE().Canvas().Name( "DrawFrame" ).Center() );
272
273 // after changing something to the aui manager call Update() to reflect the changes
274 m_auimgr.Update();
275
276 if( m_libListWidth > 0 )
277 SetAuiPaneSize( m_auimgr, m_auimgr.GetPane( "Libraries" ), m_libListWidth, -1 );
278
279 if( m_fpListWidth > 0 )
280 SetAuiPaneSize( m_auimgr, m_auimgr.GetPane( "Footprints" ), m_fpListWidth, -1 );
281
282 // The canvas should not steal the focus from the list boxes
283 GetCanvas()->SetCanFocus( false );
284 GetCanvas()->GetGAL()->SetAxesEnabled( true );
285 ActivateGalCanvas();
286
287 // Restore last zoom and auto zoom option. (If auto-zooming we'll adjust when we load the footprint.)
288 if( PCBNEW_SETTINGS* cfg = GetPcbNewSettings() )
289 GetCanvas()->GetView()->SetScale( cfg->m_FootprintViewerZoom );
290
291 updateView();
292 setupUnits( config() );
293
294 ReCreateFootprintList();
295 Raise(); // On some window managers, this is needed
296 Show( true );
297}
298
299
301{
302 // Shutdown all running tools
303 if( m_toolManager )
304 m_toolManager->ShutdownAllTools();
305
307 GetCanvas()->GetView()->Clear();
308 // Be sure any event cannot be fired after frame deletion:
309 GetCanvas()->SetEvtHandlerEnabled( false );
310 m_fpList->Disconnect( wxEVT_LEFT_DCLICK,
312 nullptr, this );
313 setFPWatcher( nullptr );
314}
315
316
321
322
324{
326
327 if( FOOTPRINT* fp = static_cast<FOOTPRINT*>( GetModel() ) )
328 {
329 std::vector<MSG_PANEL_ITEM> msgItems;
330 fp->GetMsgPanelInfo( this, msgItems );
331 SetMsgPanel( msgItems );
332 }
333}
334
335
337{
339
340 ACTION_MANAGER* mgr = m_toolManager->GetActionManager();
341 PCB_EDITOR_CONDITIONS cond( this );
342
343 wxASSERT( mgr );
344
345 auto addToBoardCond =
346 [this]( const SELECTION& )
347 {
348 return ( GetBoard()->GetFirstFootprint() != nullptr );
349 };
350
351#define ENABLE( x ) ACTION_CONDITIONS().Enable( x )
352#define CHECK( x ) ACTION_CONDITIONS().Check( x )
353
358
359 mgr->SetConditions( PCB_ACTIONS::saveFpToBoard, ENABLE( addToBoardCond ) );
360
367
373
375
376#undef ENABLE
377#undef CHECK
378}
379
380
382{
383 // A workaround to avoid flicker, in modal mode when modview frame is destroyed,
384 // when the aui toolbar is not docked (i.e. shown in a miniframe)
385 // (useful on windows only)
386 m_tbTopMain->SetFocus();
387
389
390 Destroy();
391}
392
393
394void FOOTPRINT_VIEWER_FRAME::OnSize( wxSizeEvent& SizeEv )
395{
396 if( m_auimgr.GetManagedWindow() )
397 m_auimgr.Update();
398
399 SizeEv.Skip();
400}
401
402
404{
405 m_libList->Clear();
406
409 std::vector<wxString> nicknames = PROJECT_PCB::FootprintLibAdapter( &Prj() )->GetLibraryNames();
410 std::vector<wxString> pinnedMatches;
411 std::vector<wxString> otherMatches;
412
413 auto process =
414 [&]( const wxString& aNickname )
415 {
416 if( alg::contains( project.m_PinnedFootprintLibs, aNickname )
417 || alg::contains( cfg->m_Session.pinned_fp_libs, aNickname ) )
418 {
419 pinnedMatches.push_back( aNickname );
420 }
421 else
422 {
423 otherMatches.push_back( aNickname );
424 }
425 };
426
427 if( m_libFilter->GetValue().IsEmpty() )
428 {
429 for( const wxString& nickname : nicknames )
430 process( nickname );
431 }
432 else
433 {
434 wxStringTokenizer tokenizer( m_libFilter->GetValue(), " \t\r\n", wxTOKEN_STRTOK );
435
436 while( tokenizer.HasMoreTokens() )
437 {
438 const wxString term = tokenizer.GetNextToken().Lower();
439 EDA_COMBINED_MATCHER matcher( term, CTX_LIBITEM );
440
441 for( const wxString& nickname : nicknames )
442 {
443 if( matcher.Find( nickname.Lower() ) )
444 process( nickname );
445 }
446 }
447 }
448
449 for( const wxString& nickname : pinnedMatches )
451
452 for( const wxString& nickname : otherMatches )
453 m_libList->Append( nickname );
454
455 // Search for a previous selection:
456 int index = m_libList->FindString( getCurNickname(), true );
457
458 if( index == wxNOT_FOUND )
459 {
460 if( m_libList->GetCount() > 0 )
461 {
462 m_libList->SetSelection( 0 );
463 wxCommandEvent dummy;
465 }
466 else
467 {
468 setCurNickname( wxEmptyString );
469 setCurFootprintName( wxEmptyString );
470 }
471 }
472 else
473 {
474 m_libList->SetSelection( index, true );
475 wxCommandEvent dummy;
477 }
478
479 GetCanvas()->Refresh();
480}
481
482
484{
485 m_fpList->Clear();
486
487 if( !getCurNickname() )
488 setCurFootprintName( wxEmptyString );
489
491 wxString nickname = getCurNickname();
492
493 if( !nickname )
494 return;
495
496 std::vector<FOOTPRINT*> footprints = adapter->GetFootprints( nickname, true );
497
498 if( footprints.empty() )
499 return;
500
501 std::set<wxString> excludes;
502
503 if( !m_fpFilter->GetValue().IsEmpty() )
504 {
505 wxStringTokenizer tokenizer( m_fpFilter->GetValue(), " \t\r\n", wxTOKEN_STRTOK );
506
507 while( tokenizer.HasMoreTokens() )
508 {
509 const wxString filterTerm = tokenizer.GetNextToken().Lower();
510 EDA_COMBINED_MATCHER matcher( filterTerm, CTX_LIBITEM );
511
512 for( FOOTPRINT* footprint : footprints )
513 {
514 std::vector<SEARCH_TERM> searchTerms = footprint->GetSearchTerms();
515 int matched = matcher.ScoreTerms( searchTerms );
516
517 if( filterTerm.IsNumber() && wxAtoi( filterTerm ) == (int)footprint->GetPadCount( DO_NOT_INCLUDE_NPTH ) )
518 matched++;
519
520 if( !matched )
521 excludes.insert( footprint->GetFPID().GetLibItemName() );
522 }
523 }
524 }
525
526 for( FOOTPRINT* footprint : footprints )
527 {
528 wxString fpName = footprint->GetFPID().GetLibItemName();
529
530 if( !excludes.count( fpName ) )
531 m_fpList->Append( fpName );
532 }
533
534 int index = wxNOT_FOUND;
535
536 if( !getCurFootprintName().IsEmpty() )
537 index = m_fpList->FindString( getCurFootprintName(), true );
538
539 if( index == wxNOT_FOUND )
540 {
541 if( m_fpList->GetCount() > 0 )
542 {
543 m_fpList->SetSelection( 0 );
544 m_fpList->EnsureVisible( 0 );
545
546 wxCommandEvent dummy;
548 }
549 else
550 {
551 setCurFootprintName( wxEmptyString );
552 }
553 }
554 else
555 {
556 m_fpList->SetSelection( index, true );
557 m_fpList->EnsureVisible( index );
558
559 wxCommandEvent dummy;
561 }
562}
563
564
565void FOOTPRINT_VIEWER_FRAME::OnLibFilter( wxCommandEvent& aEvent )
566{
568
569 // Required to avoid interaction with SetHint()
570 // See documentation for wxTextEntry::SetHint
571 aEvent.Skip();
572}
573
574
575void FOOTPRINT_VIEWER_FRAME::OnFPFilter( wxCommandEvent& aEvent )
576{
578
579 // Required to avoid interaction with SetHint()
580 // See documentation for wxTextEntry::SetHint
581 aEvent.Skip();
582}
583
584
585void FOOTPRINT_VIEWER_FRAME::OnCharHook( wxKeyEvent& aEvent )
586{
587 if( aEvent.GetKeyCode() == WXK_UP )
588 {
589 if( m_libFilter->HasFocus() || m_libList->HasFocus() )
591 else
593 }
594 else if( aEvent.GetKeyCode() == WXK_DOWN )
595 {
596 if( m_libFilter->HasFocus() || m_libList->HasFocus() )
598 else
600 }
601 else if( aEvent.GetKeyCode() == WXK_TAB && m_libFilter->HasFocus() )
602 {
603 if( !aEvent.ShiftDown() )
604 m_fpFilter->SetFocus();
605 else
606 aEvent.Skip();
607 }
608 else if( aEvent.GetKeyCode() == WXK_TAB && m_fpFilter->HasFocus() )
609 {
610 if( aEvent.ShiftDown() )
611 m_libFilter->SetFocus();
612 else
613 aEvent.Skip();
614 }
615 else if( ( aEvent.GetKeyCode() == WXK_RETURN || aEvent.GetKeyCode() == WXK_NUMPAD_ENTER )
616 && m_fpList->GetSelection() >= 0 )
617 {
619 }
620 else
621 {
622 aEvent.Skip();
623 }
624}
625
626
628{
629 int prev = aListBox->GetSelection() - 1;
630
631 if( prev >= 0 )
632 {
633 aListBox->SetSelection( prev );
634 aListBox->EnsureVisible( prev );
635
636 wxCommandEvent dummy;
637
638 if( aListBox == m_libList )
640 else
642 }
643}
644
645
647{
648 int next = aListBox->GetSelection() + 1;
649
650 if( next < (int)aListBox->GetCount() )
651 {
652 aListBox->SetSelection( next );
653 aListBox->EnsureVisible( next );
654
655 wxCommandEvent dummy;
656
657 if( aListBox == m_libList )
659 else
661 }
662}
663
664
665void FOOTPRINT_VIEWER_FRAME::ClickOnLibList( wxCommandEvent& aEvent )
666{
667 int ii = m_libList->GetSelection();
668
669 if( ii < 0 )
670 return;
671
672 wxString name = m_libList->GetBaseString( ii );
673
674 if( getCurNickname() == name )
675 return;
676
678
679 // Ensure the displayed footprint is loade/reloaded from the new library
680 setCurFootprintName( wxEmptyString );
681
683 UpdateTitle();
684}
685
686
688{
689 if( m_fpList->GetCount() == 0 )
690 return;
691
692 int ii = m_fpList->GetSelection();
693
694 if( ii < 0 )
695 return;
696
697 wxString name = m_fpList->GetBaseString( ii );
698
699 if( getCurFootprintName().CmpNoCase( name ) != 0 )
700 {
703 }
704}
705
706
708{
709 for( PAD* pad : aFootprint->Pads() )
710 {
711 const COMPONENT_NET& net = m_comp.GetNet( pad->GetNumber() );
712
713 if( !net.GetPinFunction().IsEmpty() )
714 {
715 NETINFO_ITEM* netinfo = new NETINFO_ITEM( GetBoard() );
716 netinfo->SetNetname( net.GetPinFunction() );
717 GetBoard()->Add( netinfo );
718 pad->SetNet( netinfo );
719 }
720 }
721
722 GetBoard()->Add( aFootprint );
723
725}
726
727
729{
731}
732
733
735{
736 if( GetBoard()->GetFirstFootprint() )
737 {
738 PCB_EDIT_FRAME* pcbframe = (PCB_EDIT_FRAME*) Kiway().Player( FRAME_PCB_EDITOR, false );
739
740 if( pcbframe == nullptr ) // happens when the board editor is not active (or closed)
741 {
742 DisplayErrorMessage( this, _( "No board currently open." ) );
743 return;
744 }
745
746 PCBNEW_SETTINGS* cfg = pcbframe->GetPcbNewSettings();
747 TOOL_MANAGER* toolMgr = pcbframe->GetToolManager();
748
750 {
751 DisplayError( this, _( "Previous footprint placement still in progress." ) );
752 return;
753 }
754
755 wxWindow* blocking_dialog = pcbframe->Kiway().GetBlockingDialog();
756
757 if( blocking_dialog )
758 blocking_dialog->Close( true );
759
761 BOARD_COMMIT commit( pcbframe );
762
763 // Create the "new" footprint
765 newFootprint->SetParent( pcbframe->GetBoard() );
766 newFootprint->SetLink( niluuid );
767 newFootprint->SetFlags(IS_NEW ); // whatever
768
769 for( PAD* pad : newFootprint->Pads() )
770 {
771 // Set the pads ratsnest settings to the global settings
772 pad->SetLocalRatsnestVisible( cfg->m_Display.m_ShowGlobalRatsnest );
773
774 // Pads in the library all have orphaned nets. Replace with Default.
775 pad->SetNetCode( 0 );
776 }
777
778 // Put it on FRONT layer,
779 // (Can be stored flipped if the lib is an archive built from a board)
780 if( newFootprint->IsFlipped() )
781 newFootprint->Flip( newFootprint->GetPosition(), cfg->m_FlipDirection );
782
783 KIGFX::VIEW_CONTROLS* viewControls = pcbframe->GetCanvas()->GetViewControls();
784 VECTOR2D cursorPos = viewControls->GetCursorPosition();
785
786 commit.Add( newFootprint );
787 viewControls->SetCrossHairCursorPosition( VECTOR2D( 0, 0 ), false );
788 pcbframe->PlaceFootprint( newFootprint );
789
790 newFootprint->SetPosition( VECTOR2I( 0, 0 ) );
791 viewControls->SetCrossHairCursorPosition( cursorPos, false );
792 commit.Push( _( "Insert Footprint" ) );
793
794 pcbframe->Raise();
795 toolMgr->PostAction( PCB_ACTIONS::placeFootprint, newFootprint );
796
797 newFootprint->ClearFlags();
798 }
799}
800
801
803{
804 if( PCBNEW_SETTINGS* cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg ) )
805 {
806 // We don't allow people to change this right now, so make sure it's on
808
810
811 // Fetch display and grid settings from Footprint Editor
813 {
814 m_displayOptions = fpedit->m_Display;
815 GetGalDisplayOptions().ReadWindowSettings( fpedit->m_Window );
816 }
817
818 m_libListWidth = cfg->m_FootprintViewerLibListWidth;
819 m_fpListWidth = cfg->m_FootprintViewerFPListWidth;
820
821 // Set parameters to a reasonable value.
822 int maxWidth = cfg->m_FootprintViewer.state.size_x - 80;
823
824 if( m_libListWidth + m_fpListWidth > maxWidth )
825 {
827 m_fpListWidth = maxWidth - m_libListWidth;
828 }
829 }
830}
831
832
834{
835 PCBNEW_SETTINGS* cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
836 wxCHECK( cfg, /*void*/ );
837
839
840 // We don't want to store anything other than the window settings
842
843 if( GetCanvas() && GetCanvas()->GetView() )
845
846 cfg->m_FootprintViewerLibListWidth = m_libList->GetSize().x;
847 cfg->m_FootprintViewerFPListWidth = m_fpList->GetSize().x;
848
849}
850
851
853{
854 if( PCBNEW_SETTINGS* cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg ) )
855 return &cfg->m_FootprintViewer;
856
857 wxFAIL_MSG( wxT( "FOOTPRINT_CHOOSER not running with PCBNEW_SETTINGS" ) );
858 return &aCfg->m_Window; // non-null fail-safe
859}
860
861
863{
865 return ::GetColorSettings( cfg ? cfg->m_ColorTheme : DEFAULT_THEME );
866}
867
868
870{
872
874
875 if( aFlags & ENVVARS_CHANGED )
877}
878
879
884
885
886void FOOTPRINT_VIEWER_FRAME::setCurNickname( const wxString& aNickname )
887{
889}
890
891
896
897
902
903
904void FOOTPRINT_VIEWER_FRAME::OnActivate( wxActivateEvent& event )
905{
906 if( event.GetActive() )
907 {
908 // Ensure we have the right library list:
909 std::vector< wxString > libNicknames = PROJECT_PCB::FootprintLibAdapter( &Prj() )->GetLibraryNames();
910 bool stale = false;
911
912 if( libNicknames.size() != m_libList->GetCount() )
913 stale = true;
914 else
915 {
916 for( unsigned ii = 0; ii < libNicknames.size(); ii++ )
917 {
918 if( libNicknames[ii] != m_libList->GetBaseString( ii ) )
919 {
920 stale = true;
921 break;
922 }
923 }
924 }
925
926 if( stale )
927 {
929 UpdateTitle();
930 }
931 }
932
933 event.Skip(); // required under wxMAC
934}
935
936
943
944
951
953{
954 switch( mail.Command() )
955 {
956 case MAIL_RELOAD_LIB:
958 break;
959
960 default:
961 break;
962 }
963}
964
965
966void FOOTPRINT_VIEWER_FRAME::Update3DView( bool aMarkDirty, bool aRefresh, const wxString* aTitle )
967{
968 wxString title = _( "3D Viewer" ) + wxT( " \u2014 " ) + getCurFootprintName();
969 PCB_BASE_FRAME::Update3DView( aMarkDirty, aRefresh, &title );
970}
971
972
977
978
980{
981 wxString title;
983
984 if( !getCurNickname().IsEmpty() )
985 {
986 if( std::optional<wxString> optUri = manager.GetFullURI( LIBRARY_TABLE_TYPE::FOOTPRINT, getCurNickname(), true ) )
987 title = getCurNickname() + wxT( " \u2014 " ) + *optUri;
988 else
989 title = _( "[no library selected]" );
990 }
991 else
992 {
993 title = _( "[no library selected]" );
994 }
995
996 title += wxT( " \u2014 " ) + _( "Footprint Library Browser" );
997
998 SetTitle( title );
999}
1000
1001
1003{
1004 if( !getCurNickname() )
1005 return;
1006
1007 int selection = m_fpList->FindString( getCurFootprintName(), true );
1008
1009 if( aMode == FPVIEWER_CONSTANTS::NEXT_PART )
1010 {
1011 if( selection != wxNOT_FOUND && selection < (int)m_fpList->GetCount() - 1 )
1012 selection++;
1013 }
1014
1016 {
1017 if( selection != wxNOT_FOUND && selection > 0 )
1018 selection--;
1019 }
1020
1021 if( selection != wxNOT_FOUND )
1022 {
1023 m_fpList->SetSelection( selection );
1024 m_fpList->EnsureVisible( selection );
1025
1026 setCurFootprintName( m_fpList->GetBaseString( selection ) );
1027
1028 // Delete the current footprint
1029 if( PCB_SELECTION_TOOL* selectionTool = m_toolManager->GetTool<PCB_SELECTION_TOOL>() )
1030 selectionTool->ClearSelection( true /* quiet mode */ );
1031
1033 GetBoard()->RemoveUnusedNets( nullptr );
1034
1036 getCurFootprintName(), false );
1037
1038 if( footprint )
1039 displayFootprint( footprint );
1040
1041 if( aMode != FPVIEWER_CONSTANTS::RELOAD_PART )
1042 setFPWatcher( footprint );
1043
1044 Update3DView( true, true );
1045 updateView();
1046 }
1047
1048 UpdateTitle();
1049
1050 GetCanvas()->Refresh();
1051}
1052
1053
1055{
1058
1060
1061 PCBNEW_SETTINGS* cfg = dynamic_cast<PCBNEW_SETTINGS*>( config() );
1062 wxCHECK( cfg, /* void */ );
1063
1066 else
1068
1069
1071}
1072
1073
1074void FOOTPRINT_VIEWER_FRAME::OnExitKiCad( wxCommandEvent& event )
1075{
1076 Kiway().OnKiCadExit();
1077}
1078
1079
1081{
1082 Close( false );
1083}
1084
1085
1090
int index
const char * name
wxBitmap KiBitmap(BITMAPS aBitmap, int aHeightTag)
Construct a wxBitmap from an image identifier Returns the image from the active theme if the image ha...
Definition bitmap.cpp:104
@ icon_footprint_browser
@ FPHOLDER
Definition board.h:314
static TOOL_ACTION toggleGrid
Definition actions.h:198
static TOOL_ACTION cursorSmallCrosshairs
Definition actions.h:152
static TOOL_ACTION toggleBoundingBoxes
Definition actions.h:157
static TOOL_ACTION centerContents
Definition actions.h:149
static TOOL_ACTION measureTool
Definition actions.h:252
static TOOL_ACTION selectionTool
Definition actions.h:251
static TOOL_ACTION zoomFitScreen
Definition actions.h:142
static TOOL_ACTION zoomTool
Definition actions.h:146
static TOOL_ACTION selectionClear
Clear the current selection.
Definition actions.h:224
static TOOL_ACTION cursor45Crosshairs
Definition actions.h:154
static TOOL_ACTION cursorFullCrosshairs
Definition actions.h:153
Manage TOOL_ACTION objects.
void SetConditions(const TOOL_ACTION &aAction, const ACTION_CONDITIONS &aConditions)
Set the conditions the UI elements for activating a specific tool action should use for determining t...
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
WINDOW_SETTINGS m_Window
wxString m_ColorTheme
Active color theme name.
virtual void Push(const wxString &aMessage=wxEmptyString, int aCommitFlags=0) override
Execute the changes.
std::shared_ptr< NET_SETTINGS > m_NetSettings
Handle actions specific to the board editor in PcbNew.
bool PlacingFootprint() const
Re-entrancy checker for above.
Abstract interface for BOARD_ITEMs capable of storing other items inside.
void Add(BOARD_ITEM *aItem, ADD_MODE aMode=ADD_MODE::INSERT, bool aSkipConnectivity=false) override
Removes an item from the container.
Definition board.cpp:1222
void SetBoardUse(BOARD_USE aUse)
Set what the board is going to be used for.
Definition board.h:334
FOOTPRINT * GetFirstFootprint() const
Get the first footprint on the board or nullptr.
Definition board.h:530
void SetVisibleAlls()
Change the bit-mask of visible element categories and layers.
Definition board.cpp:1016
void RemoveUnusedNets(BOARD_COMMIT *aCommit)
Definition board.h:1001
void DeleteAllFootprints()
Remove all footprints from the deque and free the memory associated with them.
Definition board.cpp:1755
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Definition board.cpp:1082
Color settings are a bit different than most of the settings objects in that there can be more than o...
COLOR4D GetColor(int aLayer) const
COMMIT & Add(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Add a new item to the model.
Definition commit.h:78
Handle actions that are shared between different applications.
Handles action that are shared between different applications.
Used to store the component pin name to net name (and pin function) associations stored in a netlist.
const wxString & GetPinFunction() const
virtual APP_SETTINGS_BASE * config() const
Return the settings object used in SaveSettings(), and is overloaded in KICAD_MANAGER_FRAME.
virtual void setupUIConditions()
Setup the UI conditions for the various actions and their controls in this frame.
wxAuiManager m_auimgr
ACTION_TOOLBAR * m_tbTopMain
int ScoreTerms(std::vector< SEARCH_TERM > &aWeightedTerms)
bool Find(const wxString &aTerm, int &aMatchersTriggered, int &aPosition)
Look in all existing matchers, return the earliest match of any of the existing.
void OnSelectGrid(wxCommandEvent &event)
Command event handler for selecting grid sizes.
void SetMsgPanel(const std::vector< MSG_PANEL_ITEM > &aList)
Clear the message panel and populates it with the contents of aList.
virtual void OnSelectZoom(wxCommandEvent &event)
Set the zoom factor when selected by the zoom list box in the main tool bar.
GAL_DISPLAY_OPTIONS_IMPL & GetGalDisplayOptions()
Return a reference to the gal rendering options used by GAL for rendering.
virtual void UpdateMsgPanel()
Redraw the message panel.
void StopDrawing()
Prevent the GAL canvas from further drawing until it is recreated or StartDrawing() is called.
KIGFX::VIEW_CONTROLS * GetViewControls() const
Return a pointer to the #VIEW_CONTROLS instance used in the panel.
void ForceRefresh()
Force a redraw.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
void SetEventDispatcher(TOOL_DISPATCHER *aEventDispatcher)
Set a dispatcher that processes events and forwards them to tools.
void SetFlags(EDA_ITEM_FLAGS aMask)
Definition eda_item.h:148
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition eda_item.h:150
virtual void SetParent(EDA_ITEM *aParent)
Definition eda_item.cpp:93
Specialization of the wxAuiPaneInfo class for KiCad panels.
SELECTION_CONDITION BoundingBoxes()
SELECTION_CONDITION CurrentTool(const TOOL_ACTION &aTool)
Create a functor testing if the specified tool is the current active tool in the frame.
SELECTION_CONDITION CursorSmallCrosshairs()
Create a functor testing if the cursor is full screen in a frame.
SELECTION_CONDITION GridVisible()
Create a functor testing if the grid is visible in a frame.
SELECTION_CONDITION Cursor45Crosshairs()
SELECTION_CONDITION CursorFullCrosshairs()
An interface to the global shared library manager that is schematic-specific and linked to one projec...
std::vector< FOOTPRINT * > GetFootprints(const wxString &aNickname, bool aBestEfforts=false)
Retrieves a list of footprints contained in a given loaded library.
FOOTPRINT * LoadFootprint(const wxString &aNickname, const wxString &aName, bool aKeepUUID)
Load a FOOTPRINT having aName from the library given by aNickname.
Component library viewer main window.
void displayFootprint(FOOTPRINT *aFootprint)
BOARD_ITEM_CONTAINER * GetModel() const override
void Update3DView(bool aMarkDirty, bool aRefresh, const wxString *aTitle=nullptr) override
Update the 3D view, if the viewer is opened by this frame.
void OnLibFilter(wxCommandEvent &aEvent)
void DClickOnFootprintList(wxMouseEvent &aEvent)
WINDOW_SETTINGS * GetWindowSettings(APP_SETTINGS_BASE *aCfg) override
Return a pointer to the window settings for this frame.
void OnCharHook(wxKeyEvent &aEvent) override
Capture the key event before it is sent to the GUI.
void selectPrev(WX_LISTBOX *aListBox)
void ReCreateLibraryList()
Create or recreate the list of current loaded libraries.
void CloseFootprintViewer(wxCommandEvent &event)
void KiwayMailIn(KIWAY_MAIL_EVENT &mail) override
Receive #KIWAY_ROUTED_EVENT messages from other players.
void setupUIConditions() override
Setup the UI conditions for the various actions and their controls in this frame.
FOOTPRINT_VIEWER_FRAME(KIWAY *aKiway, wxWindow *aParent)
void ReloadFootprint(FOOTPRINT *aFootprint) override
Override from PCB_BASE_FRAME which reloads the footprint from the library without setting the footpri...
SELECTION & GetCurrentSelection() override
Get the current selection from the canvas area.
void HardRedraw() override
Rebuild the GAL and redraws the screen.
virtual COLOR4D GetGridColor() override
void CommonSettingsChanged(int aFlags) override
Notification event that some of the common (suite-wide) settings have changed.
COLOR_SETTINGS * GetColorSettings(bool aForceRefresh=false) const override
Helper to retrieve the current color settings.
void AddFootprintToPCB()
Export the current footprint name and close the library browser.
void OnActivate(wxActivateEvent &event)
Called when the frame frame is activate to reload the libraries and component lists that can be chang...
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
void setCurFootprintName(const wxString &aName)
void OnSize(wxSizeEvent &event) override
Recalculate the size of toolbars and display panel when the frame size changes.
void OnExitKiCad(wxCommandEvent &event)
void setCurNickname(const wxString &aNickname)
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
void OnFPFilter(wxCommandEvent &aEvent)
void UpdateMsgPanel() override
Redraw the message panel.
void UpdateTitle()
Update the window title with current library information.
void SelectAndViewFootprint(FPVIEWER_CONSTANTS aMode)
Select and load the next or the previous footprint.
void selectNext(WX_LISTBOX *aListBox)
void ClickOnLibList(wxCommandEvent &aEvent)
void ClickOnFootprintList(wxCommandEvent &aEvent)
void SetPosition(const VECTOR2I &aPos) override
void SetLink(const KIID &aLink)
Definition footprint.h:1076
unsigned GetPadCount(INCLUDE_NPTH_T aIncludeNPTH=INCLUDE_NPTH_T(INCLUDE_NPTH)) const
Return the number of pads.
std::deque< PAD * > & Pads()
Definition footprint.h:306
bool IsFlipped() const
Definition footprint.h:524
const LIB_ID & GetFPID() const
Definition footprint.h:351
void Flip(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection) override
Flip this object, i.e.
BOARD_ITEM * Duplicate(bool addToParentGroup, BOARD_COMMIT *aCommit=nullptr) const override
Create a copy of this BOARD_ITEM.
std::vector< SEARCH_TERM > GetSearchTerms() override
VECTOR2I GetPosition() const override
Definition footprint.h:327
void ReadWindowSettings(WINDOW_SETTINGS &aCfg)
Read GAL config options from application-level config.
A color representation with 4 components: red, green, blue, alpha.
Definition color4d.h:105
bool m_axesEnabled
Crosshair drawing mode.
An interface for classes handling user events controlling the view behavior such as zooming,...
virtual void SetCrossHairCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true)=0
Move the graphic crosshair cursor to the requested position expressed in world coordinates.
VECTOR2D GetCursorPosition() const
Return the current cursor position in world coordinates.
double GetScale() const
Definition view.h:277
void Clear()
Remove all items from the view.
Definition view.cpp:1148
KIWAY & Kiway() const
Return a reference to the KIWAY that this object has an opportunity to participate in.
Carry a payload from one KIWAY_PLAYER to another within a PROJECT.
Definition kiway_mail.h:38
MAIL_T Command()
Returns the MAIL_T associated with this mail.
Definition kiway_mail.h:48
bool Destroy() override
Our version of Destroy() which is virtual from wxWidgets.
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
Definition kiway.h:295
void OnKiCadExit()
Definition kiway.cpp:760
virtual KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=nullptr)
Return the KIWAY_PLAYER* given a FRAME_T.
Definition kiway.cpp:407
wxWindow * GetBlockingDialog()
Gets the window pointer to the blocking dialog (to send it signals)
Definition kiway.cpp:684
virtual PROJECT & Prj() const
Return the PROJECT associated with this KIWAY.
Definition kiway.cpp:207
std::vector< wxString > GetLibraryNames() const
Returns a list of library nicknames that are available (skips any that failed to load)
std::optional< wxString > GetFullURI(LIBRARY_TABLE_TYPE aType, const wxString &aNickname, bool aSubstituted=false) const
Return the full location specifying URI for the LIB, either in original UI form or in environment var...
A logical library item identifier and consists of various portions much like a URI.
Definition lib_id.h:49
int SetLibNickname(const UTF8 &aLibNickname)
Override the logical library name portion of the LIB_ID to aLibNickname.
Definition lib_id.cpp:100
const UTF8 & GetLibItemName() const
Definition lib_id.h:102
const UTF8 & GetLibNickname() const
Return the logical library name portion of a LIB_ID.
Definition lib_id.h:87
static const wxString GetPinningSymbol()
void SetClearance(int aClearance)
Definition netclass.h:119
Handle the data for a net.
Definition netinfo.h:54
void SetNetname(const wxString &aNewName)
Set the long netname to aNetName, the short netname to the last token in the long netname's path,...
std::shared_ptr< NETCLASS > GetDefaultNetclass()
Gets the default netclass for the project.
Definition pad.h:55
DISPLAY_OPTIONS m_Display
FLIP_DIRECTION m_FlipDirection
Gather all the actions that are shared by tools.
Definition pcb_actions.h:51
static TOOL_ACTION padDisplayMode
static TOOL_ACTION rehatchShapes
static TOOL_ACTION graphicsOutlines
Display footprint graphics as outlines.
static TOOL_ACTION fpAutoZoom
static TOOL_ACTION textOutlines
Display texts as lines.
static TOOL_ACTION showPadNumbers
static TOOL_ACTION placeFootprint
static TOOL_ACTION saveFpToBoard
Base PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
void setFPWatcher(FOOTPRINT *aFootprint)
Create or removes a watcher on the specified footprint.
PCBNEW_SETTINGS * GetPcbNewSettings() const
PCB_BASE_FRAME(KIWAY *aKiway, wxWindow *aParent, FRAME_T aFrameType, const wxString &aTitle, const wxPoint &aPos, const wxSize &aSize, long aStyle, const wxString &aFrameName)
void CommonSettingsChanged(int aFlags) override
Notification event that some of the common (suite-wide) settings have changed.
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
BOARD * GetBoard() const
PCB_DISPLAY_OPTIONS m_displayOptions
void PlaceFootprint(FOOTPRINT *aFootprint, bool aRecreateRatsnest=true, std::optional< VECTOR2I > aPosition=std::nullopt)
Place aFootprint at the current cursor position (or provided one) and updates footprint coordinates w...
virtual void Update3DView(bool aMarkDirty, bool aRefresh, const wxString *aTitle=nullptr)
Update the 3D view, if the viewer is opened by this frame.
Handle actions that are shared between different frames in PcbNew.
Definition pcb_control.h:47
void UpdateColors()
Update the color settings in the painter and GAL.
virtual KIGFX::PCB_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
void DisplayBoard(BOARD *aBoard, PROGRESS_REPORTER *aReporter=nullptr)
Add all items from the current board to the VIEW, so they can be displayed by GAL.
Group generic conditions for PCB editor states.
SELECTION_CONDITION PadFillDisplay()
Create a functor that tests if the frame fills the pads.
SELECTION_CONDITION GraphicsFillDisplay()
Create a functor that tests if the frame fills graphics items.
SELECTION_CONDITION FootprintViewerAutoZoom()
Create a functor that tests if the footprint viewer should auto zoom on new footprints.
SELECTION_CONDITION PadNumbersDisplay()
Create a functor that tests if the pad numbers are displayed.
SELECTION_CONDITION TextFillDisplay()
Create a functor that tests if the frame fills text items.
The main frame for Pcbnew.
Generic tool for picking an item.
The selection tool: currently supports:
bool m_FootprintViewerAutoZoomOnSelect
true to use automatic zoom on fp selection
double m_FootprintViewerZoom
The last zoom level used (0 for auto)
Tool useful for viewing footprints.
virtual COMMON_SETTINGS * GetCommonSettings() const
Definition pgm_base.cpp:541
virtual LIBRARY_MANAGER & GetLibraryManager() const
Definition pgm_base.h:133
The backing store for a PROJECT, in JSON format.
static FOOTPRINT_LIBRARY_ADAPTER * FootprintLibAdapter(PROJECT *aProject)
@ PCB_FOOTPRINT_VIEWER_FP_NAME
Definition project.h:232
@ PCB_FOOTPRINT_VIEWER_LIB_NICKNAME
Definition project.h:233
virtual PROJECT_FILE & GetProjectFile() const
Definition project.h:203
virtual void SetRString(RSTRING_T aStringId, const wxString &aString)
Store a "retained string", which is any session and project specific string identified in enum RSTRIN...
Definition project.cpp:349
virtual const wxString & GetRString(RSTRING_T aStringId)
Return a "retained string", which is any session and project specific string identified in enum RSTRI...
Definition project.cpp:360
TOOL_MANAGER * m_toolManager
TOOL_MANAGER * GetToolManager() const
Return the MVC controller.
@ MODEL_RELOAD
Model changes (the sheet for a schematic)
Definition tool_base.h:80
Master controller class:
bool RunAction(const std::string &aActionName, T aParam)
Run the specified action immediately, pausing the current action to run the new one.
bool PostAction(const std::string &aActionName, T aParam)
Run the specified action after the current action (coroutine) ends.
void SetEnvironment(EDA_ITEM *aModel, KIGFX::VIEW *aView, KIGFX::VIEW_CONTROLS *aViewControls, APP_SETTINGS_BASE *aSettings, TOOLS_HOLDER *aFrame)
Set the work environment (model, view, view controls and the parent window).
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
Definition confirm.cpp:202
void DisplayError(wxWindow *aParent, const wxString &aText)
Display an error or warning message box with aMessage.
Definition confirm.cpp:177
This file is part of the common library.
#define CHECK(x)
#define ENABLE(x)
#define _(s)
Declaration of the eda_3d_viewer class.
#define KICAD_DEFAULT_DRAWFRAME_STYLE
#define FOOTPRINT_VIEWER_FRAME_NAME
#define IGNORE_PARENT_GROUP
Definition eda_item.h:56
#define IS_NEW
New item, just created.
Abstract pattern-matching tool and implementations.
@ CTX_LIBITEM
@ DO_NOT_INCLUDE_NPTH
Definition footprint.h:73
@ FRAME_PCB_EDITOR
Definition frame_type.h:42
@ FRAME_FOOTPRINT_VIEWER
Definition frame_type.h:45
@ ID_ON_GRID_SELECT
Definition id.h:113
@ ID_ON_ZOOM_SELECT
Definition id.h:112
PROJECT & Prj()
Definition kicad.cpp:642
KIID niluuid(0)
@ LAYER_GRID
Definition layer_ids.h:254
@ MAIL_RELOAD_LIB
Definition mail_type.h:57
Message panel definition file.
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
Definition kicad_algo.h:100
#define _HKI(x)
Definition page_info.cpp:44
@ ID_MODVIEW_FOOTPRINT_LIST
Definition pcbnew_id.h:86
@ ID_MODVIEW_FOOTPRINT_FILTER
Definition pcbnew_id.h:85
@ ID_MODVIEW_LIB_FILTER
Definition pcbnew_id.h:83
@ ID_MODVIEW_LIB_LIST
Definition pcbnew_id.h:84
BOARD * GetBoard()
static PGM_BASE * process
PGM_BASE & Pgm()
The global program "get" accessor.
see class PGM_BASE
CITER next(CITER it)
Definition ptree.cpp:124
#define DEFAULT_THEME
T * GetToolbarSettings(const wxString &aFilename)
T * GetAppSettings(const char *aFilename)
KIWAY Kiway(KFCTL_STANDALONE)
std::vector< FAB_LAYER_COLOR > dummy
std::vector< wxString > pinned_fp_libs
Store the common settings that are saved and loaded for each window / frame.
CURSOR_SETTINGS cursor
#define ENVVARS_CHANGED
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:695
VECTOR2< double > VECTOR2D
Definition vector2d.h:694
Definition of file extensions used in Kicad.
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.