KiCad PCB EDA Suite
invoke_pcb_dialog.h File Reference

Go to the source code of this file.

Functions

void InvokePcbLibTableEditor (KIWAY *aKiway, wxWindow *aCaller)
 Function InvokePcbLibTableEditor shows the modal DIALOG_FP_LIB_TABLE for purposes of editing the global and project library tables. More...
 
void Invoke3DShapeLibsDownloaderWizard (wxWindow *aCaller)
 Function Invoke3DShapeLibsDownloaderWizard Runs the downloader wizard for easy 3D shape libraries download from the official Kicad Github repository of *.3Dshape libraries. More...
 
void InvokePluginOptionsEditor (wxWindow *aCaller, const wxString &aNickname, const wxString &aPluginType, const wxString &aOptions, wxString *aResult)
 Function InvokePluginOptionsEditor calls DIALOG_FP_PLUGIN_OPTIONS dialog so that plugin options set can be edited. More...
 
bool InvokeDialogImportGfxBoard (PCB_BASE_FRAME *aCaller)
 Shows the modal DIALOG_IMPORT_GFX for importing a DXF file to a board. More...
 
bool InvokeDialogImportGfxModule (PCB_BASE_FRAME *aCaller, MODULE *aModule)
 shows the modal DIALOG_IMPORT_GFX for importing a DXF file as footprint outlines. More...
 
bool InvokeExportSVG (PCB_BASE_FRAME *aCaller, BOARD *aBoard)
 Function InvokeExportSVG shows the Export SVG dialog. More...
 

Function Documentation

◆ Invoke3DShapeLibsDownloaderWizard()

void Invoke3DShapeLibsDownloaderWizard ( wxWindow *  aCaller)

Function Invoke3DShapeLibsDownloaderWizard Runs the downloader wizard for easy 3D shape libraries download from the official Kicad Github repository of *.3Dshape libraries.

Parameters
aCalleris the wxWindow which is invoking the dialog.

Definition at line 58 of file wizard_3DShape_Libs_downloader.cpp.

59 {
60  WIZARD_3DSHAPE_LIBS_DOWNLOADER wizard( aCaller );
61  wizard.RunWizard( wizard.GetFirstPage() );
62 }

References WIZARD_3DSHAPE_LIBS_DOWNLOADER::GetFirstPage().

Referenced by PCB_EDIT_FRAME::Process_Config().

◆ InvokeDialogImportGfxBoard()

bool InvokeDialogImportGfxBoard ( PCB_BASE_FRAME aCaller)

Shows the modal DIALOG_IMPORT_GFX for importing a DXF file to a board.

Parameters
aCalleris the wxTopLevelWindow which is invoking the dialog.
Returns
true if the import was made.

Definition at line 338 of file dialog_import_gfx.cpp.

339 {
340  DIALOG_IMPORT_GFX dlg( aCaller );
341 
342  if( dlg.ShowModal() != wxID_OK )
343  return false;
344 
345  auto& list = dlg.GetImportedItems();
346 
347  // Ensure the list is not empty:
348  if( list.empty() )
349  {
350  wxMessageBox( _( "No graphic items found in file to import") );
351  return false;
352  }
353 
354  PICKED_ITEMS_LIST picklist; // the pick list for undo command
355  ITEM_PICKER item_picker( nullptr, UR_NEW );
356  BOARD* board = aCaller->GetBoard();
357 
358  // Now prepare a block move command to place the new items, if interactive placement,
359  // and prepare the undo command.
360  EDA_RECT bbox; // the new items bounding box, for block move if interactive placement.
361  bool bboxInit = true; // true until the bounding box is initialized
362  BLOCK_SELECTOR& blockmove = aCaller->GetScreen()->m_BlockLocate;
363 
364  if( dlg.IsPlacementInteractive() )
365  aCaller->HandleBlockBegin( NULL, BLOCK_PRESELECT_MOVE, wxPoint( 0, 0) );
366 
367  PICKED_ITEMS_LIST& blockitemsList = blockmove.GetItems();
368 
369  for( auto it = list.begin(); it != list.end(); ++it )
370  {
371  BOARD_ITEM* item = static_cast<BOARD_ITEM*>( it->release() );
372 
373  if( dlg.IsPlacementInteractive() )
374  item->SetFlags( IS_MOVED );
375 
376  board->Add( item );
377 
378  item_picker.SetItem( item );
379  picklist.PushItem( item_picker );
380 
381  if( dlg.IsPlacementInteractive() )
382  {
383  blockitemsList.PushItem( item_picker );
384 
385  if( bboxInit )
386  bbox = item->GetBoundingBox();
387  else
388  bbox.Merge( item->GetBoundingBox() );
389 
390  bboxInit = false;
391  }
392  }
393 
394  aCaller->SaveCopyInUndoList( picklist, UR_NEW, wxPoint( 0, 0 ) );
395  aCaller->OnModify();
396 
397  if( dlg.IsPlacementInteractive() )
398  {
399  // Finish block move command:
400  wxPoint cpos = aCaller->GetNearestGridPosition( bbox.Centre() );
401  blockmove.SetOrigin( bbox.GetOrigin() );
402  blockmove.SetSize( bbox.GetSize() );
403  blockmove.SetLastCursorPosition( cpos );
404  aCaller->HandleBlockEnd( NULL );
405  }
406 
407  return true;
408 }
BLOCK_SELECTOR m_BlockLocate
Block description for block commands.
Definition: base_screen.h:214
void Merge(const EDA_RECT &aRect)
Function Merge modifies the position and size of the rectangle in order to contain aRect.
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class,...
void SetOrigin(const wxPoint &pos)
Definition: eda_rect.h:124
void PushItem(const ITEM_PICKER &aItem)
Function PushItem pushes aItem to the top of the list.
virtual bool HandleBlockBegin(wxDC *aDC, EDA_KEY aKey, const wxPoint &aPosition, int aExplicitCommand=0)
Initialize a block command.
void SetFlags(STATUS_FLAGS aMask)
Definition: base_struct.h:256
const wxPoint GetOrigin() const
Definition: eda_rect.h:112
void Add(BOARD_ITEM *aItem, ADD_MODE aMode=ADD_INSERT) override
Adds an item to the container.
Class PICKED_ITEMS_LIST is a holder to handle information on schematic or board items.
virtual bool HandleBlockEnd(wxDC *DC)
Handle the "end" of a block command, i.e.
wxPoint GetNearestGridPosition(const wxPoint &aPosition, wxRealPoint *aGridSize=NULL) const
Return the nearest aGridSize location to aPosition.
virtual void OnModify()
Function OnModify Virtual Must be called after a change in order to set the "modify" flag of the curr...
void SetSize(const wxSize &size)
Definition: eda_rect.h:126
Class BOARD holds information pertinent to a Pcbnew printed circuit board.
Definition: class_board.h:171
Class EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44
virtual void SaveCopyInUndoList(BOARD_ITEM *aItemToCopy, UNDO_REDO_T aTypeCommand, const wxPoint &aTransformPoint=wxPoint(0, 0))=0
Function SaveCopyInUndoList (virtual pure) Creates a new entry in undo list of commands.
PCB_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
wxPoint Centre() const
Definition: eda_rect.h:60
PICKED_ITEMS_LIST & GetItems()
BOARD * GetBoard() const
virtual const EDA_RECT GetBoundingBox() const
Function GetBoundingBox returns the orthogonal, bounding box of this object for display purposes.
void SetLastCursorPosition(const wxPoint &aPosition)
Function SetLastCursorPosition sets the last cursor position to aPosition.
const wxSize GetSize() const
Definition: eda_rect.h:101
#define IS_MOVED
Item being moved.
Definition: base_struct.h:113

References BOARD::Add(), BLOCK_PRESELECT_MOVE, EDA_RECT::Centre(), PCB_BASE_FRAME::GetBoard(), EDA_ITEM::GetBoundingBox(), DIALOG_IMPORT_GFX::GetImportedItems(), BLOCK_SELECTOR::GetItems(), EDA_DRAW_FRAME::GetNearestGridPosition(), EDA_RECT::GetOrigin(), PCB_BASE_FRAME::GetScreen(), EDA_RECT::GetSize(), EDA_DRAW_FRAME::HandleBlockBegin(), EDA_DRAW_FRAME::HandleBlockEnd(), IS_MOVED, DIALOG_IMPORT_GFX::IsPlacementInteractive(), BASE_SCREEN::m_BlockLocate, EDA_RECT::Merge(), PCB_BASE_FRAME::OnModify(), PICKED_ITEMS_LIST::PushItem(), PCB_BASE_FRAME::SaveCopyInUndoList(), EDA_ITEM::SetFlags(), ITEM_PICKER::SetItem(), BLOCK_SELECTOR::SetLastCursorPosition(), EDA_RECT::SetOrigin(), EDA_RECT::SetSize(), and UR_NEW.

Referenced by PCB_EDIT_FRAME::Process_Special_Functions().

◆ InvokeDialogImportGfxModule()

bool InvokeDialogImportGfxModule ( PCB_BASE_FRAME aCaller,
MODULE aModule 
)

shows the modal DIALOG_IMPORT_GFX for importing a DXF file as footprint outlines.

Parameters
aCalleris the wxTopLevelWindow which is invoking the dialog.
aModuleis the footprint currently edited.
Returns
true if the import was made.

Definition at line 412 of file dialog_import_gfx.cpp.

413 {
414  if( !aModule )
415  return false;
416 
417  DIALOG_IMPORT_GFX dlg( aCaller, true );
418 
419  if( dlg.ShowModal() != wxID_OK )
420  return false;
421 
422  auto& list = dlg.GetImportedItems();
423 
424  // Ensure the list is not empty:
425  if( list.empty() )
426  {
427  wxMessageBox( _( "No graphic items found in file to import") );
428  return false;
429  }
430 
431  aCaller->SaveCopyInUndoList( aModule, UR_CHANGED );
432 
433  PICKED_ITEMS_LIST picklist; // the pick list for undo command
434  ITEM_PICKER item_picker( nullptr, UR_NEW );
435 
436  // Now prepare a block move command to place the new items, if interactive placement,
437  // and prepare the undo command.
438  EDA_RECT bbox; // the new items bounding box, for block move if interactive placement.
439  bool bboxInit = true; // true until the bounding box is initialized
440  BLOCK_SELECTOR& blockmove = aCaller->GetScreen()->m_BlockLocate;
441 
442  if( dlg.IsPlacementInteractive() )
443  aCaller->HandleBlockBegin( nullptr, BLOCK_PRESELECT_MOVE, wxPoint( 0, 0) );
444 
445  PICKED_ITEMS_LIST& blockitemsList = blockmove.GetItems();
446 
447  for( auto it = list.begin(); it != list.end(); ++it )
448  {
449  BOARD_ITEM* item = static_cast<BOARD_ITEM*>( it->release() );
450  aModule->Add( item );
451 
452  if( dlg.IsPlacementInteractive() )
453  {
454  item->SetFlags( IS_MOVED );
455  item_picker.SetItem( item );
456  blockitemsList.PushItem( item_picker );
457 
458  if( bboxInit )
459  bbox = item->GetBoundingBox();
460  else
461  bbox.Merge( item->GetBoundingBox() );
462 
463  bboxInit = false;
464  }
465  }
466 
467  aCaller->OnModify();
468 
469  if( dlg.IsPlacementInteractive() )
470  {
471  // Finish block move command:
472  wxPoint cpos = aCaller->GetNearestGridPosition( bbox.Centre() );
473  blockmove.SetOrigin( bbox.GetOrigin() );
474  blockmove.SetSize( bbox.GetSize() );
475  blockmove.SetLastCursorPosition( cpos );
476  aCaller->HandleBlockEnd( NULL );
477  }
478 
479  return true;
480 }
BLOCK_SELECTOR m_BlockLocate
Block description for block commands.
Definition: base_screen.h:214
void Merge(const EDA_RECT &aRect)
Function Merge modifies the position and size of the rectangle in order to contain aRect.
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class,...
void SetOrigin(const wxPoint &pos)
Definition: eda_rect.h:124
void PushItem(const ITEM_PICKER &aItem)
Function PushItem pushes aItem to the top of the list.
virtual bool HandleBlockBegin(wxDC *aDC, EDA_KEY aKey, const wxPoint &aPosition, int aExplicitCommand=0)
Initialize a block command.
void Add(BOARD_ITEM *aItem, ADD_MODE aMode=ADD_INSERT) override
void SetFlags(STATUS_FLAGS aMask)
Definition: base_struct.h:256
const wxPoint GetOrigin() const
Definition: eda_rect.h:112
Class PICKED_ITEMS_LIST is a holder to handle information on schematic or board items.
virtual bool HandleBlockEnd(wxDC *DC)
Handle the "end" of a block command, i.e.
wxPoint GetNearestGridPosition(const wxPoint &aPosition, wxRealPoint *aGridSize=NULL) const
Return the nearest aGridSize location to aPosition.
virtual void OnModify()
Function OnModify Virtual Must be called after a change in order to set the "modify" flag of the curr...
void SetSize(const wxSize &size)
Definition: eda_rect.h:126
Class EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44
virtual void SaveCopyInUndoList(BOARD_ITEM *aItemToCopy, UNDO_REDO_T aTypeCommand, const wxPoint &aTransformPoint=wxPoint(0, 0))=0
Function SaveCopyInUndoList (virtual pure) Creates a new entry in undo list of commands.
PCB_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
wxPoint Centre() const
Definition: eda_rect.h:60
PICKED_ITEMS_LIST & GetItems()
virtual const EDA_RECT GetBoundingBox() const
Function GetBoundingBox returns the orthogonal, bounding box of this object for display purposes.
void SetLastCursorPosition(const wxPoint &aPosition)
Function SetLastCursorPosition sets the last cursor position to aPosition.
const wxSize GetSize() const
Definition: eda_rect.h:101
#define IS_MOVED
Item being moved.
Definition: base_struct.h:113

References MODULE::Add(), BLOCK_PRESELECT_MOVE, EDA_RECT::Centre(), EDA_ITEM::GetBoundingBox(), DIALOG_IMPORT_GFX::GetImportedItems(), BLOCK_SELECTOR::GetItems(), EDA_DRAW_FRAME::GetNearestGridPosition(), EDA_RECT::GetOrigin(), PCB_BASE_FRAME::GetScreen(), EDA_RECT::GetSize(), EDA_DRAW_FRAME::HandleBlockBegin(), EDA_DRAW_FRAME::HandleBlockEnd(), IS_MOVED, DIALOG_IMPORT_GFX::IsPlacementInteractive(), BASE_SCREEN::m_BlockLocate, EDA_RECT::Merge(), PCB_BASE_FRAME::OnModify(), PICKED_ITEMS_LIST::PushItem(), PCB_BASE_FRAME::SaveCopyInUndoList(), EDA_ITEM::SetFlags(), ITEM_PICKER::SetItem(), BLOCK_SELECTOR::SetLastCursorPosition(), EDA_RECT::SetOrigin(), EDA_RECT::SetSize(), UR_CHANGED, and UR_NEW.

Referenced by FOOTPRINT_EDIT_FRAME::Process_Special_Functions().

◆ InvokeExportSVG()

bool InvokeExportSVG ( PCB_BASE_FRAME aCaller,
BOARD aBoard 
)

Function InvokeExportSVG shows the Export SVG dialog.

Parameters
aCalleris the PCB_BASE_FRAME which is invoking the dialog.
aBoardis the currently edited board.
Returns
bool - true if user pressed OK (did not abort), else false.

Definition at line 364 of file dialog_export_svg.cpp.

365 {
366  DIALOG_EXPORT_SVG dlg( aCaller, aBoard );
367 
368  dlg.ShowModal();
369 
370  return true;
371 }

Referenced by PCB_EDIT_FRAME::ExportSVG().

◆ InvokePcbLibTableEditor()

void InvokePcbLibTableEditor ( KIWAY aKiway,
wxWindow *  aCaller 
)

Function InvokePcbLibTableEditor shows the modal DIALOG_FP_LIB_TABLE for purposes of editing the global and project library tables.

Parameters
aCalleris the wxWindow which is invoking the dialog.
Returns
true if either table changed.

Definition at line 807 of file panel_fp_lib_table.cpp.

808 {
809  FP_LIB_TABLE* globalTable = &GFootprintTable;
810  wxString globalTablePath = FP_LIB_TABLE::GetGlobalTableFileName();
811  FP_LIB_TABLE* projectTable = aKiway->Prj().PcbFootprintLibs();
812  wxString projectTablePath = aKiway->Prj().FootprintLibTblName();
813  wxString msg;
814 
815  DIALOG_EDIT_LIBRARY_TABLES dlg( aCaller, _( "Footprint Libraries" ) );
816  dlg.SetKiway( &dlg, aKiway );
817 
818  dlg.InstallPanel( new PANEL_FP_LIB_TABLE( &dlg, globalTable, globalTablePath,
819  projectTable, projectTablePath,
820  aKiway->Prj().GetProjectPath() ) );
821 
822  if( dlg.ShowModal() == wxID_CANCEL )
823  return;
824 
825  if( dlg.m_GlobalTableChanged )
826  {
827  try
828  {
829  globalTable->Save( globalTablePath );
830  }
831  catch( const IO_ERROR& ioe )
832  {
833  msg.Printf( _( "Error saving global library table:\n\n%s" ), ioe.What() );
834  wxMessageBox( msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
835  }
836  }
837 
838  if( dlg.m_ProjectTableChanged )
839  {
840  try
841  {
842  projectTable->Save( projectTablePath );
843  }
844  catch( const IO_ERROR& ioe )
845  {
846  msg.Printf( _( "Error saving project-specific library table:\n\n%s" ), ioe.What() );
847  wxMessageBox( msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
848  }
849  }
850 
851  auto editor = (FOOTPRINT_EDIT_FRAME*) aKiway->Player( FRAME_PCB_MODULE_EDITOR, false );
852 
853  if( editor )
854  editor->SyncLibraryTree( true );
855 
856  auto viewer = (FOOTPRINT_VIEWER_FRAME*) aKiway->Player( FRAME_PCB_MODULE_VIEWER, false );
857 
858  if( viewer )
859  viewer->ReCreateLibraryList();
860 }
VTBL_ENTRY PROJECT & Prj() const
Function Prj returns the PROJECT associated with this KIWAY.
Definition: kiway.cpp:142
Component library viewer main window.
VTBL_ENTRY const wxString GetProjectPath() const
Function GetProjectPath returns the full path of the project.
Definition: project.cpp:102
FP_LIB_TABLE GFootprintTable
The global footprint library table.
Definition: pcbnew.cpp:326
VTBL_ENTRY KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=NULL)
Function Player returns the KIWAY_PLAYER* given a FRAME_T.
Definition: kiway.cpp:300
virtual const wxString What() const
A composite of Problem() and Where()
Definition: exceptions.cpp:33
VTBL_ENTRY FP_LIB_TABLE * PcbFootprintLibs(KIWAY &aKiway)
Return the table of footprint libraries.
void Save(const wxString &aFileName) const
Write this library table to aFileName in s-expression form.
Dialog to show and edit symbol library tables.
Struct IO_ERROR is a class used to hold an error message and may be used when throwing exceptions con...
Definition: ki_exception.h:76
VTBL_ENTRY const wxString FootprintLibTblName() const
Function FootprintLibTblName returns the path and filename of this project's fp-lib-table,...
Definition: project.cpp:120
static wxString GetGlobalTableFileName()
Function GetGlobalTableFileName.

References PROJECT::FootprintLibTblName(), FRAME_PCB_MODULE_EDITOR, FRAME_PCB_MODULE_VIEWER, FP_LIB_TABLE::GetGlobalTableFileName(), PROJECT::GetProjectPath(), GFootprintTable, DIALOG_EDIT_LIBRARY_TABLES::InstallPanel(), DIALOG_EDIT_LIBRARY_TABLES::m_GlobalTableChanged, DIALOG_EDIT_LIBRARY_TABLES::m_ProjectTableChanged, PROJECT::PcbFootprintLibs(), KIWAY::Player(), KIWAY::Prj(), LIB_TABLE::Save(), KIWAY_HOLDER::SetKiway(), and IO_ERROR::What().

Referenced by PCB::IFACE::CreateWindow(), PCB_EDIT_FRAME::Process_Config(), and FOOTPRINT_EDIT_FRAME::ProcessPreferences().

◆ InvokePluginOptionsEditor()

void InvokePluginOptionsEditor ( wxWindow *  aCaller,
const wxString &  aNickname,
const wxString &  aPluginType,
const wxString &  aOptions,
wxString *  aResult 
)

Function InvokePluginOptionsEditor calls DIALOG_FP_PLUGIN_OPTIONS dialog so that plugin options set can be edited.

Parameters
aCalleris the wxTopLevelWindow which is invoking the dialog.
aNicknameis the footprint library whose options are being edited.
aPluginTypeis something that will pass through IO_MGR::EnumFromStr().
aOptionsis the options string on calling into this function.
aResultis where to put the result of the editing.

Definition at line 292 of file dialog_fp_plugin_options.cpp.

295 {
296  DIALOG_FP_PLUGIN_OPTIONS dlg( aCaller, aNickname, aPluginType, aOptions, aResult );
297 
298  dlg.ShowModal();
299 }
Class DIALOG_FP_PLUGIN_OPTIONS is an options editor in the form of a two column name/value spreadshee...

Referenced by FP_GRID_TRICKS::optionsEditor().