KiCad PCB EDA Suite
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 <miguelangel@nbee.es>
5  * Copyright (C) 2012-2019 Jean-Pierre Charras, jp.charras at wanadoo.fr
6  * Copyright (C) 2008-2015 Wayne Stambaugh <stambaughw@verizon.net>
7  * Copyright (C) 2004-2020 KiCad Developers, see AUTHORS.txt for contributors.
8  *
9  * This program is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License
11  * as published by the Free Software Foundation; either version 2
12  * of the License, or (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, you may find one here:
21  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
22  * or you may search the http://www.gnu.org website for the version 2 license,
23  * or you may write to the Free Software Foundation, Inc.,
24  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
25  */
26 
27 #include <fctsys.h>
28 #include <kiface_i.h>
29 #include <pcb_draw_panel_gal.h>
30 #include <pcb_edit_frame.h>
32 #include <msgpanel.h>
33 #include <macros.h>
34 #include <bitmaps.h>
35 #include <grid_tricks.h>
36 #include <class_board.h>
37 #include <footprint_edit_frame.h>
39 #include <pcbnew_id.h>
40 #include <pcbnew_settings.h>
41 #include "footprint_wizard_frame.h"
42 #include <wx/tokenzr.h>
43 #include <wx/numformatter.h>
45 #include <base_units.h>
46 #include <pgm_base.h>
49 #include <tool/tool_manager.h>
50 #include <tool/tool_dispatcher.h>
51 #include <tool/action_toolbar.h>
52 #include <tool/common_tools.h>
53 #include "tools/selection_tool.h"
54 #include "tools/pcbnew_control.h"
55 #include "tools/pcb_actions.h"
56 
57 
58 BEGIN_EVENT_TABLE( FOOTPRINT_WIZARD_FRAME, EDA_DRAW_FRAME )
59 
60  // Window events
63 
64  // Toolbar events
70 
71  // listbox events
74  FOOTPRINT_WIZARD_FRAME::ParametersUpdated )
75 END_EVENT_TABLE()
76 
77 
78 // Note: our FOOTPRINT_WIZARD_FRAME is always modal.
79 
80 FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( KIWAY* aKiway, wxWindow* aParent,
81  FRAME_T aFrameType ) :
82  PCB_BASE_FRAME( aKiway, aParent, aFrameType, _( "Footprint Wizard" ),
83  wxDefaultPosition, wxDefaultSize,
84  aParent ? KICAD_DEFAULT_DRAWFRAME_STYLE | wxFRAME_FLOAT_ON_PARENT
85  : KICAD_DEFAULT_DRAWFRAME_STYLE | wxSTAY_ON_TOP,
87  m_wizardListShown( false )
88 {
89  wxASSERT( aFrameType == FRAME_FOOTPRINT_WIZARD );
90 
91  // This frame is always show modal:
92  SetModal( true );
93 
94  // Give an icon
95  wxIcon icon;
96  icon.CopyFromBitmap( KiBitmap( module_wizard_xpm) );
97  SetIcon( icon );
98 
99  m_wizardName.Empty();
100 
101  SetBoard( new BOARD() );
102 
103  // Ensure all layers and items are visible:
105  SetScreen( new PCB_SCREEN( GetPageSizeIU() ) );
106  GetScreen()->m_Center = true; // Center coordinate origins on screen.
107 
108  // Create the GAL canvas.
109  // Must be created before calling LoadSettings() that needs a valid GAL canvas
110  PCB_DRAW_PANEL_GAL* gal_drawPanel = new PCB_DRAW_PANEL_GAL( this, -1, wxPoint( 0, 0 ),
111  m_FrameSize,
112  GetGalDisplayOptions(),
114  SetCanvas( gal_drawPanel );
115 
116  LoadSettings( config() );
117 
118  SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y );
119 
120  // Set some display options here, because the FOOTPRINT_WIZARD_FRAME
121  // does not have a config menu to do that:
122 
123  // the footprint wizard frame has no config menu. so use some settings
124  // from the caller, or force some options:
125  PCB_BASE_FRAME* caller = dynamic_cast<PCB_BASE_FRAME*>( aParent );
126 
127  if( caller )
128  SetUserUnits( caller->GetUserUnits() );
129 
130  // In viewer, the default net clearance is not known (it depends on the actual board).
131  // So we do not show the default clearance, by setting it to 0
132  // The footprint or pad specific clearance will be shown
135 
136  PCB_DISPLAY_OPTIONS disp_opts = GetDisplayOptions();
137 
138  disp_opts.m_DisplayPadIsol = true;
139  disp_opts.m_DisplayPadNum = true;
140  SetDisplayOptions( disp_opts );
141 
142  // Create the manager and dispatcher & route draw panel events to the dispatcher
143  m_toolManager = new TOOL_MANAGER;
144  m_toolManager->SetEnvironment( GetBoard(), gal_drawPanel->GetView(),
145  gal_drawPanel->GetViewControls(), config(), this );
146  m_actions = new PCB_ACTIONS();
147  m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager, m_actions );
148  gal_drawPanel->SetEventDispatcher( m_toolDispatcher );
149 
150  m_toolManager->RegisterTool( new PCBNEW_CONTROL );
151  m_toolManager->RegisterTool( new SELECTION_TOOL ); // for std context menus (zoom & grid)
152  m_toolManager->RegisterTool( new COMMON_TOOLS );
153  m_toolManager->InitTools();
154 
155  // Run the control tool, it is supposed to be always active
156  m_toolManager->InvokeTool( "pcbnew.InteractiveSelection" );
157 
158  // Create the toolbars
159  ReCreateHToolbar();
160  ReCreateVToolbar();
161 
162  // Create the parameters panel
163  m_parametersPanel = new wxPanel( this, wxID_ANY );
164 
165  m_pageList = new wxListBox( m_parametersPanel, ID_FOOTPRINT_WIZARD_PAGE_LIST,
166  wxDefaultPosition, wxDefaultSize, 0, NULL,
167  wxLB_HSCROLL | wxNO_BORDER );
168 
169  auto divider = new wxStaticLine( m_parametersPanel, wxID_ANY,
170  wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
171 
172  m_parameterGrid = new WX_GRID( m_parametersPanel, ID_FOOTPRINT_WIZARD_PARAMETER_LIST );
173  initParameterGrid();
174  m_parameterGrid->PushEventHandler( new GRID_TRICKS( m_parameterGrid ) );
175 
176  ReCreatePageList();
177 
178  wxBoxSizer* parametersSizer = new wxBoxSizer( wxHORIZONTAL );
179  parametersSizer->Add( m_pageList, 0, wxEXPAND, 5 );
180  parametersSizer->Add( divider, 0, wxEXPAND, 5 );
181  parametersSizer->Add( m_parameterGrid, 1, wxEXPAND, 5 );
182  m_parametersPanel->SetSizer( parametersSizer );
183  m_parametersPanel->Layout();
184 
185  // Create the build message box
186  m_buildMessageBox = new wxTextCtrl( this, wxID_ANY, wxEmptyString,
187  wxDefaultPosition, wxDefaultSize,
188  wxTE_MULTILINE | wxTE_READONLY | wxNO_BORDER );
189 
190  DisplayWizardInfos();
191 
192  m_auimgr.SetManagedWindow( this );
193 
194  m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( "MainToolbar" ).Top().Layer(6) );
195  m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( "MsgPanel" ).Bottom().Layer(6)
196  .BestSize( -1, m_MsgFrameHeight ) );
197 
198  m_auimgr.AddPane( m_parametersPanel, EDA_PANE().Palette().Name( "Params" ).Left().Position(0)
199  .Caption( _( "Parameters" ) ).MinSize( 360, 180 ) );
200  m_auimgr.AddPane( m_buildMessageBox, EDA_PANE().Palette().Name( "Output" ).Left().Position(1)
201  .CaptionVisible( false ).MinSize( 360, -1 ) );
202 
203  m_auimgr.AddPane( GetCanvas(), wxAuiPaneInfo().Name( "DrawFrame" ).CentrePane() );
204 
205  auto& galOpts = GetGalDisplayOptions();
206  galOpts.m_fullscreenCursor = true;
207  galOpts.m_forceDisplayCursor = true;
208  galOpts.m_axesEnabled = true;
209 
210  ActivateGalCanvas();
211  updateView();
212 
213  SetActiveLayer( F_Cu );
214  GetToolManager()->RunAction( ACTIONS::zoomFitScreen, false );
215 
216  // Do not Run a dialog here: on some Window Managers, it creates issues.
217  // Reason: the FOOTPRINT_WIZARD_FRAME is run as modal;
218  // It means the call to FOOTPRINT_WIZARD_FRAME::ShowModal will change the
219  // Event Loop Manager, and stop the one created by the dialog.
220  // It does not happen on all W.M., perhaps due to the way the order events are called
221  // See the call in onActivate instead
222 }
223 
224 
226 {
227  // Delete the GRID_TRICKS.
228  m_parameterGrid->PopEventHandler( true );
229 
230  GetCanvas()->StopDrawing();
231  // Be sure any event cannot be fired after frame deletion:
232  GetCanvas()->SetEvtHandlerEnabled( false );
233 
234  // Be sure a active tool (if exists) is desactivated:
235  if( m_toolManager )
237 
238  EDA_3D_VIEWER* draw3DFrame = Get3DViewerFrame();
239 
240  if( draw3DFrame )
241  draw3DFrame->Destroy();
242 
243  // Now this frame can be deleted
244 }
245 
246 
248 {
249  SaveSettings( config() );
250 
251  if( IsModal() )
252  {
253  // Only dismiss a modal frame once, so that the return values set by
254  // the prior DismissModal() are not bashed for ShowModal().
255  if( !IsDismissed() )
256  DismissModal( false );
257  }
258  // else do nothing
259 }
260 
261 
263 {
264  DismissModal( true );
265  Close();
266 }
267 
268 
269 void FOOTPRINT_WIZARD_FRAME::OnGridSize( wxSizeEvent& aSizeEvent )
270 {
271  // Resize the parameter columns
273 
274  aSizeEvent.Skip();
275 }
276 
277 
278 void FOOTPRINT_WIZARD_FRAME::OnSize( wxSizeEvent& SizeEv )
279 {
280  if( m_auimgr.GetManagedWindow() )
281  m_auimgr.Update();
282 
283  SizeEv.Skip();
284 }
285 
286 
288 {
289  return Pgm().GetSettingsManager().GetColorSettings(
290  GetFootprintEditorSettings()->m_ColorTheme );
291 }
292 
293 
295 {
296  GetCanvas()->UpdateColors();
300  UpdateMsgPanel();
301 }
302 
303 
305 {
306  BOARD_ITEM* footprint = GetBoard()->GetFirstModule();
307 
308  if( footprint )
309  {
310  MSG_PANEL_ITEMS items;
311 
312  footprint->GetMsgPanelInfo( this, items );
313  SetMsgPanel( items );
314  }
315  else
316  ClearMsgPanel();
317 }
318 
319 
321 {
322  m_parameterGridPage = -1;
323 
324  // Prepare the grid where parameters are displayed
325 
326  m_parameterGrid->CreateGrid( 0, 3 );
327 
328  m_parameterGrid->SetColLabelValue( WIZ_COL_NAME, _( "Parameter" ) );
329  m_parameterGrid->SetColLabelValue( WIZ_COL_VALUE, _( "Value" ) );
330  m_parameterGrid->SetColLabelValue( WIZ_COL_UNITS, _( "Units" ) );
331 
333  m_parameterGrid->SetColLabelAlignment( wxALIGN_LEFT, wxALIGN_CENTRE );
334  m_parameterGrid->AutoSizeColumns();
335 
336  m_parameterGrid->AutoSizeRows();
337  m_parameterGrid->SetRowLabelSize( 0 );
338 
339  m_parameterGrid->DisableDragGridSize();
340  m_parameterGrid->DisableDragColSize();
341 
342  m_parameterGrid->Connect( wxEVT_SIZE,
343  wxSizeEventHandler( FOOTPRINT_WIZARD_FRAME::OnGridSize ),
344  NULL, this );
345 }
346 
347 
349 {
350  if( m_pageList == NULL )
351  return;
352 
353  FOOTPRINT_WIZARD* footprintWizard = GetMyWizard();
354 
355  if( !footprintWizard )
356  return;
357 
358  m_pageList->Clear();
359  int max_page = footprintWizard->GetNumParameterPages();
360 
361  for( int i = 0; i<max_page; i++ )
362  {
363  wxString name = footprintWizard->GetParameterPageName( i );
364  m_pageList->Append( name );
365  }
366 
367  m_pageList->SetSelection( 0, true );
368 
372  GetCanvas()->Refresh();
373 }
374 
375 
377 {
378  if( m_parameterGrid == NULL )
379  return;
380 
381  FOOTPRINT_WIZARD* footprintWizard = GetMyWizard();
382 
383  if( footprintWizard == NULL )
384  return;
385 
386  m_parameterGrid->Freeze();
387 
388  m_parameterGrid->ClearGrid();
389  m_parameterGridPage = m_pageList->GetSelection();
390 
391  if( m_parameterGridPage < 0 ) // Should not happen
392  return;
393 
394  // Get the list of names, values, types, hints and designators
395  wxArrayString designatorsList = footprintWizard->GetParameterDesignators( m_parameterGridPage );
396  wxArrayString namesList = footprintWizard->GetParameterNames( m_parameterGridPage );
397  wxArrayString valuesList = footprintWizard->GetParameterValues( m_parameterGridPage );
398  wxArrayString typesList = footprintWizard->GetParameterTypes( m_parameterGridPage );
399  wxArrayString hintsList = footprintWizard->GetParameterHints( m_parameterGridPage );
400 
401  // Dimension the wxGrid
402  if( m_parameterGrid->GetNumberRows() > 0 )
403  m_parameterGrid->DeleteRows( 0, m_parameterGrid->GetNumberRows() );
404 
405  m_parameterGrid->AppendRows( namesList.size() );
406 
407  wxString designator, name, value, units, hint;
408 
409  for( unsigned int i = 0; i< namesList.size(); i++ )
410  {
411  designator = designatorsList[i];
412  name = namesList[i];
413  value = valuesList[i];
414  units = typesList[i];
415  hint = hintsList[i];
416 
417  m_parameterGrid->SetRowLabelValue( i, designator );
418 
419  // Set the 'Name'
420  m_parameterGrid->SetCellValue( i, WIZ_COL_NAME, name );
421  m_parameterGrid->SetReadOnly( i, WIZ_COL_NAME );
422 
423  // Boolean parameters are displayed using a checkbox
424  if( units == WIZARD_PARAM_UNITS_BOOL )
425  {
426  // Set to ReadOnly as we delegate interactivity to GRID_TRICKS
427  m_parameterGrid->SetReadOnly( i, WIZ_COL_VALUE );
428  m_parameterGrid->SetCellRenderer( i, WIZ_COL_VALUE, new wxGridCellBoolRenderer );
429  }
430  // Parameters that can be selected from a list of multiple options
431  else if( units.Contains( "," ) ) // Indicates list of available options
432  {
433  wxStringTokenizer tokenizer( units, "," );
434  wxArrayString options;
435 
436  while( tokenizer.HasMoreTokens() )
437  {
438  options.Add( tokenizer.GetNextToken() );
439  }
440 
441  m_parameterGrid->SetCellEditor( i, WIZ_COL_VALUE, new wxGridCellChoiceEditor( options ) );
442 
443  units = wxT( "" );
444  }
445  // Integer parameters
446  else if( units == WIZARD_PARAM_UNITS_INTEGER )
447  {
448  m_parameterGrid->SetCellEditor( i, WIZ_COL_VALUE, new wxGridCellNumberEditor );
449  }
450  // Non-integer numerical parameters
451  else if( ( units == WIZARD_PARAM_UNITS_MM ) ||
452  ( units == WIZARD_PARAM_UNITS_MILS ) ||
453  ( units == WIZARD_PARAM_UNITS_FLOAT ) ||
454  ( units == WIZARD_PARAM_UNITS_RADIANS ) ||
455  ( units == WIZARD_PARAM_UNITS_DEGREES ) ||
456  ( units == WIZARD_PARAM_UNITS_PERCENT ) )
457  {
458  m_parameterGrid->SetCellEditor( i, WIZ_COL_VALUE, new wxGridCellFloatEditor );
459 
460  // Convert separators to the locale-specific character
461  value.Replace( ",", wxNumberFormatter::GetDecimalSeparator() );
462  value.Replace( ".", wxNumberFormatter::GetDecimalSeparator() );
463  }
464 
465  // Set the 'Units'
466  m_parameterGrid->SetCellValue( i, WIZ_COL_UNITS, units );
467  m_parameterGrid->SetReadOnly( i, WIZ_COL_UNITS );
468 
469  // Set the 'Value'
470  m_parameterGrid->SetCellValue( i, WIZ_COL_VALUE, value );
471  }
472 
474 
475  m_parameterGrid->Thaw();
476 }
477 
479 {
480  // Parameter grid is not yet configured
481  if( ( m_parameterGrid == NULL ) || ( m_parameterGrid->GetNumberCols() == 0 ) )
482  return;
483 
484  // first auto-size the columns to ensure enough space around text
485  m_parameterGrid->AutoSizeColumns();
486 
487  // Auto-size the value column
488  int width = m_parameterGrid->GetClientSize().GetWidth() -
489  m_parameterGrid->GetRowLabelSize() -
490  m_parameterGrid->GetColSize( WIZ_COL_NAME ) -
491  m_parameterGrid->GetColSize( WIZ_COL_UNITS );
492 
493  if( width > m_parameterGrid->GetColMinimalAcceptableWidth() )
494  {
495  m_parameterGrid->SetColSize( WIZ_COL_VALUE, width );
496  }
497 }
498 
499 
500 void FOOTPRINT_WIZARD_FRAME::ClickOnPageList( wxCommandEvent& event )
501 {
502  if( m_pageList->GetSelection() >= 0 )
503  {
505  GetCanvas()->Refresh();
507  }
508 }
509 
510 
512 {
513  PCBNEW_SETTINGS* cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
514  wxCHECK( cfg, /*void*/ );
515 
517 
519 }
520 
521 
523 {
524  PCBNEW_SETTINGS* cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
525  wxCHECK( cfg, /*void*/ );
526 
528 
529  cfg->m_FootprintViewer.perspective = m_auimgr.SavePerspective().ToStdString();
530 }
531 
532 
534 {
535  auto cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
536  wxASSERT( cfg );
537 
538  return cfg ? &cfg->m_FootprintWizard : nullptr;
539 }
540 
541 
542 void FOOTPRINT_WIZARD_FRAME::OnActivate( wxActivateEvent& event )
543 {
544  // Ensure we do not have old selection:
545  if( !event.GetActive() )
546  return;
547 
548  if( !m_wizardListShown )
549  {
550  m_wizardListShown = true;
551  wxPostEvent( this, wxCommandEvent( wxEVT_TOOL, ID_FOOTPRINT_WIZARD_SELECT_WIZARD ) );
552  }
553 #if 0
554  // Currently, we do not have a way to see if a Python wizard has changed,
555  // therefore the lists of parameters and option has to be rebuilt
556  // This code could be enabled when this way exists
557  bool footprintWizardsChanged = false;
558 
559  if( footprintWizardsChanged )
560  {
561  // If we are here, the library list has changed, rebuild it
564  }
565 #endif
566 }
567 
568 
574 void FOOTPRINT_WIZARD_FRAME::Update3DView( bool aForceReload, const wxString* aTitle )
575 {
576  wxString frm3Dtitle;
577  frm3Dtitle.Printf( _( "ModView: 3D Viewer [%s]" ), GetChars( m_wizardName ) );
578  PCB_BASE_FRAME::Update3DView( aForceReload, &frm3Dtitle );
579 }
580 
581 
583 {
584  if( m_mainToolBar )
586  else
587  m_mainToolBar = new ACTION_TOOLBAR( this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
588  KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT );
589 
590  // Set up toolbar
591  m_mainToolBar->AddTool( ID_FOOTPRINT_WIZARD_SELECT_WIZARD, wxEmptyString,
593  _( "Select wizard script to run" ) );
594 
596  m_mainToolBar->AddTool( ID_FOOTPRINT_WIZARD_RESET_TO_DEFAULT, wxEmptyString,
597  KiBitmap( reload_xpm ),
598  _( "Reset wizard parameters to default") );
599 
601  m_mainToolBar->AddTool( ID_FOOTPRINT_WIZARD_PREVIOUS, wxEmptyString,
603  _( "Select previous parameters page" ) );
604  m_mainToolBar->AddTool( ID_FOOTPRINT_WIZARD_NEXT, wxEmptyString,
606  _( "Select next parameters page" ) );
607 
610 
616 
617  // The footprint wizard always can export the current footprint
620  wxEmptyString, KiBitmap( export_footprint_names_xpm ),
621  _( "Export footprint to editor" ) );
622 
623  // after adding the buttons to the toolbar, must call Realize() to
624  // reflect the changes
625  m_mainToolBar->Realize();
626 }
627 
628 
630 {
631  return GetBoard()->GetFirstModule();
632 }
633 
634 
636 {
637  // Currently, there is no vertical toolbar
638 }
639 
640 #if defined(KICAD_SCRIPTING)
642 {
643  // Reload the Python plugins
644  // Because the board editor has also a plugin python menu,
645  // call PCB_EDIT_FRAME::PythonPluginsReload() if the board editor
646  // is running
647  auto brd_frame = static_cast<PCB_EDIT_FRAME*>( Kiway().Player( FRAME_PCB_EDITOR, false ) );
648 
649  if( brd_frame )
650  brd_frame->PythonPluginsReload();
651  else
653 }
654 #endif
655 
656 
void Update3DView(bool aForceReload, const wxString *aTitle) override
Function Update3D_Frame must be called after a footprint selection Updates the 3D view and 3D frame t...
static TOOL_ACTION show3DViewer
Definition: actions.h:154
FOOTPRINT_WIZARD_FRAME.
ACTION_TOOLBAR.
show a marker on pads with no nets
wxString m_wizardName
name of the current wizard
KIWAY & Kiway() const
Function Kiway returns a reference to the KIWAY that this object has an opportunity to participate in...
Definition: kiway_holder.h:56
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:104
KIGFX::VIEW_CONTROLS * GetViewControls() const
Function GetViewControls() Returns a pointer to the VIEW_CONTROLS instance used in the panel.
void SetElementVisibility(GAL_LAYER_ID aLayer, bool aNewState)
Function SetElementVisibility changes the visibility of an element category.
void DisplayWizardInfos()
Function DisplayWizardInfos Shows all the details about the current wizard.
static TOOL_ACTION zoomInCenter
Definition: actions.h:91
const wxString WIZARD_PARAM_UNITS_MM
virtual APP_SETTINGS_BASE * config() const
Returns the settings object used in SaveSettings(), and is overloaded in KICAD_MANAGER_FRAME.
Model changes (required full reload)
Definition: tool_base.h:82
Implementation of conversion functions that require both schematic and board internal units.
BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class,...
wxString m_auiPerspective
Encoded string describing the AUI layout.
bool IsDismissed()
Function IsDismissed returns false only if both the frame is acting in modal mode and it has not been...
const BITMAP_OPAQUE module_wizard_xpm[1]
wxListBox * m_pageList
The list of pages.
FRAME_T
Enum FRAME_T is the set of EDA_BASE_FRAME derivatives, typically stored in EDA_BASE_FRAME::m_Ident.
Definition: frame_type.h:34
FOOTPRINT_EDITOR_SETTINGS * GetFootprintEditorSettings()
SELECTION_TOOL.
void AddScaledSeparator(wxWindow *aWindow)
Add a separator that introduces space on either side to not squash the tools when scaled.
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
void ExportSelectedFootprint(wxCommandEvent &aEvent)
Function ExportSelectedFootprint(); will let the caller exit from the wait loop, and get the built fo...
virtual wxString GetParameterPageName(int aPage)=0
Function GetParameterPageName.
int m_parameterGridPage
the page currently displayed by m_parameterGrid it is most of time the m_pageList selection,...
void Add(const TOOL_ACTION &aAction, bool aIsToggleEntry=false, bool aIsCancellable=false)
Adds a TOOL_ACTION-based button to the toolbar.
static constexpr GAL_TYPE GAL_FALLBACK
GRID_TRICKS is used to add mouse and command handling (such as cut, copy, and paste) to a WX_GRID ins...
Definition: grid_tricks.h:51
static TOOL_ACTION zoomFitScreen
Definition: actions.h:94
virtual wxArrayString GetParameterTypes(int aPage)=0
Function GetParameterTypes.
WX_GRID * m_parameterGrid
The list of parameters.
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:140
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Function GetDesignSettings.
Definition: class_board.h:531
void SetVisibleAlls()
Function SetVisibleAlls changes the bit-mask of visible element categories and layers.
wxAuiManager m_auimgr
#define FOOTPRINT_WIZARD_FRAME_NAME
ACTION_TOOLBAR * m_mainToolBar
virtual wxArrayString GetParameterNames(int aPage)=0
Function GetParameterNames.
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
void initParameterGrid()
Function initParameterGrid Prepare the grid where parameters are displayed.
The base class for create windows for drawing purpose.
const wxString WIZARD_PARAM_UNITS_DEGREES
void ClickOnPageList(wxCommandEvent &event)
void DeactivateTool()
Function DeactivateTool() Deactivates the currently active tool.
static TOOL_ACTION zoomOutCenter
Definition: actions.h:92
BOARD_ITEM_CONTAINER * GetModel() const override
PCBNEW_CONTROL.
This file contains miscellaneous commonly used macros and functions.
const BITMAP_OPAQUE reload_xpm[1]
Definition: reload.cpp:71
const wxString WIZARD_PARAM_UNITS_RADIANS
void ReCreateParameterList()
Function ReCreateParameterList Creates the list of parameters for the current page.
COLOR_SETTINGS * GetColorSettings() override
Helper to retrieve the current color settings.
TOOL_MANAGER.
Definition: tool_manager.h:51
wxBitmap KiBitmap(BITMAP_DEF aBitmap)
Construct a wxBitmap from a memory record, held in a BITMAP_DEF.
Definition: bitmap.cpp:80
Stores the common settings that are saved and loaded for each window / frame.
Definition: app_settings.h:81
const wxString WIZARD_PARAM_UNITS_INTEGER
PCB_DISPLAY_OPTIONS handles display options like enable/disable some optional drawings.
wxString perspective
Definition: app_settings.h:85
void ReCreatePageList()
Function ReCreatePageList Creates or recreates the list of parameter pages for the current wizard.
void OnActivate(wxActivateEvent &event)
Function OnActivate is called when the frame frame is activate to reload the libraries and component ...
virtual wxArrayString GetParameterDesignators(int aPage)=0
Function GetParamaterDesignators.
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
Definition: app_settings.h:99
#define NULL
const wxString WIZARD_PARAM_UNITS_MILS
const wxString WIZARD_PARAM_UNITS_FLOAT
void SetMsgPanel(const std::vector< MSG_PANEL_ITEM > &aList)
Clear the message panel and populates it with the contents of aList.
void DisplayBoard(BOARD *aBoard)
Function DisplayBoard adds all items from the current board to the VIEW, so they can be displayed by ...
void SetClearance(int aClearance)
Definition: netclass.h:166
virtual void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList)
Function GetMsgPanelInfo populates aList of MSG_PANEL_ITEM objects with it's internal state for displ...
Definition: base_struct.h:295
const BITMAP_OPAQUE lib_previous_xpm[1]
MODULE * GetFirstModule() const
Gets the first module in the list (used in footprint viewer/editor) or NULL if none.
Definition: class_board.h:310
Definition of file extensions used in Kicad.
void ResetTools(TOOL_BASE::RESET_REASON aReason)
Function ResetTools() Resets all tools (i.e.
KIWAY is a minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the s...
Definition: kiway.h:273
const BITMAP_OPAQUE lib_next_xpm[1]
Definition: lib_next.cpp:82
const wxString WIZARD_PARAM_UNITS_PERCENT
#define KICAD_DEFAULT_DRAWFRAME_STYLE
EVT_GRID_CMD_CELL_CHANGED(ID_FOOTPRINT_WIZARD_PARAMETER_LIST, FOOTPRINT_WIZARD_FRAME::ParametersUpdated) FOOTPRINT_WIZARD_FRAME
WINDOW_SETTINGS m_FootprintViewer
FOOTPRINT_WIZARD * GetMyWizard()
Function GetMyWizard Reloads the wizard by name.
bool m_wizardListShown
A show-once flag for the wizard list.
virtual void ClearMsgPanel()
Clear all messages from the message panel.
virtual KIGFX::PCB_VIEW * GetView() const override
Function GetView() Returns a pointer to the VIEW instance used in the panel.
Specialization of the wxAuiPaneInfo class for KiCad panels.
void PythonPluginsReload()
Reload the Python plugins if they are newer than the already loaded, and load new plugins if any Do n...
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...
Definition: kiway_player.h:176
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Saves common frame parameters to a configuration data file.
void OnSize(wxSizeEvent &event) override
Recalculate the size of toolbars and display panel when the frame size changes.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=NULL) override
Update the board display after modifying it by a python script (note: it is automatically called by a...
COMMON_TOOLS.
Definition: common_tools.h:38
void UpdateColors()
Updates the color settings in the painter and GAL.
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Saves common frame parameters to a configuration data file.
BOARD * GetBoard()
void DefaultParameters(wxCommandEvent &event)
virtual int GetNumParameterPages()=0
Function GetNumParameterPages.
PCB_ACTIONS.
Definition: pcb_actions.h:51
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:50
static const wxChar * GetChars(const wxString &s)
Function GetChars returns a wxChar* to the actual wxChar* data within a wxString, and is helpful for ...
Definition: macros.h:153
see class PGM_BASE
Declaration of the eda_3d_viewer class.
const char * name
Definition: DXF_plotter.cpp:60
void DismissModal(bool aRetVal, const wxString &aResult=wxEmptyString)
BOARD holds information pertinent to a Pcbnew printed circuit board.
Definition: class_board.h:178
void SetEnvironment(EDA_ITEM *aModel, KIGFX::VIEW *aView, KIGFX::VIEW_CONTROLS *aViewControls, APP_SETTINGS_BASE *aSettings, TOOLS_HOLDER *aFrame)
Sets the work environment (model, view, view controls and the parent window).
void SetEventDispatcher(TOOL_DISPATCHER *aEventDispatcher)
Function SetEventDispatcher() Sets a dispatcher that processes events and forwards them to tools.
#define _(s)
Definition: 3d_actions.cpp:33
static TOOL_ACTION zoomRedraw
Definition: actions.h:88
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
NETCLASS * GetDefault() const
Function GetDefault.
void OnGridSize(wxSizeEvent &aSizeEvent)
std::vector< MSG_PANEL_ITEM > MSG_PANEL_ITEMS
Definition: msgpanel.h:102
static constexpr int KICAD_AUI_TB_STYLE
Default style flags used for wxAUI toolbars
bool Destroy() override
Our version of Destroy() which is virtual from wxWidgets.
const BITMAP_OPAQUE export_footprint_names_xpm[1]
Color settings are a bit different than most of the settings objects in that there can be more than o...
void SelectCurrentWizard(wxCommandEvent &event)
Create and handle a window for the 3d viewer connected to a Kiway and a pcbboard.
Definition: eda_3d_viewer.h:65
virtual wxArrayString GetParameterValues(int aPage)=0
Function GetParameterValues.
void Process_Special_Functions(wxCommandEvent &event)
Abstract interface for BOARD_ITEMs capable of storing other items inside.
void PythonPluginsReloadBase()
Helper function PythonPluginsReloadBase Reload Python plugins if they are newer than the already load...
BOARD * GetBoard() const
virtual wxArrayString GetParameterHints(int aPage)=0
Function GetParameterHints.
virtual void Update3DView(bool aForceReload, const wxString *aTitle=nullptr)
Update the 3D view, if the viewer is opened by this frame.
const wxString WIZARD_PARAM_UNITS_BOOL
Message panel definition file.
void updateView()
rebuild the GAL view (reint tool manager, colors and drawings) must be run after any footprint change...
void UpdateMsgPanel() override
redraws the message panel.
void ResizeParamColumns()
Expand the 'Value' column to fill available.
EDA_3D_VIEWER * Get3DViewerFrame()
PCB_BASE_FRAME basic PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.
void StopDrawing()
Function StopDrawing() Prevents the GAL canvas from further drawing till it is recreated or StartDraw...
void SetColLabelSize(int aHeight)
Hide wxGrid's SetColLabelSize() method with one which makes sure the size is tall enough for the syst...
Definition: wx_grid.cpp:49
EDA_UNITS GetUserUnits() const
Return the user units currently in use.
FOOTPRINT_WIZARD This is the parent class from where any footprint wizard class must derive.
WINDOW_SETTINGS * GetWindowSettings(APP_SETTINGS_BASE *aCfg) override
Returns a pointer to the window settings for this frame.
void ClearToolbar()
Clear the toolbar and remove all associated menus.