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>
30#include <footprint.h>
31#include <confirm.h>
32#include <eda_pattern_match.h>
33#include <footprint_info.h>
35#include <fp_lib_table.h>
36#include <kiway.h>
37#include <kiway_express.h>
39#include <widgets/msgpanel.h>
40#include <widgets/wx_listbox.h>
43#include <pcb_draw_panel_gal.h>
44#include <pcb_painter.h>
45#include <pcbnew_id.h>
47#include <pgm_base.h>
48#include <pcbnew_settings.h>
49#include <project_pcb.h>
53#include <tool/action_toolbar.h>
54#include <tool/common_control.h>
55#include <tool/common_tools.h>
56#include <tool/selection.h>
58#include <tool/tool_manager.h>
59#include <tool/zoom_tool.h>
61#include <tools/pcb_actions.h>
63#include <tools/pcb_control.h>
69#include <wx/srchctrl.h>
70#include <wx/tokenzr.h>
71#include <wx/choice.h>
72#include <wx/hyperlink.h>
73
74#include "invoke_pcb_dialog.h"
75
76using namespace std::placeholders;
77
78BEGIN_EVENT_TABLE( FOOTPRINT_VIEWER_FRAME, PCB_BASE_FRAME )
79 // Window events
82
83 EVT_MENU( wxID_EXIT, FOOTPRINT_VIEWER_FRAME::OnExitKiCad )
85
86 // Toolbar events
89
92
93 // listbox events
96
97END_EVENT_TABLE()
98
99
101 PCB_BASE_FRAME( aKiway, aParent, FRAME_FOOTPRINT_VIEWER, _( "Footprint Library Browser" ),
102 wxDefaultPosition, wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE,
104 m_comp( LIB_ID(), wxEmptyString, wxEmptyString, KIID_PATH(), {} )
105{
106 m_aboutTitle = _HKI( "KiCad Footprint Library Browser" );
107
108 // Force the items to always snap
109 m_magneticItems.pads = MAGNETIC_OPTIONS::CAPTURE_ALWAYS;
110 m_magneticItems.tracks = MAGNETIC_OPTIONS::CAPTURE_ALWAYS;
111 m_magneticItems.graphics = true;
112
113 // Force the frame name used in config. the footprint viewer frame has a name
114 // depending on aFrameType (needed to identify the frame by wxWidgets),
115 // but only one configuration is preferable.
116 m_configName = FOOTPRINT_VIEWER_FRAME_NAME;
117
118 // Give an icon
119 wxIcon icon;
120 icon.CopyFromBitmap( KiBitmap( BITMAPS::icon_footprint_browser ) );
121 SetIcon( icon );
122
123 m_libListWidth = 200;
124 m_fpListWidth = 300;
125
126 wxPanel* libPanel = new wxPanel( this );
127 wxSizer* libSizer = new wxBoxSizer( wxVERTICAL );
128
129 m_libFilter = new wxSearchCtrl( libPanel, ID_MODVIEW_LIB_FILTER, wxEmptyString,
130 wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
131 m_libFilter->SetDescriptiveText( _( "Filter" ) );
132 libSizer->Add( m_libFilter, 0, wxEXPAND, 5 );
133
134 m_libList = new WX_LISTBOX( libPanel, ID_MODVIEW_LIB_LIST, wxDefaultPosition, wxDefaultSize,
135 0, nullptr, wxLB_HSCROLL | wxNO_BORDER );
136 libSizer->Add( m_libList, 1, wxEXPAND, 5 );
137
138 libPanel->SetSizer( libSizer );
139 libPanel->Fit();
140
141 wxPanel* fpPanel = new wxPanel( this );
142 wxSizer* fpSizer = new wxBoxSizer( wxVERTICAL );
143
144 m_fpFilter = new wxSearchCtrl( fpPanel, ID_MODVIEW_FOOTPRINT_FILTER, wxEmptyString,
145 wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
146 m_fpFilter->SetDescriptiveText( _( "Filter" ) );
147 m_fpFilter->SetToolTip(
148 _( "Filter on footprint name, keywords, description and pad count.\n"
149 "Search terms are separated by spaces. All search terms must match.\n"
150 "A term which is a number will also match against the pad count." ) );
151 fpSizer->Add( m_fpFilter, 0, wxEXPAND, 5 );
152
153#ifdef __WXGTK__
154 // wxSearchCtrl vertical height is not calculated correctly on some GTK setups
155 // See https://gitlab.com/kicad/code/kicad/-/issues/9019
156 m_libFilter->SetMinSize( wxSize( -1, GetTextExtent( wxT( "qb" ) ).y + 10 ) );
157 m_fpFilter->SetMinSize( wxSize( -1, GetTextExtent( wxT( "qb" ) ).y + 10 ) );
158#endif
159
160 m_fpList = new WX_LISTBOX( fpPanel, ID_MODVIEW_FOOTPRINT_LIST, wxDefaultPosition, wxDefaultSize,
161 0, nullptr, wxLB_HSCROLL | wxNO_BORDER );
162
163 m_fpList->Connect( wxEVT_LEFT_DCLICK,
165 nullptr, this );
166 fpSizer->Add( m_fpList, 1, wxEXPAND, 5 );
167
168 fpPanel->SetSizer( fpSizer );
169 fpPanel->Fit();
170
171 // Create GAL canvas
172 m_canvasType = loadCanvasTypeSetting();
173
174 PCB_DRAW_PANEL_GAL* drawPanel = new PCB_DRAW_PANEL_GAL( this, -1, wxPoint( 0, 0 ), m_frameSize,
175 GetGalDisplayOptions(), m_canvasType );
176 SetCanvas( drawPanel );
177
178 SetBoard( new BOARD() );
179
180 // This board will only be used to hold a footprint for viewing
182
183 // In viewer, the default net clearance is not known (it depends on the actual board).
184 // So we do not show the default clearance, by setting it to 0
185 // The footprint or pad specific clearance will be shown
186 GetBoard()->GetDesignSettings().m_NetSettings->GetDefaultNetclass()->SetClearance( 0 );
187
188 // Don't show the default board solder mask clearance in the footprint viewer. Only the
189 // footprint or pad clearance setting should be shown if it is not 0.
191
192 // Ensure all layers and items are visible:
194 SetScreen( new PCB_SCREEN( GetPageSizeIU() ) );
195
196 GetScreen()->m_Center = true; // Center coordinate origins on screen.
197 LoadSettings( config() );
198 GetGalDisplayOptions().m_axesEnabled = true;
199
200 // Create the manager and dispatcher & route draw panel events to the dispatcher
201 m_toolManager = new TOOL_MANAGER;
202 m_toolManager->SetEnvironment( GetBoard(), drawPanel->GetView(),
203 drawPanel->GetViewControls(), config(), this );
204 m_actions = new PCB_ACTIONS();
205 m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager );
206 drawPanel->SetEventDispatcher( m_toolDispatcher );
207
208 m_toolManager->RegisterTool( new PCB_CONTROL );
209 m_toolManager->RegisterTool( new PCB_SELECTION_TOOL );
210 m_toolManager->RegisterTool( new COMMON_TOOLS ); // for std context menus (zoom & grid)
211 m_toolManager->RegisterTool( new COMMON_CONTROL );
212 m_toolManager->RegisterTool( new PCB_PICKER_TOOL ); // for setting grid origin
213 m_toolManager->RegisterTool( new ZOOM_TOOL );
214 m_toolManager->RegisterTool( new PCB_VIEWER_TOOLS );
215
216 m_toolManager->GetTool<PCB_VIEWER_TOOLS>()->SetFootprintFrame( true );
217
218 m_toolManager->InitTools();
219 m_toolManager->InvokeTool( "common.InteractiveSelection" );
220
221 setupUIConditions();
222
223 m_toolbarSettings = GetToolbarSettings<FOOTPRINT_VIEWER_TOOLBAR_SETTINGS>( "fpviewer-toolbars" );
224 configureToolbars();
225 RecreateToolbars();
226 ReCreateMenuBar();
227
228 ReCreateLibraryList();
229 UpdateTitle();
230
231 // Call resolveCanvasType after loading settings:
232 resolveCanvasType();
233
234 // If a footprint was previously loaded, reload it
235 if( getCurNickname().size() && getCurFootprintName().size() )
236 {
237 LIB_ID id;
238
239 id.SetLibNickname( getCurNickname() );
240 id.SetLibItemName( getCurFootprintName() );
241
242 FOOTPRINT* footprint = loadFootprint( id );
243
244 if( footprint )
245 {
246 GetBoard()->Add( footprint );
247 setFPWatcher( footprint );
248
249 m_toolManager->RunAction( PCB_ACTIONS::rehatchShapes );
250 }
251 }
252
253 drawPanel->DisplayBoard( m_pcb );
254
255 m_auimgr.SetManagedWindow( this );
256
257 // Horizontal items; layers 4 - 6
258 m_auimgr.AddPane( m_tbTopMain, EDA_PANE().VToolbar().Name( "TopMainToolbar" ).Top().Layer(6) );
259 m_auimgr.AddPane( m_tbLeft, EDA_PANE().VToolbar().Name( "LeftToolbar" ).Left().Layer(3) );
260 m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( "MsgPanel" ).Bottom().Layer(6) );
261
262 // Vertical items; layers 1 - 3
263 m_auimgr.AddPane( libPanel, EDA_PANE().Palette().Name( "Libraries" ).Left().Layer(2)
264 .CaptionVisible( false ).MinSize( 100, -1 ).BestSize( 200, -1 ) );
265 m_auimgr.AddPane( fpPanel, EDA_PANE().Palette().Name( "Footprints" ).Left().Layer(1)
266 .CaptionVisible( false ).MinSize( 100, -1 ).BestSize( 300, -1 ) );
267
268 m_auimgr.AddPane( GetCanvas(), EDA_PANE().Canvas().Name( "DrawFrame" ).Center() );
269
270 // after changing something to the aui manager call Update() to reflect the changes
271 m_auimgr.Update();
272
273 if( m_libListWidth > 0 )
274 SetAuiPaneSize( m_auimgr, m_auimgr.GetPane( "Libraries" ), m_libListWidth, -1 );
275
276 if( m_fpListWidth > 0 )
277 SetAuiPaneSize( m_auimgr, m_auimgr.GetPane( "Footprints" ), m_fpListWidth, -1 );
278
279 // The canvas should not steal the focus from the list boxes
280 GetCanvas()->SetCanFocus( false );
281 GetCanvas()->GetGAL()->SetAxesEnabled( true );
282 ActivateGalCanvas();
283
284 // Restore last zoom and auto zoom option. (If auto-zooming we'll adjust when we load the footprint.)
285 if( PCBNEW_SETTINGS* cfg = GetPcbNewSettings() )
286 GetCanvas()->GetView()->SetScale( cfg->m_FootprintViewerZoom );
287
288 updateView();
289 setupUnits( config() );
290
291 ReCreateFootprintList();
292 Raise(); // On some window managers, this is needed
293 Show( true );
294}
295
296
298{
299 // Shutdown all running tools
300 if( m_toolManager )
302
304 GetCanvas()->GetView()->Clear();
305 // Be sure any event cannot be fired after frame deletion:
306 GetCanvas()->SetEvtHandlerEnabled( false );
307 m_fpList->Disconnect( wxEVT_LEFT_DCLICK,
309 nullptr, this );
310 setFPWatcher( nullptr );
311}
312
313
315{
316 return m_toolManager->GetTool<PCB_SELECTION_TOOL>()->GetSelection();
317}
318
319
321{
323
324 if( FOOTPRINT* fp = static_cast<FOOTPRINT*>( GetModel() ) )
325 {
326 std::vector<MSG_PANEL_ITEM> msgItems;
327 fp->GetMsgPanelInfo( this, msgItems );
328 SetMsgPanel( msgItems );
329 }
330}
331
332
334{
336
338 PCB_EDITOR_CONDITIONS cond( this );
339
340 wxASSERT( mgr );
341
342 auto addToBoardCond =
343 [this]( const SELECTION& )
344 {
345 return ( GetBoard()->GetFirstFootprint() != nullptr );
346 };
347
348#define ENABLE( x ) ACTION_CONDITIONS().Enable( x )
349#define CHECK( x ) ACTION_CONDITIONS().Check( x )
350
353 mgr->SetConditions( ACTIONS::millimetersUnits, CHECK( cond.Units( EDA_UNITS::MM ) ) );
354 mgr->SetConditions( ACTIONS::inchesUnits, CHECK( cond.Units( EDA_UNITS::INCH ) ) );
355 mgr->SetConditions( ACTIONS::milsUnits, CHECK( cond.Units( EDA_UNITS::MILS ) ) );
356
357 mgr->SetConditions( PCB_ACTIONS::saveFpToBoard, ENABLE( addToBoardCond ) );
358
365
371
373
374#undef ENABLE
375#undef CHECK
376}
377
378
380{
381 // A workaround to avoid flicker, in modal mode when modview frame is destroyed,
382 // when the aui toolbar is not docked (i.e. shown in a miniframe)
383 // (useful on windows only)
384 m_tbTopMain->SetFocus();
385
387
388 Destroy();
389}
390
391
392void FOOTPRINT_VIEWER_FRAME::OnSize( wxSizeEvent& SizeEv )
393{
394 if( m_auimgr.GetManagedWindow() )
395 m_auimgr.Update();
396
397 SizeEv.Skip();
398}
399
400
402{
403 m_libList->Clear();
404
407 std::vector<wxString> nicknames = PROJECT_PCB::PcbFootprintLibs( &Prj() )->GetLogicalLibs();
408 std::vector<wxString> pinnedMatches;
409 std::vector<wxString> otherMatches;
410
411 auto process =
412 [&]( const wxString& aNickname )
413 {
414 if( alg::contains( project.m_PinnedFootprintLibs, aNickname )
415 || alg::contains( cfg->m_Session.pinned_fp_libs, aNickname ) )
416 {
417 pinnedMatches.push_back( aNickname );
418 }
419 else
420 {
421 otherMatches.push_back( aNickname );
422 }
423 };
424
425 if( m_libFilter->GetValue().IsEmpty() )
426 {
427 for( const wxString& nickname : nicknames )
428 process( nickname );
429 }
430 else
431 {
432 wxStringTokenizer tokenizer( m_libFilter->GetValue() );
433
434 while( tokenizer.HasMoreTokens() )
435 {
436 const wxString term = tokenizer.GetNextToken().Lower();
437 EDA_COMBINED_MATCHER matcher( term, CTX_LIBITEM );
438
439 for( const wxString& nickname : nicknames )
440 {
441 if( matcher.Find( nickname.Lower() ) )
442 process( nickname );
443 }
444 }
445 }
446
447 for( const wxString& nickname : pinnedMatches )
449
450 for( const wxString& nickname : otherMatches )
451 m_libList->Append( nickname );
452
453 // Search for a previous selection:
454 int index = m_libList->FindString( getCurNickname(), true );
455
456 if( index == wxNOT_FOUND )
457 {
458 if( m_libList->GetCount() > 0 )
459 {
460 m_libList->SetSelection( 0 );
461 wxCommandEvent dummy;
463 }
464 else
465 {
466 setCurNickname( wxEmptyString );
467 setCurFootprintName( wxEmptyString );
468 }
469 }
470 else
471 {
472 m_libList->SetSelection( index, true );
473 wxCommandEvent dummy;
475 }
476
477 GetCanvas()->Refresh();
478}
479
480
482{
483 m_fpList->Clear();
484
485 if( !getCurNickname() )
486 setCurFootprintName( wxEmptyString );
487
488 auto fp_info_list = FOOTPRINT_LIST::GetInstance( Kiway() );
489
490 wxString nickname = getCurNickname();
491
492 fp_info_list->ReadFootprintFiles( PROJECT_PCB::PcbFootprintLibs( &Prj() ), !nickname ? nullptr : &nickname );
493
494 if( fp_info_list->GetErrorCount() )
495 {
496 fp_info_list->DisplayErrors( this );
497
498 // For footprint libraries that support one footprint per file, there may have been
499 // valid footprints read so show the footprints that loaded properly.
500 if( fp_info_list->GetList().empty() )
501 return;
502 }
503
504 std::set<wxString> excludes;
505
506 if( !m_fpFilter->GetValue().IsEmpty() )
507 {
508 wxStringTokenizer tokenizer( m_fpFilter->GetValue() );
509
510 while( tokenizer.HasMoreTokens() )
511 {
512 const wxString filterTerm = tokenizer.GetNextToken().Lower();
513 EDA_COMBINED_MATCHER matcher( filterTerm, CTX_LIBITEM );
514
515 for( const std::unique_ptr<FOOTPRINT_INFO>& footprint : fp_info_list->GetList() )
516 {
517 std::vector<SEARCH_TERM> searchTerms = footprint->GetSearchTerms();
518 int matched = matcher.ScoreTerms( searchTerms );
519
520 if( filterTerm.IsNumber() && wxAtoi( filterTerm ) == (int)footprint->GetPadCount() )
521 matched++;
522
523 if( !matched )
524 excludes.insert( footprint->GetFootprintName() );
525 }
526 }
527 }
528
529 for( const std::unique_ptr<FOOTPRINT_INFO>& footprint : fp_info_list->GetList() )
530 {
531 if( !excludes.count( footprint->GetFootprintName() ) )
532 m_fpList->Append( footprint->GetFootprintName() );
533 }
534
535 int index = m_fpList->FindString( getCurFootprintName(), true );
536
537 if( index == wxNOT_FOUND )
538 {
539 if( m_fpList->GetCount() > 0 )
540 {
541 m_fpList->SetSelection( 0 );
542 m_fpList->EnsureVisible( 0 );
543
544 wxCommandEvent dummy;
546 }
547 else
548 {
549 setCurFootprintName( wxEmptyString );
550 }
551 }
552 else
553 {
554 m_fpList->SetSelection( index, true );
555 m_fpList->EnsureVisible( index );
556 }
557}
558
559
560void FOOTPRINT_VIEWER_FRAME::OnLibFilter( wxCommandEvent& aEvent )
561{
563
564 // Required to avoid interaction with SetHint()
565 // See documentation for wxTextEntry::SetHint
566 aEvent.Skip();
567}
568
569
570void FOOTPRINT_VIEWER_FRAME::OnFPFilter( wxCommandEvent& aEvent )
571{
573
574 // Required to avoid interaction with SetHint()
575 // See documentation for wxTextEntry::SetHint
576 aEvent.Skip();
577}
578
579
580void FOOTPRINT_VIEWER_FRAME::OnCharHook( wxKeyEvent& aEvent )
581{
582 if( aEvent.GetKeyCode() == WXK_UP )
583 {
584 if( m_libFilter->HasFocus() || m_libList->HasFocus() )
586 else
588 }
589 else if( aEvent.GetKeyCode() == WXK_DOWN )
590 {
591 if( m_libFilter->HasFocus() || m_libList->HasFocus() )
593 else
595 }
596 else if( aEvent.GetKeyCode() == WXK_TAB && m_libFilter->HasFocus() )
597 {
598 if( !aEvent.ShiftDown() )
599 m_fpFilter->SetFocus();
600 else
601 aEvent.Skip();
602 }
603 else if( aEvent.GetKeyCode() == WXK_TAB && m_fpFilter->HasFocus() )
604 {
605 if( aEvent.ShiftDown() )
606 m_libFilter->SetFocus();
607 else
608 aEvent.Skip();
609 }
610 else if( ( aEvent.GetKeyCode() == WXK_RETURN || aEvent.GetKeyCode() == WXK_NUMPAD_ENTER )
611 && m_fpList->GetSelection() >= 0 )
612 {
614 }
615 else
616 {
617 aEvent.Skip();
618 }
619}
620
621
623{
624 int prev = aListBox->GetSelection() - 1;
625
626 if( prev >= 0 )
627 {
628 aListBox->SetSelection( prev );
629 aListBox->EnsureVisible( prev );
630
631 wxCommandEvent dummy;
632
633 if( aListBox == m_libList )
635 else
637 }
638}
639
640
642{
643 int next = aListBox->GetSelection() + 1;
644
645 if( next < (int)aListBox->GetCount() )
646 {
647 aListBox->SetSelection( next );
648 aListBox->EnsureVisible( next );
649
650 wxCommandEvent dummy;
651
652 if( aListBox == m_libList )
654 else
656 }
657}
658
659
660void FOOTPRINT_VIEWER_FRAME::ClickOnLibList( wxCommandEvent& aEvent )
661{
662 int ii = m_libList->GetSelection();
663
664 if( ii < 0 )
665 return;
666
667 wxString name = m_libList->GetBaseString( ii );
668
669 if( getCurNickname() == name )
670 return;
671
673
674 // Ensure the displayed footprint is loade/reloaded from the new library
675 setCurFootprintName( wxEmptyString );
676
678 UpdateTitle();
679}
680
681
683{
684 if( m_fpList->GetCount() == 0 )
685 return;
686
687 int ii = m_fpList->GetSelection();
688
689 if( ii < 0 )
690 return;
691
692 wxString name = m_fpList->GetBaseString( ii );
693
694 if( getCurFootprintName().CmpNoCase( name ) != 0 )
695 {
697 SelectAndViewFootprint( FPVIEWER_CONSTANTS::NEW_PART );
698 }
699}
700
701
703{
704 for( PAD* pad : aFootprint->Pads() )
705 {
706 const COMPONENT_NET& net = m_comp.GetNet( pad->GetNumber() );
707
708 if( !net.GetPinFunction().IsEmpty() )
709 {
710 NETINFO_ITEM* netinfo = new NETINFO_ITEM( GetBoard() );
711 netinfo->SetNetname( net.GetPinFunction() );
712 GetBoard()->Add( netinfo );
713 pad->SetNet( netinfo );
714 }
715 }
716
717 GetBoard()->Add( aFootprint );
718
720}
721
722
724{
726}
727
728
730{
731 if( GetBoard()->GetFirstFootprint() )
732 {
733 PCB_EDIT_FRAME* pcbframe = (PCB_EDIT_FRAME*) Kiway().Player( FRAME_PCB_EDITOR, false );
734
735 if( pcbframe == nullptr ) // happens when the board editor is not active (or closed)
736 {
737 DisplayErrorMessage( this, _( "No board currently open." ) );
738 return;
739 }
740
741 PCBNEW_SETTINGS* cfg = pcbframe->GetPcbNewSettings();
742 TOOL_MANAGER* toolMgr = pcbframe->GetToolManager();
743
745 {
746 DisplayError( this, _( "Previous footprint placement still in progress." ) );
747 return;
748 }
749
750 wxWindow* blocking_dialog = pcbframe->Kiway().GetBlockingDialog();
751
752 if( blocking_dialog )
753 blocking_dialog->Close( true );
754
756 BOARD_COMMIT commit( pcbframe );
757
758 // Create the "new" footprint
760 newFootprint->SetParent( pcbframe->GetBoard() );
761 newFootprint->SetLink( niluuid );
762 newFootprint->SetFlags(IS_NEW ); // whatever
763
764 for( PAD* pad : newFootprint->Pads() )
765 {
766 // Set the pads ratsnest settings to the global settings
767 pad->SetLocalRatsnestVisible( cfg->m_Display.m_ShowGlobalRatsnest );
768
769 // Pads in the library all have orphaned nets. Replace with Default.
770 pad->SetNetCode( 0 );
771 }
772
773 // Put it on FRONT layer,
774 // (Can be stored flipped if the lib is an archive built from a board)
775 if( newFootprint->IsFlipped() )
776 newFootprint->Flip( newFootprint->GetPosition(), cfg->m_FlipDirection );
777
778 KIGFX::VIEW_CONTROLS* viewControls = pcbframe->GetCanvas()->GetViewControls();
779 VECTOR2D cursorPos = viewControls->GetCursorPosition();
780
781 commit.Add( newFootprint );
782 viewControls->SetCrossHairCursorPosition( VECTOR2D( 0, 0 ), false );
783 pcbframe->PlaceFootprint( newFootprint );
784
785 newFootprint->SetPosition( VECTOR2I( 0, 0 ) );
786 viewControls->SetCrossHairCursorPosition( cursorPos, false );
787 commit.Push( _( "Insert Footprint" ) );
788
789 pcbframe->Raise();
790 toolMgr->PostAction( PCB_ACTIONS::placeFootprint, newFootprint );
791
792 newFootprint->ClearFlags();
793 }
794}
795
796
798{
799 if( PCBNEW_SETTINGS* cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg ) )
800 {
801 // We don't allow people to change this right now, so make sure it's on
803
805
806 // Fetch display and grid settings from Footprint Editor
807 if( FOOTPRINT_EDITOR_SETTINGS* fpedit = GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>( "fpedit" ) )
808 {
809 m_displayOptions = fpedit->m_Display;
810 GetGalDisplayOptions().ReadWindowSettings( fpedit->m_Window );
811 }
812
813 m_libListWidth = cfg->m_FootprintViewerLibListWidth;
814 m_fpListWidth = cfg->m_FootprintViewerFPListWidth;
815
816 // Set parameters to a reasonable value.
817 int maxWidth = cfg->m_FootprintViewer.state.size_x - 80;
818
819 if( m_libListWidth + m_fpListWidth > maxWidth )
820 {
822 m_fpListWidth = maxWidth - m_libListWidth;
823 }
824 }
825}
826
827
829{
830 PCBNEW_SETTINGS* cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
831 wxCHECK( cfg, /*void*/ );
832
834
835 // We don't want to store anything other than the window settings
837
838 if( GetCanvas() && GetCanvas()->GetView() )
840
841 cfg->m_FootprintViewerLibListWidth = m_libList->GetSize().x;
842 cfg->m_FootprintViewerFPListWidth = m_fpList->GetSize().x;
843
844}
845
846
848{
849 PCBNEW_SETTINGS* cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
850 wxCHECK_MSG( cfg, nullptr, wxT( "config not existing" ) );
851
852 return &cfg->m_FootprintViewer;
853}
854
855
857{
858 FOOTPRINT_EDITOR_SETTINGS* cfg = GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>( "fpedit" );
859 return ::GetColorSettings( cfg ? cfg->m_ColorTheme : DEFAULT_THEME );
860}
861
862
864{
866
868
869 if( aFlags & ENVVARS_CHANGED )
871}
872
873
875{
877}
878
879
880void FOOTPRINT_VIEWER_FRAME::setCurNickname( const wxString& aNickname )
881{
883}
884
885
887{
889}
890
891
893{
895}
896
897
898void FOOTPRINT_VIEWER_FRAME::OnActivate( wxActivateEvent& event )
899{
900 if( event.GetActive() )
901 {
902 // Ensure we have the right library list:
903 std::vector< wxString > libNicknames = PROJECT_PCB::PcbFootprintLibs( &Prj() )->GetLogicalLibs();
904 bool stale = false;
905
906 if( libNicknames.size() != m_libList->GetCount() )
907 stale = true;
908 else
909 {
910 for( unsigned ii = 0; ii < libNicknames.size(); ii++ )
911 {
912 if( libNicknames[ii] != m_libList->GetBaseString( ii ) )
913 {
914 stale = true;
915 break;
916 }
917 }
918 }
919
920 if( stale )
921 {
923 UpdateTitle();
924 }
925 }
926
927 event.Skip(); // required under wxMAC
928}
929
930
932{
933 setCurNickname( aFootprint->GetFPID().GetLibNickname() );
934 setCurFootprintName( aFootprint->GetFPID().GetLibItemName() );
935 SelectAndViewFootprint( FPVIEWER_CONSTANTS::RELOAD_PART );
936}
937
938
940{
943 ReloadFootprint( GetBoard()->GetFirstFootprint() );
944}
945
947{
948 switch( mail.Command() )
949 {
950 case MAIL_RELOAD_LIB:
952 break;
953
954 default:
955 break;
956 }
957}
958
959
960void FOOTPRINT_VIEWER_FRAME::Update3DView( bool aMarkDirty, bool aRefresh, const wxString* aTitle )
961{
962 wxString title = _( "3D Viewer" ) + wxT( " \u2014 " ) + getCurFootprintName();
963 PCB_BASE_FRAME::Update3DView( aMarkDirty, aRefresh, &title );
964}
965
966
968{
970}
971
972
974{
975 wxString title;
976
977 if( !getCurNickname().IsEmpty() )
978 {
979 try
980 {
982 const LIB_TABLE_ROW* row = libtable->FindRow( getCurNickname() );
983
984 title = getCurNickname() + wxT( " \u2014 " ) + row->GetFullURI( true );
985 }
986 catch( ... )
987 {
988 title = _( "[no library selected]" );
989 }
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
1015 if( aMode == FPVIEWER_CONSTANTS::PREVIOUS_PART )
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
1027
1028 // Delete the current footprint
1030 selectionTool->ClearSelection( true /* quiet mode */ );
1031
1033 GetBoard()->RemoveUnusedNets( nullptr );
1034
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
1087{
1088 return GetBoard()->GetFirstFootprint();
1089}
1090
const char * name
Definition: DXF_plotter.cpp:62
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
static TOOL_ACTION toggleGrid
Definition: actions.h:195
static TOOL_ACTION millimetersUnits
Definition: actions.h:203
static TOOL_ACTION milsUnits
Definition: actions.h:202
static TOOL_ACTION toggleBoundingBoxes
Definition: actions.h:154
static TOOL_ACTION centerContents
Definition: actions.h:148
static TOOL_ACTION inchesUnits
Definition: actions.h:201
static TOOL_ACTION toggleCursorStyle
Definition: actions.h:151
static TOOL_ACTION measureTool
Definition: actions.h:245
static TOOL_ACTION selectionTool
Definition: actions.h:244
static TOOL_ACTION zoomFitScreen
Definition: actions.h:141
static TOOL_ACTION zoomTool
Definition: actions.h:145
static TOOL_ACTION selectionClear
Clear the current selection.
Definition: actions.h:217
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.
Definition: app_settings.h:108
wxString m_ColorTheme
Active color theme name.
Definition: app_settings.h:235
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.
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:317
void Add(BOARD_ITEM *aItem, ADD_MODE aMode=ADD_MODE::INSERT, bool aSkipConnectivity=false) override
Removes an item from the container.
Definition: board.cpp:1126
void SetBoardUse(BOARD_USE aUse)
Set what the board is going to be used for.
Definition: board.h:329
FOOTPRINT * GetFirstFootprint() const
Get the first footprint on the board or nullptr.
Definition: board.h:487
void SetVisibleAlls()
Change the bit-mask of visible element categories and layers.
Definition: board.cpp:943
void RemoveUnusedNets(BOARD_COMMIT *aCommit)
Definition: board.h:927
void DeleteAllFootprints()
Remove all footprints from the deque and free the memory associated with them.
Definition: board.cpp:1534
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Definition: board.cpp:1011
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:79
Handle actions that are shared between different applications.
Handles action that are shared between different applications.
Definition: common_tools.h:38
Used to store the component pin name to net name (and pin function) associations stored in a netlist.
Definition: pcb_netlist.h:47
const wxString & GetPinFunction() const
Definition: pcb_netlist.h:62
const COMPONENT_NET & GetNet(unsigned aIndex) const
Definition: pcb_netlist.h:128
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:141
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: eda_item.h:143
virtual void SetParent(EDA_ITEM *aParent)
Definition: eda_item.h:112
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 Units(EDA_UNITS aUnit)
Create a functor that tests if the frame has the specified units.
SELECTION_CONDITION GridVisible()
Create a functor testing if the grid is visible in a frame.
SELECTION_CONDITION FullscreenCursor()
Create a functor testing if the cursor is full screen in a frame.
static FOOTPRINT_LIST * GetInstance(KIWAY &aKiway)
Factory function to return a FOOTPRINT_LIST via Kiway.
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)
void KiwayMailIn(KIWAY_EXPRESS &mail) override
Receive KIWAY_EXPRESS messages from other players.
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 setupUIConditions() override
Setup the UI conditions for the various actions and their controls in this frame.
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
Definition: footprint.cpp:2465
void SetLink(const KIID &aLink)
Definition: footprint.h:842
unsigned GetPadCount(INCLUDE_NPTH_T aIncludeNPTH=INCLUDE_NPTH_T(INCLUDE_NPTH)) const
Return the number of pads.
Definition: footprint.cpp:2013
std::deque< PAD * > & Pads()
Definition: footprint.h:209
bool IsFlipped() const
Definition: footprint.h:400
const LIB_ID & GetFPID() const
Definition: footprint.h:251
void Flip(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection) override
Flip this object, i.e.
Definition: footprint.cpp:2406
BOARD_ITEM * Duplicate(bool addToParentGroup, BOARD_COMMIT *aCommit=nullptr) const override
Create a copy of this BOARD_ITEM.
Definition: footprint.cpp:2575
VECTOR2I GetPosition() const override
Definition: footprint.h:227
const FP_LIB_TABLE_ROW * FindRow(const wxString &aNickName, bool aCheckIfEnabled=false)
Return an FP_LIB_TABLE_ROW if aNickName is found in this table or in any chained fall back table frag...
FOOTPRINT * FootprintLoad(const wxString &aNickname, const wxString &aFootprintName, bool aKeepUUID=false)
Load a footprint having aFootprintName from the library given by aNickname.
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:104
bool m_axesEnabled
Fullscreen crosshair or small cross.
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:272
void Clear()
Remove all items from the view.
Definition: view.cpp:1133
Carry a payload from one KIWAY_PLAYER to another within a PROJECT.
Definition: kiway_express.h:40
MAIL_T Command()
Returns the MAIL_T associated with this mail.
Definition: kiway_express.h:50
KIWAY & Kiway() const
Return a reference to the KIWAY that this object has an opportunity to participate in.
Definition: kiway_holder.h:55
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:286
void OnKiCadExit()
Definition: kiway.cpp:694
virtual KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=nullptr)
Return the KIWAY_PLAYER* given a FRAME_T.
Definition: kiway.cpp:395
wxWindow * GetBlockingDialog()
Gets the window pointer to the blocking dialog (to send it signals)
Definition: kiway.cpp:637
virtual PROJECT & Prj() const
Return the PROJECT associated with this KIWAY.
Definition: kiway.cpp:192
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
Hold a record identifying a library accessed by the appropriate plug in object in the LIB_TABLE.
const wxString GetFullURI(bool aSubstituted=false) const
Return the full location specifying URI for the LIB, either in original UI form or in environment var...
std::vector< wxString > GetLogicalLibs()
Return the logical library names, all of them that are pertinent to a look up done on this LIB_TABLE.
static const wxString GetPinningSymbol()
Handle the data for a net.
Definition: netinfo.h:56
void SetNetname(const wxString &aNewName)
Set the long netname to aNetName, the short netname to the last token in the long netname's path,...
Definition: netinfo.h:139
Definition: pad.h:54
DISPLAY_OPTIONS m_Display
WINDOW_SETTINGS m_FootprintViewer
FLIP_DIRECTION m_FlipDirection
int m_FootprintViewerFPListWidth
int m_FootprintViewerLibListWidth
Gather all the actions that are shared by tools.
Definition: pcb_actions.h:51
static TOOL_ACTION padDisplayMode
Definition: pcb_actions.h:319
static TOOL_ACTION rehatchShapes
Definition: pcb_actions.h:376
static TOOL_ACTION graphicsOutlines
Display footprint graphics as outlines.
Definition: pcb_actions.h:512
static TOOL_ACTION fpAutoZoom
Definition: pcb_actions.h:327
static TOOL_ACTION textOutlines
Display texts as lines.
Definition: pcb_actions.h:515
static TOOL_ACTION showPadNumbers
Definition: pcb_actions.h:326
static TOOL_ACTION placeFootprint
Definition: pcb_actions.h:216
static TOOL_ACTION saveFpToBoard
Definition: pcb_actions.h:494
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
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
void PlaceFootprint(FOOTPRINT *aFootprint, bool aRecreateRatsnest=true)
Place aFootprint at the current cursor position and updates footprint coordinates with the new positi...
PCB_DISPLAY_OPTIONS m_displayOptions
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:556
The backing store for a PROJECT, in JSON format.
Definition: project_file.h:74
static FP_LIB_TABLE * PcbFootprintLibs(PROJECT *aProject)
Return the table of footprint libraries without Kiway.
Definition: project_pcb.cpp:37
@ 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:204
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:320
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:331
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:171
TOOL_MANAGER * GetToolManager() const
Return the MVC controller.
Definition: tools_holder.h:55
@ MODEL_RELOAD
Model changes (the sheet for a schematic)
Definition: tool_base.h:80
Master controller class:
Definition: tool_manager.h:62
bool RunAction(const std::string &aActionName, T aParam)
Run the specified action immediately, pausing the current action to run the new one.
Definition: tool_manager.h:150
ACTION_MANAGER * GetActionManager() const
Definition: tool_manager.h:306
bool PostAction(const std::string &aActionName, T aParam)
Run the specified action after the current action (coroutine) ends.
Definition: tool_manager.h:235
void ResetTools(TOOL_BASE::RESET_REASON aReason)
Reset all tools (i.e.
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 ShutdownAllTools()
Shutdown all tools with a currently registered event loop in this tool manager by waking them up with...
wxString GetBaseString(int n) const
Definition: wx_listbox.cpp:61
int FindString(const wxString &s, bool bCase=false) const override
Definition: wx_listbox.cpp:72
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
Definition: confirm.cpp:194
void DisplayError(wxWindow *aParent, const wxString &aText)
Display an error or warning message box with aMessage.
Definition: confirm.cpp:169
This file is part of the common library.
#define CHECK(x)
#define ENABLE(x)
#define _HKI(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:54
#define IS_NEW
New item, just created.
Abstract pattern-matching tool and implementations.
@ CTX_LIBITEM
FPVIEWER_CONSTANTS
@ FRAME_PCB_EDITOR
Definition: frame_type.h:42
@ FRAME_FOOTPRINT_VIEWER
Definition: frame_type.h:45
@ ID_ON_GRID_SELECT
Definition: id.h:107
@ ID_ON_ZOOM_SELECT
Definition: id.h:105
PROJECT & Prj()
Definition: kicad.cpp:596
KIID niluuid(0)
@ LAYER_GRID
Definition: layer_ids.h:253
@ 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
@ ID_MODVIEW_FOOTPRINT_LIST
Definition: pcbnew_id.h:82
@ ID_MODVIEW_FOOTPRINT_FILTER
Definition: pcbnew_id.h:81
@ ID_MODVIEW_LIB_FILTER
Definition: pcbnew_id.h:79
@ ID_MODVIEW_LIB_LIST
Definition: pcbnew_id.h:80
BOARD * GetBoard()
static PGM_BASE * process
Definition: pgm_base.cpp:890
PGM_BASE & Pgm()
The global program "get" accessor.
Definition: pgm_base.cpp:893
see class PGM_BASE
CITER next(CITER it)
Definition: ptree.cpp:124
#define DEFAULT_THEME
KIWAY Kiway(KFCTL_STANDALONE)
std::vector< FAB_LAYER_COLOR > dummy
std::vector< wxString > pinned_fp_libs
bool always_show_cursor
Definition: app_settings.h:44
Store the common settings that are saved and loaded for each window / frame.
Definition: app_settings.h:90
CURSOR_SETTINGS cursor
Definition: app_settings.h:96
#define ENVVARS_CHANGED
Definition: tools_holder.h:152
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.