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