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

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.

References WIZARD_3DSHAPE_LIBS_DOWNLOADER::GetFirstPage().

Referenced by PCB_EDIT_FRAME::Process_Config().

59 {
60  WIZARD_3DSHAPE_LIBS_DOWNLOADER wizard( aCaller );
61  wizard.RunWizard( wizard.GetFirstPage() );
62 }
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 332 of file dialog_import_gfx.cpp.

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().

333 {
334  DIALOG_IMPORT_GFX dlg( aCaller );
335 
336  if( dlg.ShowModal() != wxID_OK )
337  return false;
338 
339  auto& list = dlg.GetImportedItems();
340 
341  // Ensure the list is not empty:
342  if( list.empty() )
343  {
344  wxMessageBox( _( "No graphic items found in file to import") );
345  return false;
346  }
347 
348  PICKED_ITEMS_LIST picklist; // the pick list for undo command
349  ITEM_PICKER item_picker( nullptr, UR_NEW );
350  BOARD* board = aCaller->GetBoard();
351 
352  // Now prepare a block move command to place the new items, if interactive placement,
353  // and prepare the undo command.
354  EDA_RECT bbox; // the new items bounding box, for block move if interactive placement.
355  bool bboxInit = true; // true until the bounding box is initialized
356  BLOCK_SELECTOR& blockmove = aCaller->GetScreen()->m_BlockLocate;
357 
358  if( dlg.IsPlacementInteractive() )
359  aCaller->HandleBlockBegin( NULL, BLOCK_PRESELECT_MOVE, wxPoint( 0, 0) );
360 
361  PICKED_ITEMS_LIST& blockitemsList = blockmove.GetItems();
362 
363  for( auto it = list.begin(); it != list.end(); ++it )
364  {
365  BOARD_ITEM* item = static_cast<BOARD_ITEM*>( it->release() );
366 
367  if( dlg.IsPlacementInteractive() )
368  item->SetFlags( IS_MOVED );
369 
370  board->Add( item );
371 
372  item_picker.SetItem( item );
373  picklist.PushItem( item_picker );
374 
375  if( dlg.IsPlacementInteractive() )
376  {
377  blockitemsList.PushItem( item_picker );
378 
379  if( bboxInit )
380  bbox = item->GetBoundingBox();
381  else
382  bbox.Merge( item->GetBoundingBox() );
383 
384  bboxInit = false;
385  }
386  }
387 
388  aCaller->SaveCopyInUndoList( picklist, UR_NEW, wxPoint( 0, 0 ) );
389  aCaller->OnModify();
390 
391  if( dlg.IsPlacementInteractive() )
392  {
393  // Finish block move command:
394  wxPoint cpos = aCaller->GetNearestGridPosition( bbox.Centre() );
395  blockmove.SetOrigin( bbox.GetOrigin() );
396  blockmove.SetSize( bbox.GetSize() );
397  blockmove.SetLastCursorPosition( cpos );
398  aCaller->HandleBlockEnd( NULL );
399  }
400 
401  return true;
402 }
virtual const EDA_RECT GetBoundingBox() const
Function GetBoundingBox returns the orthogonal, bounding box of this object for display purposes...
BLOCK_SELECTOR m_BlockLocate
Block description for block commands.
Definition: base_screen.h:214
const wxPoint GetOrigin() const
Definition: eda_rect.h:112
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...
const wxSize GetSize() const
Definition: eda_rect.h:101
void SetOrigin(const wxPoint &pos)
Definition: eda_rect.h:124
BOARD * GetBoard() const
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
void Add(BOARD_ITEM *aItem, ADD_MODE aMode=ADD_INSERT) override
Adds an item to the container.
wxPoint Centre() const
Definition: eda_rect.h:60
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.
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
wxPoint GetNearestGridPosition(const wxPoint &aPosition, wxRealPoint *aGridSize=NULL) const
Return the nearest aGridSize location to aPosition.
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.
PICKED_ITEMS_LIST & GetItems()
void SetLastCursorPosition(const wxPoint &aPosition)
Function SetLastCursorPosition sets the last cursor position to aPosition.
#define IS_MOVED
Item being moved.
Definition: base_struct.h:113
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 406 of file dialog_import_gfx.cpp.

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().

407 {
408  if( !aModule )
409  return false;
410 
411  DIALOG_IMPORT_GFX dlg( aCaller, true );
412 
413  if( dlg.ShowModal() != wxID_OK )
414  return false;
415 
416  auto& list = dlg.GetImportedItems();
417 
418  // Ensure the list is not empty:
419  if( list.empty() )
420  {
421  wxMessageBox( _( "No graphic items found in file to import") );
422  return false;
423  }
424 
425  aCaller->SaveCopyInUndoList( aModule, UR_CHANGED );
426 
427  PICKED_ITEMS_LIST picklist; // the pick list for undo command
428  ITEM_PICKER item_picker( nullptr, UR_NEW );
429 
430  // Now prepare a block move command to place the new items, if interactive placement,
431  // and prepare the undo command.
432  EDA_RECT bbox; // the new items bounding box, for block move if interactive placement.
433  bool bboxInit = true; // true until the bounding box is initialized
434  BLOCK_SELECTOR& blockmove = aCaller->GetScreen()->m_BlockLocate;
435 
436  if( dlg.IsPlacementInteractive() )
437  aCaller->HandleBlockBegin( nullptr, BLOCK_PRESELECT_MOVE, wxPoint( 0, 0) );
438 
439  PICKED_ITEMS_LIST& blockitemsList = blockmove.GetItems();
440 
441  for( auto it = list.begin(); it != list.end(); ++it )
442  {
443  BOARD_ITEM* item = static_cast<BOARD_ITEM*>( it->release() );
444  aModule->Add( item );
445 
446  if( dlg.IsPlacementInteractive() )
447  {
448  item->SetFlags( IS_MOVED );
449  item_picker.SetItem( item );
450  blockitemsList.PushItem( item_picker );
451 
452  if( bboxInit )
453  bbox = item->GetBoundingBox();
454  else
455  bbox.Merge( item->GetBoundingBox() );
456 
457  bboxInit = false;
458  }
459  }
460 
461  aCaller->OnModify();
462 
463  if( dlg.IsPlacementInteractive() )
464  {
465  // Finish block move command:
466  wxPoint cpos = aCaller->GetNearestGridPosition( bbox.Centre() );
467  blockmove.SetOrigin( bbox.GetOrigin() );
468  blockmove.SetSize( bbox.GetSize() );
469  blockmove.SetLastCursorPosition( cpos );
470  aCaller->HandleBlockEnd( NULL );
471  }
472 
473  return true;
474 }
virtual const EDA_RECT GetBoundingBox() const
Function GetBoundingBox returns the orthogonal, bounding box of this object for display purposes...
BLOCK_SELECTOR m_BlockLocate
Block description for block commands.
Definition: base_screen.h:214
const wxPoint GetOrigin() const
Definition: eda_rect.h:112
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...
const wxSize GetSize() const
Definition: eda_rect.h:101
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
wxPoint Centre() const
Definition: eda_rect.h:60
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.
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
wxPoint GetNearestGridPosition(const wxPoint &aPosition, wxRealPoint *aGridSize=NULL) const
Return the nearest aGridSize location to aPosition.
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.
PICKED_ITEMS_LIST & GetItems()
void SetLastCursorPosition(const wxPoint &aPosition)
Function SetLastCursorPosition sets the last cursor position to aPosition.
#define IS_MOVED
Item being moved.
Definition: base_struct.h:113
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.

Referenced by PCB_EDIT_FRAME::ExportSVG().

365 {
366  DIALOG_EXPORT_SVG dlg( aCaller, aBoard );
367 
368  dlg.ShowModal();
369 
370  return true;
371 }
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 805 of file panel_fp_lib_table.cpp.

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, PANEL_FP_LIB_TABLE::PANEL_FP_LIB_TABLE(), 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().

806 {
807  FP_LIB_TABLE* globalTable = &GFootprintTable;
808  wxString globalTablePath = FP_LIB_TABLE::GetGlobalTableFileName();
809  FP_LIB_TABLE* projectTable = aKiway->Prj().PcbFootprintLibs();
810  wxString projectTablePath = aKiway->Prj().FootprintLibTblName();
811  wxString msg;
812 
813  DIALOG_EDIT_LIBRARY_TABLES dlg( aCaller, _( "Footprint Libraries" ) );
814  dlg.SetKiway( &dlg, aKiway );
815 
816  dlg.InstallPanel( new PANEL_FP_LIB_TABLE( &dlg, globalTable, globalTablePath,
817  projectTable, projectTablePath,
818  aKiway->Prj().GetProjectPath() ) );
819 
820  if( dlg.ShowModal() == wxID_CANCEL )
821  return;
822 
823  if( dlg.m_GlobalTableChanged )
824  {
825  try
826  {
827  globalTable->Save( globalTablePath );
828  }
829  catch( const IO_ERROR& ioe )
830  {
831  msg.Printf( _( "Error saving global library table:\n\n%s" ), ioe.What() );
832  wxMessageBox( msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
833  }
834  }
835 
836  if( dlg.m_ProjectTableChanged )
837  {
838  try
839  {
840  projectTable->Save( projectTablePath );
841  }
842  catch( const IO_ERROR& ioe )
843  {
844  msg.Printf( _( "Error saving project-specific library table:\n\n%s" ), ioe.What() );
845  wxMessageBox( msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
846  }
847  }
848 
849  auto editor = (FOOTPRINT_EDIT_FRAME*) aKiway->Player( FRAME_PCB_MODULE_EDITOR, false );
850 
851  if( editor )
852  editor->SyncLibraryTree( true );
853 
854  auto viewer = (FOOTPRINT_VIEWER_FRAME*) aKiway->Player( FRAME_PCB_MODULE_VIEWER, false );
855 
856  if( viewer )
857  viewer->ReCreateLibraryList();
858 }
Component library viewer main window.
FP_LIB_TABLE GFootprintTable
The global footprint library table.
Definition: pcbnew.cpp:333
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
VTBL_ENTRY PROJECT & Prj() const
Function Prj returns the PROJECT associated with this KIWAY.
Definition: kiway.cpp:142
void Save(const wxString &aFileName) const
Write this library table to aFileName in s-expression form.
VTBL_ENTRY const wxString FootprintLibTblName() const
Function FootprintLibTblName returns the path and filename of this project&#39;s fp-lib-table, i.e.
Definition: project.cpp:120
VTBL_ENTRY FP_LIB_TABLE * PcbFootprintLibs(KIWAY &aKiway)
Return the table of footprint libraries.
virtual const wxString What() const
A composite of Problem() and Where()
Definition: exceptions.cpp:33
VTBL_ENTRY const wxString GetProjectPath() const
Function GetProjectPath returns the full path of the project.
Definition: project.cpp:102
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
static wxString GetGlobalTableFileName()
Function GetGlobalTableFileName.
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.

Referenced by FP_GRID_TRICKS::optionsEditor().

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...