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-2019 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
64 
65  // Toolbar events
71 
72  // listbox events
75  FOOTPRINT_WIZARD_FRAME::ParametersUpdated )
76 END_EVENT_TABLE()
77 
78 
79 // Note: our FOOTPRINT_WIZARD_FRAME is always modal.
80 
81 FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( KIWAY* aKiway, wxWindow* aParent,
82  FRAME_T aFrameType ) :
83  PCB_BASE_FRAME( aKiway, aParent, aFrameType, _( "Footprint Wizard" ),
84  wxDefaultPosition, wxDefaultSize,
85  aParent ? KICAD_DEFAULT_DRAWFRAME_STYLE | wxFRAME_FLOAT_ON_PARENT
86  : KICAD_DEFAULT_DRAWFRAME_STYLE | wxSTAY_ON_TOP,
88  m_wizardListShown( false )
89 {
90  wxASSERT( aFrameType == FRAME_FOOTPRINT_WIZARD );
91 
92  // This frame is always show modal:
93  SetModal( true );
94 
95  // Give an icon
96  wxIcon icon;
97  icon.CopyFromBitmap( KiBitmap( module_wizard_xpm) );
98  SetIcon( icon );
99 
100  m_wizardName.Empty();
101 
102  SetBoard( new BOARD() );
103 
104  // Ensure all layers and items are visible:
106  SetScreen( new PCB_SCREEN( GetPageSizeIU() ) );
107  GetScreen()->m_Center = true; // Center coordinate origins on screen.
108 
109  LoadSettings( config() );
110 
111  SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y );
112 
113  // Set some display options here, because the FOOTPRINT_WIZARD_FRAME
114  // does not have a config menu to do that:
115 
116  // the footprint wizard frame has no config menu. so use some settings
117  // from the caller, or force some options:
118  PCB_BASE_FRAME* caller = dynamic_cast<PCB_BASE_FRAME*>( aParent );
119 
120  if( caller )
121  SetUserUnits( caller->GetUserUnits() );
122 
123  PCB_DISPLAY_OPTIONS disp_opts = GetDisplayOptions();
124  // In viewer, the default net clearance is not known (it depends on the actual board).
125  // So we do not show the default clearance, by setting it to 0
126  // The footprint or pad specific clearance will be shown
128 
129  disp_opts.m_DisplayPadIsol = true;
130  disp_opts.m_DisplayPadNum = true;
131  SetDisplayOptions( disp_opts );
132 
134 
135  // Create GAL canvas
136 #ifdef __WXMAC__
137  // Cairo renderer doesn't handle Retina displays
139 #else
141 #endif
142  PCB_DRAW_PANEL_GAL* gal_drawPanel = new PCB_DRAW_PANEL_GAL( this, -1, wxPoint( 0, 0 ), m_FrameSize,
143  GetGalDisplayOptions(), backend );
144  SetCanvas( gal_drawPanel );
145 
146  // Create the manager and dispatcher & route draw panel events to the dispatcher
147  m_toolManager = new TOOL_MANAGER;
148  m_toolManager->SetEnvironment( GetBoard(), gal_drawPanel->GetView(),
149  gal_drawPanel->GetViewControls(), config(), this );
150  m_actions = new PCB_ACTIONS();
151  m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager, m_actions );
152  gal_drawPanel->SetEventDispatcher( m_toolDispatcher );
153 
154  m_toolManager->RegisterTool( new PCBNEW_CONTROL );
155  m_toolManager->RegisterTool( new SELECTION_TOOL ); // for std context menus (zoom & grid)
156  m_toolManager->RegisterTool( new COMMON_TOOLS );
157  m_toolManager->InitTools();
158 
159  // Run the control tool, it is supposed to be always active
160  m_toolManager->InvokeTool( "pcbnew.InteractiveSelection" );
161 
162  // Create the toolbars
163  ReCreateHToolbar();
164  ReCreateVToolbar();
165 
166  // Create the parameters panel
167  m_parametersPanel = new wxPanel( this, wxID_ANY );
168 
169  m_pageList = new wxListBox( m_parametersPanel, ID_FOOTPRINT_WIZARD_PAGE_LIST,
170  wxDefaultPosition, wxDefaultSize, 0, NULL,
171  wxLB_HSCROLL | wxNO_BORDER );
172 
173  auto divider = new wxStaticLine( m_parametersPanel, wxID_ANY,
174  wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
175 
176  m_parameterGrid = new WX_GRID( m_parametersPanel, ID_FOOTPRINT_WIZARD_PARAMETER_LIST );
177  initParameterGrid();
178  m_parameterGrid->PushEventHandler( new GRID_TRICKS( m_parameterGrid ) );
179 
180  ReCreatePageList();
181 
182  wxBoxSizer* parametersSizer = new wxBoxSizer( wxHORIZONTAL );
183  parametersSizer->Add( m_pageList, 0, wxEXPAND, 5 );
184  parametersSizer->Add( divider, 0, wxEXPAND, 5 );
185  parametersSizer->Add( m_parameterGrid, 1, wxEXPAND, 5 );
186  m_parametersPanel->SetSizer( parametersSizer );
187  m_parametersPanel->Layout();
188 
189  // Create the build message box
190  m_buildMessageBox = new wxTextCtrl( this, wxID_ANY, wxEmptyString,
191  wxDefaultPosition, wxDefaultSize,
192  wxTE_MULTILINE | wxTE_READONLY | wxNO_BORDER );
193 
194  DisplayWizardInfos();
195 
196  m_auimgr.SetManagedWindow( this );
197 
198  m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( "MainToolbar" ).Top().Layer(6) );
199  m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( "MsgPanel" ).Bottom().Layer(6)
200  .BestSize( -1, m_MsgFrameHeight ) );
201 
202  m_auimgr.AddPane( m_parametersPanel, EDA_PANE().Palette().Name( "Params" ).Left().Position(0)
203  .Caption( _( "Parameters" ) ).MinSize( 360, 180 ) );
204  m_auimgr.AddPane( m_buildMessageBox, EDA_PANE().Palette().Name( "Output" ).Left().Position(1)
205  .CaptionVisible( false ).MinSize( 360, -1 ) );
206 
207  m_auimgr.AddPane( GetCanvas(), wxAuiPaneInfo().Name( "DrawFrame" ).CentrePane() );
208 
209  auto& galOpts = GetGalDisplayOptions();
210  galOpts.m_fullscreenCursor = true;
211  galOpts.m_forceDisplayCursor = true;
212  galOpts.m_axesEnabled = true;
213 
214  ActivateGalCanvas();
215  updateView();
216 
217  SetActiveLayer( F_Cu );
218  GetToolManager()->RunAction( ACTIONS::zoomFitScreen, false );
219 
220  // Do not Run a dialog here: on some Window Managers, it creates issues.
221  // Reason: the FOOTPRINT_WIZARD_FRAME is run as modal;
222  // It means the call to FOOTPRINT_WIZARD_FRAME::ShowModal will change the
223  // Event Loop Manager, and stop the one created by the dialog.
224  // It does not happen on all W.M., perhaps due to the way the order events are called
225  // See the call in onActivate instead
226 }
227 
228 
230 {
231  // Delete the GRID_TRICKS.
232  m_parameterGrid->PopEventHandler( true );
233 
234  GetCanvas()->StopDrawing();
235  // Be sure any event cannot be fired after frame deletion:
236  GetCanvas()->SetEvtHandlerEnabled( false );
237 
238  // Be sure a active tool (if exists) is desactivated:
239  if( m_toolManager )
241 
242  EDA_3D_VIEWER* draw3DFrame = Get3DViewerFrame();
243 
244  if( draw3DFrame )
245  draw3DFrame->Destroy();
246 
247  // Now this frame can be deleted
248 }
249 
250 
251 void FOOTPRINT_WIZARD_FRAME::OnCloseWindow( wxCloseEvent& Event )
252 {
253  SaveSettings( config() );
254 
255  if( IsModal() )
256  {
257  // Only dismiss a modal frame once, so that the return values set by
258  // the prior DismissModal() are not bashed for ShowModal().
259  if( !IsDismissed() )
260  DismissModal( false );
261  }
262  else
263  {
264  Destroy();
265  }
266 }
267 
268 
270 {
271  DismissModal( true );
272  Close();
273 }
274 
275 
276 void FOOTPRINT_WIZARD_FRAME::OnGridSize( wxSizeEvent& aSizeEvent )
277 {
278  // Resize the parameter columns
280 
281  aSizeEvent.Skip();
282 }
283 
284 
285 void FOOTPRINT_WIZARD_FRAME::OnSize( wxSizeEvent& SizeEv )
286 {
287  if( m_auimgr.GetManagedWindow() )
288  m_auimgr.Update();
289 
290  SizeEv.Skip();
291 }
292 
293 
295 {
296  return Pgm().GetSettingsManager().GetColorSettings(
297  GetFootprintEditorSettings()->m_ColorTheme );
298 }
299 
300 
302 {
303  GetCanvas()->UpdateColors();
307  UpdateMsgPanel();
308 }
309 
310 
312 {
313  BOARD_ITEM* footprint = GetBoard()->GetFirstModule();
314 
315  if( footprint )
316  {
317  MSG_PANEL_ITEMS items;
318 
319  footprint->GetMsgPanelInfo( this, items );
320  SetMsgPanel( items );
321  }
322  else
323  ClearMsgPanel();
324 }
325 
326 
328 {
329  m_parameterGridPage = -1;
330 
331  // Prepare the grid where parameters are displayed
332 
333  m_parameterGrid->CreateGrid( 0, 3 );
334 
335  m_parameterGrid->SetColLabelValue( WIZ_COL_NAME, _( "Parameter" ) );
336  m_parameterGrid->SetColLabelValue( WIZ_COL_VALUE, _( "Value" ) );
337  m_parameterGrid->SetColLabelValue( WIZ_COL_UNITS, _( "Units" ) );
338 
340  m_parameterGrid->SetColLabelAlignment( wxALIGN_LEFT, wxALIGN_CENTRE );
341  m_parameterGrid->AutoSizeColumns();
342 
343  m_parameterGrid->AutoSizeRows();
344  m_parameterGrid->SetRowLabelSize( 0 );
345 
346  m_parameterGrid->DisableDragGridSize();
347  m_parameterGrid->DisableDragColSize();
348 
349  m_parameterGrid->Connect( wxEVT_SIZE,
350  wxSizeEventHandler( FOOTPRINT_WIZARD_FRAME::OnGridSize ),
351  NULL, this );
352 }
353 
354 
356 {
357  if( m_pageList == NULL )
358  return;
359 
360  FOOTPRINT_WIZARD* footprintWizard = GetMyWizard();
361 
362  if( !footprintWizard )
363  return;
364 
365  m_pageList->Clear();
366  int max_page = footprintWizard->GetNumParameterPages();
367 
368  for( int i = 0; i<max_page; i++ )
369  {
370  wxString name = footprintWizard->GetParameterPageName( i );
371  m_pageList->Append( name );
372  }
373 
374  m_pageList->SetSelection( 0, true );
375 
379  GetCanvas()->Refresh();
380 }
381 
382 
384 {
385  if( m_parameterGrid == NULL )
386  return;
387 
388  FOOTPRINT_WIZARD* footprintWizard = GetMyWizard();
389 
390  if( footprintWizard == NULL )
391  return;
392 
393  m_parameterGrid->Freeze();
394 
395  m_parameterGrid->ClearGrid();
396  m_parameterGridPage = m_pageList->GetSelection();
397 
398  if( m_parameterGridPage < 0 ) // Should not happen
399  return;
400 
401  // Get the list of names, values, types, hints and designators
402  wxArrayString designatorsList = footprintWizard->GetParameterDesignators( m_parameterGridPage );
403  wxArrayString namesList = footprintWizard->GetParameterNames( m_parameterGridPage );
404  wxArrayString valuesList = footprintWizard->GetParameterValues( m_parameterGridPage );
405  wxArrayString typesList = footprintWizard->GetParameterTypes( m_parameterGridPage );
406  wxArrayString hintsList = footprintWizard->GetParameterHints( m_parameterGridPage );
407 
408  // Dimension the wxGrid
409  if( m_parameterGrid->GetNumberRows() > 0 )
410  m_parameterGrid->DeleteRows( 0, m_parameterGrid->GetNumberRows() );
411 
412  m_parameterGrid->AppendRows( namesList.size() );
413 
414  wxString designator, name, value, units, hint;
415 
416  for( unsigned int i = 0; i< namesList.size(); i++ )
417  {
418  designator = designatorsList[i];
419  name = namesList[i];
420  value = valuesList[i];
421  units = typesList[i];
422  hint = hintsList[i];
423 
424  m_parameterGrid->SetRowLabelValue( i, designator );
425 
426  // Set the 'Name'
427  m_parameterGrid->SetCellValue( i, WIZ_COL_NAME, name );
428  m_parameterGrid->SetReadOnly( i, WIZ_COL_NAME );
429 
430  // Boolean parameters are displayed using a checkbox
431  if( units == WIZARD_PARAM_UNITS_BOOL )
432  {
433  // Set to ReadOnly as we delegate interactivity to GRID_TRICKS
434  m_parameterGrid->SetReadOnly( i, WIZ_COL_VALUE );
435  m_parameterGrid->SetCellRenderer( i, WIZ_COL_VALUE, new wxGridCellBoolRenderer );
436  }
437  // Parameters that can be selected from a list of multiple options
438  else if( units.Contains( "," ) ) // Indicates list of available options
439  {
440  wxStringTokenizer tokenizer( units, "," );
441  wxArrayString options;
442 
443  while( tokenizer.HasMoreTokens() )
444  {
445  options.Add( tokenizer.GetNextToken() );
446  }
447 
448  m_parameterGrid->SetCellEditor( i, WIZ_COL_VALUE, new wxGridCellChoiceEditor( options ) );
449 
450  units = wxT( "" );
451  }
452  // Integer parameters
453  else if( units == WIZARD_PARAM_UNITS_INTEGER )
454  {
455  m_parameterGrid->SetCellEditor( i, WIZ_COL_VALUE, new wxGridCellNumberEditor );
456  }
457  // Non-integer numerical parameters
458  else if( ( units == WIZARD_PARAM_UNITS_MM ) ||
459  ( units == WIZARD_PARAM_UNITS_MILS ) ||
460  ( units == WIZARD_PARAM_UNITS_FLOAT ) ||
461  ( units == WIZARD_PARAM_UNITS_RADIANS ) ||
462  ( units == WIZARD_PARAM_UNITS_DEGREES ) ||
463  ( units == WIZARD_PARAM_UNITS_PERCENT ) )
464  {
465  m_parameterGrid->SetCellEditor( i, WIZ_COL_VALUE, new wxGridCellFloatEditor );
466 
467  // Convert separators to the locale-specific character
468  value.Replace( ",", wxNumberFormatter::GetDecimalSeparator() );
469  value.Replace( ".", wxNumberFormatter::GetDecimalSeparator() );
470  }
471 
472  // Set the 'Units'
473  m_parameterGrid->SetCellValue( i, WIZ_COL_UNITS, units );
474  m_parameterGrid->SetReadOnly( i, WIZ_COL_UNITS );
475 
476  // Set the 'Value'
477  m_parameterGrid->SetCellValue( i, WIZ_COL_VALUE, value );
478  }
479 
481 
482  m_parameterGrid->Thaw();
483 }
484 
486 {
487  // Parameter grid is not yet configured
488  if( ( m_parameterGrid == NULL ) || ( m_parameterGrid->GetNumberCols() == 0 ) )
489  return;
490 
491  // first auto-size the columns to ensure enough space around text
492  m_parameterGrid->AutoSizeColumns();
493 
494  // Auto-size the value column
495  int width = m_parameterGrid->GetClientSize().GetWidth() -
496  m_parameterGrid->GetRowLabelSize() -
497  m_parameterGrid->GetColSize( WIZ_COL_NAME ) -
498  m_parameterGrid->GetColSize( WIZ_COL_UNITS );
499 
500  if( width > m_parameterGrid->GetColMinimalAcceptableWidth() )
501  {
502  m_parameterGrid->SetColSize( WIZ_COL_VALUE, width );
503  }
504 }
505 
506 
507 void FOOTPRINT_WIZARD_FRAME::ClickOnPageList( wxCommandEvent& event )
508 {
509  if( m_pageList->GetSelection() >= 0 )
510  {
512  GetCanvas()->Refresh();
514  }
515 }
516 
517 
519 {
520  PCBNEW_SETTINGS* cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
521  wxCHECK( cfg, /*void*/ );
522 
524 
526 }
527 
528 
530 {
531  PCBNEW_SETTINGS* cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
532  wxCHECK( cfg, /*void*/ );
533 
535 
536  cfg->m_FootprintViewer.perspective = m_auimgr.SavePerspective().ToStdString();
537 }
538 
539 
541 {
542  auto cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
543  wxASSERT( cfg );
544 
545  return cfg ? &cfg->m_FootprintWizard : nullptr;
546 }
547 
548 
549 void FOOTPRINT_WIZARD_FRAME::OnActivate( wxActivateEvent& event )
550 {
551  // Ensure we do not have old selection:
552  if( !event.GetActive() )
553  return;
554 
555  if( !m_wizardListShown )
556  {
557  m_wizardListShown = true;
558  wxPostEvent( this, wxCommandEvent( wxEVT_TOOL, ID_FOOTPRINT_WIZARD_SELECT_WIZARD ) );
559  }
560 #if 0
561  // Currently, we do not have a way to see if a Python wizard has changed,
562  // therefore the lists of parameters and option has to be rebuilt
563  // This code could be enabled when this way exists
564  bool footprintWizardsChanged = false;
565 
566  if( footprintWizardsChanged )
567  {
568  // If we are here, the library list has changed, rebuild it
571  }
572 #endif
573 }
574 
575 
581 void FOOTPRINT_WIZARD_FRAME::Update3DView( bool aForceReload, const wxString* aTitle )
582 {
583  wxString frm3Dtitle;
584  frm3Dtitle.Printf( _( "ModView: 3D Viewer [%s]" ), GetChars( m_wizardName ) );
585  PCB_BASE_FRAME::Update3DView( aForceReload, &frm3Dtitle );
586 }
587 
588 
590 {
591  if( m_mainToolBar )
593  else
594  m_mainToolBar = new ACTION_TOOLBAR( this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
595  KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT );
596 
597  // Set up toolbar
598  m_mainToolBar->AddTool( ID_FOOTPRINT_WIZARD_SELECT_WIZARD, wxEmptyString,
600  _( "Select wizard script to run" ) );
601 
603  m_mainToolBar->AddTool( ID_FOOTPRINT_WIZARD_RESET_TO_DEFAULT, wxEmptyString,
604  KiBitmap( reload_xpm ),
605  _( "Reset wizard parameters to default") );
606 
608  m_mainToolBar->AddTool( ID_FOOTPRINT_WIZARD_PREVIOUS, wxEmptyString,
610  _( "Select previous parameters page" ) );
611  m_mainToolBar->AddTool( ID_FOOTPRINT_WIZARD_NEXT, wxEmptyString,
613  _( "Select next parameters page" ) );
614 
617 
623 
624  // The footprint wizard always can export the current footprint
627  wxEmptyString, KiBitmap( export_footprint_names_xpm ),
628  _( "Export footprint to editor" ) );
629 
630  // after adding the buttons to the toolbar, must call Realize() to
631  // reflect the changes
632  m_mainToolBar->Realize();
633 }
634 
635 
637 {
638  return GetBoard()->GetFirstModule();
639 }
640 
641 
643 {
644  // Currently, there is no vertical toolbar
645 }
646 
647 #if defined(KICAD_SCRIPTING)
649 {
650  // Reload the Python plugins
651  // Because the board editor has also a plugin python menu,
652  // call PCB_EDIT_FRAME::PythonPluginsReload() if the board editor
653  // is running
654  auto brd_frame = static_cast<PCB_EDIT_FRAME*>( Kiway().Player( FRAME_PCB_EDITOR, false ) );
655 
656  if( brd_frame )
657  brd_frame->PythonPluginsReload();
658  else
660 }
661 #endif
662 
663 
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:151
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:90
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,...
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
void Add(const TOOL_ACTION &aAction, bool aIsToggleEntry=false)
Function Add() Adds a TOOL_ACTION-based button to the toolbar.
static TOOL_ACTION zoomFitScreen
Definition: actions.h:93
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:551
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:91
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:68
const wxString WIZARD_PARAM_UNITS_INTEGER
PCB_DISPLAY_OPTIONS handles display options like enable/disable some optional drawings.
wxString perspective
Definition: app_settings.h:74
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:91
#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:170
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:330
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...
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.
TOOL_DISPATCHER.
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:48
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:180
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:87
bool IsModal() const
Definition: kiway_player.h:176
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)
void OnCloseWindow(wxCloseEvent &Event) override
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.