KiCad PCB EDA Suite
panel_fp_lib_table.cpp File Reference
#include <set>
#include <wx/regex.h>
#include <wx/grid.h>
#include <fctsys.h>
#include <project.h>
#include <3d_viewer/eda_3d_viewer.h>
#include <panel_fp_lib_table.h>
#include <lib_id.h>
#include <fp_lib_table.h>
#include <lib_table_lexer.h>
#include <invoke_pcb_dialog.h>
#include <bitmaps.h>
#include <grid_tricks.h>
#include <widgets/wx_grid.h>
#include <confirm.h>
#include <lib_table_grid.h>
#include <wildcards_and_files_ext.h>
#include <pgm_base.h>
#include <pcb_edit_frame.h>
#include <env_paths.h>
#include <dialog_edit_library_tables.h>
#include <footprint_viewer_frame.h>
#include <footprint_edit_frame.h>
#include <kiway.h>
#include <widgets/grid_readonly_text_helpers.h>
#include <widgets/grid_text_button_helpers.h>
#include <pcbnew_id.h>

Go to the source code of this file.


struct  supportedFileType
 Container that describes file type info for the add a library options. More...
 Traverser implementation that looks to find any and all "folder" libraries by looking for files with a specific extension inside folders. More...
 This class builds a wxGridTableBase by wrapping an FP_LIB_TABLE object. More...


#define MYID_OPTIONS_EDITOR   15151


 Event IDs for the menu items in the split button menu for add a library. More...


static const std::map< int, supportedFileType > & fileTypes ()
 Map with event id as the key to supported file types that will be listed for the add a library option. More...
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...

Macro Definition Documentation


#define MYID_OPTIONS_EDITOR   15151

Definition at line 222 of file panel_fp_lib_table.cpp.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

Event IDs for the menu items in the split button menu for add a library.


Definition at line 80 of file panel_fp_lib_table.cpp.

Function Documentation

◆ fileTypes()

static const std::map<int, supportedFileType>& fileTypes ( )

Map with event id as the key to supported file types that will be listed for the add a library option.

Definition at line 91 of file panel_fp_lib_table.cpp.

92 {
93  /*
94  * TODO(C++20): Clean this up
95  * This is wrapped inside a function to prevent a static initialization order fiasco with the file extension
96  * variables. Once C++20 is allowed in KiCad code, those file extensions can be made constexpr and this can
97  * be removed from a function call and placed in the file normally.
98  */
99  static const std::map<int, supportedFileType> fileTypes =
100  {
101  { ID_PANEL_FPLIB_ADD_KICADMOD, { "KiCad (folder with .kicad_mod files)", "", KiCadFootprintFileExtension, false, IO_MGR::KICAD_SEXP } },
102  { ID_PANEL_FPLIB_ADD_EAGLE6, { "Eagle 6.x (*.lbr)", EagleFootprintLibPathWildcard(), "", true, IO_MGR::EAGLE } },
103  { ID_PANEL_FPLIB_ADD_KICADLEGACY, { "KiCad legacy (*.mod)", LegacyFootprintLibPathWildcard(), "", true, IO_MGR::LEGACY } },
104  { ID_PANEL_FPLIB_ADD_GEDA, { "Geda (folder with *.fp files)", "", GedaPcbFootprintLibFileExtension, false, IO_MGR::GEDA_PCB } },
105  };
107  return fileTypes;
108 }
wxString EagleFootprintLibPathWildcard()
static const std::map< int, supportedFileType > & fileTypes()
Map with event id as the key to supported file types that will be listed for the add a library option...
const std::string KiCadFootprintFileExtension
wxString LegacyFootprintLibPathWildcard()
Geda PCB file formats.
Definition: io_mgr.h:60
Legacy Pcbnew file formats prior to s-expression.
Definition: io_mgr.h:56
const std::string GedaPcbFootprintLibFileExtension
S-expression Pcbnew file format.
Definition: io_mgr.h:57

References IO_MGR::EAGLE, EagleFootprintLibPathWildcard(), IO_MGR::GEDA_PCB, GedaPcbFootprintLibFileExtension, ID_PANEL_FPLIB_ADD_EAGLE6, ID_PANEL_FPLIB_ADD_GEDA, ID_PANEL_FPLIB_ADD_KICADLEGACY, ID_PANEL_FPLIB_ADD_KICADMOD, IO_MGR::KICAD_SEXP, KiCadFootprintFileExtension, IO_MGR::LEGACY, and LegacyFootprintLibPathWildcard().

Referenced by PANEL_FP_LIB_TABLE::browseLibrariesHandler(), and PANEL_FP_LIB_TABLE::PANEL_FP_LIB_TABLE().

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

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

Definition at line 969 of file panel_fp_lib_table.cpp.

970 {
971  FP_LIB_TABLE* globalTable = &GFootprintTable;
972  wxString globalTablePath = FP_LIB_TABLE::GetGlobalTableFileName();
973  FP_LIB_TABLE* projectTable = aKiway->Prj().PcbFootprintLibs();
974  wxString projectTablePath = aKiway->Prj().FootprintLibTblName();
975  wxString msg;
977  DIALOG_EDIT_LIBRARY_TABLES dlg( aCaller, _( "Footprint Libraries" ) );
978  dlg.SetKiway( &dlg, aKiway );
980  dlg.InstallPanel( new PANEL_FP_LIB_TABLE( &dlg, globalTable, globalTablePath,
981  projectTable, projectTablePath,
982  aKiway->Prj().GetProjectPath() ) );
984  if( dlg.ShowModal() == wxID_CANCEL )
985  return;
987  if( dlg.m_GlobalTableChanged )
988  {
989  try
990  {
991  globalTable->Save( globalTablePath );
992  }
993  catch( const IO_ERROR& ioe )
994  {
995  msg.Printf( _( "Error saving global library table:\n\n%s" ), ioe.What() );
996  wxMessageBox( msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
997  }
998  }
1000  if( dlg.m_ProjectTableChanged )
1001  {
1002  try
1003  {
1004  projectTable->Save( projectTablePath );
1005  }
1006  catch( const IO_ERROR& ioe )
1007  {
1008  msg.Printf( _( "Error saving project-specific library table:\n\n%s" ), ioe.What() );
1009  wxMessageBox( msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
1010  }
1011  }
1013  auto editor = (FOOTPRINT_EDIT_FRAME*) aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
1015  if( editor )
1016  editor->SyncLibraryTree( true );
1018  auto viewer = (FOOTPRINT_VIEWER_FRAME*) aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
1020  if( viewer )
1021  viewer->ReCreateLibraryList();
1022 }
Function Prj returns the PROJECT associated with this KIWAY.
Definition: kiway.cpp:171
FP_LIB_TABLE GFootprintTable
!!!!!!!!!!!!!! This code is obsolete because of the merge into pcbnew, don't bother with it.
Component library viewer main window.
VTBL_ENTRY const wxString GetProjectPath() const
Function GetProjectPath returns the full path of the project.
Definition: project.cpp:102
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:341
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.
Definition: project.cpp:400
#define _(s)
Definition: 3d_actions.cpp:31
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_FOOTPRINT_EDITOR, FRAME_FOOTPRINT_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().