KiCad PCB EDA Suite
panel_fp_lib_table.cpp File Reference
#include <set>
#include <wx/dir.h>
#include <wx/regex.h>
#include <wx/grid.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 <dialogs/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>
#include <settings/settings_manager.h>
#include <paths.h>
#include <macros.h>

Go to the source code of this file.

Classes

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

Macros

#define MYID_OPTIONS_EDITOR   15151
 

Enumerations

enum  { ID_PANEL_FPLIB_ADD_KICADMOD = ID_PCBNEW_END_LIST, ID_PANEL_FPLIB_ADD_EAGLE6, ID_PANEL_FPLIB_ADD_KICADLEGACY, ID_PANEL_FPLIB_ADD_GEDA }
 Event IDs for the menu items in the split button menu for add a library. More...
 

Functions

static const std::map< int, SUPPORTED_FILE_TYPE > & 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

◆ MYID_OPTIONS_EDITOR

#define MYID_OPTIONS_EDITOR   15151

Definition at line 236 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.

Enumerator
ID_PANEL_FPLIB_ADD_KICADMOD 
ID_PANEL_FPLIB_ADD_EAGLE6 
ID_PANEL_FPLIB_ADD_KICADLEGACY 
ID_PANEL_FPLIB_ADD_GEDA 

Definition at line 83 of file panel_fp_lib_table.cpp.

Function Documentation

◆ fileTypes()

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

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

Definition at line 95 of file panel_fp_lib_table.cpp.

96 {
97  /*
98  * TODO(C++20): Clean this up
99  * This is wrapped inside a function to prevent a static initialization order fiasco
100  * with the file extension variables. Once C++20 is allowed in KiCad code, those file
101  * extensions can be made constexpr and this can be removed from a function call and
102  * placed in the file normally.
103  */
104  static const std::map<int, SUPPORTED_FILE_TYPE> fileTypes =
105  {
107  {
108  "KiCad (folder with .kicad_mod files)", "", KiCadFootprintFileExtension,
109  false, IO_MGR::KICAD_SEXP
110  }
111  },
113  {
114  "Eagle 6.x (*.lbr)", EagleFootprintLibPathWildcard(), "", true, IO_MGR::EAGLE
115  }
116  },
118  {
119  "KiCad legacy (*.mod)", LegacyFootprintLibPathWildcard(), "", true, IO_MGR::LEGACY
120  }
121  },
123  {
124  "Geda (folder with *.fp files)", "", GedaPcbFootprintLibFileExtension, false,
126  }
127  },
128  };
129 
130  return fileTypes;
131 }
wxString EagleFootprintLibPathWildcard()
const std::string KiCadFootprintFileExtension
static const std::map< int, SUPPORTED_FILE_TYPE > & fileTypes()
Map with event id as the key to supported file types that will be listed for the add a library option...
wxString LegacyFootprintLibPathWildcard()
Geda PCB file formats.
Definition: io_mgr.h:63
Legacy Pcbnew file formats prior to s-expression.
Definition: io_mgr.h:54
const std::string GedaPcbFootprintLibFileExtension
S-expression Pcbnew file format.
Definition: io_mgr.h:55

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.

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

Definition at line 1038 of file panel_fp_lib_table.cpp.

1039 {
1040  FP_LIB_TABLE* globalTable = &GFootprintTable;
1041  wxString globalTablePath = FP_LIB_TABLE::GetGlobalTableFileName();
1042  FP_LIB_TABLE* projectTable = aKiway->Prj().PcbFootprintLibs();
1043  wxString projectTablePath = aKiway->Prj().FootprintLibTblName();
1044  wxString msg;
1045 
1046  DIALOG_EDIT_LIBRARY_TABLES dlg( aCaller, _( "Footprint Libraries" ) );
1047  dlg.SetKiway( &dlg, aKiway );
1048 
1049  if( aKiway->Prj().IsNullProject() )
1050  projectTable = nullptr;
1051 
1052  dlg.InstallPanel( new PANEL_FP_LIB_TABLE( &dlg, globalTable, globalTablePath,
1053  projectTable, projectTablePath,
1054  aKiway->Prj().GetProjectPath() ) );
1055 
1056  if( dlg.ShowModal() == wxID_CANCEL )
1057  return;
1058 
1059  if( dlg.m_GlobalTableChanged )
1060  {
1061  try
1062  {
1063  globalTable->Save( globalTablePath );
1064  }
1065  catch( const IO_ERROR& ioe )
1066  {
1067  msg.Printf( _( "Error saving global library table:\n\n%s" ), ioe.What() );
1068  wxMessageBox( msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
1069  }
1070  }
1071 
1072  if( projectTable && dlg.m_ProjectTableChanged )
1073  {
1074  try
1075  {
1076  projectTable->Save( projectTablePath );
1077  }
1078  catch( const IO_ERROR& ioe )
1079  {
1080  msg.Printf( _( "Error saving project-specific library table:\n\n%s" ), ioe.What() );
1081  wxMessageBox( msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
1082  }
1083  }
1084 
1085  auto editor = (FOOTPRINT_EDIT_FRAME*) aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
1086 
1087  if( editor )
1088  {
1089  editor->SyncLibraryTree( true );
1090  editor->RefreshLibraryTree();
1091  }
1092 
1093  auto viewer = (FOOTPRINT_VIEWER_FRAME*) aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
1094 
1095  if( viewer )
1096  viewer->ReCreateLibraryList();
1097 }
FP_LIB_TABLE GFootprintTable
!!!!!!!!!!!!!! This code is obsolete because of the merge into pcbnew, don't bother with it.
Definition: cvpcb.cpp:120
virtual PROJECT & Prj() const
Return the PROJECT associated with this KIWAY.
Definition: kiway.cpp:173
Component library viewer main window.
virtual KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=nullptr)
Return the KIWAY_PLAYER* given a FRAME_T.
Definition: kiway.cpp:357
virtual const wxString GetProjectPath() const
Return the full path of the project.
Definition: project.cpp:123
virtual const wxString What() const
A composite of Problem() and Where()
Definition: exceptions.cpp:29
virtual bool IsNullProject() const
Check if this project is a null project (i.e.
Definition: project.cpp:135
virtual FP_LIB_TABLE * PcbFootprintLibs(KIWAY &aKiway)
Return the table of footprint libraries.
Definition: project.cpp:285
#define _(s)
Definition: 3d_actions.cpp:33
void Save(const wxString &aFileName) const
Write this library table to aFileName in s-expression form.
Dialog to show and edit symbol library tables.
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
Definition: ki_exception.h:75
virtual const wxString FootprintLibTblName() const
Returns the path and filename of this project's footprint library table.
Definition: project.cpp:147
static wxString GetGlobalTableFileName()

References _, editor, PROJECT::FootprintLibTblName(), FRAME_FOOTPRINT_EDITOR, FRAME_FOOTPRINT_VIEWER, FP_LIB_TABLE::GetGlobalTableFileName(), PROJECT::GetProjectPath(), GFootprintTable, DIALOG_EDIT_LIBRARY_TABLES::InstallPanel(), PROJECT::IsNullProject(), 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().