KiCad PCB EDA Suite
Loading...
Searching...
No Matches
footprint_wizard_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 Miguel Angel Ajo Pelayo <[email protected]>
5 * Copyright (C) 2012-2019 Jean-Pierre Charras, jp.charras at wanadoo.fr
6 * Copyright (C) 2008 Wayne Stambaugh <[email protected]>
7 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version 2
12 * of the License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, you may find one here:
21 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
22 * or you may search the http://www.gnu.org website for the version 2 license,
23 * or you may write to the Free Software Foundation, Inc.,
24 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
25 */
26
28
29#include <wx/listbox.h>
30#include <wx/numformatter.h>
31#include <wx/statline.h>
32#include <wx/tokenzr.h>
33#include <wx/wupdlock.h>
34
35#include <json_common.h>
36
37#include <kiface_base.h>
38#include <pcb_draw_panel_gal.h>
39#include <pcb_edit_frame.h>
42#include <widgets/msgpanel.h>
43#include <bitmaps.h>
44#include <grid_tricks.h>
45#include <board.h>
47#include <footprint.h>
50#include <pcbnew_id.h>
52
53#include <pgm_base.h>
56#include <tool/tool_manager.h>
58#include <tool/action_toolbar.h>
59#include <tool/common_tools.h>
60#include <tool/common_control.h>
62#include <tools/pcb_control.h>
63#include <tools/pcb_actions.h>
67
68
70
71 // Window events
74
75 // Toolbar events
78
79 // listbox events
82 FOOTPRINT_WIZARD_FRAME::ParametersUpdated )
83END_EVENT_TABLE()
84
85
86// Note: our FOOTPRINT_WIZARD_FRAME is always modal.
87
88FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( KIWAY* aKiway, wxWindow* aParent,
89 FRAME_T aFrameType ) :
90 PCB_BASE_EDIT_FRAME( aKiway, aParent, aFrameType, _( "Footprint Wizard" ),
91 wxDefaultPosition, wxDefaultSize,
92 aParent ? KICAD_DEFAULT_DRAWFRAME_STYLE | wxFRAME_FLOAT_ON_PARENT
93 : KICAD_DEFAULT_DRAWFRAME_STYLE | wxSTAY_ON_TOP,
95 m_wizardListShown( false )
96{
97 wxASSERT( aFrameType == FRAME_FOOTPRINT_WIZARD );
98
99 // This frame is always show modal:
100 SetModal( true );
101
102 // Give an icon
103 wxIcon icon;
104 icon.CopyFromBitmap( KiBitmap( BITMAPS::module_wizard ) );
105 SetIcon( icon );
106
107 m_wizardName.Empty();
108
109 // Create the GAL canvas.
110 // Must be created before calling LoadSettings() that needs a valid GAL canvas
111 PCB_DRAW_PANEL_GAL* gal_drawPanel = new PCB_DRAW_PANEL_GAL( this, -1, wxPoint( 0, 0 ),
112 m_frameSize,
113 GetGalDisplayOptions(),
115 SetCanvas( gal_drawPanel );
116
117 SetBoard( new BOARD() );
118
119 // Ensure all layers and items are visible:
121 SetScreen( new PCB_SCREEN( GetPageSizeIU() ) );
122 GetScreen()->m_Center = true; // Center coordinate origins on screen.
123
124 LoadSettings( config() );
125
126 SetSize( m_framePos.x, m_framePos.y, m_frameSize.x, m_frameSize.y );
127
128 // Set some display options here, because the FOOTPRINT_WIZARD_FRAME
129 // does not have a config menu to do that:
130
131 // the footprint wizard frame has no config menu. so use some settings
132 // from the caller, or force some options:
133 PCB_BASE_FRAME* caller = dynamic_cast<PCB_BASE_FRAME*>( aParent );
134
135 if( caller )
136 SetUserUnits( caller->GetUserUnits() );
137
138 // In viewer, the default net clearance is not known (it depends on the actual board).
139 // So we do not show the default clearance, by setting it to 0
140 // The footprint or pad specific clearance will be shown
142
143 // Create the manager and dispatcher & route draw panel events to the dispatcher
144 m_toolManager = new TOOL_MANAGER;
145 m_toolManager->SetEnvironment( GetBoard(), gal_drawPanel->GetView(),
146 gal_drawPanel->GetViewControls(), config(), this );
147 m_actions = new PCB_ACTIONS();
148 m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager );
149 gal_drawPanel->SetEventDispatcher( m_toolDispatcher );
150
151 m_toolManager->RegisterTool( new PCB_CONTROL );
152 m_toolManager->RegisterTool( new PCB_SELECTION_TOOL ); // for std context menus (zoom & grid)
153 m_toolManager->RegisterTool( new SCRIPTING_TOOL );
154 m_toolManager->RegisterTool( new COMMON_TOOLS );
155 m_toolManager->RegisterTool( new COMMON_CONTROL );
156 m_toolManager->RegisterTool( new FOOTPRINT_WIZARD_TOOLS );
157 m_toolManager->InitTools();
158
159 // Run the control tool, it is supposed to be always active
160 m_toolManager->InvokeTool( "common.InteractiveSelection" );
161
162 // Create the toolbars
163 m_toolbarSettings = GetToolbarSettings<FOOTPRINT_WIZARD_TOOLBAR_SETTINGS>( "fpwizard-toolbars" );
164 configureToolbars();
165 RecreateToolbars();
166
167 // Create the parameters panel
168 m_parametersPanel = new wxPanel( this, wxID_ANY );
169
170 m_pageList = new wxListBox( m_parametersPanel, ID_FOOTPRINT_WIZARD_PAGE_LIST,
171 wxDefaultPosition, wxDefaultSize, 0, nullptr,
172 wxLB_HSCROLL | wxNO_BORDER );
173
174 auto divider = new wxStaticLine( m_parametersPanel, wxID_ANY,
175 wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
176
177 m_parameterGrid = new WX_GRID( m_parametersPanel, ID_FOOTPRINT_WIZARD_PARAMETER_LIST );
178 initParameterGrid();
179 m_parameterGrid->PushEventHandler( new GRID_TRICKS( m_parameterGrid ) );
180
181 ReCreatePageList();
182
183 wxBoxSizer* parametersSizer = new wxBoxSizer( wxHORIZONTAL );
184 parametersSizer->Add( m_pageList, 0, wxEXPAND, 5 );
185 parametersSizer->Add( divider, 0, wxEXPAND, 5 );
186 parametersSizer->Add( m_parameterGrid, 1, wxEXPAND, 5 );
187 m_parametersPanel->SetSizer( parametersSizer );
188 m_parametersPanel->Layout();
189
190 // Create the build message box
191 m_buildMessageBox = new wxTextCtrl( this, wxID_ANY, wxEmptyString,
192 wxDefaultPosition, wxDefaultSize,
193 wxTE_MULTILINE | wxTE_READONLY | wxNO_BORDER );
194
195 DisplayWizardInfos();
196
197 m_auimgr.SetManagedWindow( this );
198
199 m_auimgr.AddPane( m_tbTopMain, EDA_PANE().HToolbar().Name( "TopMainToolbar" ).Top().Layer(6) );
200 m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( "MsgPanel" ).Bottom().Layer(6)
201 .BestSize( -1, m_msgFrameHeight ) );
202
203 m_auimgr.AddPane( m_parametersPanel, EDA_PANE().Palette().Name( "Params" ).Left().Position(0)
204 .Caption( _( "Parameters" ) ).MinSize( 360, 180 ) );
205 m_auimgr.AddPane( m_buildMessageBox, EDA_PANE().Palette().Name( "Output" ).Left().Position(1)
206 .CaptionVisible( false ).MinSize( 360, -1 ) );
207
208 m_auimgr.AddPane( GetCanvas(), wxAuiPaneInfo().Name( "DrawFrame" ).CentrePane() );
209
210 auto& galOpts = GetGalDisplayOptions();
211 galOpts.SetCursorMode( KIGFX::CROSS_HAIR_MODE::FULLSCREEN_CROSS );
212 galOpts.m_forceDisplayCursor = true;
213 galOpts.m_axesEnabled = true;
214
215 // Switch to the canvas type set in config
216 resolveCanvasType();
217 GetCanvas()->SwitchBackend( m_canvasType );
218 ActivateGalCanvas();
219
220 updateView();
221
222 SetActiveLayer( F_Cu );
223 GetToolManager()->PostAction( ACTIONS::zoomFitScreen );
224
225 // Do not Run a dialog here: on some Window Managers, it creates issues.
226 // Reason: the FOOTPRINT_WIZARD_FRAME is run as modal;
227 // It means the call to FOOTPRINT_WIZARD_FRAME::ShowModal will change the
228 // Event Loop Manager, and stop the one created by the dialog.
229 // It does not happen on all W.M., perhaps due to the way the order events are called
230 // See the call in onActivate instead
231}
232
233
235{
236 // Delete the GRID_TRICKS.
237 m_parameterGrid->PopEventHandler( true );
238
240 // Be sure any event cannot be fired after frame deletion:
241 GetCanvas()->SetEvtHandlerEnabled( false );
242
243 // Be sure a active tool (if exists) is deactivated:
244 if( m_toolManager )
245 m_toolManager->DeactivateTool();
246
247 EDA_3D_VIEWER_FRAME* draw3DFrame = Get3DViewerFrame();
248
249 if( draw3DFrame )
250 draw3DFrame->Destroy();
251
252 // Now this frame can be deleted
253}
254
255
257{
258 SaveSettings( config() );
259
260 if( IsModal() )
261 {
262 // Only dismiss a modal frame once, so that the return values set by
263 // the prior DismissModal() are not bashed for ShowModal().
264 if( !IsDismissed() )
265 DismissModal( false );
266 }
267}
268
269
271{
272 DismissModal( true );
273 Close();
274}
275
276
277void FOOTPRINT_WIZARD_FRAME::OnGridSize( wxSizeEvent& aSizeEvent )
278{
279 // Resize the parameter columns
281
282 aSizeEvent.Skip();
283}
284
285
286void FOOTPRINT_WIZARD_FRAME::OnSize( wxSizeEvent& SizeEv )
287{
288 if( m_auimgr.GetManagedWindow() )
289 m_auimgr.Update();
290
291 SizeEv.Skip();
292}
293
294
296{
298 return ::GetColorSettings( cfg ? cfg->m_ColorTheme : DEFAULT_THEME );
299}
300
301
310
311
313{
314 BOARD_ITEM* footprint = GetBoard()->GetFirstFootprint();
315
316 if( footprint )
317 {
318 std::vector<MSG_PANEL_ITEM> items;
319
320 footprint->GetMsgPanelInfo( this, items );
321 SetMsgPanel( items );
322 }
323 else
324 {
326 }
327}
328
329
331{
333
334 // Prepare the grid where parameters are displayed
335
336 m_parameterGrid->CreateGrid( 0, 3 );
337
338 m_parameterGrid->SetColLabelValue( WIZ_COL_NAME, _( "Parameter" ) );
339 m_parameterGrid->SetColLabelValue( WIZ_COL_VALUE, _( "Value" ) );
340 m_parameterGrid->SetColLabelValue( WIZ_COL_UNITS, _( "Units" ) );
341
342 m_parameterGrid->SetColLabelSize( 22 );
343 m_parameterGrid->SetColLabelAlignment( wxALIGN_LEFT, wxALIGN_CENTRE );
344 m_parameterGrid->AutoSizeColumns();
345
346 m_parameterGrid->AutoSizeRows();
347 m_parameterGrid->SetRowLabelSize( 0 );
348
349 m_parameterGrid->DisableDragGridSize();
350 m_parameterGrid->DisableDragColSize();
351
352 m_parameterGrid->Connect( wxEVT_SIZE,
353 wxSizeEventHandler( FOOTPRINT_WIZARD_FRAME::OnGridSize ),
354 nullptr, this );
355}
356
357
359{
360 if( m_pageList == nullptr )
361 return;
362
363 FOOTPRINT_WIZARD* footprintWizard = GetMyWizard();
364
365 if( !footprintWizard )
366 return;
367
368 m_pageList->Clear();
369 int max_page = footprintWizard->GetNumParameterPages();
370
371 for( int i = 0; i < max_page; i++ )
372 {
373 wxString name = footprintWizard->GetParameterPageName( i );
374 m_pageList->Append( name );
375 }
376
377 m_pageList->SetSelection( 0, true );
378
382 GetCanvas()->Refresh();
383}
384
385
387{
388 if( m_parameterGrid == nullptr )
389 return;
390
391 FOOTPRINT_WIZARD* footprintWizard = GetMyWizard();
392
393 if( footprintWizard == nullptr )
394 return;
395
396 wxWindowUpdateLocker updateLock( m_parameterGrid );
397
398 m_parameterGrid->ClearGrid();
399 m_parameterGridPage = m_pageList->GetSelection();
400
401 if( m_parameterGridPage < 0 ) // Should not happen
402 return;
403
404 // Get the list of names, values, types, hints and designators
405 wxArrayString designatorsList = footprintWizard->GetParameterDesignators( m_parameterGridPage );
406 wxArrayString namesList = footprintWizard->GetParameterNames( m_parameterGridPage );
407 wxArrayString valuesList = footprintWizard->GetParameterValues( m_parameterGridPage );
408 wxArrayString typesList = footprintWizard->GetParameterTypes( m_parameterGridPage );
409 wxArrayString hintsList = footprintWizard->GetParameterHints( m_parameterGridPage );
410
411 // Dimension the wxGrid
412 m_parameterGrid->ClearRows();
413 m_parameterGrid->AppendRows( namesList.size() );
414
415 wxString designator, name, value, units, hint;
416
417 for( unsigned int i = 0; i < namesList.size(); i++ )
418 {
419 designator = designatorsList[i];
420 name = namesList[i];
421 value = valuesList[i];
422 units = typesList[i];
423 hint = hintsList[i];
424
425 m_parameterGrid->SetRowLabelValue( i, designator );
426
427 // Set the 'Name'
428 m_parameterGrid->SetCellValue( i, WIZ_COL_NAME, name );
429 m_parameterGrid->SetReadOnly( i, WIZ_COL_NAME );
430
431 // Boolean parameters are displayed using a checkbox
432 if( units == WIZARD_PARAM_UNITS_BOOL )
433 {
434 // Set to ReadOnly as we delegate interactivity to GRID_TRICKS
435 m_parameterGrid->SetReadOnly( i, WIZ_COL_VALUE );
436 m_parameterGrid->SetCellRenderer( i, WIZ_COL_VALUE, new wxGridCellBoolRenderer );
437 }
438 // Parameters that can be selected from a list of multiple options
439 else if( units.Contains( "," ) ) // Indicates list of available options
440 {
441 wxStringTokenizer tokenizer( units, "," );
442 wxArrayString options;
443
444 while( tokenizer.HasMoreTokens() )
445 options.Add( tokenizer.GetNextToken() );
446
447 m_parameterGrid->SetCellEditor( i, WIZ_COL_VALUE, new wxGridCellChoiceEditor( options ) );
448
449 units = wxT( "" );
450 }
451 else if( units == WIZARD_PARAM_UNITS_INTEGER ) // Integer parameters
452 {
453 m_parameterGrid->SetCellEditor( i, WIZ_COL_VALUE, new wxGridCellNumberEditor );
454 }
455 else if( ( units == WIZARD_PARAM_UNITS_MM ) ||
456 ( units == WIZARD_PARAM_UNITS_MILS ) ||
457 ( units == WIZARD_PARAM_UNITS_FLOAT ) ||
458 ( units == WIZARD_PARAM_UNITS_RADIANS ) ||
459 ( units == WIZARD_PARAM_UNITS_DEGREES ) ||
460 ( units == WIZARD_PARAM_UNITS_PERCENT ) )
461 {
462 // Non-integer numerical parameters
463 m_parameterGrid->SetCellEditor( i, WIZ_COL_VALUE, new wxGridCellFloatEditor );
464
465 // Convert separators to the locale-specific character
466 value.Replace( ",", wxNumberFormatter::GetDecimalSeparator() );
467 value.Replace( ".", wxNumberFormatter::GetDecimalSeparator() );
468 }
469
470 // Set the 'Units'
471 m_parameterGrid->SetCellValue( i, WIZ_COL_UNITS, units );
472 m_parameterGrid->SetReadOnly( i, WIZ_COL_UNITS );
473
474 // Set the 'Value'
475 m_parameterGrid->SetCellValue( i, WIZ_COL_VALUE, value );
476 }
477
479}
480
482{
483 // Parameter grid is not yet configured
484 if( ( m_parameterGrid == nullptr ) || ( m_parameterGrid->GetNumberCols() == 0 ) )
485 return;
486
487 // first auto-size the columns to ensure enough space around text
488 m_parameterGrid->AutoSizeColumns();
489
490 // Auto-size the value column
491 int width = m_parameterGrid->GetClientSize().GetWidth() -
492 m_parameterGrid->GetRowLabelSize() -
493 m_parameterGrid->GetColSize( WIZ_COL_NAME ) -
494 m_parameterGrid->GetColSize( WIZ_COL_UNITS );
495
496 if( width > m_parameterGrid->GetColMinimalAcceptableWidth() )
497 {
498 m_parameterGrid->SetColSize( WIZ_COL_VALUE, width );
499 }
500}
501
502
503void FOOTPRINT_WIZARD_FRAME::ClickOnPageList( wxCommandEvent& event )
504{
505 if( m_pageList->GetSelection() >= 0 )
506 {
508 GetCanvas()->Refresh();
510 }
511}
512
513
515{
516 PCBNEW_SETTINGS* cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
517 wxCHECK( cfg, /*void*/ );
518
520
522 m_viewerAuiState = std::make_unique<nlohmann::json>( cfg->m_FootprintViewer.aui_state );
523}
524
525
527{
528 PCBNEW_SETTINGS* cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
529 wxCHECK( cfg, /*void*/ );
530
532
533#if wxCHECK_VERSION( 3, 3, 0 )
534 {
535 WX_AUI_JSON_SERIALIZER serializer( m_auimgr );
536 nlohmann::json state = serializer.Serialize();
537
538 if( state.is_null() || state.empty() )
539 cfg->m_FootprintViewer.aui_state = nlohmann::json();
540 else
541 cfg->m_FootprintViewer.aui_state = state;
542
543 cfg->m_FootprintViewer.perspective.clear();
544 }
545#else
546 cfg->m_FootprintViewer.perspective = m_auimgr.SavePerspective().ToStdString();
547 cfg->m_FootprintViewer.aui_state = nlohmann::json();
548#endif
549}
550
551
553{
554 if( PCBNEW_SETTINGS* cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg ) )
555 return &cfg->m_FootprintWizard;
556
557 wxFAIL_MSG( wxT( "FOOTPRINT_CHOOSER not running with PCBNEW_SETTINGS" ) );
558 return &aCfg->m_Window; // non-null fail-safe
559}
560
561
562void FOOTPRINT_WIZARD_FRAME::OnActivate( wxActivateEvent& event )
563{
564 // Ensure we do not have old selection:
565 if( !event.GetActive() )
566 return;
567
568 if( !m_wizardListShown )
569 {
570 m_wizardListShown = true;
571 wxPostEvent( this, wxCommandEvent( wxEVT_TOOL, ID_FOOTPRINT_WIZARD_SELECT_WIZARD ) );
572 }
573#if 0
574 // Currently, we do not have a way to see if a Python wizard has changed,
575 // therefore the lists of parameters and option has to be rebuilt
576 // This code could be enabled when this way exists
577 bool footprintWizardsChanged = false;
578
579 if( footprintWizardsChanged )
580 {
581 // If we are here, the library list has changed, rebuild it
584 }
585#endif
586}
587
588
589void FOOTPRINT_WIZARD_FRAME::Update3DView( bool aMarkDirty, bool aRefresh, const wxString* aTitle )
590{
591 wxString frm3Dtitle;
592 frm3Dtitle.Printf( _( "ModView: 3D Viewer [%s]" ), m_wizardName );
593 PCB_BASE_FRAME::Update3DView( aMarkDirty, aRefresh, &frm3Dtitle );
594}
595
596
601
602
604{
605 // Reload the Python plugins
606 // Because the board editor has also a plugin python menu,
607 // call the PCB_EDIT_FRAME RunAction() if the board editor is running
608 // Otherwise run the current RunAction().
609 PCB_EDIT_FRAME* pcbframe = static_cast<PCB_EDIT_FRAME*>( Kiway().Player( FRAME_PCB_EDITOR, false ) );
610
611 if( pcbframe )
613 else
615}
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
static TOOL_ACTION pluginsReload
Definition actions.h:294
static TOOL_ACTION zoomFitScreen
Definition actions.h:142
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.
std::shared_ptr< NET_SETTINGS > m_NetSettings
Abstract interface for BOARD_ITEMs capable of storing other items inside.
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition board_item.h:84
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:1017
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Definition board.cpp:1083
Color settings are a bit different than most of the settings objects in that there can be more than o...
Handle actions that are shared between different applications.
Handles action that are shared between different applications.
Create and handle a window for the 3d viewer connected to a Kiway and a pcbboard.
wxAuiManager m_auimgr
virtual void ClearMsgPanel()
Clear all messages from the message panel.
void SetMsgPanel(const std::vector< MSG_PANEL_ITEM > &aList)
Clear the message panel and populates it with the contents of aList.
virtual void ReCreateHToolbar()
static constexpr GAL_TYPE GAL_FALLBACK
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.
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.
virtual void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList)
Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.
Definition eda_item.h:226
Specialization of the wxAuiPaneInfo class for KiCad panels.
BOARD_ITEM_CONTAINER * GetModel() const override
void PythonPluginsReload()
Reload the Python plugins if they are newer than the already loaded, and load new plugins if any.
void initParameterGrid()
Prepare the grid where parameters are displayed.
void OnSize(wxSizeEvent &event) override
Recalculate the size of toolbars and display panel when the frame size changes.
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
int m_parameterGridPage
the page currently displayed by m_parameterGrid it is most of time the m_pageList selection,...
wxListBox * m_pageList
The list of pages.
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
void ReCreateParameterList()
Create the list of parameters for the current page.
void DisplayWizardInfos()
Show all the details about the current wizard.
COLOR_SETTINGS * GetColorSettings(bool aForceRefresh=false) const override
Helper to retrieve the current color settings.
wxString m_wizardName
name of the current wizard
void SelectCurrentWizard(wxCommandEvent &aDummy)
bool m_wizardListShown
A show-once flag for the wizard list.
void updateView()
Rebuild the GAL view (reint tool manager, colors and drawings) must be run after any footprint change...
void Update3DView(bool aMarkDirty, bool aRefresh, const wxString *aTitle=nullptr) override
Update the 3D view, if the viewer is opened by this frame.
void ClickOnPageList(wxCommandEvent &event)
WX_GRID * m_parameterGrid
The list of parameters.
FOOTPRINT_WIZARD * GetMyWizard()
Reloads the wizard by name.
void ResizeParamColumns()
Expand the 'Value' column to fill available.
void UpdateMsgPanel() override
Redraw the message panel.
std::unique_ptr< nlohmann::json > m_viewerAuiState
void ReCreatePageList()
Create or recreate the list of parameter pages for the current wizard.
wxString m_auiPerspective
Encoded string describing the AUI layout.
void ExportSelectedFootprint(wxCommandEvent &aEvent)
Will let the caller exit from the wait loop, and get the built footprint.
void OnGridSize(wxSizeEvent &aSizeEvent)
WINDOW_SETTINGS * GetWindowSettings(APP_SETTINGS_BASE *aCfg) override
Return a pointer to the window settings for this frame.
void OnActivate(wxActivateEvent &event)
Called when the frame frame is activate to reload the libraries and component lists that can be chang...
Tool useful for viewing footprints.
The parent class from where any footprint wizard class must derive.
virtual wxArrayString GetParameterHints(int aPage)=0
virtual wxArrayString GetParameterNames(int aPage)=0
virtual wxArrayString GetParameterValues(int aPage)=0
virtual wxString GetParameterPageName(int aPage)=0
virtual wxArrayString GetParameterTypes(int aPage)=0
virtual int GetNumParameterPages()=0
virtual wxArrayString GetParameterDesignators(int aPage)=0
Add mouse and command handling (such as cut, copy, and paste) to a WX_GRID instance.
Definition grid_tricks.h:61
bool Destroy() override
Our version of Destroy() which is virtual from wxWidgets.
void DismissModal(bool aRetVal, const wxString &aResult=wxEmptyString)
bool IsModal() const override
Return true if the frame is shown in our modal mode and false if the frame is shown as an usual frame...
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
Definition kiway.h:295
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
void SetClearance(int aClearance)
Definition netclass.h:119
std::shared_ptr< NETCLASS > GetDefaultNetclass()
Gets the default netclass for the project.
WINDOW_SETTINGS m_FootprintViewer
Gather all the actions that are shared by tools.
Definition pcb_actions.h:51
Common, abstract interface for edit frames.
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.
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
FOOTPRINT_EDITOR_SETTINGS * GetFootprintEditorSettings() const
EDA_3D_VIEWER_FRAME * Get3DViewerFrame()
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.
The main frame for Pcbnew.
The selection tool: currently supports:
Tool relating to pads and pad settings.
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.
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).
EDA_UNITS GetUserUnits() const
nlohmann::json Serialize() const
#define _(s)
Declaration of the eda_3d_viewer class.
#define KICAD_DEFAULT_DRAWFRAME_STYLE
#define FOOTPRINT_WIZARD_FRAME_NAME
const wxString WIZARD_PARAM_UNITS_PERCENT
const wxString WIZARD_PARAM_UNITS_RADIANS
const wxString WIZARD_PARAM_UNITS_MM
const wxString WIZARD_PARAM_UNITS_INTEGER
const wxString WIZARD_PARAM_UNITS_BOOL
const wxString WIZARD_PARAM_UNITS_FLOAT
const wxString WIZARD_PARAM_UNITS_MILS
const wxString WIZARD_PARAM_UNITS_DEGREES
EVT_GRID_CMD_CELL_CHANGED(ID_FOOTPRINT_WIZARD_PARAMETER_LIST, FOOTPRINT_WIZARD_FRAME::ParametersUpdated) FOOTPRINT_WIZARD_FRAME
FRAME_T
The set of EDA_BASE_FRAME derivatives, typically stored in EDA_BASE_FRAME::m_Ident.
Definition frame_type.h:33
@ FRAME_PCB_EDITOR
Definition frame_type.h:42
@ FRAME_FOOTPRINT_WIZARD
Definition frame_type.h:46
@ F_Cu
Definition layer_ids.h:64
Message panel definition file.
@ ID_FOOTPRINT_WIZARD_DONE
Definition pcbnew_id.h:90
@ ID_FOOTPRINT_WIZARD_SELECT_WIZARD
Definition pcbnew_id.h:93
@ ID_FOOTPRINT_WIZARD_PARAMETER_LIST
Definition pcbnew_id.h:92
@ ID_FOOTPRINT_WIZARD_PAGE_LIST
Definition pcbnew_id.h:91
BOARD * GetBoard()
see class PGM_BASE
#define DEFAULT_THEME
T * GetToolbarSettings(const wxString &aFilename)
KIWAY Kiway(KFCTL_STANDALONE)
Store the common settings that are saved and loaded for each window / frame.
nlohmann::json aui_state
wxString perspective